didit-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +25 -0
- data/LICENSE +21 -0
- data/README.md +277 -0
- data/lib/didit/authentication/base64_url.rb +34 -0
- data/lib/didit/authentication/cache.rb +201 -0
- data/lib/didit/authentication/http.rb +150 -0
- data/lib/didit/authentication/issuer.rb +115 -0
- data/lib/didit/authentication/jws.rb +231 -0
- data/lib/didit/authentication/key_set.rb +89 -0
- data/lib/didit/authentication/pkce.rb +64 -0
- data/lib/didit/authentication/types.rb +175 -0
- data/lib/didit/authentication.rb +546 -0
- data/lib/didit/client.rb +211 -0
- data/lib/didit/errors.rb +153 -0
- data/lib/didit/file_part.rb +85 -0
- data/lib/didit/internal/config.rb +94 -0
- data/lib/didit/internal/errors.rb +83 -0
- data/lib/didit/internal/log.rb +41 -0
- data/lib/didit/internal/multipart.rb +60 -0
- data/lib/didit/internal/request.rb +322 -0
- data/lib/didit/internal/transport.rb +198 -0
- data/lib/didit/internal/util.rb +76 -0
- data/lib/didit/internal.rb +15 -0
- data/lib/didit/model.rb +199 -0
- data/lib/didit/page.rb +130 -0
- data/lib/didit/raw_response.rb +57 -0
- data/lib/didit/resource.rb +15 -0
- data/lib/didit/resources/account.rb +309 -0
- data/lib/didit/resources/address_validation.rb +73 -0
- data/lib/didit/resources/age_estimation.rb +110 -0
- data/lib/didit/resources/aml.rb +166 -0
- data/lib/didit/resources/aml_monitoring.rb +30 -0
- data/lib/didit/resources/analytics.rb +87 -0
- data/lib/didit/resources/bank.rb +65 -0
- data/lib/didit/resources/billing.rb +61 -0
- data/lib/didit/resources/biometric_templates.rb +234 -0
- data/lib/didit/resources/blocklist.rb +130 -0
- data/lib/didit/resources/business_sessions.rb +29 -0
- data/lib/didit/resources/businesses.rb +471 -0
- data/lib/didit/resources/cases.rb +2116 -0
- data/lib/didit/resources/customization.rb +153 -0
- data/lib/didit/resources/database_validation.rb +327 -0
- data/lib/didit/resources/document_ai.rb +145 -0
- data/lib/didit/resources/email.rb +254 -0
- data/lib/didit/resources/face_match.rb +103 -0
- data/lib/didit/resources/face_search.rb +103 -0
- data/lib/didit/resources/fraud_checks.rb +130 -0
- data/lib/didit/resources/id_verification.rb +163 -0
- data/lib/didit/resources/id_wallets.rb +1468 -0
- data/lib/didit/resources/investigator.rb +419 -0
- data/lib/didit/resources/ip.rb +68 -0
- data/lib/didit/resources/kyb.rb +256 -0
- data/lib/didit/resources/lists.rb +332 -0
- data/lib/didit/resources/monitoring_events.rb +466 -0
- data/lib/didit/resources/networks.rb +427 -0
- data/lib/didit/resources/passive_liveness.rb +103 -0
- data/lib/didit/resources/phone.rb +271 -0
- data/lib/didit/resources/pricing.rb +40 -0
- data/lib/didit/resources/proof_of_address.rb +167 -0
- data/lib/didit/resources/questionnaires.rb +170 -0
- data/lib/didit/resources/regulatory_reports.rb +314 -0
- data/lib/didit/resources/report_templates.rb +146 -0
- data/lib/didit/resources/sessions.rb +2820 -0
- data/lib/didit/resources/transactions.rb +981 -0
- data/lib/didit/resources/travel_rule.rb +1202 -0
- data/lib/didit/resources/users.rb +521 -0
- data/lib/didit/resources/wallet_screening.rb +190 -0
- data/lib/didit/resources/webhooks.rb +396 -0
- data/lib/didit/resources/workflows.rb +214 -0
- data/lib/didit/resources.rb +263 -0
- data/lib/didit/types/account.rb +11 -0
- data/lib/didit/types/account_components.rb +105 -0
- data/lib/didit/types/address_validation.rb +8 -0
- data/lib/didit/types/age_estimation.rb +89 -0
- data/lib/didit/types/aml.rb +193 -0
- data/lib/didit/types/aml_monitoring.rb +73 -0
- data/lib/didit/types/analytics.rb +62 -0
- data/lib/didit/types/bank.rb +8 -0
- data/lib/didit/types/billing.rb +18 -0
- data/lib/didit/types/biometric_templates.rb +292 -0
- data/lib/didit/types/blocklist.rb +31 -0
- data/lib/didit/types/businesses.rb +45 -0
- data/lib/didit/types/cases.rb +368 -0
- data/lib/didit/types/components.rb +12206 -0
- data/lib/didit/types/customization.rb +8 -0
- data/lib/didit/types/database_validation.rb +177 -0
- data/lib/didit/types/document_ai.rb +135 -0
- data/lib/didit/types/email.rb +116 -0
- data/lib/didit/types/face_match.rb +93 -0
- data/lib/didit/types/face_search.rb +129 -0
- data/lib/didit/types/fraud_checks.rb +8 -0
- data/lib/didit/types/id_verification.rb +231 -0
- data/lib/didit/types/id_wallets.rb +8 -0
- data/lib/didit/types/investigator.rb +221 -0
- data/lib/didit/types/ip.rb +8 -0
- data/lib/didit/types/kyb.rb +1391 -0
- data/lib/didit/types/lists.rb +111 -0
- data/lib/didit/types/monitoring_events.rb +235 -0
- data/lib/didit/types/networks.rb +120 -0
- data/lib/didit/types/passive_liveness.rb +95 -0
- data/lib/didit/types/phone.rb +69 -0
- data/lib/didit/types/proof_of_address.rb +166 -0
- data/lib/didit/types/questionnaires.rb +29 -0
- data/lib/didit/types/regulatory_reports.rb +100 -0
- data/lib/didit/types/report_templates.rb +41 -0
- data/lib/didit/types/sessions.rb +1441 -0
- data/lib/didit/types/transactions.rb +245 -0
- data/lib/didit/types/travel_rule.rb +168 -0
- data/lib/didit/types/users.rb +180 -0
- data/lib/didit/types/wallet_screening.rb +49 -0
- data/lib/didit/types/webhooks.rb +355 -0
- data/lib/didit/types/workflows.rb +32 -0
- data/lib/didit/types.rb +1681 -0
- data/lib/didit/version.rb +5 -0
- data/lib/didit/webhooks/canonical_json.rb +187 -0
- data/lib/didit/webhooks/client_methods.rb +23 -0
- data/lib/didit/webhooks/events.rb +221 -0
- data/lib/didit/webhooks/headers.rb +83 -0
- data/lib/didit/webhooks/verifier.rb +260 -0
- data/lib/didit/webhooks.rb +99 -0
- data/lib/didit-sdk.rb +4 -0
- data/lib/didit.rb +31 -0
- data/sig/didit/authentication/base64_url.rbs +10 -0
- data/sig/didit/authentication/cache.rbs +60 -0
- data/sig/didit/authentication/http.rbs +37 -0
- data/sig/didit/authentication/issuer.rbs +17 -0
- data/sig/didit/authentication/jws.rbs +41 -0
- data/sig/didit/authentication/jwt.rbs +14 -0
- data/sig/didit/authentication/key_set.rbs +25 -0
- data/sig/didit/authentication/pkce.rbs +20 -0
- data/sig/didit/authentication/types.rbs +114 -0
- data/sig/didit/authentication.rbs +81 -0
- data/sig/didit/client.rbs +61 -0
- data/sig/didit/errors.rbs +80 -0
- data/sig/didit/file_part.rbs +19 -0
- data/sig/didit/internal.rbs +199 -0
- data/sig/didit/model.rbs +42 -0
- data/sig/didit/page.rbs +34 -0
- data/sig/didit/raw_response.rbs +20 -0
- data/sig/didit/resource.rbs +8 -0
- data/sig/didit/resources/account.rbs +23 -0
- data/sig/didit/resources/address_validation.rbs +9 -0
- data/sig/didit/resources/age_estimation.rbs +9 -0
- data/sig/didit/resources/aml.rbs +10 -0
- data/sig/didit/resources/aml_monitoring.rbs +9 -0
- data/sig/didit/resources/analytics.rbs +9 -0
- data/sig/didit/resources/bank.rbs +9 -0
- data/sig/didit/resources/billing.rbs +10 -0
- data/sig/didit/resources/biometric_templates.rbs +13 -0
- data/sig/didit/resources/blocklist.rbs +11 -0
- data/sig/didit/resources/business_sessions.rbs +9 -0
- data/sig/didit/resources/businesses.rbs +22 -0
- data/sig/didit/resources/cases.rbs +103 -0
- data/sig/didit/resources/customization.rbs +10 -0
- data/sig/didit/resources/database_validation.rbs +9 -0
- data/sig/didit/resources/document_ai.rbs +9 -0
- data/sig/didit/resources/email.rbs +11 -0
- data/sig/didit/resources/face_match.rbs +9 -0
- data/sig/didit/resources/face_search.rbs +9 -0
- data/sig/didit/resources/fraud_checks.rbs +11 -0
- data/sig/didit/resources/id_verification.rbs +9 -0
- data/sig/didit/resources/id_wallets.rbs +37 -0
- data/sig/didit/resources/investigator.rbs +23 -0
- data/sig/didit/resources/ip.rbs +9 -0
- data/sig/didit/resources/kyb.rbs +12 -0
- data/sig/didit/resources/lists.rbs +20 -0
- data/sig/didit/resources/monitoring_events.rbs +16 -0
- data/sig/didit/resources/networks.rbs +25 -0
- data/sig/didit/resources/passive_liveness.rbs +9 -0
- data/sig/didit/resources/phone.rbs +11 -0
- data/sig/didit/resources/pricing.rbs +9 -0
- data/sig/didit/resources/proof_of_address.rbs +9 -0
- data/sig/didit/resources/questionnaires.rbs +13 -0
- data/sig/didit/resources/regulatory_reports.rbs +16 -0
- data/sig/didit/resources/report_templates.rbs +13 -0
- data/sig/didit/resources/sessions.rbs +78 -0
- data/sig/didit/resources/transactions.rbs +43 -0
- data/sig/didit/resources/travel_rule.rbs +62 -0
- data/sig/didit/resources/users.rbs +21 -0
- data/sig/didit/resources/wallet_screening.rbs +11 -0
- data/sig/didit/resources/webhooks.rbs +23 -0
- data/sig/didit/resources/workflows.rbs +13 -0
- data/sig/didit/resources.rbs +50 -0
- data/sig/didit/types/account.rbs +22 -0
- data/sig/didit/types/account_components.rbs +94 -0
- data/sig/didit/types/address_validation.rbs +7 -0
- data/sig/didit/types/age_estimation.rbs +80 -0
- data/sig/didit/types/aml.rbs +174 -0
- data/sig/didit/types/aml_monitoring.rbs +67 -0
- data/sig/didit/types/analytics.rbs +57 -0
- data/sig/didit/types/bank.rbs +9 -0
- data/sig/didit/types/billing.rbs +19 -0
- data/sig/didit/types/biometric_templates.rbs +268 -0
- data/sig/didit/types/blocklist.rbs +33 -0
- data/sig/didit/types/businesses.rbs +54 -0
- data/sig/didit/types/cases.rbs +414 -0
- data/sig/didit/types/components.rbs +10920 -0
- data/sig/didit/types/customization.rbs +7 -0
- data/sig/didit/types/database_validation.rbs +152 -0
- data/sig/didit/types/document_ai.rbs +123 -0
- data/sig/didit/types/email.rbs +112 -0
- data/sig/didit/types/face_match.rbs +86 -0
- data/sig/didit/types/face_search.rbs +112 -0
- data/sig/didit/types/fraud_checks.rbs +9 -0
- data/sig/didit/types/id_verification.rbs +196 -0
- data/sig/didit/types/id_wallets.rbs +55 -0
- data/sig/didit/types/investigator.rbs +212 -0
- data/sig/didit/types/ip.rbs +7 -0
- data/sig/didit/types/kyb.rbs +1254 -0
- data/sig/didit/types/lists.rbs +106 -0
- data/sig/didit/types/monitoring_events.rbs +234 -0
- data/sig/didit/types/networks.rbs +113 -0
- data/sig/didit/types/passive_liveness.rbs +87 -0
- data/sig/didit/types/phone.rbs +65 -0
- data/sig/didit/types/proof_of_address.rbs +144 -0
- data/sig/didit/types/questionnaires.rbs +30 -0
- data/sig/didit/types/regulatory_reports.rbs +101 -0
- data/sig/didit/types/report_templates.rbs +42 -0
- data/sig/didit/types/sessions.rbs +1349 -0
- data/sig/didit/types/transactions.rbs +273 -0
- data/sig/didit/types/travel_rule.rbs +188 -0
- data/sig/didit/types/users.rbs +181 -0
- data/sig/didit/types/wallet_screening.rbs +40 -0
- data/sig/didit/types/webhooks.rbs +311 -0
- data/sig/didit/types/workflows.rbs +30 -0
- data/sig/didit/webhooks/canonical_json.rbs +25 -0
- data/sig/didit/webhooks/client_methods.rbs +11 -0
- data/sig/didit/webhooks/events.rbs +125 -0
- data/sig/didit/webhooks/headers.rbs +22 -0
- data/sig/didit/webhooks/verifier.rbs +54 -0
- data/sig/didit/webhooks.rbs +37 -0
- data/sig/didit.rbs +20 -0
- metadata +300 -0
|
@@ -0,0 +1,1202 @@
|
|
|
1
|
+
# Code generated by codegen from openapi/*.json. DO NOT EDIT.
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Didit
|
|
5
|
+
module Resources
|
|
6
|
+
# The +travel_rule+ resource.
|
|
7
|
+
class TravelRule < Didit::Resource
|
|
8
|
+
# @return [Didit::Resources::TravelRule::CounterpartyContacts]
|
|
9
|
+
def counterparty_contacts
|
|
10
|
+
@counterparty_contacts ||= CounterpartyContacts.new(@client)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @return [Didit::Resources::TravelRule::Networks]
|
|
14
|
+
def networks
|
|
15
|
+
@networks ||= Networks.new(@client)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @return [Didit::Resources::TravelRule::Transfers]
|
|
19
|
+
def transfers
|
|
20
|
+
@transfers ||= Transfers.new(@client)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [Didit::Resources::TravelRule::WalletAddresses]
|
|
24
|
+
def wallet_addresses
|
|
25
|
+
@wallet_addresses ||= WalletAddresses.new(@client)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @return [Didit::Resources::TravelRule::WalletProofs]
|
|
29
|
+
def wallet_proofs
|
|
30
|
+
@wallet_proofs ||= WalletProofs.new(@client)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @return [Didit::Resources::TravelRule::Workspace]
|
|
34
|
+
def workspace
|
|
35
|
+
@workspace ||= Workspace.new(@client)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Clear your decision on a VASP
|
|
39
|
+
#
|
|
40
|
+
# Clear your application's own decision on a counterparty. The response shows the decision that applies
|
|
41
|
+
# afterwards: null, or for an entity of a brand the brand's decision, which the entity follows again.
|
|
42
|
+
#
|
|
43
|
+
# +DELETE /v3/travel-rule/vasps/{vasp_id}/decision/+
|
|
44
|
+
#
|
|
45
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
46
|
+
# member.
|
|
47
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
48
|
+
# @return [Didit::Types::TravelRuleCounterpartyDecisionResponse]
|
|
49
|
+
def clear_vasp_decision(vasp_id, request_options: nil)
|
|
50
|
+
@client.request(
|
|
51
|
+
:delete,
|
|
52
|
+
"/v3/travel-rule/vasps/{vasp_id}/decision/",
|
|
53
|
+
path_params: { "vasp_id" => vasp_id },
|
|
54
|
+
response: Types::TravelRuleCounterpartyDecisionResponse,
|
|
55
|
+
request_options: request_options
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Mint a wallet-ownership widget session
|
|
60
|
+
#
|
|
61
|
+
# Mint a hosted wallet-ownership widget URL/token. Send the customer to the returned url to prove control of a
|
|
62
|
+
# wallet (message signing, Satoshi test, screenshot, or self-declaration). The widget is web-only in this
|
|
63
|
+
# release - open the url in the system browser or a custom tab, never inside a mobile SDK webview.
|
|
64
|
+
#
|
|
65
|
+
# +POST /v3/travel-rule/widget-session/+
|
|
66
|
+
#
|
|
67
|
+
# @param wallet_address [String] The wallet address to verify. Optional; when empty, the address must be
|
|
68
|
+
# supplied when a proof is started.
|
|
69
|
+
# @param chain [String] Chain token for the address, for example `ETH`, `BTC` or `SOL`. Use the same token as in
|
|
70
|
+
# your wallet address book. Message signing and the Satoshi test are offered only for a supported chain. The
|
|
71
|
+
# address book entry the proof verifies stores it under its canonical identifier (ETH, BTC, SOL, TRX).
|
|
72
|
+
# @param holder_name [String] Name of the wallet holder, used for the beneficiary name match.
|
|
73
|
+
# @param vendor_data [String] Your internal identifier for the holder, carried onto the created address-book
|
|
74
|
+
# entry.
|
|
75
|
+
# @param transaction_id [String, nil] Optional. Didit transaction UUID of a Travel Rule transfer to advance when
|
|
76
|
+
# the proof verifies.
|
|
77
|
+
# @param satoshi_deposit_address [String] Optional. A deposit address you control; supplying it enables the
|
|
78
|
+
# SATOSHI_TEST proof method.
|
|
79
|
+
# @param callback_url [String] Optional. Absolute http(s) URL where the widget returns the customer after
|
|
80
|
+
# completion.
|
|
81
|
+
# @param expires_in_minutes [Integer] Optional. Lifetime of the minted link, in minutes. Automatically extended
|
|
82
|
+
# to cover the Satoshi test window when SATOSHI_TEST is offered.
|
|
83
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
84
|
+
# @return [Didit::Types::TravelRuleWidgetSessionResponse]
|
|
85
|
+
def create_widget_session(
|
|
86
|
+
wallet_address: OMIT,
|
|
87
|
+
chain: OMIT,
|
|
88
|
+
holder_name: OMIT,
|
|
89
|
+
vendor_data: OMIT,
|
|
90
|
+
transaction_id: OMIT,
|
|
91
|
+
satoshi_deposit_address: OMIT,
|
|
92
|
+
callback_url: OMIT,
|
|
93
|
+
expires_in_minutes: OMIT,
|
|
94
|
+
request_options: nil
|
|
95
|
+
)
|
|
96
|
+
@client.request(
|
|
97
|
+
:post,
|
|
98
|
+
"/v3/travel-rule/widget-session/",
|
|
99
|
+
body: {
|
|
100
|
+
"wallet_address" => wallet_address,
|
|
101
|
+
"chain" => chain,
|
|
102
|
+
"holder_name" => holder_name,
|
|
103
|
+
"vendor_data" => vendor_data,
|
|
104
|
+
"transaction_id" => transaction_id,
|
|
105
|
+
"satoshi_deposit_address" => satoshi_deposit_address,
|
|
106
|
+
"callback_url" => callback_url,
|
|
107
|
+
"expires_in_minutes" => expires_in_minutes
|
|
108
|
+
},
|
|
109
|
+
response: Types::TravelRuleWidgetSessionResponse,
|
|
110
|
+
request_options: request_options
|
|
111
|
+
)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# List due-diligence questionnaires with a VASP
|
|
115
|
+
#
|
|
116
|
+
# Every due-diligence questionnaire your application sent the counterparty, newest first, with its status and,
|
|
117
|
+
# once answered, the answers. Private to your application.
|
|
118
|
+
#
|
|
119
|
+
# +GET /v3/travel-rule/vasps/{vasp_id}/questionnaires/+
|
|
120
|
+
#
|
|
121
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
122
|
+
# member.
|
|
123
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
124
|
+
# @return [Didit::Types::TravelRuleCounterpartyQuestionnaireList]
|
|
125
|
+
def list_vasp_questionnaires(vasp_id, request_options: nil)
|
|
126
|
+
@client.request(
|
|
127
|
+
:get,
|
|
128
|
+
"/v3/travel-rule/vasps/{vasp_id}/questionnaires/",
|
|
129
|
+
path_params: { "vasp_id" => vasp_id },
|
|
130
|
+
response: Types::TravelRuleCounterpartyQuestionnaireList,
|
|
131
|
+
request_options: request_options
|
|
132
|
+
)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Search the VASP directory
|
|
136
|
+
#
|
|
137
|
+
# Paginated, name-sorted search of the VASP directory: the shared directory entries, which Didit builds from the
|
|
138
|
+
# ESMA interim MiCA register, the public TRISA directory, the global LEI register and its own curation, plus the
|
|
139
|
+
# members of the Didit network. Each row carries the routes your application has to it today. Your own
|
|
140
|
+
# application's profile is never listed. Rows also carry the shared due-diligence assessment and your
|
|
141
|
+
# application's own decision, entity screening and questionnaires.
|
|
142
|
+
#
|
|
143
|
+
# +GET /v3/travel-rule/vasps/+
|
|
144
|
+
#
|
|
145
|
+
# @param search [String] A name or alias fragment (case-insensitive), an exact LEI, or a domain (example.com or
|
|
146
|
+
# a URL on it). Didit network members match on their legal name, LEI or the domain of their compliance email.
|
|
147
|
+
# @param network [String] Only directory entries a network's member directory currently lists.
|
|
148
|
+
# @param jurisdiction [String] ISO 3166 alpha-2 or alpha-3 country code. 400 for anything else.
|
|
149
|
+
# @param reachable [Boolean] true: only VASPs your application has an available route to (Didit network members
|
|
150
|
+
# included). false: only directory entries it cannot reach today.
|
|
151
|
+
# @param kind [String] Only directory entries, or only Didit network members.
|
|
152
|
+
# @param risk [String] Only directory entries whose risk_level is this band. Didit network members, which are
|
|
153
|
+
# not scored, never match.
|
|
154
|
+
# @param responsiveness [String] Only directory entries whose responsiveness.status is this value. Didit network
|
|
155
|
+
# members never match.
|
|
156
|
+
# @param limit [Integer]
|
|
157
|
+
# @param offset [Integer]
|
|
158
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
159
|
+
# @return [Didit::Page<Didit::Types::VaspDirectoryEntry>]
|
|
160
|
+
def list_vasps(
|
|
161
|
+
search: OMIT,
|
|
162
|
+
network: OMIT,
|
|
163
|
+
jurisdiction: OMIT,
|
|
164
|
+
reachable: OMIT,
|
|
165
|
+
kind: OMIT,
|
|
166
|
+
risk: OMIT,
|
|
167
|
+
responsiveness: OMIT,
|
|
168
|
+
limit: OMIT,
|
|
169
|
+
offset: OMIT,
|
|
170
|
+
request_options: nil
|
|
171
|
+
)
|
|
172
|
+
@client.request(
|
|
173
|
+
:get,
|
|
174
|
+
"/v3/travel-rule/vasps/",
|
|
175
|
+
query: {
|
|
176
|
+
"search" => search,
|
|
177
|
+
"network" => network,
|
|
178
|
+
"jurisdiction" => jurisdiction,
|
|
179
|
+
"reachable" => reachable,
|
|
180
|
+
"kind" => kind,
|
|
181
|
+
"risk" => risk,
|
|
182
|
+
"responsiveness" => responsiveness,
|
|
183
|
+
"limit" => limit,
|
|
184
|
+
"offset" => offset
|
|
185
|
+
},
|
|
186
|
+
page: Types::VaspDirectoryEntry,
|
|
187
|
+
request_options: request_options
|
|
188
|
+
)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Register an after-deposit (sunrise) inbound transfer
|
|
192
|
+
#
|
|
193
|
+
# Register Travel Rule data for a crypto deposit that already settled on-chain before any exchange took place.
|
|
194
|
+
# Creates an inbound travelRule transaction (or reuses an unclaimed deposit) and resolves the transfer against
|
|
195
|
+
# your wallet address book. For a newly created transaction, Didit sends transaction.created first and the
|
|
196
|
+
# travel_rule.status.updated webhooks after it.
|
|
197
|
+
#
|
|
198
|
+
# +POST /v3/travel-rule/inbound/+
|
|
199
|
+
#
|
|
200
|
+
# @param chain [String] Chain the deposit settled on, for example `ETH`. Stored lowercase and compared
|
|
201
|
+
# case-insensitively with your wallet address book entries, so use the same chain token there.
|
|
202
|
+
# @param txid [String] On-chain transaction hash. Deduped together with wallet_address.
|
|
203
|
+
# @param wallet_address [String] The destination wallet you received the deposit on. An XRP X-address is split
|
|
204
|
+
# into its classic address and tag.
|
|
205
|
+
# @param amount [String] Deposit amount as a decimal string, zero or greater, with up to 18 decimal places.
|
|
206
|
+
# @param currency [String] Deposit asset, e.g. "USDC".
|
|
207
|
+
# @param originator_data [Hash] Originator details from the sending VASP, if known, as a flat object such as
|
|
208
|
+
# `{"name": "..."}`. Didit reads name (or full_name), first_name, last_name and vendor_data from it.
|
|
209
|
+
# @param beneficiary_data [Hash] Beneficiary details (your customer), as a flat object such as `{"name":
|
|
210
|
+
# "..."}`. Didit matches name against the holder_name of the matched address book entry, and sets wallet_address
|
|
211
|
+
# and chain from the request.
|
|
212
|
+
# @param originating_vasp [Hash] Optional description of the sending VASP. It stays on this transfer only
|
|
213
|
+
# (`metadata.originating_vasp`, and the transfer's originator VASP in GET /v3/travel-rule/transfers/); it never
|
|
214
|
+
# creates, edits or links a shared VASP directory entry.
|
|
215
|
+
# @param memo [String] Optional. The deposit's destination tag or memo on a memo network: on a shared deposit
|
|
216
|
+
# address it is what tells your customers apart, and the address-book entry for that memo is matched. XRP: a
|
|
217
|
+
# destination tag, a whole number from 0 to 4294967295 (a JSON number is accepted). XLM: a text memo of up to 28
|
|
218
|
+
# bytes, a 64-bit id or a 32-byte hash in hex. EOS: up to 256 bytes. ATOM: up to 256 characters....
|
|
219
|
+
# @param utxo [Hash] Optional, UTXO chains only. The deposit transaction's inputs and outputs: the sender's
|
|
220
|
+
# wallet is the declared `originator_data.wallet_address`, else the largest input.
|
|
221
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
222
|
+
# @return [Didit::Types::TravelRuleInboundResponse]
|
|
223
|
+
def register_inbound(
|
|
224
|
+
chain:,
|
|
225
|
+
txid:,
|
|
226
|
+
wallet_address:,
|
|
227
|
+
amount:,
|
|
228
|
+
currency:,
|
|
229
|
+
originator_data: OMIT,
|
|
230
|
+
beneficiary_data: OMIT,
|
|
231
|
+
originating_vasp: OMIT,
|
|
232
|
+
memo: OMIT,
|
|
233
|
+
utxo: OMIT,
|
|
234
|
+
request_options: nil
|
|
235
|
+
)
|
|
236
|
+
@client.request(
|
|
237
|
+
:post,
|
|
238
|
+
"/v3/travel-rule/inbound/",
|
|
239
|
+
body: {
|
|
240
|
+
"chain" => chain,
|
|
241
|
+
"txid" => txid,
|
|
242
|
+
"wallet_address" => wallet_address,
|
|
243
|
+
"amount" => amount,
|
|
244
|
+
"currency" => currency,
|
|
245
|
+
"originator_data" => originator_data,
|
|
246
|
+
"beneficiary_data" => beneficiary_data,
|
|
247
|
+
"originating_vasp" => originating_vasp,
|
|
248
|
+
"memo" => memo,
|
|
249
|
+
"utxo" => utxo
|
|
250
|
+
},
|
|
251
|
+
response: Types::TravelRuleInboundResponse,
|
|
252
|
+
request_options: request_options
|
|
253
|
+
)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Get Travel Rule settings
|
|
257
|
+
#
|
|
258
|
+
# Read the application's Travel Rule settings and VASP profile. Auto-creates a default (disabled) settings row
|
|
259
|
+
# and an empty profile on first read.
|
|
260
|
+
#
|
|
261
|
+
# +GET /v3/travel-rule/settings/+
|
|
262
|
+
#
|
|
263
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
264
|
+
# @return [Didit::Types::TravelRuleSettingsDetail]
|
|
265
|
+
def retrieve_settings(request_options: nil)
|
|
266
|
+
@client.request(
|
|
267
|
+
:get,
|
|
268
|
+
"/v3/travel-rule/settings/",
|
|
269
|
+
response: Types::TravelRuleSettingsDetail,
|
|
270
|
+
request_options: request_options
|
|
271
|
+
)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# Get a VASP directory entry
|
|
275
|
+
#
|
|
276
|
+
# One directory entry or Didit network member by the id the search returned, with the same fields and the routes
|
|
277
|
+
# your application has to it.
|
|
278
|
+
#
|
|
279
|
+
# +GET /v3/travel-rule/vasps/{vasp_id}/+
|
|
280
|
+
#
|
|
281
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/.
|
|
282
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
283
|
+
# @return [Didit::Types::VaspDirectoryEntry]
|
|
284
|
+
def retrieve_vasp(vasp_id, request_options: nil)
|
|
285
|
+
@client.request(
|
|
286
|
+
:get,
|
|
287
|
+
"/v3/travel-rule/vasps/{vasp_id}/",
|
|
288
|
+
path_params: { "vasp_id" => vasp_id },
|
|
289
|
+
response: Types::VaspDirectoryEntry,
|
|
290
|
+
request_options: request_options
|
|
291
|
+
)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
# Get your decision on a VASP
|
|
295
|
+
#
|
|
296
|
+
# Your application's decision on a counterparty (a directory entry or a Didit network member): approved,
|
|
297
|
+
# restricted or blocked. An entity of a brand with no decision of its own follows the brand's decision, named in
|
|
298
|
+
# inherited_from. Private to your application.
|
|
299
|
+
#
|
|
300
|
+
# +GET /v3/travel-rule/vasps/{vasp_id}/decision/+
|
|
301
|
+
#
|
|
302
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
303
|
+
# member.
|
|
304
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
305
|
+
# @return [Didit::Types::TravelRuleCounterpartyDecisionResponse]
|
|
306
|
+
def retrieve_vasp_decision(vasp_id, request_options: nil)
|
|
307
|
+
@client.request(
|
|
308
|
+
:get,
|
|
309
|
+
"/v3/travel-rule/vasps/{vasp_id}/decision/",
|
|
310
|
+
path_params: { "vasp_id" => vasp_id },
|
|
311
|
+
response: Types::TravelRuleCounterpartyDecisionResponse,
|
|
312
|
+
request_options: request_options
|
|
313
|
+
)
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Get a VASP's entity screening
|
|
317
|
+
#
|
|
318
|
+
# Whether counterparty screening is on for your application, what one screening costs your organization, how
|
|
319
|
+
# long a result stays fresh, and your latest sanctions and adverse-media screening of the counterparty. Reading
|
|
320
|
+
# it is free.
|
|
321
|
+
#
|
|
322
|
+
# +GET /v3/travel-rule/vasps/{vasp_id}/screening/+
|
|
323
|
+
#
|
|
324
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
325
|
+
# member.
|
|
326
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
327
|
+
# @return [Didit::Types::TravelRuleCounterpartyScreeningStatus]
|
|
328
|
+
def retrieve_vasp_screening(vasp_id, request_options: nil)
|
|
329
|
+
@client.request(
|
|
330
|
+
:get,
|
|
331
|
+
"/v3/travel-rule/vasps/{vasp_id}/screening/",
|
|
332
|
+
path_params: { "vasp_id" => vasp_id },
|
|
333
|
+
response: Types::TravelRuleCounterpartyScreeningStatus,
|
|
334
|
+
request_options: request_options
|
|
335
|
+
)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# Screen a VASP
|
|
339
|
+
#
|
|
340
|
+
# Screen the counterparty entity against sanctions and adverse media for your application. Opt-in:
|
|
341
|
+
# counterparty_screening_enabled must be on in your Travel Rule settings. Each new screening is billed at your
|
|
342
|
+
# organization's Company AML Screening price; a screening younger than 30 days is returned instead (200, not
|
|
343
|
+
# billed) unless you send refresh: true. One screening of a counterparty runs at a time per application. The
|
|
344
|
+
# result is private to your application. Sandbox applications are never screened.
|
|
345
|
+
#
|
|
346
|
+
# +POST /v3/travel-rule/vasps/{vasp_id}/screening/+
|
|
347
|
+
#
|
|
348
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
349
|
+
# member.
|
|
350
|
+
# @param refresh [Boolean] true screens again (and bills again) even when a fresh screening exists.
|
|
351
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
352
|
+
# @return [Didit::Types::TravelRuleCounterpartyScreeningResult]
|
|
353
|
+
def screen_vasp(vasp_id, refresh: OMIT, request_options: nil)
|
|
354
|
+
@client.request(
|
|
355
|
+
:post,
|
|
356
|
+
"/v3/travel-rule/vasps/{vasp_id}/screening/",
|
|
357
|
+
path_params: { "vasp_id" => vasp_id },
|
|
358
|
+
body: {
|
|
359
|
+
"refresh" => refresh
|
|
360
|
+
},
|
|
361
|
+
response: Types::TravelRuleCounterpartyScreeningResult,
|
|
362
|
+
request_options: request_options
|
|
363
|
+
)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Send the compliance email confirmation
|
|
367
|
+
#
|
|
368
|
+
# Emails a single-use confirmation link to your VASP profile's compliance_email. Opening the link and pressing
|
|
369
|
+
# its confirm button confirms the address, which the Didit network needs before it lists your profile. A new
|
|
370
|
+
# request replaces the previous link; the link stops working when the compliance email changes. One email per
|
|
371
|
+
# minute per address.
|
|
372
|
+
#
|
|
373
|
+
# +POST /v3/travel-rule/settings/compliance-email/confirmation/+
|
|
374
|
+
#
|
|
375
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
376
|
+
# @return [Didit::Types::TravelRuleSendComplianceEmailConfirmationResponse]
|
|
377
|
+
def send_compliance_email_confirmation(request_options: nil)
|
|
378
|
+
@client.request(
|
|
379
|
+
:post,
|
|
380
|
+
"/v3/travel-rule/settings/compliance-email/confirmation/",
|
|
381
|
+
response: Types::TravelRuleSendComplianceEmailConfirmationResponse,
|
|
382
|
+
request_options: request_options
|
|
383
|
+
)
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
# Send a due-diligence questionnaire to a VASP
|
|
387
|
+
#
|
|
388
|
+
# Email Didit's standard due-diligence questionnaire to a compliance address on record for the counterparty,
|
|
389
|
+
# with a single-use answer link. The counterparty has 30 days to answer every question; the answers stay current
|
|
390
|
+
# for 365 days. A new send replaces your earlier unanswered questionnaire to the same counterparty, whose link
|
|
391
|
+
# stops working. One email per minute per address.
|
|
392
|
+
#
|
|
393
|
+
# +POST /v3/travel-rule/vasps/{vasp_id}/questionnaires/+
|
|
394
|
+
#
|
|
395
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
396
|
+
# member.
|
|
397
|
+
# @param sent_to [String] Optional. A compliance address on record for the counterparty: for a directory entry
|
|
398
|
+
# its compliance address or a contact your application sees, for a Didit network member its confirmed compliance
|
|
399
|
+
# email. Default: the address a Travel Rule email to the counterparty goes to (your own contact first, then a
|
|
400
|
+
# platform contact, then the entry's compliance address).
|
|
401
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
402
|
+
# @return [Didit::Types::TravelRuleCounterpartyQuestionnaire]
|
|
403
|
+
def send_vasp_questionnaire(vasp_id, sent_to: OMIT, request_options: nil)
|
|
404
|
+
@client.request(
|
|
405
|
+
:post,
|
|
406
|
+
"/v3/travel-rule/vasps/{vasp_id}/questionnaires/",
|
|
407
|
+
path_params: { "vasp_id" => vasp_id },
|
|
408
|
+
body: {
|
|
409
|
+
"sent_to" => sent_to
|
|
410
|
+
},
|
|
411
|
+
response: Types::TravelRuleCounterpartyQuestionnaire,
|
|
412
|
+
request_options: request_options
|
|
413
|
+
)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# Update Travel Rule settings
|
|
417
|
+
#
|
|
418
|
+
# Upsert the application's Travel Rule settings and VASP profile. Partial update - only send the fields you want
|
|
419
|
+
# to change. Setting `is_enabled: true` requires a non-blank `legal_name` (already stored or included in the
|
|
420
|
+
# same request), otherwise returns 400.
|
|
421
|
+
#
|
|
422
|
+
# +PUT /v3/travel-rule/settings/+
|
|
423
|
+
#
|
|
424
|
+
# @param is_enabled [Boolean]
|
|
425
|
+
# @param legal_name [String]
|
|
426
|
+
# @param lei [String]
|
|
427
|
+
# @param jurisdiction [String]
|
|
428
|
+
# @param name_matching_strictness [String] `CONTAINS` accepts one name whose words all appear in the other.
|
|
429
|
+
# @param confirmation_timeout_hours [Integer]
|
|
430
|
+
# @param timeout_outcome [String]
|
|
431
|
+
# @param compliance_email [String] Compliance contact email for your VASP profile. The Didit network lists your
|
|
432
|
+
# profile only once this address is confirmed through an emailed link (POST
|
|
433
|
+
# /v3/travel-rule/settings/compliance-email/confirmation/); changing it needs a new confirmation.
|
|
434
|
+
# @param is_discoverable [Boolean] Whether your VASP profile can be listed in the Didit network: found in GET
|
|
435
|
+
# /v3/travel-rule/vasps/ by other Didit customers and reached on the INTERNAL rail. Listing also needs a live
|
|
436
|
+
# application, Travel Rule on, a legal name and a confirmed compliance email; didit_network says which are
|
|
437
|
+
# missing. Default true.
|
|
438
|
+
# @param threshold_amount [String] Decimal string, zero or greater, in your application's default currency.
|
|
439
|
+
# Minimum transfer amount that triggers a managed exchange.
|
|
440
|
+
# @param ownership_validation_mode [String] See the response field of the same name.
|
|
441
|
+
# @param simplified_validation_threshold [String] Decimal string, 0 or more.
|
|
442
|
+
# @param data_sharing_fields [Hash] Merged per entity type: an entity type you leave out keeps its current
|
|
443
|
+
# choice. A choice that cannot meet the originator obligations of your `jurisdiction` regime (EU TFR or FATF
|
|
444
|
+
# Recommendation 16), an empty list included, is refused with `400`.
|
|
445
|
+
# @param matching_rules [Hash] Merged per entity type, and per field inside it. A field that entity type does
|
|
446
|
+
# not compare (for example `date_of_birth` for `company`) is refused with `400`.
|
|
447
|
+
# @param inbound_auto_accept [Boolean]
|
|
448
|
+
# @param allow_self_declaration [Boolean]
|
|
449
|
+
# @param allow_screenshot_proof [Boolean] When true, the wallet-ownership widget offers screenshot upload as an
|
|
450
|
+
# ownership evidence method. Default true.
|
|
451
|
+
# @param auto_wallet_verification [Boolean]
|
|
452
|
+
# @param vasp_attribution_enabled [Boolean]
|
|
453
|
+
# @param counterparty_screening_enabled [Boolean] Opt-in sanctions and adverse-media screening of counterparty
|
|
454
|
+
# VASPs, billed per screening at the Company AML Screening price. When on, Didit screens the counterparty an
|
|
455
|
+
# outbound exchange reaches (reusing a screening younger than 30 days) and you can screen one with POST
|
|
456
|
+
# /v3/travel-rule/vasps/{vasp_id}/screening/. Default false: nothing is screened or billed.
|
|
457
|
+
# @param sunrise_policy [String] HOLD, REJECT, PROCEED, or empty to follow timeout_outcome. See the response
|
|
458
|
+
# field of the same name.
|
|
459
|
+
# @param non_responsive_policy [String] HOLD, REJECT, PROCEED, or empty to follow timeout_outcome. See the
|
|
460
|
+
# response field of the same name.
|
|
461
|
+
# @param disabled_networks [Array<String>] Networks opted out of platform membership. Does not disable your
|
|
462
|
+
# connected own memberships or provision unavailable networks.
|
|
463
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
464
|
+
# @return [Didit::Types::TravelRuleSettingsDetail]
|
|
465
|
+
def update_settings(
|
|
466
|
+
is_enabled: OMIT,
|
|
467
|
+
legal_name: OMIT,
|
|
468
|
+
lei: OMIT,
|
|
469
|
+
jurisdiction: OMIT,
|
|
470
|
+
name_matching_strictness: OMIT,
|
|
471
|
+
confirmation_timeout_hours: OMIT,
|
|
472
|
+
timeout_outcome: OMIT,
|
|
473
|
+
compliance_email: OMIT,
|
|
474
|
+
is_discoverable: OMIT,
|
|
475
|
+
threshold_amount: OMIT,
|
|
476
|
+
ownership_validation_mode: OMIT,
|
|
477
|
+
simplified_validation_threshold: OMIT,
|
|
478
|
+
data_sharing_fields: OMIT,
|
|
479
|
+
matching_rules: OMIT,
|
|
480
|
+
inbound_auto_accept: OMIT,
|
|
481
|
+
allow_self_declaration: OMIT,
|
|
482
|
+
allow_screenshot_proof: OMIT,
|
|
483
|
+
auto_wallet_verification: OMIT,
|
|
484
|
+
vasp_attribution_enabled: OMIT,
|
|
485
|
+
counterparty_screening_enabled: OMIT,
|
|
486
|
+
sunrise_policy: OMIT,
|
|
487
|
+
non_responsive_policy: OMIT,
|
|
488
|
+
disabled_networks: OMIT,
|
|
489
|
+
request_options: nil
|
|
490
|
+
)
|
|
491
|
+
@client.request(
|
|
492
|
+
:put,
|
|
493
|
+
"/v3/travel-rule/settings/",
|
|
494
|
+
body: {
|
|
495
|
+
"is_enabled" => is_enabled,
|
|
496
|
+
"legal_name" => legal_name,
|
|
497
|
+
"lei" => lei,
|
|
498
|
+
"jurisdiction" => jurisdiction,
|
|
499
|
+
"name_matching_strictness" => name_matching_strictness,
|
|
500
|
+
"confirmation_timeout_hours" => confirmation_timeout_hours,
|
|
501
|
+
"timeout_outcome" => timeout_outcome,
|
|
502
|
+
"compliance_email" => compliance_email,
|
|
503
|
+
"is_discoverable" => is_discoverable,
|
|
504
|
+
"threshold_amount" => threshold_amount,
|
|
505
|
+
"ownership_validation_mode" => ownership_validation_mode,
|
|
506
|
+
"simplified_validation_threshold" => simplified_validation_threshold,
|
|
507
|
+
"data_sharing_fields" => data_sharing_fields,
|
|
508
|
+
"matching_rules" => matching_rules,
|
|
509
|
+
"inbound_auto_accept" => inbound_auto_accept,
|
|
510
|
+
"allow_self_declaration" => allow_self_declaration,
|
|
511
|
+
"allow_screenshot_proof" => allow_screenshot_proof,
|
|
512
|
+
"auto_wallet_verification" => auto_wallet_verification,
|
|
513
|
+
"vasp_attribution_enabled" => vasp_attribution_enabled,
|
|
514
|
+
"counterparty_screening_enabled" => counterparty_screening_enabled,
|
|
515
|
+
"sunrise_policy" => sunrise_policy,
|
|
516
|
+
"non_responsive_policy" => non_responsive_policy,
|
|
517
|
+
"disabled_networks" => disabled_networks
|
|
518
|
+
},
|
|
519
|
+
response: Types::TravelRuleSettingsDetail,
|
|
520
|
+
request_options: request_options
|
|
521
|
+
)
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
# Set your decision on a VASP
|
|
525
|
+
#
|
|
526
|
+
# Make or change your application's decision on a counterparty: APPROVED, RESTRICTED or BLOCKED, with an
|
|
527
|
+
# optional reason. It never changes the shared directory entry and acts only through your transaction rules
|
|
528
|
+
# (counterparty_dd_status). A decision on a brand also covers each of its entities that has no decision of its
|
|
529
|
+
# own.
|
|
530
|
+
#
|
|
531
|
+
# +PUT /v3/travel-rule/vasps/{vasp_id}/decision/+
|
|
532
|
+
#
|
|
533
|
+
# @param vasp_id [String] The id of a row of GET /v3/travel-rule/vasps/: a directory entry or a Didit network
|
|
534
|
+
# member.
|
|
535
|
+
# @param decision [String]
|
|
536
|
+
# @param reason [String] Optional. Replaces the previous reason; omit it to clear it.
|
|
537
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
538
|
+
# @return [Didit::Types::TravelRuleCounterpartyDecisionResponse]
|
|
539
|
+
def update_vasp_decision(vasp_id, decision:, reason: OMIT, request_options: nil)
|
|
540
|
+
@client.request(
|
|
541
|
+
:put,
|
|
542
|
+
"/v3/travel-rule/vasps/{vasp_id}/decision/",
|
|
543
|
+
path_params: { "vasp_id" => vasp_id },
|
|
544
|
+
body: {
|
|
545
|
+
"decision" => decision,
|
|
546
|
+
"reason" => reason
|
|
547
|
+
},
|
|
548
|
+
response: Types::TravelRuleCounterpartyDecisionResponse,
|
|
549
|
+
request_options: request_options
|
|
550
|
+
)
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
# The +travel_rule.counterparty_contacts+ resource.
|
|
554
|
+
class CounterpartyContacts < Didit::Resource
|
|
555
|
+
# Add a counterparty contact
|
|
556
|
+
#
|
|
557
|
+
# Adds a private compliance address for one directory entry. Only your application sees and uses it, and the
|
|
558
|
+
# EMAIL rail writes to it before any platform contact. Adding an address the entry already has among your own
|
|
559
|
+
# contacts returns that contact.
|
|
560
|
+
#
|
|
561
|
+
# +POST /v3/travel-rule/counterparty-contacts/+
|
|
562
|
+
#
|
|
563
|
+
# @param counterparty [String] The directory entry's `id`.
|
|
564
|
+
# @param email [String]
|
|
565
|
+
# @param name [String] Optional label.
|
|
566
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
567
|
+
# @return [Didit::Types::TravelRuleCounterpartyContact]
|
|
568
|
+
def create(counterparty:, email:, name: OMIT, request_options: nil)
|
|
569
|
+
@client.request(
|
|
570
|
+
:post,
|
|
571
|
+
"/v3/travel-rule/counterparty-contacts/",
|
|
572
|
+
body: {
|
|
573
|
+
"counterparty" => counterparty,
|
|
574
|
+
"email" => email,
|
|
575
|
+
"name" => name
|
|
576
|
+
},
|
|
577
|
+
response: Types::TravelRuleCounterpartyContact,
|
|
578
|
+
request_options: request_options
|
|
579
|
+
)
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
# Delete a counterparty contact
|
|
583
|
+
#
|
|
584
|
+
# Deletes one of your application's own contacts. The EMAIL rail stops writing to it at once. Platform
|
|
585
|
+
# contacts cannot be deleted.
|
|
586
|
+
#
|
|
587
|
+
# +DELETE /v3/travel-rule/counterparty-contacts/{contact_uuid}/+
|
|
588
|
+
#
|
|
589
|
+
# @param contact_uuid [String]
|
|
590
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
591
|
+
# @return [nil]
|
|
592
|
+
def delete(contact_uuid, request_options: nil)
|
|
593
|
+
@client.request(
|
|
594
|
+
:delete,
|
|
595
|
+
"/v3/travel-rule/counterparty-contacts/{contact_uuid}/",
|
|
596
|
+
path_params: { "contact_uuid" => contact_uuid },
|
|
597
|
+
request_options: request_options
|
|
598
|
+
)
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
# List counterparty contacts
|
|
602
|
+
#
|
|
603
|
+
# The compliance addresses the EMAIL rail may write to for your application: Didit's platform contacts plus
|
|
604
|
+
# your application's own private ones, bounced ones included, newest first. Paginated with `limit` (default
|
|
605
|
+
# 50) and `offset`; `count` stops at 100, so 100 means 100 or more.
|
|
606
|
+
#
|
|
607
|
+
# +GET /v3/travel-rule/counterparty-contacts/+
|
|
608
|
+
#
|
|
609
|
+
# @param counterparty [String] Only the contacts of this directory entry. Must be a UUID; an empty value means
|
|
610
|
+
# no filter.
|
|
611
|
+
# @param limit [Integer] Page size, default 50.
|
|
612
|
+
# @param offset [Integer] Rows to skip.
|
|
613
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
614
|
+
# @return [Didit::Page<Didit::Types::TravelRuleCounterpartyContact>]
|
|
615
|
+
def list(counterparty: OMIT, limit: OMIT, offset: OMIT, request_options: nil)
|
|
616
|
+
@client.request(
|
|
617
|
+
:get,
|
|
618
|
+
"/v3/travel-rule/counterparty-contacts/",
|
|
619
|
+
query: {
|
|
620
|
+
"counterparty" => counterparty,
|
|
621
|
+
"limit" => limit,
|
|
622
|
+
"offset" => offset
|
|
623
|
+
},
|
|
624
|
+
page: Types::TravelRuleCounterpartyContact,
|
|
625
|
+
request_options: request_options
|
|
626
|
+
)
|
|
627
|
+
end
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
# The +travel_rule.networks+ resource.
|
|
631
|
+
class Networks < Didit::Resource
|
|
632
|
+
# Request a Travel Rule network
|
|
633
|
+
#
|
|
634
|
+
# Ask for this application's own participant on a network Didit's membership carries (GTR or Sygna). Without
|
|
635
|
+
# an approved questionnaire the participant waits for it (questionnaire_pending); with one it goes to the
|
|
636
|
+
# network's onboarding (submitted_to_network) and becomes active once the network gives it a code. Idempotent:
|
|
637
|
+
# a pending, onboarding or live participant is returned unchanged. If the network refused the registration
|
|
638
|
+
# (last_error is set), requesting again retries. TRUST and VerifyVASP are reachable only through your own
|
|
639
|
+
# membership: TRUST admits members per VASP, and a VerifyVASP Enclave serves one VASP id.
|
|
640
|
+
#
|
|
641
|
+
# +POST /v3/travel-rule/networks/{network}/request/+
|
|
642
|
+
#
|
|
643
|
+
# @param network [String] The network to join through Didit's membership.
|
|
644
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
645
|
+
# @return [Didit::Types::TravelRuleNetworkParticipant]
|
|
646
|
+
def request_access(network, request_options: nil)
|
|
647
|
+
@client.request(
|
|
648
|
+
:post,
|
|
649
|
+
"/v3/travel-rule/networks/{network}/request/",
|
|
650
|
+
path_params: { "network" => network },
|
|
651
|
+
response: Types::TravelRuleNetworkParticipant,
|
|
652
|
+
request_options: request_options
|
|
653
|
+
)
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
# Get Travel Rule networks
|
|
657
|
+
#
|
|
658
|
+
# Read, for this application, every network's true state: whether it sends through your own membership or
|
|
659
|
+
# through Didit's, and why it cannot yet. Also returns the due-diligence questionnaire and your participants.
|
|
660
|
+
# Reading creates nothing.
|
|
661
|
+
#
|
|
662
|
+
# +GET /v3/travel-rule/networks/+
|
|
663
|
+
#
|
|
664
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
665
|
+
# @return [Didit::Types::TravelRuleNetworksOverview]
|
|
666
|
+
def retrieve(request_options: nil)
|
|
667
|
+
@client.request(
|
|
668
|
+
:get,
|
|
669
|
+
"/v3/travel-rule/networks/",
|
|
670
|
+
response: Types::TravelRuleNetworksOverview,
|
|
671
|
+
request_options: request_options
|
|
672
|
+
)
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
# Get the network questionnaire
|
|
676
|
+
#
|
|
677
|
+
# Read Didit's network due-diligence questionnaire for this application, its status and Didit's review note.
|
|
678
|
+
# An application that never saved one reads an empty draft.
|
|
679
|
+
#
|
|
680
|
+
# +GET /v3/travel-rule/networks/questionnaire/+
|
|
681
|
+
#
|
|
682
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
683
|
+
# @return [Didit::Types::TravelRuleNetworkQuestionnaire]
|
|
684
|
+
def retrieve_questionnaire(request_options: nil)
|
|
685
|
+
@client.request(
|
|
686
|
+
:get,
|
|
687
|
+
"/v3/travel-rule/networks/questionnaire/",
|
|
688
|
+
response: Types::TravelRuleNetworkQuestionnaire,
|
|
689
|
+
request_options: request_options
|
|
690
|
+
)
|
|
691
|
+
end
|
|
692
|
+
|
|
693
|
+
# Submit the network questionnaire
|
|
694
|
+
#
|
|
695
|
+
# Send the saved questionnaire to Didit's review. The saved answers must be complete: every field except lei
|
|
696
|
+
# and data_protection_contact_email, with the three attestations true. Didit approves it, asks for changes
|
|
697
|
+
# (edit and submit again) or rejects it. Networks you requested while it was pending are handed to their
|
|
698
|
+
# onboarding when it is approved.
|
|
699
|
+
#
|
|
700
|
+
# +POST /v3/travel-rule/networks/questionnaire/submit/+
|
|
701
|
+
#
|
|
702
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
703
|
+
# @return [Didit::Types::TravelRuleNetworkQuestionnaire]
|
|
704
|
+
def submit_questionnaire(request_options: nil)
|
|
705
|
+
@client.request(
|
|
706
|
+
:post,
|
|
707
|
+
"/v3/travel-rule/networks/questionnaire/submit/",
|
|
708
|
+
response: Types::TravelRuleNetworkQuestionnaire,
|
|
709
|
+
request_options: request_options
|
|
710
|
+
)
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
# Save network questionnaire answers
|
|
714
|
+
#
|
|
715
|
+
# Save answers to the questionnaire while it is draft or changes_requested. Saves are partial: answers you do
|
|
716
|
+
# not send are kept.
|
|
717
|
+
#
|
|
718
|
+
# +PUT /v3/travel-rule/networks/questionnaire/+
|
|
719
|
+
#
|
|
720
|
+
# @param legal_name [String]
|
|
721
|
+
# @param registration_number [String]
|
|
722
|
+
# @param incorporation_country [String] ISO 3166-1 alpha-2 country code.
|
|
723
|
+
# @param registered_address [String]
|
|
724
|
+
# @param website [String]
|
|
725
|
+
# @param lei [String] Optional. A valid ISO 17442 LEI when given.
|
|
726
|
+
# @param licences [Array<Hash>] Every licence or registration the VASP holds.
|
|
727
|
+
# @param operating_jurisdictions [Array<String>]
|
|
728
|
+
# @param compliance_officer_name [String]
|
|
729
|
+
# @param compliance_officer_email [String]
|
|
730
|
+
# @param aml_ctf_policy_attested [Boolean] Must be true to submit.
|
|
731
|
+
# @param sanctions_screening_attested [Boolean] Must be true to submit.
|
|
732
|
+
# @param data_protection_attested [Boolean] Must be true to submit.
|
|
733
|
+
# @param data_protection_contact_email [String] Optional.
|
|
734
|
+
# @param expected_monthly_transfers [Integer]
|
|
735
|
+
# @param expected_monthly_volume_usd [String] Expected monthly volume in USD, up to 2 decimal places. Returned
|
|
736
|
+
# as a string.
|
|
737
|
+
# @param assets [Array<String>] Asset tickers, stored upper-case, sorted and de-duplicated.
|
|
738
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
739
|
+
# @return [Didit::Types::TravelRuleNetworkQuestionnaire]
|
|
740
|
+
def update_questionnaire(
|
|
741
|
+
legal_name: OMIT,
|
|
742
|
+
registration_number: OMIT,
|
|
743
|
+
incorporation_country: OMIT,
|
|
744
|
+
registered_address: OMIT,
|
|
745
|
+
website: OMIT,
|
|
746
|
+
lei: OMIT,
|
|
747
|
+
licences: OMIT,
|
|
748
|
+
operating_jurisdictions: OMIT,
|
|
749
|
+
compliance_officer_name: OMIT,
|
|
750
|
+
compliance_officer_email: OMIT,
|
|
751
|
+
aml_ctf_policy_attested: OMIT,
|
|
752
|
+
sanctions_screening_attested: OMIT,
|
|
753
|
+
data_protection_attested: OMIT,
|
|
754
|
+
data_protection_contact_email: OMIT,
|
|
755
|
+
expected_monthly_transfers: OMIT,
|
|
756
|
+
expected_monthly_volume_usd: OMIT,
|
|
757
|
+
assets: OMIT,
|
|
758
|
+
request_options: nil
|
|
759
|
+
)
|
|
760
|
+
@client.request(
|
|
761
|
+
:put,
|
|
762
|
+
"/v3/travel-rule/networks/questionnaire/",
|
|
763
|
+
body: {
|
|
764
|
+
"legal_name" => legal_name,
|
|
765
|
+
"registration_number" => registration_number,
|
|
766
|
+
"incorporation_country" => incorporation_country,
|
|
767
|
+
"registered_address" => registered_address,
|
|
768
|
+
"website" => website,
|
|
769
|
+
"lei" => lei,
|
|
770
|
+
"licences" => licences,
|
|
771
|
+
"operating_jurisdictions" => operating_jurisdictions,
|
|
772
|
+
"compliance_officer_name" => compliance_officer_name,
|
|
773
|
+
"compliance_officer_email" => compliance_officer_email,
|
|
774
|
+
"aml_ctf_policy_attested" => aml_ctf_policy_attested,
|
|
775
|
+
"sanctions_screening_attested" => sanctions_screening_attested,
|
|
776
|
+
"data_protection_attested" => data_protection_attested,
|
|
777
|
+
"data_protection_contact_email" => data_protection_contact_email,
|
|
778
|
+
"expected_monthly_transfers" => expected_monthly_transfers,
|
|
779
|
+
"expected_monthly_volume_usd" => expected_monthly_volume_usd,
|
|
780
|
+
"assets" => assets
|
|
781
|
+
},
|
|
782
|
+
response: Types::TravelRuleNetworkQuestionnaire,
|
|
783
|
+
request_options: request_options
|
|
784
|
+
)
|
|
785
|
+
end
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
# The +travel_rule.transfers+ resource.
|
|
789
|
+
class Transfers < Didit::Resource
|
|
790
|
+
# List Travel Rule transfers
|
|
791
|
+
#
|
|
792
|
+
# Your application's Travel Rule transfers, newest first, paginated with `limit` (default 50) and `offset`.
|
|
793
|
+
# Rows carry VASP names, wallets and memos only, never person data. Comma-separated values select several. An
|
|
794
|
+
# unknown value answers 400 naming the parameter, for example `{"direction": ["Unknown value(s): inbound."]}`.
|
|
795
|
+
#
|
|
796
|
+
# +GET /v3/travel-rule/transfers/+
|
|
797
|
+
#
|
|
798
|
+
# @param direction [String] INBOUND, OUTBOUND, or both comma-separated. Case-sensitive.
|
|
799
|
+
# @param status [String] One or more transfer statuses, comma-separated.
|
|
800
|
+
# @param rail [String] One or more of INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP,
|
|
801
|
+
# comma-separated.
|
|
802
|
+
# @param kind [String] withdrawal, deposit or message, comma-separated.
|
|
803
|
+
# @param currency [String] The transaction's currency, case-insensitive.
|
|
804
|
+
# @param start_date [Date, String] Transfers created on or after this day (UTC), YYYY-MM-DD.
|
|
805
|
+
# @param end_date [Date, String] Transfers created on or before this day (UTC), YYYY-MM-DD.
|
|
806
|
+
# @param counterparty [String] The `id` of a directory entry or Didit network member from GET
|
|
807
|
+
# /v3/travel-rule/vasps/: your transfers with that counterparty. A value that is not a valid id answers 400.
|
|
808
|
+
# @param limit [Integer] Page size, default 50.
|
|
809
|
+
# @param offset [Integer] Rows to skip.
|
|
810
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
811
|
+
# @return [Didit::Page<Didit::Types::TravelRuleTransferRow>]
|
|
812
|
+
def list(
|
|
813
|
+
direction: OMIT,
|
|
814
|
+
status: OMIT,
|
|
815
|
+
rail: OMIT,
|
|
816
|
+
kind: OMIT,
|
|
817
|
+
currency: OMIT,
|
|
818
|
+
start_date: OMIT,
|
|
819
|
+
end_date: OMIT,
|
|
820
|
+
counterparty: OMIT,
|
|
821
|
+
limit: OMIT,
|
|
822
|
+
offset: OMIT,
|
|
823
|
+
request_options: nil
|
|
824
|
+
)
|
|
825
|
+
@client.request(
|
|
826
|
+
:get,
|
|
827
|
+
"/v3/travel-rule/transfers/",
|
|
828
|
+
query: {
|
|
829
|
+
"direction" => direction,
|
|
830
|
+
"status" => status,
|
|
831
|
+
"rail" => rail,
|
|
832
|
+
"kind" => kind,
|
|
833
|
+
"currency" => currency,
|
|
834
|
+
"start_date" => start_date,
|
|
835
|
+
"end_date" => end_date,
|
|
836
|
+
"counterparty" => counterparty,
|
|
837
|
+
"limit" => limit,
|
|
838
|
+
"offset" => offset
|
|
839
|
+
},
|
|
840
|
+
page: Types::TravelRuleTransferRow,
|
|
841
|
+
request_options: request_options
|
|
842
|
+
)
|
|
843
|
+
end
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
# The +travel_rule.wallet_addresses+ resource.
|
|
847
|
+
class WalletAddresses < Didit::Resource
|
|
848
|
+
# Import wallet addresses in bulk
|
|
849
|
+
#
|
|
850
|
+
# Add up to 10,000 wallets to your Travel Rule address book in one call, as JSON or as a CSV file. A wallet
|
|
851
|
+
# can be sent by its address, by the SHA-256 of its lowercased address (`address_hash`) to keep the address
|
|
852
|
+
# private, or both. The import is idempotent: a wallet already in the book is reported as `existing` and left
|
|
853
|
+
# untouched, so the same file can be sent again. Each row is validated on its own, so one bad row never fails
|
|
854
|
+
# the others. A wallet imported by its hash only matches transfers to that address and can be proven with the
|
|
855
|
+
# wallet-ownership widget like any other entry.
|
|
856
|
+
#
|
|
857
|
+
# +POST /v3/travel-rule/wallet-addresses/import/+
|
|
858
|
+
#
|
|
859
|
+
# @param body [Hash, Array<Hash>]
|
|
860
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
861
|
+
# @return [Didit::Types::WalletAddressImportReport]
|
|
862
|
+
def bulk_import(body:, request_options: nil)
|
|
863
|
+
@client.request(
|
|
864
|
+
:post,
|
|
865
|
+
"/v3/travel-rule/wallet-addresses/import/",
|
|
866
|
+
body: body,
|
|
867
|
+
encoding: :auto,
|
|
868
|
+
file_fields: %w[file],
|
|
869
|
+
response: Types::WalletAddressImportReport,
|
|
870
|
+
request_options: request_options
|
|
871
|
+
)
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
# Register a wallet address
|
|
875
|
+
#
|
|
876
|
+
# Add an entry to your Travel Rule wallet address book so inbound INTERNAL-rail transfers can resolve against
|
|
877
|
+
# it.
|
|
878
|
+
#
|
|
879
|
+
# +POST /v3/travel-rule/wallet-addresses/+
|
|
880
|
+
#
|
|
881
|
+
# @param address [String] The wallet address. An XRP X-address is stored as its classic address and its tag,
|
|
882
|
+
# so it matches transfers that name either form.
|
|
883
|
+
# @param chain [String] Chain token for the address, for example `ETH` or `BTC`. When Didit routes or
|
|
884
|
+
# registers a transfer, it matches address book entries on the wallet address and, when the transfer carries a
|
|
885
|
+
# chain, on this value too, ignoring case. A transfer's chain is `beneficiary_data.chain`, filled from the
|
|
886
|
+
# transaction's crypto chain or currency symbol (for example `ETH`) when you do not send it, or the `chain`
|
|
887
|
+
# o...
|
|
888
|
+
# @param holder_vendor_data [String]
|
|
889
|
+
# @param holder_name [String]
|
|
890
|
+
# @param entity_type [String]
|
|
891
|
+
# @param self_declared [Boolean] Write-only. When true, the entry is created already ownership-verified via a
|
|
892
|
+
# SELF_DECLARATION proof. Returns 400 when `allow_self_declaration` is off in your Travel Rule settings.
|
|
893
|
+
# @param travel_address [String] Optional. The counterparty VASP's travel address for this wallet, enabling
|
|
894
|
+
# TRP routing for the assets TRP carries (BTC, ETH, and USDC on a named network). An invalid travel address
|
|
895
|
+
# returns 400.
|
|
896
|
+
# @param memo [String] Optional. The destination tag or memo that is part of the wallet. XRP: a destination
|
|
897
|
+
# tag, a whole number from 0 to 4294967295 (a JSON number is accepted). XLM: a text memo of up to 28 bytes, a
|
|
898
|
+
# 64-bit id or a 32-byte hash in hex. EOS: up to 256 bytes. ATOM: up to 256 characters. HBAR: up to 100 bytes.
|
|
899
|
+
# Bitcoin, EVM, Solana, Tron, Litecoin, Bitcoin Cash, Dogecoin and Lightning wallets take no memo:...
|
|
900
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
901
|
+
# @return [Didit::Types::WalletAddressEntry]
|
|
902
|
+
def create(
|
|
903
|
+
address:,
|
|
904
|
+
chain: OMIT,
|
|
905
|
+
holder_vendor_data: OMIT,
|
|
906
|
+
holder_name: OMIT,
|
|
907
|
+
entity_type: OMIT,
|
|
908
|
+
self_declared: OMIT,
|
|
909
|
+
travel_address: OMIT,
|
|
910
|
+
memo: OMIT,
|
|
911
|
+
request_options: nil
|
|
912
|
+
)
|
|
913
|
+
@client.request(
|
|
914
|
+
:post,
|
|
915
|
+
"/v3/travel-rule/wallet-addresses/",
|
|
916
|
+
body: {
|
|
917
|
+
"address" => address,
|
|
918
|
+
"chain" => chain,
|
|
919
|
+
"holder_vendor_data" => holder_vendor_data,
|
|
920
|
+
"holder_name" => holder_name,
|
|
921
|
+
"entity_type" => entity_type,
|
|
922
|
+
"self_declared" => self_declared,
|
|
923
|
+
"travel_address" => travel_address,
|
|
924
|
+
"memo" => memo
|
|
925
|
+
},
|
|
926
|
+
response: Types::WalletAddressEntry,
|
|
927
|
+
request_options: request_options
|
|
928
|
+
)
|
|
929
|
+
end
|
|
930
|
+
|
|
931
|
+
# Delete a wallet address
|
|
932
|
+
#
|
|
933
|
+
# Deletes the entry together with its ownership proofs and the screenshots they stored. It stops matching new
|
|
934
|
+
# transfers immediately and the address is freed up for re-registration. Transfers that already used the
|
|
935
|
+
# wallet keep their own record of it and read the same. Deletion is irreversible.
|
|
936
|
+
#
|
|
937
|
+
# +DELETE /v3/travel-rule/wallet-addresses/{entry_uuid}/+
|
|
938
|
+
#
|
|
939
|
+
# @param entry_uuid [String]
|
|
940
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
941
|
+
# @return [nil]
|
|
942
|
+
def delete(entry_uuid, request_options: nil)
|
|
943
|
+
@client.request(
|
|
944
|
+
:delete,
|
|
945
|
+
"/v3/travel-rule/wallet-addresses/{entry_uuid}/",
|
|
946
|
+
path_params: { "entry_uuid" => entry_uuid },
|
|
947
|
+
request_options: request_options
|
|
948
|
+
)
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
# List wallet address book entries
|
|
952
|
+
#
|
|
953
|
+
# Paginated list of your application's Travel Rule wallet address book, newest first.
|
|
954
|
+
#
|
|
955
|
+
# +GET /v3/travel-rule/wallet-addresses/+
|
|
956
|
+
#
|
|
957
|
+
# @param limit [Integer]
|
|
958
|
+
# @param offset [Integer]
|
|
959
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
960
|
+
# @return [Didit::Page<Didit::Types::WalletAddressEntry>]
|
|
961
|
+
def list(limit: OMIT, offset: OMIT, request_options: nil)
|
|
962
|
+
@client.request(
|
|
963
|
+
:get,
|
|
964
|
+
"/v3/travel-rule/wallet-addresses/",
|
|
965
|
+
query: {
|
|
966
|
+
"limit" => limit,
|
|
967
|
+
"offset" => offset
|
|
968
|
+
},
|
|
969
|
+
page: Types::WalletAddressEntry,
|
|
970
|
+
request_options: request_options
|
|
971
|
+
)
|
|
972
|
+
end
|
|
973
|
+
|
|
974
|
+
# Update wallet address holder metadata
|
|
975
|
+
#
|
|
976
|
+
# Partial update of holder_name, holder_vendor_data, entity_type, and travel_address. Setting travel_address
|
|
977
|
+
# attaches a TRP routing address to the entry; invalid values are rejected with 400. The response echoes only
|
|
978
|
+
# these four fields.
|
|
979
|
+
#
|
|
980
|
+
# +PATCH /v3/travel-rule/wallet-addresses/{entry_uuid}/+
|
|
981
|
+
#
|
|
982
|
+
# @param entry_uuid [String]
|
|
983
|
+
# @param holder_name [String]
|
|
984
|
+
# @param holder_vendor_data [String]
|
|
985
|
+
# @param entity_type [String]
|
|
986
|
+
# @param travel_address [String]
|
|
987
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
988
|
+
# @return [Didit::Types::WalletAddressEntryUpdate]
|
|
989
|
+
def update(
|
|
990
|
+
entry_uuid,
|
|
991
|
+
holder_name: OMIT,
|
|
992
|
+
holder_vendor_data: OMIT,
|
|
993
|
+
entity_type: OMIT,
|
|
994
|
+
travel_address: OMIT,
|
|
995
|
+
request_options: nil
|
|
996
|
+
)
|
|
997
|
+
@client.request(
|
|
998
|
+
:patch,
|
|
999
|
+
"/v3/travel-rule/wallet-addresses/{entry_uuid}/",
|
|
1000
|
+
path_params: { "entry_uuid" => entry_uuid },
|
|
1001
|
+
body: {
|
|
1002
|
+
"holder_name" => holder_name,
|
|
1003
|
+
"holder_vendor_data" => holder_vendor_data,
|
|
1004
|
+
"entity_type" => entity_type,
|
|
1005
|
+
"travel_address" => travel_address
|
|
1006
|
+
},
|
|
1007
|
+
response: Types::WalletAddressEntryUpdate,
|
|
1008
|
+
request_options: request_options
|
|
1009
|
+
)
|
|
1010
|
+
end
|
|
1011
|
+
end
|
|
1012
|
+
|
|
1013
|
+
# The +travel_rule.wallet_proofs+ resource.
|
|
1014
|
+
class WalletProofs < Didit::Resource
|
|
1015
|
+
# Approve or reject a screenshot wallet proof
|
|
1016
|
+
#
|
|
1017
|
+
# Decide a screenshot proof from your review queue. approve verifies the proof and the address book entry and
|
|
1018
|
+
# applies the ownership to the transfer the widget session was minted for, exactly as a verified signature
|
|
1019
|
+
# does. A screenshot never confirms a transfer that another Didit customer sent over the INTERNAL rail: that
|
|
1020
|
+
# takes a signed message or a test deposit. reject closes the proof as REJECTED with failure_reason
|
|
1021
|
+
# REVIEW_REJECTED; the end user can start a new proof from the widget. The note is kept with the proof.
|
|
1022
|
+
#
|
|
1023
|
+
# +POST /v3/travel-rule/wallet-proofs/{proof_uuid}/decision/+
|
|
1024
|
+
#
|
|
1025
|
+
# @param proof_uuid [String] proof_id from the review queue.
|
|
1026
|
+
# @param decision [String]
|
|
1027
|
+
# @param note [String] Optional. Kept with the proof and returned as review_note.
|
|
1028
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1029
|
+
# @return [Didit::Types::TravelRuleWalletProofReview]
|
|
1030
|
+
def decide(proof_uuid, decision:, note: OMIT, request_options: nil)
|
|
1031
|
+
@client.request(
|
|
1032
|
+
:post,
|
|
1033
|
+
"/v3/travel-rule/wallet-proofs/{proof_uuid}/decision/",
|
|
1034
|
+
path_params: { "proof_uuid" => proof_uuid },
|
|
1035
|
+
body: {
|
|
1036
|
+
"decision" => decision,
|
|
1037
|
+
"note" => note
|
|
1038
|
+
},
|
|
1039
|
+
response: Types::TravelRuleWalletProofReview,
|
|
1040
|
+
request_options: request_options
|
|
1041
|
+
)
|
|
1042
|
+
end
|
|
1043
|
+
|
|
1044
|
+
# List screenshot wallet proofs to review
|
|
1045
|
+
#
|
|
1046
|
+
# Your review queue for screenshot wallet-ownership proofs. A screenshot is the one proof Didit cannot check
|
|
1047
|
+
# itself: once the end user uploads it from the widget it waits PENDING until you approve or reject it with
|
|
1048
|
+
# POST /v3/travel-rule/wallet-proofs/{proof_uuid}/decision/. Oldest first, so the queue is worked from the
|
|
1049
|
+
# proof that has waited longest. Only uploaded screenshots appear, never a proof whose end user has not
|
|
1050
|
+
# uploaded a file yet, and never one on a wallet you deleted from your address book (Didit closes those as
|
|
1051
|
+
# OWNERSHIP_CHANGED).
|
|
1052
|
+
#
|
|
1053
|
+
# +GET /v3/travel-rule/wallet-proofs/+
|
|
1054
|
+
#
|
|
1055
|
+
# @param status [String] Which proofs to list. Defaults to PENDING, the ones still to decide.
|
|
1056
|
+
# @param limit [Integer]
|
|
1057
|
+
# @param offset [Integer]
|
|
1058
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1059
|
+
# @return [Didit::Page<Didit::Types::TravelRuleWalletProofReview>]
|
|
1060
|
+
def list(status: OMIT, limit: OMIT, offset: OMIT, request_options: nil)
|
|
1061
|
+
@client.request(
|
|
1062
|
+
:get,
|
|
1063
|
+
"/v3/travel-rule/wallet-proofs/",
|
|
1064
|
+
query: {
|
|
1065
|
+
"status" => status,
|
|
1066
|
+
"limit" => limit,
|
|
1067
|
+
"offset" => offset
|
|
1068
|
+
},
|
|
1069
|
+
page: Types::TravelRuleWalletProofReview,
|
|
1070
|
+
request_options: request_options
|
|
1071
|
+
)
|
|
1072
|
+
end
|
|
1073
|
+
end
|
|
1074
|
+
|
|
1075
|
+
# The +travel_rule.workspace+ resource.
|
|
1076
|
+
class Workspace < Didit::Resource
|
|
1077
|
+
# Claim a directory entry
|
|
1078
|
+
#
|
|
1079
|
+
# Claims the directory entry this workspace is. When the work email is at a domain the entry lists, the claim
|
|
1080
|
+
# is proved and applies at once: the VASP profile and Travel Rule settings are filled from the entry and
|
|
1081
|
+
# Travel Rule is turned on, so the next transfer to it routes over the Didit network. Otherwise the claim
|
|
1082
|
+
# waits for review (`pending_review`).
|
|
1083
|
+
#
|
|
1084
|
+
# +POST /v3/travel-rule/workspace/claim/+
|
|
1085
|
+
#
|
|
1086
|
+
# @param vasp_id [String] The directory entry this workspace is. Read ids from `GET /v3/travel-rule/vasps/`.
|
|
1087
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1088
|
+
# @return [Didit::Types::TravelRuleWorkspace]
|
|
1089
|
+
def claim(vasp_id:, request_options: nil)
|
|
1090
|
+
@client.request(
|
|
1091
|
+
:post,
|
|
1092
|
+
"/v3/travel-rule/workspace/claim/",
|
|
1093
|
+
body: {
|
|
1094
|
+
"vasp_id" => vasp_id
|
|
1095
|
+
},
|
|
1096
|
+
response: Types::TravelRuleWorkspace,
|
|
1097
|
+
request_options: request_options
|
|
1098
|
+
)
|
|
1099
|
+
end
|
|
1100
|
+
|
|
1101
|
+
# Confirm the domain verification code
|
|
1102
|
+
#
|
|
1103
|
+
# Spends the emailed code and marks the email domain verified.
|
|
1104
|
+
#
|
|
1105
|
+
# +POST /v3/travel-rule/workspace/domain/confirm/+
|
|
1106
|
+
#
|
|
1107
|
+
# @param code [String]
|
|
1108
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1109
|
+
# @return [Didit::Types::TravelRuleWorkspace]
|
|
1110
|
+
def confirm_domain(code:, request_options: nil)
|
|
1111
|
+
@client.request(
|
|
1112
|
+
:post,
|
|
1113
|
+
"/v3/travel-rule/workspace/domain/confirm/",
|
|
1114
|
+
body: {
|
|
1115
|
+
"code" => code
|
|
1116
|
+
},
|
|
1117
|
+
response: Types::TravelRuleWorkspace,
|
|
1118
|
+
request_options: request_options
|
|
1119
|
+
)
|
|
1120
|
+
end
|
|
1121
|
+
|
|
1122
|
+
# Enable outbound billing
|
|
1123
|
+
#
|
|
1124
|
+
# Turns outbound Travel Rule billing on for the workspace. Receiving stays free. This cannot be turned back
|
|
1125
|
+
# off through the API: contact Didit support.
|
|
1126
|
+
#
|
|
1127
|
+
# +POST /v3/travel-rule/workspace/billing/+
|
|
1128
|
+
#
|
|
1129
|
+
# @param enabled [Boolean] Only `true` is accepted: outbound billing cannot be turned back off through the
|
|
1130
|
+
# API.
|
|
1131
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1132
|
+
# @return [Didit::Types::TravelRuleWorkspace]
|
|
1133
|
+
def enable_billing(enabled: OMIT, request_options: nil)
|
|
1134
|
+
@client.request(
|
|
1135
|
+
:post,
|
|
1136
|
+
"/v3/travel-rule/workspace/billing/",
|
|
1137
|
+
body: {
|
|
1138
|
+
"enabled" => enabled
|
|
1139
|
+
},
|
|
1140
|
+
response: Types::TravelRuleWorkspace,
|
|
1141
|
+
request_options: request_options
|
|
1142
|
+
)
|
|
1143
|
+
end
|
|
1144
|
+
|
|
1145
|
+
# Get the free Travel Rule workspace
|
|
1146
|
+
#
|
|
1147
|
+
# Reads the free workspace of an application that joined free: directory claim, domain proof, billing and
|
|
1148
|
+
# Didit network listing.
|
|
1149
|
+
#
|
|
1150
|
+
# +GET /v3/travel-rule/workspace/+
|
|
1151
|
+
#
|
|
1152
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1153
|
+
# @return [Didit::Types::TravelRuleWorkspace]
|
|
1154
|
+
def get(request_options: nil)
|
|
1155
|
+
@client.request(
|
|
1156
|
+
:get,
|
|
1157
|
+
"/v3/travel-rule/workspace/",
|
|
1158
|
+
response: Types::TravelRuleWorkspace,
|
|
1159
|
+
request_options: request_options
|
|
1160
|
+
)
|
|
1161
|
+
end
|
|
1162
|
+
|
|
1163
|
+
# Email a domain verification code
|
|
1164
|
+
#
|
|
1165
|
+
# Emails a single-use code to the workspace's work address to prove it controls the email domain. Throttled,
|
|
1166
|
+
# and a limited number of wrong attempts is accepted per code. Also returns the TXT record for the DNS
|
|
1167
|
+
# alternative.
|
|
1168
|
+
#
|
|
1169
|
+
# +POST /v3/travel-rule/workspace/domain/code/+
|
|
1170
|
+
#
|
|
1171
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1172
|
+
# @return [Didit::Types::TravelRuleWorkspaceDomainCodeResponse]
|
|
1173
|
+
def send_domain_code(request_options: nil)
|
|
1174
|
+
@client.request(
|
|
1175
|
+
:post,
|
|
1176
|
+
"/v3/travel-rule/workspace/domain/code/",
|
|
1177
|
+
response: Types::TravelRuleWorkspaceDomainCodeResponse,
|
|
1178
|
+
request_options: request_options
|
|
1179
|
+
)
|
|
1180
|
+
end
|
|
1181
|
+
|
|
1182
|
+
# Verify the domain from its TXT record
|
|
1183
|
+
#
|
|
1184
|
+
# Checks for the `didit-tr-verify.<domain>` TXT record returned by the code endpoint and marks the domain
|
|
1185
|
+
# verified when it matches. One of the two proofs, the emailed code or the TXT record, is enough.
|
|
1186
|
+
#
|
|
1187
|
+
# +POST /v3/travel-rule/workspace/domain/dns/+
|
|
1188
|
+
#
|
|
1189
|
+
# @param request_options [Hash, nil] :timeout, :max_retries, :extra_headers, :extra_query, :extra_body
|
|
1190
|
+
# @return [Didit::Types::TravelRuleWorkspace]
|
|
1191
|
+
def verify_domain_dns(request_options: nil)
|
|
1192
|
+
@client.request(
|
|
1193
|
+
:post,
|
|
1194
|
+
"/v3/travel-rule/workspace/domain/dns/",
|
|
1195
|
+
response: Types::TravelRuleWorkspace,
|
|
1196
|
+
request_options: request_options
|
|
1197
|
+
)
|
|
1198
|
+
end
|
|
1199
|
+
end
|
|
1200
|
+
end
|
|
1201
|
+
end
|
|
1202
|
+
end
|