{"openapi":"3.0.0","paths":{"/transactions":{"post":{"description":"Creates a new outgoing transaction using the provided data. Please note what fields are mandatory.","operationId":"createTransaction","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTransactionDto"},"examples":{"minimalValidRequest":{"summary":"Minimal valid request","value":{"asset":"BTC","amount":0.015,"blockchainInfo":{"destination":"example-test-btc-destination-address","destinationType":"CUSTODIAL"}}},"recommendedOutgoingRequest":{"summary":"Fuller recommended outgoing transaction request","value":{"direction":"OUTGOING","asset":"ETH","amount":1.25,"blockchainInfo":{"blockchain":"Ethereum","transactionHash":"0xexampletransactionhash000000000000000000000000000000000000000000000000","origin":"0xExampleOriginAddress000000000000000000000000000000","destination":"0xExampleDestinationAddress000000000000000000000000","destinationType":"CUSTODIAL"},"vaspInfo":{"beneficiaryVaspName":"Example Beneficiary VASP","beneficiaryVaspEmail":"travel-rule@example-beneficiary-vasp.test","beneficiaryVaspExtraInfo":"Example data for documentation only."},"originator":{"type":"NATURAL","name":"Alex Example","accountNumber":"originator-wallet-example-001","address":"123 Example Street, Berlin, Germany","country":"DE","nationalIdentificatorType":"PAS","nationalIdentificator":"P-EXAMPLE-123456","dateOfBirth":"1985-06-15","placeOfBirth":"Tallinn, Estonia"},"beneficiary":{"type":"NATURAL","name":"Jamie Example","accountNumber":"beneficiary-account-example-001","country":"EE"}}}}}}},"responses":{"201":{"description":"Data of the created transaction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDto"},"examples":{"transactionCreated":{"summary":"Created transaction","value":{"id":"7b4f0db9-3b7d-4c0f-a5c5-6d7c6e2f9a10","status":"PENDING","direction":"OUTGOING","createdAt":"2026-01-15T10:20:30.000Z","asset":"ETH","amount":1.25,"amountUsd":3125.45,"amountEur":2870.12,"blockchainInfo":{"blockchain":"Ethereum","transactionHash":"0xexampletransactionhash000000000000000000000000000000000000000000000000","origin":"0xExampleOriginAddress000000000000000000000000000000","destination":"0xExampleDestinationAddress000000000000000000000000","destinationType":"CUSTODIAL","isDestinationConfirmed":null,"destinationWalletId":null},"vaspInfo":{"originatorVaspEntityId":"tenant_123","originatorVaspName":"Example Originator VASP","originatorVaspEmail":"travel-rule@example-originator-vasp.test","beneficiaryVaspEntityId":null,"beneficiaryVaspName":"Example Beneficiary VASP","beneficiaryVaspEmail":"travel-rule@example-beneficiary-vasp.test","beneficiaryVaspExtraInfo":"Example data for documentation only."},"originator":{"type":"NATURAL","name":"Alex Example","accountNumber":"originator-wallet-example-001","address":"123 Example Street, Berlin, Germany","country":"DE","nationalIdentificatorType":"PAS","nationalIdentificator":"P-EXAMPLE-123456","dateOfBirth":"1985-06-15","placeOfBirth":"Tallinn, Estonia"},"beneficiary":{"type":"NATURAL","name":"Jamie Example","accountNumber":"beneficiary-account-example-001","country":"EE"},"travelRuleMessageSource":"CryptoSwift"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Create transaction","tags":["Transactions"]},"get":{"description":"Returns a list of transactions based on the provided parameters.","operationId":"getTransactions","parameters":[{"name":"q","required":false,"in":"query","description":"Search string to filter the results. Searches over all relevant database fields.","schema":{"example":"John","type":"string"}},{"name":"_sort","required":false,"in":"query","description":"Sort field.","schema":{"example":"createdAt","type":"string"}},{"name":"_order","required":false,"in":"query","description":"Order results: ASC or DESC.","schema":{"example":"ASC","type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":30,"type":"number"}},{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"number"}}],"responses":{"200":{"description":"List of transactions","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionDto"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Find transactions","tags":["Transactions"]}},"/transactions/{id}":{"get":{"description":"Returns the transaction data","operationId":"getTransaction","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Transaction data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Get transaction","tags":["Transactions"]},"patch":{"description":"Updates existing transaction object. Fields can be updated individually, or multiple at once.","operationId":"updateTransaction","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTransactionDto"}}}},"responses":{"200":{"description":""},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Update transaction","tags":["Transactions"]},"delete":{"description":"Deletes the transaction from the system. Important to notice: in case the data has already been forwarded to the beneficiary, they will be notified, but the data can not be automatically be deleted.","operationId":"deleteTransaction","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Delete transaction","tags":["Transactions"]}},"/transactions/{id}/events":{"get":{"description":"Returns immutable event log entries for the given transaction in reverse chronological order. If an event has userId, user details (id, name, email) are included.","operationId":"getTransactionEvents","parameters":[{"name":"id","required":true,"in":"path","description":"Transaction ID.","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Transaction events","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionEventDto"}}}}},"404":{"description":"Transaction was not found"}},"security":[{"X-Api-Key":[]}],"summary":"Get transaction events","tags":["Transactions"]}},"/aml/kyw/{blockchain}/{address}":{"get":{"description":"Classifies a wallet address as custodial, non-custodial, or unknown using CryptoSwift verified wallet data, platform tenant wallet records, partner-network attribution, and global blockchain analytics fallbacks.","operationId":"checkWalletIntelligence","parameters":[{"name":"blockchain","required":true,"in":"path","description":"Blockchain name for the wallet address.","schema":{"example":"Ethereum","type":"string"}},{"name":"address","required":true,"in":"path","description":"Wallet address to classify before initiating a transaction.","schema":{"example":"0x742d35cc6634c0532925a3b844bc454e4438f44e","type":"string"}},{"name":"heuristicOnly","required":false,"in":"query","description":"When true, skips verified-wallet, platform-wallet, partner-network, and analytics entity lookup stages and runs only behavioral heuristics.","schema":{"example":false,"type":"boolean"}}],"responses":{"200":{"description":"Wallet Intelligence result. Unknown classifications are returned with HTTP 200 when the wallet cannot be identified.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlKywResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get Wallet Intelligence","tags":["AML Check"]}},"/aml/search":{"get":{"description":"Search your configured KYT provider for wallet addresses and transaction hashes matching the query. Use this endpoint to locate the target wallet or transaction before requesting detailed AML Check data. Requires external KYT provider to be activated.","operationId":"searchAml","parameters":[{"name":"q","required":true,"in":"query","description":"Wallet address or transaction hash to search for.","schema":{"example":"bc1qexample...","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset.","schema":{"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Pagination limit.","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Matching AML Check search results for wallets and transactions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlSearchResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Search wallet or transaction","tags":["AML Check"]}},"/aml/analysis/{blockchain}/wallet/{address}":{"get":{"description":"Returns AML Check details for a wallet address on the selected blockchain, including risk analysis, entity information, wallet interactions, and on-chain activity when available from the configured KYT provider. Requires external KYT provider to be activated.","operationId":"checkAmlWallet","parameters":[{"name":"blockchain","required":true,"in":"path","description":"Blockchain name understood by the AML provider.","schema":{"example":"Bitcoin","type":"string"}},{"name":"address","required":true,"in":"path","description":"Wallet address to analyze.","schema":{"example":"bc1qexample...","type":"string"}}],"responses":{"200":{"description":"AML Check data for the requested wallet address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlCheckWalletResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get AML Check data for wallet","tags":["AML Check"]}},"/aml/analysis/{blockchain}/transaction/{txHash}":{"get":{"description":"Returns AML Check details for a transaction hash on the selected blockchain, including transaction risk analysis and related wallet information when available from the configured KYT provider. Requires external KYT provider to be activated.","operationId":"checkAmlTransaction","parameters":[{"name":"blockchain","required":true,"in":"path","description":"Blockchain name understood by the AML provider.","schema":{"example":"Bitcoin","type":"string"}},{"name":"txHash","required":true,"in":"path","description":"Transaction hash to analyze.","schema":{"example":"4e3a7f...","type":"string"}},{"name":"address","required":false,"in":"query","description":"AMLBot only. Wallet address where the funds were accepted for this transaction.","schema":{"example":"0x124dbe972efd16a2a0c9ad061e6313b9ec0f5768","type":"string"}},{"name":"direction","required":false,"in":"query","schema":{"type":"string","enum":["deposit","withdrawal"]},"description":"AMLBot only. Direction of the transaction relative to the provided wallet address."}],"responses":{"200":{"description":"AML Check data for the requested transaction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlCheckTransactionAnalysisDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get AML Check data for transaction","tags":["AML Check"]}},"/aml/analysis/{blockchain}/transaction/{txHash}/receivers":{"get":{"description":"Returns receiver wallet addresses for a transaction. Use this endpoint to populate the receiving wallet address before requesting a transaction AML Check. Requires external KYT provider to be activated.","operationId":"getAmlTransactionReceivers","parameters":[{"name":"blockchain","required":true,"in":"path","description":"Blockchain name for the transaction.","schema":{"example":"Bitcoin","type":"string"}},{"name":"txHash","required":true,"in":"path","description":"Transaction hash whose receiver addresses should be listed.","schema":{"example":"04979c5962623a8d6e56d80089bb748ab57a4be08e47ea626fa1844745915984","type":"string"}}],"responses":{"200":{"description":"Receiver addresses for the requested transaction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlTransactionReceiversDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get transaction receiver addresses","tags":["AML Check"]}},"/aml/analysis/{blockchain}/wallet/{address}/transactions":{"get":{"description":"Lists transactions connected to a wallet address on the selected blockchain as reported by the configured KYT provider. Use offset and limit to page through larger transaction histories. Requires external KYT provider to be activated.","operationId":"checkAmlWalletTransactions","parameters":[{"name":"blockchain","required":true,"in":"path","description":"Blockchain name understood by the AML provider.","schema":{"example":"Bitcoin","type":"string"}},{"name":"address","required":true,"in":"path","description":"Wallet address whose transactions should be returned.","schema":{"example":"bc1qexample...","type":"string"}},{"name":"offset","required":false,"in":"query","description":"Pagination offset.","schema":{"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Pagination limit.","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Transactions connected to the requested wallet address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlWalletTransactionsDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get transactions connected to wallet","tags":["AML Check"]}},"/aml/search/history/{id}":{"get":{"description":"Returns AML Check details for a stored history record. For AMLBot, history uses existing AML Check data through AMLBot recheck and does not spend additional AMLBot credits when the stored history record has an AMLBot identifier. Legacy AMLBot history records without that identifier are refetched once and updated with the returned identifier. For other providers, including Scorechain, this endpoint performs a fresh provider request using the wallet or transaction details stored in the history record. Requires external KYT provider to be activated.","operationId":"getAmlHistoryAnalysis","parameters":[{"name":"id","required":true,"in":"path","description":"AML Check search history record ID.","schema":{"example":"f47ac10b-58cc-4372-a567-0e02b2c3d479","type":"string"}}],"responses":{"200":{"description":"AML Check details for the wallet or transaction stored in history.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AmlCheckWalletResponseDto"},{"$ref":"#/components/schemas/AmlCheckTransactionAnalysisDto"}]}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get AML Check data from history","tags":["AML Check"]}},"/aml/search/history":{"get":{"description":"Returns stored AML Check search history for the current tenant, with optional filtering by wallet or transaction searches. Requires external KYT provider to be activated.","operationId":"getAmlSearchHistory","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["wallet","transaction"]},"description":"Optional history entry type filter."},{"name":"offset","required":false,"in":"query","description":"Pagination offset.","schema":{"example":0,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Pagination limit.","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Stored AML Check search history entries for the current tenant.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AmlCheckSearchHistoryDto"}}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get AML Check search history","tags":["AML Check"]}},"/tenant/me/service-keys":{"put":{"description":"Upsert credentials for a feature/provider pair; creates if missing, updates if present. Scorechain expects key as a string. AMLBot expects key as an object with accessId and accessKey.","operationId":"upsertTenantServiceKey","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantServiceKeyDto"},"examples":{"scorechain":{"summary":"Scorechain AML Check credentials","value":{"feature":"aml_check","provider":"scorechain","key":"scorechain-api-key"}},"amlbot":{"summary":"AMLBot AML Check credentials","value":{"feature":"aml_check","provider":"amlbot","key":{"accessId":"amlbot-access-id","accessKey":"amlbot-access-key"}}}}}}},"responses":{"200":{"description":"The upserted tenant service key. The returned key is the encrypted stored value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantServiceKeyDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Set external integration credentials","tags":["External Integrations"]}},"/tenant/me":{"get":{"description":"Returns the data of the tenant associated with the current API key","operationId":"getTenant","parameters":[],"responses":{"200":{"description":"The current tenant data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Get current tenant data","tags":["Tenant"]},"patch":{"description":"Update tenant data associated with the current API key. All fields can be updated individually by just providing the desired field, or multiple at once.","operationId":"updateTenant","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantDto"}}}},"responses":{"200":{"description":""},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Update current tenant","tags":["Tenant"]}},"/tenant/me/reports":{"get":{"description":"Returns the most recent monthly reports for the authenticated tenant (for up to 36 months). Use the `downloadEndpoint` to fetch a short-lived signed URL.","operationId":"getTenantReports","parameters":[],"responses":{"200":{"description":"Array of tenant reports","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TenantReportDto"}}}}}},"security":[{"X-Api-Key":[]}],"summary":"List my latest reports","tags":["Tenant"]}},"/tenant/me/reports/{ym}/download-url":{"get":{"description":"\n  Generates a short-lived Google Cloud Storage signed URL for the authenticated client's monthly report.  \n  The URL is valid only for a short time (default ~60 seconds) and can be used in the browser without API authentication headers.\n\n  - **Path parameter**: `:ym` should be in `YYYY-MM` format (e.g. `2025-07`).\n  - **Response**: returns JSON containing `url` (signed URL) and `expiresAt` (ISO timestamp).\n  - **Use case**: your frontend should call this endpoint with API auth headers, then redirect the user to the returned `url` to view/download the PDF.\n  ","operationId":"getTenantReportDownloadUrl","parameters":[{"name":"ym","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlDto"}}}},"404":{"description":"Report not found for the specified month"}},"security":[{"X-Api-Key":[]}],"summary":"Get signed URL for monthly report","tags":["Tenant"]}},"/tenant/me/statistics":{"get":{"operationId":"getTenantStatistics","parameters":[{"name":"month","required":false,"in":"query","description":"YYYY-MM (defaults to current month)","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantStatisticsResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get statistics for current tenant (month=YYYY-MM)","tags":["Tenant"]}},"/entities":{"get":{"description":"Returns a list of entities based on the provided parameters.","operationId":"getEntities","parameters":[{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":20,"type":"string"}},{"name":"_order","required":false,"in":"query","description":"Sort order","schema":{"example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"_sort","required":false,"in":"query","description":"Sort field","schema":{"example":"updatedAt","type":"string"}},{"name":"q","required":false,"in":"query","description":"Search string to filter the results.","schema":{"example":"Binance","type":"string"}},{"name":"_inNetwork","required":false,"in":"query","description":"Filter by in-network flag","schema":{"example":true,"type":"string"}},{"name":"_isRiskAssessed","required":false,"in":"query","description":"Filter by risk-assessed flag","schema":{"example":true,"type":"string"}},{"name":"_type","required":false,"in":"query","description":"Filter results by entity type (multi-value)","schema":{"example":["exchange","investment_management_firm"],"type":"array","items":{"type":"string","enum":["exchange","bank","decentralized_service","donations","gambling","investment_management_firm","mining_pool","mixing_service","service","staking_pool","wallet","payment_service_provider","nft_marketplace","sanction_list","dex","atm","bot","airdrop","auctioned_assets","block_reward","child_abuse","cloud_mining","community_reported_scam","cross_chain_bridge_protocol","darkweb","hack","ico","ignored_small_amounts","large_transaction","large_unnamed_entity","no_entities_found","mixing_pattern","ongoing_legal_action","payment_channel","peeling_chain_unknown_origin","phishing","poisoning","ransomware","real_world_asset","scam","secondary_coin_creation","secondary_coin_removal","seized_assets","suspicious","terrorism","token","unspent_output"]}}},{"name":"_riskSeverity","required":false,"in":"query","description":"Filter results by risk severity (multi-value)","schema":{"example":["high","medium"],"type":"array","items":{"type":"string","enum":["low","medium","high"]}}}],"responses":{"200":{"description":"List of entities matching the search criteria","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityDto"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Find entities","tags":["Entities"]}},"/entities/lookup":{"get":{"description":"Returns the entity. If the name belongs to a linked duplicate, the master entity is returned.","operationId":"resolveEntity","parameters":[{"name":"name","required":true,"in":"query","description":"Name of the entity.","schema":{"example":"Binance.com","type":"string"}}],"responses":{"200":{"description":"Resolves the entity for the provided name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityDetailedDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Resolve entity by name","tags":["Entities"]}},"/entities/{id}":{"get":{"operationId":"getEntity","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Entity details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityDetailedDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Find entity by ID","tags":["Entities"]}},"/wallets":{"get":{"description":"Returns a list of wallets connected to (owned by) the current tenant, based on the provided parameters.","operationId":"getWallets","parameters":[{"name":"_status","required":false,"in":"query","description":"Search string to filter the result by status.","examples":{"Confirmed":{"value":"CONFIRMED","description":"returns only confirmed wallets"},"Unconfirmed":{"value":"UNCONFIRMED","description":"returns only unconfirmed wallets"}},"schema":{"type":"string"}},{"name":"q","required":false,"in":"query","description":"Search string to filter the results. Searches for wallet address, asset and metadata.","schema":{"example":"BTC","type":"string"}},{"name":"_sort","required":false,"in":"query","description":"Sort field.","schema":{"example":"asset","type":"string"}},{"name":"_order","required":false,"in":"query","description":"Order results: ASC or DESC.","schema":{"example":"ASC","type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":30,"type":"number"}},{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"number"}}],"responses":{"200":{"description":"List of associated wallets of the current tenant.","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WalletDto"}}}}}},"security":[{"X-Api-Key":[]}],"summary":"Find wallets","tags":["My Wallets"]},"post":{"description":"Create a wallet owned by the current tenant. The wallet will be created as confirmed automatically.","operationId":"createWallet","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWalletDto"}}}},"responses":{"201":{"description":"Data of the created wallet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Create wallet","tags":["My Wallets"]},"patch":{"description":"Confirms existing multiple wallet addresses in bulk.","operationId":"confirmWallets","parameters":[],"requestBody":{"required":true,"description":"List of existing wallets ids to confirm.","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"}}}}},"responses":{"200":{"description":""}},"security":[{"X-Api-Key":[]}],"summary":"Confirm multiple wallet addresses","tags":["My Wallets"]},"delete":{"description":"Deletes wallets from the system. Important: this action can not be reversed!","operationId":"deleteWallets","parameters":[],"requestBody":{"required":true,"description":"List of existing wallets ids to delete","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"}}}}},"responses":{"204":{"description":""}},"security":[{"X-Api-Key":[]}],"summary":"Delete wallets","tags":["My Wallets"]}},"/wallets/{id}":{"get":{"description":"Returns the wallet data for the specified wallet, owned by the current tenant.","operationId":"getWallet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Wallet data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get wallet","tags":["My Wallets"]},"patch":{"description":"Updates existing wallet. The wallet can be updated to confirmed or unconfirmed.","operationId":"updateWallet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWalletDto"}}}},"responses":{"200":{"description":""}},"security":[{"X-Api-Key":[]}],"summary":"Update wallet","tags":["My Wallets"]},"delete":{"description":"Deletes the wallet from the system. Important: this action can not be reversed!","operationId":"deleteWallet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"204":{"description":""}},"security":[{"X-Api-Key":[]}],"summary":"Delete wallet","tags":["My Wallets"]}},"/wallets/upload-csv":{"post":{"description":"You can upload CSV file in the next format `address`, `asset`, `blockchain`, and optionally `metadata`. The file size should not exceed 15MB.","operationId":"uploadWalletsCsv","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WalletsUploadRequestDto"}}}},"responses":{"201":{"description":"Wallets successfully uploaded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletsUploadResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Upload wallets from CSV file","tags":["My Wallets"]}},"/rule-engine":{"get":{"description":"Returns all rule engine configurations available for the authenticated tenant. By default, INCOMING and OUTGOING policies are auto-created per tenant. Currently, only one policy can be active per direction.","operationId":"getRuleEngines","parameters":[],"responses":{"200":{"description":"All rule engine configurations for the current tenant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineListResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get all rule engine configurations","tags":["Rule Engine"]}},"/rule-engine/{id}":{"get":{"operationId":"getRuleEngineById","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Rule engine configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get one rule engine configuration by ID","tags":["Rule Engine"]}},"/rule-engine/{id}/draft":{"patch":{"description":"Updates the draft rules for a rule engine. For amount conditions, you can also include `currency` with values `USD` or `EUR`.","operationId":"updateRuleEngineDraft","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"Draft update payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDraftDto"}}}},"responses":{"200":{"description":"Updated rule engine configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineDto"}}}},"400":{"description":"Rule validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineValidationErrorResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Update draft rules","tags":["Rule Engine"]}},"/rule-engine/{id}/publish":{"post":{"description":"Publishes current draft rules, increments publishedVersion, creates an immutable version snapshot, and stores latest comment on the rule engine.","operationId":"publishRuleEngineDraft","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"Publish payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishDto"}}}},"responses":{"201":{"description":"Draft published and immutable version snapshot created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEnginePublishResponseDto"}}}},"400":{"description":"Rule validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineValidationErrorResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Publish draft rules","tags":["Rule Engine"]}},"/rule-engine/{id}/versions":{"get":{"operationId":"listRuleEnginePublishedVersions","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Published version history.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineVersionsResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"List published versions","tags":["Rule Engine"]}},"/rule-engine/{id}/versions/{version}":{"get":{"operationId":"getRuleEngineVersion","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}},{"name":"version","required":true,"in":"path","description":"Published version number.","schema":{"type":"number"}}],"responses":{"200":{"description":"Published snapshot with full rules.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineVersionSnapshotResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Get one published version snapshot","tags":["Rule Engine"]}},"/rule-engine/{id}/restore":{"post":{"operationId":"restoreRuleEngineVersionToDraft","parameters":[{"name":"id","required":true,"in":"path","description":"Rule engine ID.","schema":{"format":"uuid","type":"string"}}],"requestBody":{"required":true,"description":"Restore payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreDto"}}}},"responses":{"201":{"description":"Draft restored from the specified published version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleEngineDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Restore published version into draft","tags":["Rule Engine"]}},"/sanctions/addresses/{address}":{"get":{"description":"Checks whether a wallet address matches active sanctions wallet data imported into CryptoSwift. Matching is performed by wallet address only, ignores casing, and does not filter by blockchain.","operationId":"checkWalletAddressForSanctions","parameters":[{"name":"address","required":true,"in":"path","description":"Wallet address to check against active sanctions data. The address is trimmed before lookup and matched case-insensitively.","schema":{"example":"bc1qexample...","type":"string"}}],"responses":{"200":{"description":"Sanctions screening result for the requested wallet address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckWalletAddressSanctionsResponseDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Check wallet address for sanctions","tags":["AML Check"]}},"/auth/signin":{"post":{"description":"Login the user. ","operationId":"loginUser","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthDto"}}}},"responses":{"201":{"description":"JWT access and refresh tokens for the created user, token expiration in seconds and the user data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithJwtDto"}}}}},"security":[],"summary":"Login user","tags":["Authentication"]}},"/auth/logout":{"get":{"description":"Log-out the user. ","operationId":"logoutUser","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Log-out user","tags":["Authentication"]}},"/auth/refresh":{"get":{"description":"Get new access and refresh tokens using the provided refresh token","operationId":"refreshTokens","parameters":[],"responses":{"200":{"description":"New JWT access and refresh tokens for the user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtDto"}}}}},"security":[{"bearer":[]}],"summary":"Refresh tokens","tags":["Authentication"]}},"/tenant/me/settings":{"get":{"description":"Returns the settings data of the tenant associated with the current API key","operationId":"getTenantSettings","parameters":[],"responses":{"200":{"description":"The current tenant settings data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantSettingsDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Get current tenant settings data","tags":["Tenant"]},"patch":{"description":"Update current tenant settings data associated with the current API key. All fields can be updated individually by just providing the desired field, or multiple at once.","operationId":"updateTenantSettings","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTenantSettingsDto"}}}},"responses":{"200":{"description":""},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Update current tenant settings data","tags":["Tenant"]}},"/tenant/me/settings/logo":{"post":{"description":"Upload tenant logo that is going to be used in CryptoSwift. For example the logo will appear on the wallet verification widget.","operationId":"updateTenantLogo","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Logo file of type jpeg, png, jpg or pdf with the size limit of up to 5MB"}},"required":["file"]}}}},"responses":{"200":{"description":"The uploaded file metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadLogoDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Upload tenant logo","tags":["Tenant"]}},"/tenant/me/settings/icon":{"post":{"description":"Upload tenant icon that is going to be used in CryptoSwift. For example the icon will appear on the wallet verification widget.","operationId":"updateTenantLogoIcon","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Icon file of type jpeg, png, jpg or pdf with the size limit of up to 5MB"}},"required":["file"]}}}},"responses":{"200":{"description":"The uploaded file metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadLogoDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Upload tenant icon","tags":["Tenant"]}},"/users":{"post":{"description":"The user will be added based on the provided API key for the tenant owning the API key.\n          The added user account can be used to fetch data from the CryptoSwift API in a similar way as with API keys,\n          but using standard JWT apporach (access and refresh tokens).\n          The API call returns the JWT access and refresh tokens that can be used for the added account.","operationId":"createUser","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"JWT access and refresh tokens for the created user, token expiration in seconds and the created user data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithJwtDto"}}}}},"security":[{"bearer":[]},{"X-Api-Key":[]}],"summary":"Add new user account for current tenant","tags":["Users"]},"get":{"description":"Returns a list of users based on the provided parameters.","operationId":"getUsers","parameters":[{"name":"q","required":false,"in":"query","description":"Search string to filter the results. Searches over the name, username and email of the user.","schema":{"example":"John","type":"string"}},{"name":"_sort","required":false,"in":"query","description":"Sort field.","schema":{"example":"name","type":"string"}},{"name":"_order","required":false,"in":"query","description":"Order results: ASC or DESC.","schema":{"example":"ASC","type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":30,"type":"number"}},{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"number"}}],"responses":{"200":{"description":"List of users for the current tenant","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDto"}}}}}},"security":[{"bearer":[]},{"X-Api-Key":[]}],"summary":"Find current tenant users","tags":["Users"]}},"/users/{id}":{"get":{"description":"Returns the user data","operationId":"getUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDto"}}}}},"security":[{"bearer":[]},{"X-Api-Key":[]}],"summary":"Get user","tags":["Users"]},"patch":{"description":"Updates existing user. Fields can be updated individually, or multiple at once.","operationId":"updateUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]},{"X-Api-Key":[]}],"summary":"Update user","tags":["Users"]},"delete":{"description":"Deletes the given user from the system. Important: this action can not be reversed!","operationId":"deleteUser","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]},{"X-Api-Key":[]}],"summary":"Delete user","tags":["Users"]}},"/webhooks/notabene/{id}":{"post":{"description":"Receive incoming Travel Rule notifications from the Notabene network via Webhooks. This is a Tenant specific URL that a Tenant can use in Notabene platform as the Notification Webhook URL.","operationId":"receiveNotabeneWebhook","parameters":[{"name":"id","required":true,"in":"path","description":"Your tenant id","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[],"summary":"Accept incoming Travel Rule notifications from Notabene network","tags":["External Integrations"]}},"/claims":{"post":{"description":"Claim an incoming transactions without travel rule data","operationId":"createClaim","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClaimDto"}}}},"responses":{"201":{"description":"Data of the claim request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedClaimDto"}}}}},"security":[{"X-Api-Key":[]}],"summary":"Create claim","tags":["Claims"]},"get":{"description":"Returns a list of claim requests connected to (owned by) the current tenant, based on the provided parameters.","operationId":"getClaims","parameters":[{"name":"q","required":false,"in":"query","description":"Search string to filter the results. Searches for transactionHash, origin address, destination address, asset and blockchain.","schema":{"example":"BTC","type":"string"}},{"name":"_status","required":false,"in":"query","description":"Search string to filter the result by status.","schema":{"enum":["PENDING","DELIVERED","CONFIRMED"],"type":"string"}},{"name":"_sort","required":false,"in":"query","description":"Sort field.","schema":{"example":"asset","type":"string"}},{"name":"_order","required":false,"in":"query","description":"Order results: ASC or DESC.","schema":{"example":"ASC","type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":30,"type":"number"}},{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"number"}}],"responses":{"200":{"description":"List of associated claim requests","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DetailedClaimDto"}}}}}},"security":[{"X-Api-Key":[]}],"summary":"Find claim requests","tags":["Claims"]}},"/wallet-verification/widget":{"post":{"deprecated":true,"description":"Starts a short-lived verification flow via a widget for self-hosted wallets. The response includes a URL and display details that VASP must present to their end-customers to complete the verification","operationId":"createWalletVerificationWidget","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetCreateRequestDto"}}}},"responses":{"201":{"description":"Creates a widget flow for self-hosted wallet verification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationDto"}}}},"400":{"description":"Invalid payload (unsupported flow parameters, unsupported chain/asset, invalid addresses).","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing deposit address for Satoshi Test","value":{"statusCode":400,"message":"Deposit address cannot be null","error":"Bad Request"}},"unsupportedSignatureBlockchain":{"summary":"Blockchain is not supported for Signature Proof","value":{"statusCode":400,"message":"UnknownChain is not supported by Signature Proof Test.","error":"Bad Request"}},"unsupportedAssetCombination":{"summary":"Satoshi Test requested with unsupported asset","value":{"statusCode":400,"message":"Unsupported asset provided for Satoshi Test","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}},"invalidWithdrawalAddress":{"summary":"Provided withdrawal address failed validation","value":{"statusCode":400,"message":"The provided address is not valid","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}},"invalidDepositAddress":{"summary":"Provided deposit address failed validation","value":{"statusCode":400,"message":"The provided deposit address is not valid","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Creates a widget flow for self-hosted wallet verification","tags":["Self-Hosted Wallet Verification"]}},"/wallet-verification":{"post":{"description":"Starts a short-lived verification flow via a widget for self-hosted wallets. The response includes a URL and display details that VASP must present to their end-customers to complete the verification","operationId":"createWalletVerification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetCreateRequestDto"}}}},"responses":{"201":{"description":"Creates a widget flow for self-hosted wallet verification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationDto"}}}},"400":{"description":"Invalid payload (unsupported flow parameters, unsupported chain/asset, invalid addresses).","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing deposit address for Satoshi Test","value":{"statusCode":400,"message":"Deposit address cannot be null","error":"Bad Request"}},"unsupportedSignatureBlockchain":{"summary":"Blockchain is not supported for Signature Proof","value":{"statusCode":400,"message":"UnknownChain is not supported by Signature Proof Test.","error":"Bad Request"}},"unsupportedAssetCombination":{"summary":"Satoshi Test requested with unsupported asset","value":{"statusCode":400,"message":"Unsupported asset provided for Satoshi Test","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}},"invalidWithdrawalAddress":{"summary":"Provided withdrawal address failed validation","value":{"statusCode":400,"message":"The provided address is not valid","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}},"invalidDepositAddress":{"summary":"Provided deposit address failed validation","value":{"statusCode":400,"message":"The provided deposit address is not valid","error":"INVALID_PAYLOAD","timestamp":"2024-05-18T12:00:00.000Z"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Creates a self-hosted wallet verification","tags":["Self-Hosted Wallet Verification"]},"get":{"description":"Returns a list of self-hosted wallets verification requests connected to (owned by) the current tenant, based on the provided parameters.","operationId":"getWalletVerifications","parameters":[{"name":"q","required":false,"in":"query","description":"Search string to filter the results. Searches for depositAddress, asset, withdrawalAddress and withdrawalMetadata.","schema":{"example":"BTC","type":"string"}},{"name":"_status","required":false,"in":"query","description":"Search string to filter the result by status.","schema":{"enum":["PENDING","VERIFIED","FAILED","DELETED","DECLINED","ACTION_REQUIRED"],"type":"string"}},{"name":"_flow","required":false,"in":"query","description":"Search string to filter the result by flow type.","schema":{"enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"],"type":"string"}},{"name":"_sort","required":false,"in":"query","description":"Sort field.","schema":{"example":"asset","type":"string"}},{"name":"_order","required":false,"in":"query","description":"Order results: ASC or DESC.","schema":{"example":"ASC","type":"string"}},{"name":"_end","required":false,"in":"query","description":"Last item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":30,"type":"number"}},{"name":"_start","required":false,"in":"query","description":"First item index to be returned from the search results (total count provided in the `X-Total-Count` header of the response), can be used for pagination.","schema":{"example":0,"type":"number"}}],"responses":{"200":{"description":"List of associated self-hosted wallet verification requests","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WalletVerificationDto"}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Find self-hosted wallet verification requests","tags":["Self-Hosted Wallet Verification"]}},"/wallet-verification/visual-proof/{id}/signed-url":{"get":{"operationId":"getWalletVerificationVisualProofSignedUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Temporarily accessible URL of Visual Proof of the wallet verification request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationVisualProofSignedUrlResponseDto"}}}},"400":{"description":"The provided id is not a valid UUID","content":{"application/json":{"example":{"statusCode":400,"message":"Validation failed (uuid is expected)","error":"Bad Request"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Visual proof was not found or does not belong to the tenant","content":{"application/json":{"example":{"statusCode":404,"message":"Not Found","error":"Not Found"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Get a temporarily accessible URL of the Visual Proof","tags":["Self-Hosted Wallet Verification"]}},"/wallet-verification/{id}":{"patch":{"operationId":"updateWalletVerification","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationUpdateRequestDto"}}}},"responses":{"204":{"description":""},"400":{"description":"The provided id is not a valid UUID or payload validation failed.","content":{"application/json":{"example":{"statusCode":400,"message":["id must be a UUID","status must be a valid enum value"],"error":"Bad Request"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Wallet verification request not found","content":{"application/json":{"example":{"statusCode":404,"message":"Not Found","error":"Not Found"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Update a self-hosted wallet verification request.","tags":["Self-Hosted Wallet Verification"]},"delete":{"description":"Deletes the self-hosted wallet verification request from the system. Important: this action can not be reversed!","operationId":"deleteWalletVerification","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""},"400":{"description":"The provided id is not a valid UUID","content":{"application/json":{"example":{"statusCode":400,"message":"Validation failed (uuid is expected)","error":"Bad Request"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Wallet verification request not found","content":{"application/json":{"example":{"statusCode":404,"message":"Not Found","error":"Not Found"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Delete self-hosted wallet verification request","tags":["Self-Hosted Wallet Verification"]},"get":{"description":"Returns the self-hosted verification request","operationId":"getWalletVerification","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Self-hosted wallet verification request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationDto"}}}},"400":{"description":"The provided id is not a valid UUID","content":{"application/json":{"example":{"statusCode":400,"message":"Validation failed (uuid  is expected)","error":"Bad Request"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Wallet verification request not found","content":{"application/json":{"schema":{"example":{"statusCode":404,"message":"Not Found","error":"Not Found"}}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Get self-hosted wallet verification request","tags":["Self-Hosted Wallet Verification"]}},"/wallet-verification/{id}/verification":{"post":{"description":"Submits proof of ownership for an existing self-hosted wallet verification request and executes the selected verification flow. Use `SIGNATURE_PROOF` with `message` and `signature` to verify the wallet immediately, `VISUAL_PROOF` with uploaded media files to mark the request as requiring manual review, `SATOSHI_TEST` to start transaction monitoring, or `SELF_DECLARED` to mark ownership as self-declared. Returns the updated wallet verification request.","operationId":"submitProofOfOwnership","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"verificationFlow":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"],"example":"SIGNATURE_PROOF"},"message":{"type":"string","description":"The message that the wallet owner signed in plain text","example":"I confirm ownership of this wallet"},"signature":{"type":"string","description":"The signature generated from the plain text message","example":"H4sIAAAAA..."},"files":{"type":"array","description":"Upload up to 3 media files.<br/><br/>\n        - Images: jpeg, png, jpg or pdf max 5MB each<br/>\n        - Videos: mp4, webm, mov, avi, wmv, mkv, mpeg, m4v or 3gp max 50MB each","items":{"type":"string","format":"binary"}}},"required":["verificationFlow"]}}}},"responses":{"200":{"description":"Widget completion result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletVerificationDto"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"examples":{"missingDepositAddress":{"summary":"Missing or invalid API key","value":{"statusCode":401,"message":"Unauthorized"}}}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"X-Api-Key":[]}],"summary":"Submit proof of ownership and run the selected verification flow.","tags":["Self-Hosted Wallet Verification"]}},"/blockchains":{"get":{"description":"Returns a list of known all supported blockchains by CryptoSwift. Use the returned \"name\" field to identify the blockchain across different API endpoints that require the blockchain (eg Create Transaction, Create Self-hosted Wallet Verification, Create Wallet).","operationId":"getBlockchains","parameters":[{"name":"supportedVerificationFlow","required":false,"in":"query","style":"form","explode":true,"description":"Filter blockchains by one or more wallet verification flows. When this query parameter is present, the response also includes the supportedVerificationFlow field.","examples":{"singleFlow":{"summary":"Filter by one verification flow","description":"Returns blockchains that support Signature Proof.","value":["SIGNATURE_PROOF"]},"multipleFlows":{"summary":"Filter by multiple verification flows","description":"Repeat the query parameter to return blockchains that support any of the provided flows.","value":["SIGNATURE_PROOF","SATOSHI_TEST"]}},"schema":{"type":"array","items":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"]}}}],"responses":{"200":{"description":"List of blockchains.","headers":{"X-Total-Count":{"description":"Total count of results without applying `_start` and `_end` parameters","schema":{"type":"number"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockchainNameDto"}}}}}},"security":[{"X-Api-Key":[]}],"summary":"List blockchains","tags":["Blockchains"]}},"/utils/checkTIN":{"get":{"description":"Validates the provided TIN (Tax Identification Number). The check is based on the European Commission validation service that can be found at: https://ec.europa.eu/taxation_customs/tin/#/check-tin.\n\nThe online check module confirms whether the structure of the TIN you enter is valid (types and number of characters). It can also validate the syntax (algorithm/internal logic) only when the national authority has provided the Commission with that algorithm.\n\nContrary to VAT number checks carried out on the VIES portal, it does NOT confirm the identity of a person nor whether the TIN you enter actually exists or has been allocated. As national authorities must supply updates, the information cannot be guaranteed to be up to date.\n\nWarning: the TIN online check module can validate only the structure of TINs referring to a natural person. EU Countries may use a different format for legal entities, which cannot be validated with this module.","operationId":"checkTin","parameters":[{"name":"country","required":true,"in":"query","description":"Two-letter ISO 3166-1 alpha-2 country code.","schema":{"example":"EE","type":"string"}},{"name":"tin","required":true,"in":"query","description":"Tax Identification Number to validate.","schema":{"example":"37605030299","type":"string"}}],"responses":{"200":{"description":"TIN validation result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckTinResponseDto"}}}}},"security":[],"summary":"Validate a TIN number","tags":["Utilities"]}}},"info":{"title":"CryptoSwift API","description":"## Introduction\nThe CryptoSwift API is a JSON based REST API: both the request bodies and responses are based on JSON objects.\nThe live OpenAPI specification is available as JSON at [`/api-json`](/api-json) and YAML at [`/api-yaml`](/api-yaml) for on-the-fly API documentation, SDK generation, and agent/tool integration.\n\n### For AI agents and developer tools\n- Agent manifest: [`/.well-known/cryptoswift-agent.json`](/.well-known/cryptoswift-agent.json)\n- OpenAPI JSON: [`/api-json`](/api-json)\n- OpenAPI YAML: [`/api-yaml`](/api-yaml)\n- Developer portal: [https://dev.cryptoswift.eu](https://dev.cryptoswift.eu)\n\nAll API requests should:\n\n- use HTTPS, plain HTTP requests will fail\n- include the API key for authentication\n\nTo get the CryptoSwift API key and start using the API, you need to sign up first. [Sign up for instant access and start building with CryptoSwift today](https://dashboard-dev.cryptoswift.eu/register).\n\n### New to the CryptoSwift API?\n- Find out more about the CryptoSwift API including integration examples in our [Developer Portal](https://dev.cryptoswift.eu/).\n- If you are looking for a UI based solution to manage your Travel Rule transactions, go to our [Client Dashboard](https://dashboard.cryptoswift.eu/).\n\nCryptoSwift provides a JSON REST API over HTTPS for crypto Travel Rule compliance, transaction messaging, VASP/entity discovery, self-hosted wallet verification, reporting, and compliance automation. Use the test environment first, authenticate with the X-Api-Key header, and follow the developer documentation for workflow-level integration guidance.","version":"1.0.0","contact":{"name":"CryptoSwift support","url":"https://cryptoswift.eu"}},"tags":[{"name":"Authentication","description":"As mentioned above, all API requests need to include the API key. The API key has to be placed inside the request header, in a custom header called `X-Api-Key`"},{"name":"Blockchains","description":"Endpoints related to Blockchains"},{"name":"Entities","description":"Search for entities (VASP's) based on specific parameters.\n- Enables CryptoSwift customers to implement a VASP search functionality in their applications.\n- Users can then specify the beneficiary VASP name when initiating crypto transactions.\n- Helps improve Travel Rule transaction delivery by providing beneficiary VASP data in Travel Rule transaction messages."},{"name":"Transactions","description":"Everything related to managing your Travel Rule transactions: creation, listing, updating and details.\n- These are the main endpoints for managing your Travel Rule transactions and the base for the minimal Travel Rule compliance.\n- See our [Developer Portal](https://dev.cryptoswift.eu/) for more information."},{"name":"Claims","description":"Endpoints related to managing your claims.\n      \n- Claiming Incoming Transactions Without Travel Rule Data"},{"name":"Tenant","description":"Endpoints related to managing your organisation (tenant).\n- Get your tenant data (including your tenant ID).\n- Update your tenant data.\n- The tenant data also allows you to set the Webhook URL for receiving incoming Travel Rule messages from CryptoSwift to your backend/API."},{"name":"Users","description":"Manage your organisation users.\n- CRUD operations for your organisation users.\n- Users can be used to access the CryptoSwift API and the Client Dashboard.\n- In case you wish to access the CryptoSwift API using JWT tokens instead of API keys, you can use the users endpoints and functionality."},{"name":"My Wallets","description":"Endpoints related to managing your wallets. \n- Add your organisation wallets to improve delivery rates for incoming Travel Rule messages.\n- Confirm auto-detected wallets (auto detected by CryptoSwift) to access the Travel Rule messages sent to them.\n- Once you as a licensed VASP add or confirm ownership of a wallet, you are responsible for ensuring that all provided information is accurate and truthful."},{"name":"Rule Engine","description":"Manage tenant rule engine configurations, draft rules, published versions, and restores.\n- By default, each tenant has two policies created automatically: INCOMING and OUTGOING.\n- Currently, only one policy can be active per direction (scope) for a tenant."},{"name":"AML Check","description":"AML Check allows you to retrieve different AML data about wallets and transactions, including KYT, KYW, and sanction checks.\n\nSome AML checks are built in, including the KYW wallet intelligence check. Other AML checks require an external KYT integration to be active.\n\nFor external KYT checks, CryptoSwift connects to your selected KYT provider using your own provider API key in a bring-your-own-API-key setup. Provider-backed endpoints become available after you configure the KYT API key in the CryptoSwift Client Dashboard. Contact us for the current list of supported KYT providers or to request support for another provider.\n\nUse \"Search wallet or transaction\" to find a wallet address or transaction hash first, then use \"Get AML Check data for wallet\" or \"Get AML Check data for transaction\" to retrieve the full AML Check details."}],"servers":[{"url":"https://api.cryptoswift.eu","description":"Production environment"},{"url":"https://api-dev.cryptoswift.eu","description":"Test environment"}],"components":{"securitySchemes":{"X-Api-Key":{"type":"apiKey","in":"header","name":"X-Api-Key"},"X-Partner-Api-Key":{"type":"apiKey","in":"header","name":"X-Partner-Api-Key"},"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"TransactionDirection":{"type":"string","enum":["INCOMING","OUTGOING"],"description":"The transaction direction: outgoing or incoming transaction. Set to \"OUTGOING\" automatically if not provided when creating the transaction."},"BlockchainDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"The blockchain name. You can find the list of supported blockchains <a target=\"_blank\" href=\"/#tag/Blockchains/operation/findAll\">here</a> (use the returned \"name\" field). In the required blockchain is not included in the list, you can define your blockchain as free text, but be aware that this might affect Travel Rule message delivery rates."},"transactionHash":{"type":"string","description":"The transaction hash of the on-chain transaction"},"origin":{"type":"string","description":"The origin wallet address"},"destination":{"type":"string","description":"The destination wallet address"},"destinationType":{"type":"string","description":"The destination wallet type","enum":["CUSTODIAL","NON_CUSTODIAL"]}},"required":["destination"]},"VaspDto":{"type":"object","properties":{"originatorVaspEntityId":{"type":"string","description":"The originator VASP entity ID.","readOnly":true},"originatorVaspName":{"type":"string","description":"The originator VASP name. Can be left blank when creating a new transaction, as it is set automatically by the CryptoSwift API"},"originatorVaspEmail":{"type":"string","description":"The originator VASP e-mail address. Can be left blank when creating a new transaction, as it is set automatically by the CryptoSwift API"},"beneficiaryVaspEntityId":{"type":"string","description":"The beneficiary VASP entity ID.","readOnly":true},"beneficiaryVaspName":{"type":"string","description":"The beneficiary VASP name."},"beneficiaryVaspEmail":{"type":"string","description":"The beneficiary VASP e-mail address"},"beneficiaryVaspExtraInfo":{"type":"string","description":"Extra information about the beneficiary VASP (contacts etc in free form)"}}},"OriginatorDto":{"type":"object","properties":{"type":{"type":"string","description":"Originator type: natural or legal person.","enum":["NATURAL","LEGAL"]},"name":{"type":"string","description":"Originator name: the name of the natural or legal person of the originator."},"accountNumber":{"type":"string","description":"Originator account identificator: wallet address or account identificator used by the VASP."},"address":{"type":"string","description":"Address of the originator"},"country":{"type":"string","description":"The country of residence (in case of natural person) or registration (in case of legal person)"},"nationalIdentificatorType":{"type":"string","description":"Provides the national identificator type.            \n* `ALN` Alien registration number assigned by a government agency to identify foreign nationals.            \n* `DRV` Driver license number.            \n* `FIN` Foreign investment identity number - Number assigned to a foreign investor (other than the alien number).            \n* `IDC` Identity card number assigned by a national authority.            \n* `LEI` Legal Entity Identifier (LEI), assigned in accordance with ISO 17442 11 .            \n* `PAS` Passport number assigned by a passport authority.            \n* `RAI` Registration authority identifier - Identifier of a legal entity as maintained by a registration authority.            \n* `SSN` Social security number - Number assigned by a social security agency.            \n* `TXN` Tax identification number - Number assigned by a tax authority to an entity.            \n* `OTH` Other - A national identificator that does not fit any of the defined types or can not be determined.            ","enum":["ALN","DRV","FIN","IDC","LEI","PAS","RAI","SSN","TXN","OTH"]},"nationalIdentificator":{"type":"string","description":"The national identification number of the originator"},"customerNumber":{"type":"string","description":"The customer number/identifier in case of legal person"},"dateOfBirth":{"type":"string","description":"Date of birth (used in case of natural person)"},"placeOfBirth":{"type":"string","description":"Place of birth (used in case of natural person)"}}},"BeneficiaryDto":{"type":"object","properties":{"type":{"type":"string","description":"Beneficiary type: natural or legal person.","enum":["NATURAL","LEGAL"]},"name":{"type":"string","description":"Beneficiary name: the name of the natural or legal person of the beneficiary."},"accountNumber":{"type":"string","description":"Beneficiary account identificator: wallet address or account identificator used by the VASP."},"country":{"type":"string","description":"The country of residence (in case of natural person) or registration (in case of legal person)"},"nationalIdentificatorType":{"type":"string","description":"Provides the national identificator type.            \n* `ALN` Alien registration number assigned by a government agency to identify foreign nationals.            \n* `DRV` Driver license number.            \n* `FIN` Foreign investment identity number - Number assigned to a foreign investor (other than the alien number).            \n* `IDC` Identity card number assigned by a national authority.            \n* `LEI` Legal Entity Identifier (LEI), assigned in accordance with ISO 17442 11 .            \n* `PAS` Passport number assigned by a passport authority.            \n* `RAI` Registration authority identifier - Identifier of a legal entity as maintained by a registration authority.            \n* `SSN` Social security number - Number assigned by a social security agency.            \n* `TXN` Tax identification number - Number assigned by a tax authority to an entity.            \n* `OTH` Other - A national identificator that does not fit any of the defined types or can not be determined.            ","enum":["ALN","DRV","FIN","IDC","LEI","PAS","RAI","SSN","TXN","OTH"]},"nationalIdentificator":{"type":"string","description":"The national identification number of the beneficiary"}}},"WarningDto":{"type":"object","properties":{"code":{"type":"string","description":"The warning code"},"message":{"type":"string","description":"The warning description"},"details":{"type":"string","description":"The warning details"}},"required":["code","message"]},"DestinationWalletSanctionDetailsDto":{"type":"object","properties":{"address":{"type":"string","description":"Sanctioned wallet address matched exactly against the transaction destination wallet."},"blockchain":{"type":"string","description":"Blockchain reported by the sanctions source for the matched wallet address."},"name":{"type":"string","description":"Sanctioned subject name and sanctions source."},"sanctionDate":{"type":"string","description":"Sanction designation date according to the sanctions source.","nullable":true,"format":"date-time"}}},"DestinationWalletSanctionsDto":{"type":"object","properties":{"isSanctioned":{"type":"boolean","description":"Whether the destination wallet address is present in active sanctions data."},"details":{"description":"Sanctions details for the destination wallet address.","type":"array","items":{"$ref":"#/components/schemas/DestinationWalletSanctionDetailsDto"}}}},"TransactionSanctionsRiskDto":{"type":"object","properties":{"destinationWallet":{"description":"Sanctions screening result for the destination wallet address.","allOf":[{"$ref":"#/components/schemas/DestinationWalletSanctionsDto"}]}}},"TransactionRiskScoreDto":{"type":"object","properties":{"originatorRiskScore":{"type":"number","description":"Overall numerical (0 - 100) risk score of the originator of the transaction. Higher values mean a higher risk."},"originatorRiskSeverity":{"type":"string","description":"Overall risk severity of the originator of the transaction.","enum":["low","medium","high"],"example":"medium"},"beneficiaryRiskScore":{"type":"number","description":"Overall numerical (0 - 100) risk score of the beneficiary of the transaction. Higher values mean a higher risk."},"beneficiaryRiskSeverity":{"type":"string","description":"Overall risk severity of the beneficiary of the transaction.","enum":["low","medium","high"],"example":"low"},"sanctions":{"description":"Sanctions screening result for this transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionSanctionsRiskDto"}]}}},"RuleDecision":{"type":"string","enum":["PROCEED","WAIT","REVIEW","BLOCK"],"description":"Final decision from the matched published rule. Null when no published rules exist."},"RuleConditionOperator":{"type":"string","enum":["EQ","NEQ","GT","GTE","LT","LTE","IN","NOT_IN","CONTAINS","STARTS_WITH","ENDS_WITH","EXISTS","NOT_EXISTS"],"description":"Condition operator."},"TenantCurrency":{"type":"string","enum":["EUR","USD"],"description":"Optional amount currency."},"TransactionRuleEngineConditionDto":{"type":"object","properties":{"field":{"type":"string","description":"Condition field.","example":"amount"},"operator":{"description":"Condition operator.","allOf":[{"$ref":"#/components/schemas/RuleConditionOperator"}]},"value":{"description":"Condition value.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"currency":{"description":"Optional amount currency.","allOf":[{"$ref":"#/components/schemas/TenantCurrency"}]}},"required":["field","operator"]},"TransactionRuleEngineConditionsDto":{"type":"object","properties":{"all":{"description":"All conditions (AND).","type":"array","items":{"$ref":"#/components/schemas/TransactionRuleEngineConditionDto"}},"any":{"description":"Any conditions (OR).","type":"array","items":{"$ref":"#/components/schemas/TransactionRuleEngineConditionDto"}}},"required":["all","any"]},"RuleEngineScope":{"type":"string","enum":["OUTGOING","INCOMING"],"description":"Rule engine scope used for evaluation."},"RuleTimeoutDecision":{"type":"string","enum":["PROCEED","REVIEW","BLOCK"],"description":"Decision to apply when WAIT times out."},"TransactionRuleEngineDecisionDto":{"type":"object","properties":{"decision":{"description":"Final decision from the matched published rule. Null when no published rules exist.","nullable":true,"allOf":[{"$ref":"#/components/schemas/RuleDecision"}]},"ruleEngineId":{"type":"string","description":"Rule engine ID used for evaluation.","format":"uuid"},"ruleId":{"type":"string","description":"Matched published rule ID. Null when no published rules exist or no explicit rule matched.","nullable":true},"ruleName":{"type":"string","description":"Matched published rule name.","nullable":true},"conditions":{"description":"Full matched published rule condition info (`when` block).","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/TransactionRuleEngineConditionsDto"}]},"ruleEngineVersion":{"type":"number","description":"Rule engine version used for evaluation (0 means no published rules exist yet)."},"scope":{"description":"Rule engine scope used for evaluation.","allOf":[{"$ref":"#/components/schemas/RuleEngineScope"}]},"waitForSeconds":{"type":"number","description":"WAIT duration in seconds when decision=WAIT.","nullable":true},"onTimeoutDecision":{"nullable":true,"description":"Decision to apply when WAIT times out.","allOf":[{"$ref":"#/components/schemas/RuleTimeoutDecision"}]}},"required":["ruleEngineId","ruleEngineVersion","scope"]},"TransactionStatus":{"type":"string","enum":["PENDING","DELIVERED","CONFIRMED","DECLINED","FAILED"],"description":"Optional transaction status to set for incoming transactions only. Outgoing transactions ignore this field."},"CreateTransactionDto":{"type":"object","properties":{"direction":{"description":"The transaction direction: outgoing or incoming transaction. Set to \"OUTGOING\" automatically if not provided when creating the transaction.","allOf":[{"$ref":"#/components/schemas/TransactionDirection"}]},"createdAt":{"type":"string","format":"date-time","description":"Transaction creation date and time according to the ISO 8601 standard, eg. \"2025-01-28T14:38:00.000Z\". Set automatically to the current date and time when creating a new transaction if not provided with the request"},"asset":{"type":"string","description":"The asset symbol that was used for the transaction (BTC, ETH or other)"},"amount":{"type":"number","description":"Amount of asset transferred"},"blockchainInfo":{"description":"Blockchain information (transaction hash, origin and destination wallet addresses)","allOf":[{"$ref":"#/components/schemas/BlockchainDto"}]},"vaspInfo":{"description":"The originator and beneficiary VASP information","allOf":[{"$ref":"#/components/schemas/VaspDto"}]},"originator":{"description":"The originator data. Note: Originator data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/OriginatorDto"}]},"beneficiary":{"description":"The beneficiary data.  Note: Beneficiary data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/BeneficiaryDto"}]},"warnings":{"description":"Descriptive warning messages, if applicable.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/WarningDto"}},"riskScore":{"description":"Overall risk score and severity of the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRiskScoreDto"}]},"ruleEngine":{"description":"Rule engine evaluation result for this travel rule message.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRuleEngineDecisionDto"}]},"status":{"description":"Optional transaction status to set for incoming transactions only. Outgoing transactions ignore this field.","allOf":[{"$ref":"#/components/schemas/TransactionStatus"}]}},"required":["asset","amount","blockchainInfo"]},"BlockchainReadDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"The blockchain name. You can find the list of supported blockchains <a target=\"_blank\" href=\"/#tag/Blockchains/operation/findAll\">here</a> (use the returned \"name\" field). In the required blockchain is not included in the list, you can define your blockchain as free text, but be aware that this might affect Travel Rule message delivery rates."},"transactionHash":{"type":"string","description":"The transaction hash of the on-chain transaction"},"origin":{"type":"string","description":"The origin wallet address"},"destination":{"type":"string","description":"The destination wallet address"},"destinationType":{"type":"string","description":"The destination wallet type","enum":["CUSTODIAL","NON_CUSTODIAL"]},"isDestinationConfirmed":{"type":"boolean","readOnly":true,"description":"Is the destination wallet confirmed by the tenant (true/false). Null if not applicable or not checked yet."},"destinationWalletId":{"type":"number","readOnly":true,"description":"The destination wallet id. Null if not applicable or not checked yet."}},"required":["destination","isDestinationConfirmed","destinationWalletId"]},"TransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"The transaction ID"},"status":{"description":"The transaction status","allOf":[{"$ref":"#/components/schemas/TransactionStatus"}]},"statusReasoning":{"type":"string","description":"The transaction status reasoning"},"direction":{"description":"The transaction direction: outgoing or incoming transaction. Set to \"OUTGOING\" automatically if not provided when creating the transaction.","allOf":[{"$ref":"#/components/schemas/TransactionDirection"}]},"createdAt":{"type":"string","format":"date-time","description":"Transaction creation date and time according to the ISO 8601 standard, eg. \"2025-01-28T14:38:00.000Z\". Set automatically to the current date and time when creating a new transaction if not provided with the request"},"asset":{"type":"string","description":"The asset symbol that was used for the transaction (BTC, ETH or other)"},"amount":{"type":"number","description":"Amount of asset transferred"},"amountUsd":{"type":"number","readOnly":true,"description":"Converted transaction amount in USD"},"amountEur":{"type":"number","readOnly":true,"description":"Converted transaction amount in EUR"},"blockchainInfo":{"description":"Blockchain information (transaction hash, origin and destination wallet addresses)","allOf":[{"$ref":"#/components/schemas/BlockchainReadDto"}]},"vaspInfo":{"description":"The originator and beneficiary VASP information","allOf":[{"$ref":"#/components/schemas/VaspDto"}]},"originator":{"description":"The originator data. Note: Originator data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/OriginatorDto"}]},"beneficiary":{"description":"The beneficiary data.  Note: Beneficiary data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/BeneficiaryDto"}]},"travelRuleMessageSource":{"type":"string","description":"The originating network of the travel rule message. Note: CryptoSwift integrates seamlessly with multiple networks; this property specifies which network the message came from."},"warnings":{"description":"Descriptive warning messages, if applicable.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/WarningDto"}},"riskScore":{"description":"Overall risk score and severity of the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRiskScoreDto"}]},"ruleEngine":{"description":"Rule engine evaluation result for this travel rule message.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRuleEngineDecisionDto"}]}},"required":["id","status","asset","amount","blockchainInfo"]},"UpdateBlockchainInfoDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"The blockchain name. You can find the list of supported blockchains <a target=\"_blank\" href=\"/#tag/Blockchains/operation/findAll\">here</a> (use the returned \"name\" field). In the required blockchain is not included in the list, you can define your blockchain as free text, but be aware that this might affect Travel Rule message delivery rates."},"transactionHash":{"type":"string","description":"The transaction hash of the on-chain transaction"},"origin":{"type":"string","description":"The origin wallet address"},"destinationType":{"type":"string","description":"The destination wallet type","enum":["CUSTODIAL","NON_CUSTODIAL"]}}},"UpdateTransactionDto":{"type":"object","properties":{"status":{"description":"The transaction status","allOf":[{"$ref":"#/components/schemas/TransactionStatus"}]},"statusReasoning":{"type":"string","description":"The transaction status reasoning"},"direction":{"description":"The transaction direction: outgoing or incoming transaction. Set to \"OUTGOING\" automatically if not provided when creating the transaction.","allOf":[{"$ref":"#/components/schemas/TransactionDirection"}]},"createdAt":{"type":"string","format":"date-time","description":"Transaction creation date and time according to the ISO 8601 standard, eg. \"2025-01-28T14:38:00.000Z\". Set automatically to the current date and time when creating a new transaction if not provided with the request"},"asset":{"type":"string","description":"The asset symbol that was used for the transaction (BTC, ETH or other)"},"amount":{"type":"number","description":"Amount of asset transferred"},"vaspInfo":{"description":"The originator and beneficiary VASP information","allOf":[{"$ref":"#/components/schemas/VaspDto"}]},"originator":{"description":"The originator data. Note: Originator data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/OriginatorDto"}]},"beneficiary":{"description":"The beneficiary data.  Note: Beneficiary data fields are optional for easier integration but some are required by regulation. See https://dev.cryptoswift.eu/docs/workflows/data-privacy-record-keeping/required-travel-rule-data for details.","allOf":[{"$ref":"#/components/schemas/BeneficiaryDto"}]},"warnings":{"description":"Descriptive warning messages, if applicable.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/WarningDto"}},"riskScore":{"description":"Overall risk score and severity of the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRiskScoreDto"}]},"ruleEngine":{"description":"Rule engine evaluation result for this travel rule message.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRuleEngineDecisionDto"}]},"blockchainInfo":{"description":"Blockchain information (destination address cannot be modified through this endpoint)","allOf":[{"$ref":"#/components/schemas/UpdateBlockchainInfoDto"}]}}},"TransactionEventType":{"type":"string","enum":["TRANSACTION_CREATED","DATA_UPDATED","STATUS_UPDATED","SYSTEM_STATUS_UPDATED","MIRRORED_UPDATE_APPLIED"],"description":"Type of event."},"TransactionEventActorType":{"type":"string","enum":["SYSTEM","USER","API_KEY","COUNTERPARTY"],"description":"Actor type that triggered the event."},"UserSummaryDto":{"type":"object","properties":{"id":{"type":"number","description":"User ID of the actor that triggered the event."},"name":{"type":"string","description":"Display name of the user."},"email":{"type":"string","description":"Email of the user."}},"required":["id","name","email"]},"TransactionEventRuleConditionDto":{"type":"object","properties":{"field":{"type":"string","description":"Condition field name.","example":"amount"},"operator":{"description":"Condition operator.","allOf":[{"$ref":"#/components/schemas/RuleConditionOperator"}]},"value":{"description":"Condition value.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"currency":{"description":"Optional currency for amount conditions.","allOf":[{"$ref":"#/components/schemas/TenantCurrency"}]}},"required":["field","operator"]},"TransactionEventRuleConditionsDto":{"type":"object","properties":{"all":{"description":"All conditions (logical AND).","type":"array","items":{"$ref":"#/components/schemas/TransactionEventRuleConditionDto"}},"any":{"description":"Any conditions (logical OR).","type":"array","items":{"$ref":"#/components/schemas/TransactionEventRuleConditionDto"}}},"required":["all","any"]},"TransactionEventRuleEngineDto":{"type":"object","properties":{"decision":{"description":"Decision calculated from published rules. Null when no published rules existed.","nullable":true,"allOf":[{"$ref":"#/components/schemas/RuleDecision"}]},"ruleEngineId":{"type":"string","format":"uuid","description":"Rule engine ID used when this event was logged."},"ruleId":{"type":"string","nullable":true,"description":"Matched rule ID."},"ruleName":{"type":"string","nullable":true,"description":"Matched rule name."},"conditions":{"nullable":true,"description":"Matched rule conditions (`when` block).","type":"object","allOf":[{"$ref":"#/components/schemas/TransactionEventRuleConditionsDto"}]},"ruleEngineVersion":{"type":"number","description":"Rule engine version used when this event was logged (0 means no published rules existed)."}},"required":["ruleEngineId","ruleEngineVersion"]},"TransactionEventDto":{"type":"object","properties":{"id":{"type":"string","description":"Transaction event ID."},"transactionId":{"type":"string","description":"Transaction ID this event belongs to."},"eventType":{"description":"Type of event.","allOf":[{"$ref":"#/components/schemas/TransactionEventType"}]},"actorType":{"description":"Actor type that triggered the event.","allOf":[{"$ref":"#/components/schemas/TransactionEventActorType"}]},"createdAt":{"type":"string","format":"date-time","description":"Event creation timestamp."},"userId":{"type":"number","description":"User ID when actorType is USER."},"user":{"description":"User details when the event has a userId.","allOf":[{"$ref":"#/components/schemas/UserSummaryDto"}]},"status":{"type":"string","description":"Status after the event."},"statusReasoning":{"type":"string","description":"Status reasoning after the event."},"changedFields":{"description":"List of changed field paths.","type":"array","items":{"type":"string"}},"piiChanged":{"type":"boolean","description":"True when any changed field is PII or under originator/beneficiary."},"ruleEngine":{"description":"Rule engine decision metadata captured at event write time.","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/TransactionEventRuleEngineDto"}]}},"required":["id","transactionId","eventType","actorType","createdAt","changedFields","piiChanged"]},"AmlKywWalletType":{"type":"string","enum":["CUSTODIAL","NON_CUSTODIAL","UNKNOWN"]},"AmlKywConfidence":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"description":"Confidence level derived from confidenceScore: LOW = 0-33, MEDIUM = 34-66, HIGH = 67-100."},"RiskAssessmentDto":{"type":"object","properties":{"score":{"type":"number","description":"A numerical score (0 - 100) representing the entity trust level. Higher values mean a higher risk.","example":42},"severity":{"type":"string","description":"The severity level of the risk","enum":["low","medium","high"],"example":"medium"}},"required":["score","severity"]},"EntityLegalEntityDto":{"type":"object","properties":{"entityName":{"type":"string","description":"Legal name of the entity","nullable":true},"country":{"type":"string","description":"Country associated with the legal entity record","nullable":true},"companyId":{"type":"string","description":"Company registration identifier","nullable":true},"referenceNo":{"type":"string","description":"Regulatory reference number assigned to the legal entity","nullable":true},"regulator":{"type":"string","description":"Name of the regulator associated with the legal entity entry","nullable":true}}},"AmlKywEntityInfoDto":{"type":"object","properties":{"entityId":{"type":"string","description":"Public entity ID from the CryptoSwift entity directory.","example":"14f4fb9d-4c69-5843-8b18-dbb77540182b"},"name":{"type":"string"},"legalName":{"type":"string"},"type":{"type":"string"},"isVerified":{"type":"boolean"},"inNetwork":{"type":"boolean"},"updatedAt":{"type":"string","nullable":true,"format":"date-time"},"isRiskAssessed":{"type":"boolean"},"description":{"type":"string"},"isMicaCompliant":{"type":"boolean"},"belongsToWarningList":{"type":"boolean"},"countries":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"riskAssessment":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/RiskAssessmentDto"}]},"email":{"type":"string","nullable":true},"notice":{"type":"string","nullable":true},"logo":{"type":"string","nullable":true},"fiats":{"type":"array","items":{"type":"string"}},"urls":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"dateLaunched":{"type":"string","nullable":true,"format":"date-time"},"spotVolumeUsd":{"type":"number","nullable":true},"spotVolumeLastUpdated":{"type":"string","nullable":true,"format":"date-time"},"weeklyVisits":{"type":"number","nullable":true},"legalEntities":{"type":"array","items":{"$ref":"#/components/schemas/EntityLegalEntityDto"}}},"required":["entityId","name","legalName","type","isVerified","inNetwork","isRiskAssessed","description","isMicaCompliant","belongsToWarningList","countries","url"]},"AmlKywResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"AML check search history record ID."},"address":{"type":"string"},"blockchain":{"type":"string"},"walletType":{"allOf":[{"$ref":"#/components/schemas/AmlKywWalletType"}]},"confidenceScore":{"type":"number","description":"Numeric confidence score from 0 to 100. 0-33 is LOW confidence, 34-66 is MEDIUM confidence, and 67-100 is HIGH confidence.","minimum":0,"maximum":100,"example":90},"confidence":{"description":"Confidence level derived from confidenceScore: LOW = 0-33, MEDIUM = 34-66, HIGH = 67-100.","allOf":[{"$ref":"#/components/schemas/AmlKywConfidence"}]},"isVerified":{"type":"boolean"},"attributionReason":{"type":"string","nullable":true},"attributionReasonCode":{"type":"string","nullable":true,"description":"Machine-readable attribution reason code.","example":"DETECTED_VIA_BLOCKCHAIN_ANALYTICS"},"riskScore":{"nullable":true,"oneOf":[{"type":"number"},{"type":"object"}]},"auditLogId":{"type":"string","description":"Audit ledger ID. This is the same AML history record ID as id."},"entityInfo":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/AmlKywEntityInfoDto"}]}},"required":["id","address","blockchain","walletType","confidenceScore","confidence","isVerified","auditLogId"]},"AmlMetadataDto":{"type":"object","properties":{"offset":{"type":"number","example":0},"limit":{"type":"number","example":10},"count":{"type":"number","example":3},"total":{"type":"number","example":42}},"required":["offset","limit","count","total"]},"AmlSearchWalletItemDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"Blockchain where the wallet was found.","example":"Bitcoin"},"hash":{"type":"string","description":"Wallet address.","example":"bc1qexample..."},"hasActivity":{"type":"boolean","description":"Whether the wallet has activity visible to the KYT provider.","example":true}},"required":["blockchain","hash","hasActivity"]},"AmlSearchWalletResultsDto":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/AmlMetadataDto"},"items":{"description":"Found wallets.","type":"array","items":{"$ref":"#/components/schemas/AmlSearchWalletItemDto"}}},"required":["metadata","items"]},"AmlSearchTransactionItemDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"Blockchain where the transaction was found.","example":"Bitcoin"},"hash":{"type":"string","description":"Transaction hash.","example":"d4f6e7..."}},"required":["blockchain","hash"]},"AmlSearchTransactionResultsDto":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/AmlMetadataDto"},"items":{"description":"Found transactions.","type":"array","items":{"$ref":"#/components/schemas/AmlSearchTransactionItemDto"}}},"required":["metadata","items"]},"AmlSearchResponseDto":{"type":"object","properties":{"wallets":{"description":"Wallet search results.","allOf":[{"$ref":"#/components/schemas/AmlSearchWalletResultsDto"}]},"transactions":{"description":"Transaction search results.","allOf":[{"$ref":"#/components/schemas/AmlSearchTransactionResultsDto"}]},"originalResponse":{"type":"object","description":"Original provider response for debugging purposes.","additionalProperties":true,"nullable":true}},"required":["wallets","transactions"]},"AmlScoringSummaryDto":{"type":"object","properties":{"hasResult":{"type":"boolean","description":"Whether the KYT provider returned scoring data.","example":true},"riskScore":{"type":"number","description":"Normalized CryptoSwift risk score from 0 to 100.","example":72},"riskSeverity":{"type":"string","description":"Risk severity derived from the normalized risk score.","enum":["low","medium","high"],"example":"high"},"source":{"type":"string","description":"Indicates whether the score was provided by the KYT provider or calculated as a fallback.","enum":["assigned","calculated"],"example":"assigned"}},"required":["hasResult"]},"AmlAggregatedRiskItemDto":{"type":"object","properties":{"name":{"type":"string","description":"Risk source or entity name reported by the KYT provider.","example":"High Risk Exchange"},"percentage":{"type":"number","description":"Share of wallet or transaction flow attributed to this item.","example":12.5},"amount":{"type":"number","description":"Amount attributed to this risk item, when available.","example":0.25},"amountEur":{"type":"number","description":"EUR value attributed to this risk item, when available.","example":9123.45}},"required":["name","percentage"]},"AmlAggregatedRiskTypeDto":{"type":"object","properties":{"type":{"type":"string","description":"Risk category reported by the KYT provider.","example":"Exchange"},"percentage":{"type":"number","description":"Share of wallet or transaction flow attributed to this type.","example":18.2},"amount":{"type":"number","description":"Amount attributed to this risk type, when available.","example":0.41},"amountEur":{"type":"number","description":"EUR value attributed to this risk type, when available.","example":14982.33},"items":{"description":"Risk items grouped under this type.","type":"array","items":{"$ref":"#/components/schemas/AmlAggregatedRiskItemDto"}}},"required":["type","percentage","items"]},"AmlAggregatedRiskSeverityDto":{"type":"object","properties":{"riskSeverity":{"type":"string","description":"Risk severity bucket.","enum":["low","medium","high"],"example":"high"},"percentage":{"type":"number","description":"Share of wallet or transaction flow attributed to this severity.","example":24.7},"amount":{"type":"number","description":"Amount attributed to this severity, when available.","example":0.62},"amountEur":{"type":"number","description":"EUR value attributed to this severity, when available.","example":22643.12},"types":{"description":"Risk types grouped under this severity.","type":"array","items":{"$ref":"#/components/schemas/AmlAggregatedRiskTypeDto"}}},"required":["riskSeverity","percentage","types"]},"AmlRiskAnalysisSummaryDto":{"type":"object","properties":{"hasResult":{"type":"boolean","description":"Whether the KYT provider returned data for this direction.","example":true},"riskScore":{"type":"number","description":"Normalized CryptoSwift risk score from 0 to 100.","example":48},"riskSeverity":{"type":"string","description":"Risk severity derived from the normalized risk score.","enum":["low","medium","high"],"example":"medium"},"aggregatedRisks":{"description":"Risk exposure grouped by severity, category, and item.","type":"array","items":{"$ref":"#/components/schemas/AmlAggregatedRiskSeverityDto"}}},"required":["hasResult"]},"AmlWalletAnalysisDto":{"type":"object","properties":{"wallet":{"description":"Overall risk summary for the wallet.","allOf":[{"$ref":"#/components/schemas/AmlScoringSummaryDto"}]},"incoming":{"description":"Risk exposure for incoming wallet flows.","allOf":[{"$ref":"#/components/schemas/AmlRiskAnalysisSummaryDto"}]},"outgoing":{"description":"Risk exposure for outgoing wallet flows.","allOf":[{"$ref":"#/components/schemas/AmlRiskAnalysisSummaryDto"}]}},"required":["wallet","incoming","outgoing"]},"AmlWalletOnChainActivityDto":{"type":"object","properties":{"firstActivityDate":{"format":"date-time","type":"string","description":"First observed wallet activity date.","example":"2025-01-15T09:30:00.000Z"},"lastActivityDate":{"format":"date-time","type":"string","description":"Most recent observed wallet activity date.","example":"2026-04-12T14:20:00.000Z"},"balance":{"type":"number","description":"Current wallet balance reported by the KYT provider.","example":12345.67},"totalReceived":{"type":"number","description":"Total amount received by the wallet.","example":25000.5},"totalSent":{"type":"number","description":"Total amount sent by the wallet.","example":12654.83},"txCount":{"type":"number","description":"Total number of transactions associated with the wallet.","example":42},"fundedByTxHash":{"type":"string","description":"Transaction hash that funded the wallet, when available from the KYT provider.","example":"4e3a7f..."}},"required":["firstActivityDate","lastActivityDate","balance","totalReceived","totalSent","txCount","fundedByTxHash"]},"AmlWalletEntityInfoDto":{"type":"object","properties":{"id":{"type":"string","description":"CryptoSwift entity id, when the entity is known in-network.","example":"entity_123"},"name":{"type":"string","description":"Entity name reported by the KYT provider.","example":"Example Exchange"},"type":{"type":"string","description":"Entity type reported by the KYT provider.","example":"Exchange"},"travelRule":{"type":"boolean","description":"Whether this entity is known by CryptoSwift as a Travel Rule reachable VASP.","example":true},"riskScore":{"type":"number","description":"Normalized CryptoSwift risk score from 0 to 100.","example":18},"riskSeverity":{"type":"string","description":"Risk severity derived from the normalized risk score.","enum":["low","medium","high"],"example":"low"},"countries":{"description":"Countries associated with the entity, when available.","example":["EE"],"type":"array","items":{"type":"string"}}},"required":["name","type","travelRule","riskScore","riskSeverity"]},"AmlWalletInteractionDto":{"type":"object","properties":{"id":{"type":"string","description":"CryptoSwift entity id, when the entity is known in-network.","example":"entity_456"},"name":{"type":"string","description":"Name of an entity or platform that interacted with the wallet.","example":"Example Custodian"}},"required":["name"]},"AmlCheckWalletResponseDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"Blockchain used for this AML Check wallet analysis.","example":"Bitcoin"},"address":{"type":"string","description":"Wallet address analyzed in this AML Check result.","example":"bc1qexample..."},"analysis":{"description":"Risk analysis for the wallet and its incoming/outgoing flows.","allOf":[{"$ref":"#/components/schemas/AmlWalletAnalysisDto"}]},"onChainActivity":{"description":"On-chain activity summary for the wallet.","allOf":[{"$ref":"#/components/schemas/AmlWalletOnChainActivityDto"}]},"entityInfo":{"description":"KYT entity associated with the wallet, when the provider identifies one.","allOf":[{"$ref":"#/components/schemas/AmlWalletEntityInfoDto"}]},"interactions":{"description":"Known platforms or entities that interacted with this wallet, when available.","type":"array","items":{"$ref":"#/components/schemas/AmlWalletInteractionDto"}}},"required":["blockchain","address","analysis","onChainActivity"]},"AmlTransactionAnalysisDto":{"type":"object","properties":{"transaction":{"description":"Overall risk summary for the transaction.","allOf":[{"$ref":"#/components/schemas/AmlScoringSummaryDto"}]},"incoming":{"description":"Risk exposure for incoming transaction flows.","allOf":[{"$ref":"#/components/schemas/AmlRiskAnalysisSummaryDto"}]},"outgoing":{"description":"Risk exposure for outgoing transaction flows.","allOf":[{"$ref":"#/components/schemas/AmlRiskAnalysisSummaryDto"}]}},"required":["transaction","incoming","outgoing"]},"AmlEntityDto":{"type":"object","properties":{"id":{"type":"string","description":"CryptoSwift entity id, when the entity is known in-network.","example":"entity_123"},"name":{"type":"string","description":"Entity name reported by the KYT provider.","example":"Example Exchange"},"type":{"type":"string","description":"Entity type reported by the KYT provider.","example":"Exchange"},"travelRule":{"type":"boolean","description":"Whether this entity is known by CryptoSwift as a Travel Rule reachable VASP.","example":true},"riskScore":{"type":"number","description":"Normalized CryptoSwift risk score from 0 to 100.","example":18},"riskSeverity":{"type":"string","description":"Risk severity derived from the normalized risk score.","enum":["low","medium","high"],"example":"low"},"countries":{"description":"Countries associated with the entity, when available.","example":["EE"],"type":"array","items":{"type":"string"}},"hasResult":{"type":"boolean","description":"Whether the KYT provider identified an entity.","example":true}},"required":["hasResult"]},"AmlTransactionParticipantDto":{"type":"object","properties":{"address":{"type":"string","description":"Wallet address participating in the transaction.","example":"bc1qexample..."},"entity":{"description":"KYT entity associated with the wallet, when identified.","allOf":[{"$ref":"#/components/schemas/AmlEntityDto"}]}},"required":["address"]},"AmlTransactionInfoResponseDto":{"type":"object","properties":{"hashId":{"type":"string","description":"Transaction hash.","example":"4e3a7f..."},"timestamp":{"format":"date-time","type":"string","description":"Transaction timestamp.","example":"2026-03-19T10:00:00.000Z"},"status":{"type":"string","description":"Blockchain transaction status reported by the KYT provider.","example":"CONFIRMED"},"asset":{"type":"string","description":"Transaction asset symbol.","example":"BTC"},"amount":{"type":"number","description":"Transaction amount in the transaction asset.","example":0.015},"amountEur":{"type":"number","description":"Transaction amount converted to EUR.","example":912.34},"originator":{"description":"Originating wallet and identified entity details.","allOf":[{"$ref":"#/components/schemas/AmlTransactionParticipantDto"}]},"beneficiary":{"description":"Beneficiary wallet and identified entity details.","allOf":[{"$ref":"#/components/schemas/AmlTransactionParticipantDto"}]},"originalResponse":{"type":"object","description":"Original provider response for debugging purposes.","additionalProperties":true,"nullable":true}},"required":["hashId","timestamp","status","asset","amount","amountEur","originator","beneficiary"]},"AmlWalletCoinsDto":{"type":"object","properties":{"totalBalanceUsd":{"type":"number","description":"Total wallet balance reported by the KYT provider.","example":12345.67},"totalReceivedUsd":{"type":"number","description":"Total amount received by the wallet.","example":25000.5},"totalSentUsd":{"type":"number","description":"Total amount sent by the wallet.","example":12654.83},"totalNumOfTransactions":{"type":"number","description":"Total number of transactions associated with the wallet.","example":42},"originalResponse":{"type":"object","description":"Original provider response for debugging purposes.","additionalProperties":true,"nullable":true}},"required":["totalBalanceUsd","totalReceivedUsd","totalSentUsd","totalNumOfTransactions"]},"AmlCheckTransactionAnalysisDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"Blockchain used for this AML Check transaction analysis.","example":"Bitcoin"},"txHash":{"type":"string","description":"Transaction hash analyzed in this AML Check result.","example":"4e3a7f..."},"analysis":{"description":"Risk analysis for the transaction and its flows.","allOf":[{"$ref":"#/components/schemas/AmlTransactionAnalysisDto"}]},"transactionInfo":{"description":"Transaction metadata and counterparty information.","allOf":[{"$ref":"#/components/schemas/AmlTransactionInfoResponseDto"}]},"origin":{"description":"Origin wallet aggregated coin and activity data.","allOf":[{"$ref":"#/components/schemas/AmlWalletCoinsDto"}]},"destination":{"description":"Destination wallet aggregated coin and activity data.","allOf":[{"$ref":"#/components/schemas/AmlWalletCoinsDto"}]}},"required":["blockchain","txHash","analysis","transactionInfo","origin","destination"]},"AmlTransactionReceiversDto":{"type":"object","properties":{"blockchain":{"type":"string","description":"Blockchain used for the transaction receivers lookup.","example":"Bitcoin"},"txHash":{"type":"string","description":"Transaction hash used for the receivers lookup.","example":"4e3a7f..."},"asset":{"type":"string","description":"Asset code used for the receivers lookup.","example":"BTC"},"receivers":{"description":"Receiver wallet addresses for the transaction.","example":["bc1qexample..."],"type":"array","items":{"type":"string"}},"originalResponse":{"type":"object","description":"Original provider response for debugging purposes.","additionalProperties":true,"nullable":true}},"required":["blockchain","txHash","asset","receivers"]},"AmlWalletTransactionDto":{"type":"object","properties":{"hash":{"type":"string","description":"Transaction hash.","example":"9c8e0d..."},"date":{"format":"date-time","type":"string","description":"Transaction date.","example":"2026-03-19T10:00:00.000Z"},"originatorAddress":{"type":"string","description":"Originator wallet address.","example":"bc1qorigin..."},"destinationAddress":{"type":"string","description":"Destination wallet address.","example":"bc1qdest..."},"direction":{"type":"string","description":"Direction from the perspective of the wallet address in the request.","enum":["IN","OUT"],"example":"OUT"},"currency":{"type":"string","description":"Transaction asset symbol.","example":"BTC"},"amount":{"type":"number","description":"Transaction amount in the transaction asset.","example":0.015}},"required":["hash","date","originatorAddress","destinationAddress","direction","currency","amount"]},"AmlWalletTransactionsDto":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/AmlMetadataDto"},"items":{"description":"Transactions connected to the wallet.","type":"array","items":{"$ref":"#/components/schemas/AmlWalletTransactionDto"}},"originalResponse":{"type":"object","description":"Original provider response for debugging purposes.","additionalProperties":true,"nullable":true}},"required":["metadata","items"]},"AmlCheckSearchHistoryDto":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"number"},"objectType":{"type":"string"},"checkType":{"type":"string","enum":["kyt","kyw"],"default":"kyt"},"objectId":{"type":"string"},"provider":{"type":"string","enum":["scorechain","amlbot"]},"vaspName":{"type":"string"},"vaspType":{"type":"string"},"riskScore":{"type":"number"},"riskScorePayload":{"type":"object","additionalProperties":true,"nullable":true},"asset":{"type":"string"},"blockchain":{"type":"string"},"amount":{"type":"number"},"queryData":{"type":"object","additionalProperties":true,"nullable":true},"matchResultData":{"type":"object","additionalProperties":true,"nullable":true},"walletType":{"type":"string","enum":["CUSTODIAL","NON_CUSTODIAL","UNKNOWN"],"nullable":true},"confidenceScore":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"nullable":true},"isVerified":{"type":"boolean","nullable":true},"attributionReason":{"type":"string","nullable":true},"vaspEntityId":{"type":"string","nullable":true},"walletId":{"type":"number","nullable":true},"walletVerificationId":{"type":"string","nullable":true},"createdAt":{"format":"date-time","type":"string"}},"required":["id","tenantId","objectType","objectId","createdAt"]},"AmlbotServiceKeyCredentialsDto":{"type":"object","properties":{"accessId":{"type":"string","description":"AMLBot access ID.","example":"amlbot-access-id"},"accessKey":{"type":"string","description":"AMLBot access key.","example":"amlbot-access-key"}},"required":["accessId","accessKey"]},"AmlProvider":{"type":"string","enum":["scorechain","amlbot"],"description":"The AML provider of the service key"},"UpdateTenantServiceKeyDto":{"type":"object","properties":{"feature":{"type":"string","description":"The feature associated with the service key","enum":["aml_check"]},"provider":{"description":"The AML provider of the service key","allOf":[{"$ref":"#/components/schemas/AmlProvider"}]},"key":{"description":"Provider credentials. Use a string API key for Scorechain, or an object with accessId/accessKey for AMLBot.","oneOf":[{"type":"string","description":"Scorechain API key.","example":"scorechain-api-key"},{"$ref":"#/components/schemas/AmlbotServiceKeyCredentialsDto"}]}},"required":["feature","provider","key"]},"TenantServiceKeyDto":{"type":"object","properties":{"id":{"type":"string","description":"The service key ID","readOnly":true},"tenantId":{"type":"number","description":"The tenant ID","readOnly":true},"feature":{"type":"string","description":"The feature associated with the service key","enum":["aml_check"]},"provider":{"description":"The AML provider of the service key","allOf":[{"$ref":"#/components/schemas/AmlProvider"}]},"key":{"description":"Provider credentials. Use a string API key for Scorechain, or an object with accessId/accessKey for AMLBot.","oneOf":[{"type":"string","description":"Scorechain API key.","example":"scorechain-api-key"},{"$ref":"#/components/schemas/AmlbotServiceKeyCredentialsDto"}]},"createdAt":{"format":"date-time","type":"string","description":"The createAt timestamp","readOnly":true},"updatedAt":{"format":"date-time","type":"string","description":"The updatedAt timestamp","readOnly":true}},"required":["id","tenantId","feature","provider","key","createdAt"]},"TenantMfaPolicy":{"type":"string","enum":["optional","required"],"description":"Tenant MFA policy"},"TenantDto":{"type":"object","properties":{"id":{"type":"number","description":"The tenant ID"},"name":{"type":"string","description":"The tenant's service name"},"legalName":{"type":"string","description":"The legal name of the tenant"},"email":{"type":"string","description":"The main email address of the tenant"},"isVerified":{"type":"boolean","description":"Has the tenant been verified by the platform?"},"webhookUrl":{"type":"string","description":"The webhook URL for Travel Rule message notifications"},"webhookSecret":{"type":"string","description":"The webhook Secret: can and should be used for verifying incoming webhook requests. Generated automatically each time when the webhook URL is updated. See the [Developer Portal](https://dev.cryptoswift.eu/docs/integration-guides/webhooks/signatures) for more information"},"apiKey":{"type":"string","description":"The API key"},"notabeneWebhookUrl":{"type":"string","description":"The Notabene webhook url for integration"},"notabeneSecret":{"type":"string","description":"The Notabene webhook secret for integration"},"country":{"type":"string","description":"The country"},"package":{"type":"string","description":"The active package"},"currency":{"description":"The currency","allOf":[{"$ref":"#/components/schemas/TenantCurrency"}]},"transactionsIncluded":{"type":"number","description":"The amount of included transactions"},"webpage":{"type":"string","description":"The webpage"},"townName":{"type":"string","description":"The town name"},"mfaPolicy":{"description":"Tenant MFA policy","default":"optional","allOf":[{"$ref":"#/components/schemas/TenantMfaPolicy"}]},"isWalletVerificationRiskScoringEnabled":{"type":"boolean","description":"Is wallet verification risk scoring enabled"},"amlProvider":{"description":"The AML provider selected for AML Check operations. If not set, the API uses scorechain.","default":"scorechain","nullable":true,"allOf":[{"$ref":"#/components/schemas/AmlProvider"}]}},"required":["id","name","email","isVerified","apiKey"]},"UpdateTenantDto":{"type":"object","properties":{"name":{"type":"string","description":"The tenant's service name"},"legalName":{"type":"string","description":"The legal name of the tenant"},"email":{"type":"string","description":"The main email address of the tenant"},"webhookUrl":{"type":"string","description":"The webhook URL for Travel Rule message notifications"},"apiKey":{"type":"string","description":"The API key"},"notabeneSecret":{"type":"string","description":"The Notabene webhook secret for integration"},"currency":{"description":"The currency","allOf":[{"$ref":"#/components/schemas/TenantCurrency"}]},"webpage":{"type":"string","description":"The webpage"},"townName":{"type":"string","description":"The town name"},"mfaPolicy":{"description":"Tenant MFA policy","default":"optional","allOf":[{"$ref":"#/components/schemas/TenantMfaPolicy"}]},"isWalletVerificationRiskScoringEnabled":{"type":"boolean","description":"Is wallet verification risk scoring enabled"},"amlProvider":{"description":"The AML provider selected for AML Check operations. If not set, the API uses scorechain.","default":"scorechain","nullable":true,"allOf":[{"$ref":"#/components/schemas/AmlProvider"}]}}},"TenantReportDto":{"type":"object","properties":{"reportMonth":{"type":"string","description":"Report month in YYYY-MM format","example":"2025-07"},"createdAt":{"type":"string","description":"Timestamp when the report was created (ISO 8601 format)","example":"2025-08-01T12:34:56.000Z","format":"date-time"},"downloadEndpoint":{"type":"string","description":"Relative API endpoint to retrieve a signed download URL for this report","example":"/tenant/me/reports/2025-07/download-url"}},"required":["reportMonth","createdAt","downloadEndpoint"]},"DownloadUrlDto":{"type":"object","properties":{"url":{"type":"string","description":"Short-lived signed URL to the PDF report","example":"https://storage.googleapis.com/bucket/reports/2025_07/tenant_3.pdf?..."},"expiresAt":{"type":"string","description":"ISO 8601 timestamp when the URL expires","example":"2025-08-17T19:30:15.000Z","format":"date-time"}},"required":["url","expiresAt"]},"StatisticsTenantDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"isVerified":{"type":"boolean","example":true},"package":{"type":"string","example":"Business"},"transactionsIncluded":{"type":"number","example":6000},"packageStartDate":{"type":"string","example":"2025-07-01"},"packageValidTillDate":{"type":"string","example":"2026-07-01"},"isOutOfCredits":{"type":"boolean","example":true}},"required":["id","name","isVerified","package","transactionsIncluded"]},"DailyPointDto":{"type":"object","properties":{"date":{"type":"string","example":"2025-07-01"},"count":{"type":"number","example":120}},"required":["date","count"]},"StatisticsUsageDto":{"type":"object","properties":{"used":{"type":"number","example":3237},"daily":{"type":"array","items":{"$ref":"#/components/schemas/DailyPointDto"}}},"required":["used","daily"]},"StatisticsTransactionsDto":{"type":"object","properties":{"last30dTotal":{"type":"number","example":3200},"incomingToConfirm":{"type":"number","example":37},"pending":{"type":"number","example":12}},"required":["last30dTotal","incomingToConfirm","pending"]},"StatisticsWalletsDto":{"type":"object","properties":{"last30dTotal":{"type":"number","example":462},"verified":{"type":"number","example":400},"failed":{"type":"number","example":2},"pending":{"type":"number","example":60},"clientWalletsToConfirm":{"type":"number","example":14}},"required":["last30dTotal","verified","failed","pending","clientWalletsToConfirm"]},"StatisticsClaimsDto":{"type":"object","properties":{"last30dTotal":{"type":"number","example":58},"incomingToConfirm":{"type":"number","example":7}},"required":["last30dTotal","incomingToConfirm"]},"TenantStatisticsResponseDto":{"type":"object","properties":{"tenant":{"$ref":"#/components/schemas/StatisticsTenantDto"},"month":{"type":"string","example":"2025-07"},"totalUsage":{"type":"number","example":18234},"usage":{"$ref":"#/components/schemas/StatisticsUsageDto"},"transactions":{"$ref":"#/components/schemas/StatisticsTransactionsDto"},"wallets":{"$ref":"#/components/schemas/StatisticsWalletsDto"},"claims":{"$ref":"#/components/schemas/StatisticsClaimsDto"}},"required":["tenant","month","usage","transactions","wallets","claims"]},"EntityDto":{"type":"object","properties":{"id":{"type":"string","description":"The entity ID","example":"14f4fb9d-4c69-5843-8b18-dbb77540182b"},"name":{"type":"string","description":"The entity name"},"legalName":{"type":"string","description":"The legal name of the entitiy that is used to register their account with CryptoSwift. See \"legalEntities\" section in the single Entity details for a list of known legal entities for the Entity."},"type":{"type":"string","description":"The entity type"},"isVerified":{"type":"boolean","description":"Indicates if the entity is verified within CryptoSwift network"},"inNetwork":{"type":"boolean","description":"Indicates if the entity is part of the CryptoSwift network"},"updatedAt":{"type":"string","description":"Timestamp when the entity data was last updated","nullable":true,"format":"date-time"},"isRiskAssessed":{"type":"boolean","description":"Is the risk is assessed (by Scorechain) for this entity?"},"description":{"type":"string","description":"Description of the entity"},"isMicaCompliant":{"type":"boolean","description":"Flag showing if the entity is MiCA compliant"},"belongsToWarningList":{"type":"boolean","description":"Set to true if the entity appears on a warning list"},"countries":{"description":"Associated countries for the entity","type":"array","items":{"type":"string"}},"url":{"type":"string","description":"URL/website of the entity"},"riskAssessment":{"description":"Risk assessment of the entity","allOf":[{"$ref":"#/components/schemas/RiskAssessmentDto"}]}},"required":["id","name","legalName","type","isVerified","inNetwork","isRiskAssessed","description","isMicaCompliant","belongsToWarningList","countries","url"]},"EntityDetailedDto":{"type":"object","properties":{"id":{"type":"string","description":"The entity ID","example":"14f4fb9d-4c69-5843-8b18-dbb77540182b"},"name":{"type":"string","description":"The entity name"},"legalName":{"type":"string","description":"The legal name of the entitiy that is used to register their account with CryptoSwift. See \"legalEntities\" section in the single Entity details for a list of known legal entities for the Entity."},"type":{"type":"string","description":"The entity type"},"isVerified":{"type":"boolean","description":"Indicates if the entity is verified within CryptoSwift network"},"inNetwork":{"type":"boolean","description":"Indicates if the entity is part of the CryptoSwift network"},"updatedAt":{"type":"string","description":"Timestamp when the entity data was last updated","nullable":true,"format":"date-time"},"isRiskAssessed":{"type":"boolean","description":"Is the risk is assessed (by Scorechain) for this entity?"},"description":{"type":"string","description":"Description of the entity"},"isMicaCompliant":{"type":"boolean","description":"Flag showing if the entity is MiCA compliant"},"belongsToWarningList":{"type":"boolean","description":"Set to true if the entity appears on a warning list"},"countries":{"description":"Associated countries for the entity","type":"array","items":{"type":"string"}},"url":{"type":"string","description":"URL/website of the entity"},"riskAssessment":{"description":"Risk assessment of the entity","allOf":[{"$ref":"#/components/schemas/RiskAssessmentDto"}]},"email":{"type":"string","description":"Contact email of the entity when available","nullable":true},"notice":{"type":"string","description":"Notice for the exchange","nullable":true},"logo":{"type":"string","description":"Exchange logo URL","nullable":true},"fiats":{"description":"Supported fiat currencies","type":"array","items":{"type":"string"}},"urls":{"type":"object","description":"Exchange URL groups (website, twitter, chat, etc.)","additionalProperties":{"type":"array","items":{"type":"string"}}},"dateLaunched":{"type":"string","description":"Exchange launch date","nullable":true,"format":"date-time"},"spotVolumeUsd":{"type":"number","description":"Spot volume in USD","nullable":true},"spotVolumeLastUpdated":{"type":"string","description":"Timestamp when spot volume was last updated","nullable":true,"format":"date-time"},"weeklyVisits":{"type":"number","description":"Weekly website visits","nullable":true},"legalEntities":{"description":"Known legal entities for this entity","type":"array","items":{"$ref":"#/components/schemas/EntityLegalEntityDto"}}},"required":["id","name","legalName","type","isVerified","inNetwork","isRiskAssessed","description","isMicaCompliant","belongsToWarningList","countries","url"]},"WalletDto":{"type":"object","properties":{"id":{"type":"number","description":"The wallet ID"},"address":{"type":"string","description":"Wallet address"},"asset":{"type":"string","description":"Asset type. Use * to create a multi-asset wallet by adding all assets from the selected blockchain"},"blockchain":{"type":"string","description":"The blockchain name. You can find the list of supported blockchains <a target=\"_blank\" href=\"#tag/Blockchains/operation/findAll\">here</a> (use the returned \"name\" field). In the required blockchain is not included in the list, you can define your blockchain as free text, but be aware that this might affect Travel Rule message delivery rates."},"isConfirmed":{"type":"boolean","description":"Is tenant approved wallet","default":true},"metadata":{"type":"string","description":"Wallet metadata"},"createdAt":{"format":"date-time","type":"string","description":"Created at timestamp","example":"2026-06-23 18:24:07"}},"required":["id","address","asset","isConfirmed","createdAt"]},"CreateWalletDto":{"type":"object","properties":{"address":{"type":"string","description":"Wallet address"},"asset":{"type":"string","description":"Asset type. Use * to create a multi-asset wallet by adding all assets from the selected blockchain"},"blockchain":{"type":"string","description":"The blockchain name. You can find the list of supported blockchains <a target=\"_blank\" href=\"#tag/Blockchains/operation/findAll\">here</a> (use the returned \"name\" field). In the required blockchain is not included in the list, you can define your blockchain as free text, but be aware that this might affect Travel Rule message delivery rates."},"metadata":{"type":"string","description":"Wallet metadata"}},"required":["address","asset"]},"UpdateWalletDto":{"type":"object","properties":{"isConfirmed":{"type":"boolean","description":"Is tenant approved wallet","default":true},"metadata":{"type":"string","description":"Wallet metadata"}}},"WalletsUploadRequestDto":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Wallets CSV file with the size limit of up to 15MB"}},"required":["file"]},"WalletsUploadResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` in case any wallets has been created or there been 0 errors, otherwise `false`","example":true},"message":{"type":"string","description":"Details regarding the import","example":"Processing complete. Created 3 wallets with 1 errors"},"created":{"type":"number","description":"How many wallets were created","example":3},"errors":{"description":"All the errors occurred while importing the CSV file","example":["This wallet address (or addresses) 0x60d3cb411b5bd089bbdb17ea5fd41db08bcb0fbe has already been claimed. Please check your request details or contact customer support for assistance."],"items":{"type":"string"},"type":"array"}},"required":["success","message","created","errors"]},"RuleConditionDto":{"type":"object","properties":{"field":{"type":"string","description":"Condition field to evaluate.","enum":["status","riskSeverity","riskScore","amount","hasTxHash"]},"operator":{"description":"Condition operator.","allOf":[{"$ref":"#/components/schemas/RuleConditionOperator"}]},"value":{"description":"Condition value. Not required for EXISTS/NOT_EXISTS operators.","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}}]},"currency":{"description":"Optional currency for amount conditions.","allOf":[{"$ref":"#/components/schemas/TenantCurrency"}]}},"required":["field","operator"]},"RuleWhenDto":{"type":"object","properties":{"all":{"description":"All conditions must match (logical AND).","type":"array","items":{"$ref":"#/components/schemas/RuleConditionDto"}},"any":{"description":"Any condition may match (logical OR).","type":"array","items":{"$ref":"#/components/schemas/RuleConditionDto"}}},"required":["all","any"]},"RuleThenDto":{"type":"object","properties":{"decision":{"description":"Action to take when the rule matches.","allOf":[{"$ref":"#/components/schemas/RuleDecision"}]},"waitForSeconds":{"type":"number","description":"Required when decision is WAIT. Allowed range: 1..86400.","minimum":1,"maximum":86400},"onTimeoutDecision":{"description":"Required when decision is WAIT.","allOf":[{"$ref":"#/components/schemas/RuleTimeoutDecision"}]}},"required":["decision"]},"RuleDefinitionDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique rule ID within the rules array.","example":"high-amount-wait"},"name":{"type":"string","description":"Display name of the rule.","example":"Wait large transfers"},"enabled":{"type":"boolean","description":"Whether this rule is enabled.","example":true},"when":{"description":"Rule conditions block.","allOf":[{"$ref":"#/components/schemas/RuleWhenDto"}]},"then":{"description":"Rule action block.","allOf":[{"$ref":"#/components/schemas/RuleThenDto"}]}},"required":["id","name","enabled","when","then"]},"RuleEngineDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Rule engine ID."},"scope":{"description":"Rule engine direction scope.","allOf":[{"$ref":"#/components/schemas/RuleEngineScope"}]},"publishedVersion":{"type":"number","description":"Current published version number.","example":3},"latestComment":{"type":"string","description":"Latest publish comment for this rule engine.","nullable":true,"example":"Q1 rollout"},"hasUnpublishedDraft":{"type":"boolean","description":"True when draftRules differ from publishedRules and can be published.","example":true},"draftRules":{"description":"Current editable draft rule set.","type":"array","items":{"$ref":"#/components/schemas/RuleDefinitionDto"}},"publishedRules":{"description":"Currently active published rule set.","type":"array","items":{"$ref":"#/components/schemas/RuleDefinitionDto"}},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp (ISO)."},"updatedByUser":{"description":"User details for who last updated the rule engine. Null for API key updates.","nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/UserSummaryDto"}]}},"required":["id","scope","publishedVersion","hasUnpublishedDraft","draftRules","publishedRules","updatedAt"]},"RuleEngineListResponseDto":{"type":"object","properties":{"engines":{"description":"All rule engine configurations for the tenant.","type":"array","items":{"$ref":"#/components/schemas/RuleEngineDto"}}},"required":["engines"]},"UpdateDraftDto":{"type":"object","properties":{"draftRules":{"description":"Draft rules evaluated top-to-bottom. First matching rule wins.","example":[{"id":"high-amount-wait","name":"Wait large transfers","enabled":true,"when":{"all":[{"field":"amount","operator":"GTE","value":10000,"currency":"USD"}],"any":[]},"then":{"decision":"WAIT","waitForSeconds":120,"onTimeoutDecision":"REVIEW"}},{"id":"default-outgoing","name":"Default rule","enabled":true,"when":{"all":[],"any":[]},"then":{"decision":"PROCEED"}}],"type":"array","items":{"$ref":"#/components/schemas/RuleDefinitionDto"}}},"required":["draftRules"]},"RuleEngineValidationIssueDto":{"type":"object","properties":{"path":{"type":"string","description":"Path to the invalid field.","example":"draftRules[0].then.waitForSeconds"},"issue":{"type":"string","description":"Validation issue details.","example":"Required when decision=WAIT"}},"required":["path","issue"]},"RuleEngineValidationErrorResponseDto":{"type":"object","properties":{"error":{"type":"string","example":"VALIDATION_ERROR"},"message":{"type":"string","example":"Rule Engine validation failed"},"details":{"type":"array","items":{"$ref":"#/components/schemas/RuleEngineValidationIssueDto"}}},"required":["error","message","details"]},"PublishDto":{"type":"object","properties":{"comment":{"type":"string","description":"Optional publish comment for this version snapshot."}}},"RuleEnginePublishResponseDto":{"type":"object","properties":{"scope":{"description":"Scope of the published rule engine.","allOf":[{"$ref":"#/components/schemas/RuleEngineScope"}]},"publishedVersion":{"type":"number","description":"New published version number.","example":4},"publishedRules":{"description":"Rules that were published.","type":"array","items":{"$ref":"#/components/schemas/RuleDefinitionDto"}},"ruleEngineId":{"type":"string","format":"uuid","description":"Rule engine ID."},"versionId":{"type":"string","format":"uuid","description":"Created immutable version record ID."}},"required":["scope","publishedVersion","publishedRules","ruleEngineId","versionId"]},"RuleEngineVersionMetadataDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Version snapshot ID."},"version":{"type":"number","description":"Published version number.","example":4},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp (ISO)."},"createdBy":{"type":"string","description":"Who created this version (userId or via api).","nullable":true,"example":"42"},"comment":{"type":"string","description":"Optional comment attached at publish time.","nullable":true,"example":"Q1 rollout"}},"required":["id","version","createdAt"]},"RuleEngineVersionsResponseDto":{"type":"object","properties":{"scope":{"description":"Scope of the listed version snapshots.","allOf":[{"$ref":"#/components/schemas/RuleEngineScope"}]},"versions":{"description":"Published version history.","type":"array","items":{"$ref":"#/components/schemas/RuleEngineVersionMetadataDto"}}},"required":["scope","versions"]},"RuleEngineVersionSnapshotResponseDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Version snapshot ID."},"scope":{"description":"Scope of this snapshot.","allOf":[{"$ref":"#/components/schemas/RuleEngineScope"}]},"version":{"type":"number","description":"Published version number.","example":4},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp (ISO)."},"createdBy":{"type":"string","description":"Who created this version (userId or via api).","nullable":true,"example":"42"},"comment":{"type":"string","description":"Optional publish comment.","nullable":true,"example":"Q1 rollout"},"rules":{"description":"Full published rules snapshot.","type":"array","items":{"$ref":"#/components/schemas/RuleDefinitionDto"}}},"required":["id","scope","version","createdAt","rules"]},"RestoreDto":{"type":"object","properties":{"version":{"type":"number","description":"Version number to restore into draft.","example":3}},"required":["version"]},"SanctionedWalletDetailDto":{"type":"object","properties":{"address":{"type":"string","description":"Sanctioned wallet address matched exactly against the requested address.","example":"bc1qexample..."},"blockchain":{"type":"string","description":"Blockchain reported by the sanctions source for this wallet address.","example":"Bitcoin"},"name":{"type":"string","description":"Sanctioned subject name followed by the sanctions source.","example":"Example (OFAC)"},"sanctionDate":{"type":"string","description":"Sanction designation date when available.","example":"2020-04-22T13:34:45.000Z","nullable":true,"format":"date-time"}},"required":["address","blockchain","name"]},"SanctionedDestinationWalletDto":{"type":"object","properties":{"isSanctioned":{"type":"boolean","description":"Whether the requested wallet address matched active sanctions data.","example":true},"details":{"description":"Active sanctions records matching the requested wallet address.","type":"array","items":{"$ref":"#/components/schemas/SanctionedWalletDetailDto"}}},"required":["isSanctioned"]},"CheckWalletAddressSanctionsResponseDto":{"type":"object","properties":{"destinationWallet":{"description":"Sanctions screening result for the requested wallet address.","allOf":[{"$ref":"#/components/schemas/SanctionedDestinationWalletDto"}]}},"required":["destinationWallet"]},"AuthDto":{"type":"object","properties":{"usernameOrEmail":{"type":"string","description":"The username or email"},"password":{"type":"string","description":"The password"}},"required":["usernameOrEmail","password"]},"UserWithJwtDto":{"type":"object","properties":{"id":{"type":"number","description":"The user ID"},"name":{"type":"string","description":"The full name of the user"},"email":{"type":"string","description":"E-mail address"},"username":{"type":"string","description":"The username"},"isAdmin":{"type":"boolean","description":"Is the user an admin for the organisation (tenant)","default":false},"accessToken":{"type":"string","description":"The JWT access token"},"refreshToken":{"type":"string","description":"The JWT refresh token"},"accessTokenExpiresIn":{"type":"number","description":"The JWT access token expiry time in seconds"},"refreshTokenExpiresIn":{"type":"number","description":"The JWT refresh token expiry time in seconds"}},"required":["id","name","email","username","isAdmin","accessToken","refreshToken","accessTokenExpiresIn","refreshTokenExpiresIn"]},"JwtDto":{"type":"object","properties":{"accessToken":{"type":"string","description":"The JWT access token"},"refreshToken":{"type":"string","description":"The JWT refresh token"},"accessTokenExpiresIn":{"type":"number","description":"The JWT access token expiry time in seconds"},"refreshTokenExpiresIn":{"type":"number","description":"The JWT refresh token expiry time in seconds"}},"required":["accessToken","refreshToken","accessTokenExpiresIn","refreshTokenExpiresIn"]},"WalletVerificationThemeDto":{"type":"object","properties":{"fontFamily":{"type":"string","description":"The Google Font name"},"fontWeight":{"type":"number","description":"The Google Font weight. Where normal is 400, medium is 500 and bold is 700. If not provided, normal (400) is used."},"fontSize":{"type":"number","description":"The font size in pixels. Headings and related text scale from this value. 16px is the default font size and is used if not provided."},"fontColor":{"type":"string","description":"The font color"},"primaryColor":{"type":"string","description":"The primary color"},"backgroundColor":{"type":"string","description":"The background color"},"buttonBorderRadius":{"type":"number","description":"The button border radius"},"buttonShadowEnabled":{"type":"boolean","description":"The button shadow enabled"},"flowsOrder":{"type":"array","description":"The order in which wallet verification flows should be displayed by the widget. Flows not included can use the widget default order.","example":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"],"items":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"]}}}},"UpdateTenantSettingsDto":{"type":"object","properties":{"logoUrl":{"type":"string","description":"The public URL to logo"},"logoIconUrl":{"type":"string","description":"The public URL to icon"},"walletVerificationTheme":{"description":"The wallet verification theme","allOf":[{"$ref":"#/components/schemas/WalletVerificationThemeDto"}]},"serviceName":{"type":"string","description":"The `service name` that overrides the `tenant name` during wallet verification"}}},"TenantSettingsDto":{"type":"object","properties":{"id":{"type":"string","description":"The settings ID"},"tenantId":{"type":"number","description":"The tenant ID"},"logoUrl":{"type":"string","description":"The public URL to logo"},"logoIconUrl":{"type":"string","description":"The public URL to icon"},"walletVerificationTheme":{"description":"The wallet verification theme","allOf":[{"$ref":"#/components/schemas/WalletVerificationThemeDto"}]},"serviceName":{"type":"string","description":"The `service name` that overrides the `tenant name` during wallet verification"},"createdAt":{"format":"date-time","type":"string","description":"The createAt timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"The updatedAt timestamp"}},"required":["id","tenantId","createdAt","updatedAt"]},"UploadLogoDto":{"type":"object","properties":{"url":{"type":"string","description":"The publicly accessible URL of the uploaded logo"}},"required":["url"]},"CreateUserDto":{"type":"object","properties":{"name":{"type":"string","description":"The full name of the user"},"email":{"type":"string","description":"E-mail address"},"username":{"type":"string","description":"The username"},"password":{"type":"string","description":"The password","minLength":8},"isAdmin":{"type":"boolean","description":"Is the user an admin for the organisation (tenant)","default":false}},"required":["name","email","username","password","isAdmin"]},"UserDto":{"type":"object","properties":{"id":{"type":"number","description":"The user ID"},"name":{"type":"string","description":"The full name of the user"},"email":{"type":"string","description":"E-mail address"},"username":{"type":"string","description":"The username"},"password":{"type":"string","description":"The password","minLength":8},"isAdmin":{"type":"boolean","description":"Is the user an admin for the organisation (tenant)","default":false}},"required":["id","name","email","username","password","isAdmin"]},"UpdateUserDto":{"type":"object","properties":{"name":{"type":"string","description":"The full name of the user"},"email":{"type":"string","description":"E-mail address"},"username":{"type":"string","description":"The username"},"password":{"type":"string","description":"The password","minLength":8},"isAdmin":{"type":"boolean","description":"Is the user an admin for the organisation (tenant)","default":false}}},"BlockchainInfoDto":{"type":"object","properties":{"transactionHash":{"type":"string","description":"The transaction hash"},"origin":{"type":"string","description":"The originator wallet address"},"destination":{"type":"string","description":"The destination wallet address"},"blockchain":{"type":"string","description":"The blockchain name"}},"required":["transactionHash","origin","destination","blockchain"]},"VaspInfoDto":{"type":"object","properties":{"originatorVaspName":{"type":"string","description":"The originator VASP name"}}},"CreateClaimDto":{"type":"object","properties":{"asset":{"type":"string","description":"The asset"},"blockchainInfo":{"description":"The blockchain information","allOf":[{"$ref":"#/components/schemas/BlockchainInfoDto"}]},"vaspInfo":{"description":"The VASP information","allOf":[{"$ref":"#/components/schemas/VaspInfoDto"}]},"transactionId":{"type":"string","readOnly":true,"description":"ID of related transaction. Null if not applicable or not checked yet."}},"required":["asset","blockchainInfo"]},"ClaimStatus":{"type":"string","enum":["PENDING","DELIVERED","CONFIRMED"],"description":"The claim status"},"DetailedVaspInfoDto":{"type":"object","properties":{"providedOriginatorVasp":{"type":"string","description":"The provided originator VASP name"},"identifiedOriginatorVasp":{"type":"string","description":"The identified originator VASP name"}}},"DetailedClaimDto":{"type":"object","properties":{"id":{"type":"string","description":"The claim ID"},"asset":{"type":"string","description":"The asset"},"blockchainInfo":{"description":"The blockchain information","allOf":[{"$ref":"#/components/schemas/BlockchainInfoDto"}]},"status":{"description":"The claim status","allOf":[{"$ref":"#/components/schemas/ClaimStatus"}]},"transactionId":{"type":"string","readOnly":true,"description":"ID of related transaction. Null if not applicable or not checked yet."},"createdAt":{"format":"date-time","type":"string","description":"Created at timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Updated at timestamp"},"vaspInfo":{"description":"The VASP information","allOf":[{"$ref":"#/components/schemas/DetailedVaspInfoDto"}]}},"required":["id","asset","blockchainInfo","status","createdAt","updatedAt","vaspInfo"]},"WidgetCreateSatoshiFlowDto":{"type":"object","properties":{"depositAddress":{"type":"string","description":"VASP deposit wallet address is required for satoshi-test","example":"025ecb213e8322af685473d2e4c8b23b5c104a9e57822027380a9bf6cd68dc2bfc"},"amount":{"type":"number","description":"Amount to deposit for satoshi-test. If not provided CryptoSwift will generate one","example":5e-8}},"required":["depositAddress"]},"WalletVerificationMatchSubjectDto":{"type":"object","properties":{"type":{"type":"string","description":"Type: natural or legal person.","enum":["NATURAL","LEGAL"],"default":"NATURAL","example":"NATURAL"},"nameHash":{"type":"string","description":"SHA-256 hash of the canonicalized full name of the natural or legal person. Send the hash only, not the plain-text name. The value must be a lowercase 64-character hexadecimal SHA-256 digest.","example":"6f1c9d3d5c2f7b1e8a4f7c9b0d3a1e5f6c8b9a0d2e4f6a8b0c1d3e5f7a9b1c3"}},"required":["nameHash"]},"WalletVerificationMatchPolicyDto":{"type":"object","properties":{"minimumMatchLevel":{"type":"string","description":"The minimum reusable matching level required to auto-verify. Default value is `MEDIUM`.","default":"MEDIUM","enum":["LOW","MEDIUM","HIGH"]},"maxReuseAgeDays":{"type":"number","description":"Maximum age, in days, of a previous verified wallet verification that can be reused for auto - verification.","default":180,"example":90}}},"WalletVerificationReuseRequestDto":{"type":"object","properties":{"subject":{"description":"Wallet owner identity data used to find a reusable verified wallet verification. The original owner name should not be sent, only its hash.","example":{"type":"NATURAL","nameHash":"6f1c9d3d5c2f7b1e8a4f7c9b0d3a1e5f6c8b9a0d2e4f6a8b0c1d3e5f7a9b1c3"},"allOf":[{"$ref":"#/components/schemas/WalletVerificationMatchSubjectDto"}]},"policy":{"description":"Optional reuse policy that controls how strong and how recent a previous verification match must be before auto-verification is allowed.","example":{"minimumMatchLevel":"HIGH","maxReuseAgeDays":180},"allOf":[{"$ref":"#/components/schemas/WalletVerificationMatchPolicyDto"}]}},"required":["subject"]},"WidgetCreateRequestDto":{"type":"object","properties":{"allowedFlows":{"type":"array","description":"Allowed self-hosted wallet verification flows. If not provided, CryptoSwift will automatically select the most suitable verification flows","example":["SATOSHI_TEST","SIGNATURE_PROOF"],"items":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"]}},"satoshiFlow":{"description":"In case of a satoshi-test the next properties should be provided","example":{"depositAddress":"025ecb213e8322af685473d2e4c8b23b5c104a9e57822027380a9bf6cd68dc2bfc","amount":5e-8},"allOf":[{"$ref":"#/components/schemas/WidgetCreateSatoshiFlowDto"}]},"asset":{"type":"string","description":"Asset type<br/>\n    In case of satoshi-test, it should be a native asset of the blockchain (e.g., 'BTC' for Bitcoin, 'ETH' for Ethereum). <br/>","example":"BTC"},"blockchain":{"type":"string","description":"The name of blockchain network or a 'chainId' for EVM only.<br/>\n    You can find the supported chains listed <a target=\"_blank\" href=\"#tag/Blockchains/operation/getBlockchains\">here</a>, use the blockchain name to initiate the widget.","example":"Bitcoin"},"address":{"type":"string","description":"Self hosted wallet address to verify","example":"1LqBGSKuX8PhvWpExwi2u3CeptkUM3N4cS"},"metadata":{"type":"string","description":"Self hosted wallet metadata that can be used to identify the wallet or user outside of the CryptoSwift system","example":"be0bf82b-426e-40a6-a4e5-09800db30908"},"redirectUrl":{"type":"string","description":"This field is required when the widget is hosted by CryptoSwift. For more details, refer to the [documentation ](https://dev.cryptoswift.eu/docs/self-hosted-wallet-verification/widget)."},"origin":{"type":"string","description":"The origin `<scheme>://<hostname>[:<port>]` that will be used to host the widget. It will enforce security both on the client-side and while validating the signature (if applicable). <br /><br />\n    In case you are using the widget as a Web Component, make sure to set the origin to the URL you are serving the widget from (without the trailing / in the URL!).","example":"https://wallet.cryptoswift.eu"},"allowedLanguages":{"type":"array","description":"List of allowed languages for the self-hosted wallet interface. If not provided, all available languages will be shown","example":["en","ko"],"items":{"type":"string","enum":["en","de","et","cs","hu","pl","ru","uk","es","ko"]}},"reuse":{"description":"Optional reusable verification input and policy. When provided, CryptoSwift uses the supplied wallet owner identity data and reuse policy to look for a previous eligible verified wallet verification that can auto-complete the new verification.","allOf":[{"$ref":"#/components/schemas/WalletVerificationReuseRequestDto"}]}},"required":["asset","blockchain","address"]},"WalletVerificationStatus":{"type":"string","enum":["PENDING","VERIFIED","FAILED","DELETED","DECLINED","ACTION_REQUIRED"],"description":"Self hosted wallet verification status"},"WalletVerificationFlow":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"],"description":"Self hosted wallet verification flow"},"WalletVerificationReuseResponseDto":{"type":"object","properties":{"matchLevel":{"type":"string","description":"The matching score that was achieved and used for auto-verification.","enum":["LOW","MEDIUM","HIGH"],"example":"HIGH"},"matchedAttributes":{"type":"array","description":"The owner claim fields that matched the previous eligible wallet verification.","example":["nameHash","type"],"items":{"type":"string","enum":["nameHash","type"]}},"policy":{"description":"Reuse policy that was applied when evaluating whether a previous verified wallet verification could be reused.","example":{"minimumMatchLevel":"HIGH","maxReuseAgeDays":180},"allOf":[{"$ref":"#/components/schemas/WalletVerificationMatchPolicyDto"}]}},"required":["matchLevel","matchedAttributes"]},"WalletVerificationDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the wallet verification request","example":"e04fbd02-edb4-4f21-8c8c-11dc9a0b3bbd"},"allowedFlows":{"type":"array","description":"Allowed self-hosted wallet verification flows. If not provided, CryptoSwift will automatically select the most suitable verification flows","example":["SATOSHI_TEST","SIGNATURE_PROOF"],"items":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"]}},"satoshiFlow":{"description":"In case of a satoshi-test the next properties should be provided","example":{"depositAddress":"025ecb213e8322af685473d2e4c8b23b5c104a9e57822027380a9bf6cd68dc2bfc","amount":5e-8},"allOf":[{"$ref":"#/components/schemas/WidgetCreateSatoshiFlowDto"}]},"asset":{"type":"string","description":"Asset type","example":"BTC"},"blockchain":{"type":"string","description":"The blockchain network to interact with.<br/>\n      Supported values include all chains listed in <a target=\"_blank\" href=\"https://github.com/wevm/viem/blob/main/src/chains/index.ts\">Viem's chain definitions</a>, such as Ethereum, Goerli Ether, Polygon, Arbitrum One, OP Mainnet, and many more. The value must match one of the supported chain names from the Viem library or match Bitcoin or Solana","example":"Bitcoin"},"address":{"type":"string","description":"Self hosted wallet address to verify","example":"1LqBGSKuX8PhvWpExwi2u3CeptkUM3N4cS"},"metadata":{"type":"string","description":"Self hosted wallet metadata that can be used to identify the wallet or user outside of the CryptoSwift system","example":"be0bf82b-426e-40a6-a4e5-09800db30908"},"redirectUrl":{"type":"string","description":"This field is required when the widget is hosted by CryptoSwift. For more details, refer to the [documentation ](https://dev.cryptoswift.eu/docs/self-hosted-wallet-verification/widget)."},"origin":{"type":"string","description":"The origin `<scheme>://<hostname>[:<port>]` that will be used to host the widget. It will enforce security both on the client-side and while validating the signature (if applicable). <br /><br />\n    In case you are using the widget as a Web Component, make sure to set the origin to the URL you are serving the widget from (without the trailing / in the URL!).","example":"https://wallet.cryptoswift.eu"},"verifiedTransactionHash":{"type":"string","description":"Self hosted wallet verification transaction hash","example":"5edb2795e524a4b5b9191433348171da35af0c8cd1c04489c5b093e54882963d"},"status":{"description":"Self hosted wallet verification status","example":"VERIFIED","allOf":[{"$ref":"#/components/schemas/WalletVerificationStatus"}]},"statusReasoning":{"type":"string","description":"Self hosted wallet verification status reasoning","example":"Verification has expired"},"updatedAt":{"format":"date-time","type":"string","description":"When self hosted wallet verification been updated","example":"2026-06-23 18:24:07"},"flow":{"description":"Self hosted wallet verification flow","example":"SATOSHI_TEST","allOf":[{"$ref":"#/components/schemas/WalletVerificationFlow"}]},"message":{"type":"string","description":"The plain text message that was signed to prove ownership of the wallet address. This must be exactly the same as what the user signed.","example":"I own this wallet as of 2026-06-23 18:24:07"},"signature":{"type":"string","description":"The cryptographic signature generated by signing the above message with the private key of the wallet address.","example":"q7XUz9XJbWjK9YO2iA8eW3OmEDCuqKDG12tzmPVNlDb9X6G6MxwGqv8J8B4gEZq43vU3D9VaGRKqB1wnyCrR7A="},"createdAt":{"format":"date-time","type":"string","description":"When self hosted wallet verification been created","example":"2026-06-23 18:24:07"},"riskScore":{"type":"number","description":"Overall numerical (0 - 100) risk score of the wallet.","example":42},"riskSeverity":{"type":"string","description":"Overall risk severity of the wallet.","enum":["low","medium","high"],"example":"medium"},"withdrawalAddressDetectedEntity":{"type":"string","description":"Entity name associated with the withdrawal address, when detected by blockchain analytics.","example":"Binance"},"warnings":{"description":"Descriptive warning messages, if applicable.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/WarningDto"}},"token":{"type":"string","description":"The short lived token which is valid for 24 hours. The token is used to start the verification flow for the widget. In case you are using the widget as a Web Component, set the token as the `token` parameter when loading the widget.","example":"3d361a62-194a-4ddc-a7cc-c7e7ea78076e"},"url":{"type":"string","description":"The URL to start the verification flow. Can be used to redirect the user to the widget. The URL contains the token as a query parameter.","example":"http://wallet.cryptoswift.eu?token=3d361a62-194a-4ddc-a7cc-c7e7ea78076e"},"reuse":{"description":"Reusable verification result. Contains details when this wallet verification was automatically completed by reusing a previous eligible verified wallet verification; otherwise null.","nullable":true,"example":{"matchLevel":"HIGH","matchedAttributes":["nameHash","type"],"policy":{"minimumMatchLevel":"HIGH","maxReuseAgeDays":180}},"type":"object","allOf":[{"$ref":"#/components/schemas/WalletVerificationReuseResponseDto"}]},"widgetUrl":{"type":"string","description":"Deprecated, please use `url` instead","example":"e04fbd02-edb4-4f21-8c8c-11dc9a0b3bbd","deprecated":true},"depositAddress":{"type":"string","deprecated":true,"description":"Deprecated, please use `satoshiFlow.depositAddress` instead. VASP deposit wallet address","example":"025ecb213e8322af685473d2e4c8b23b5c104a9e57822027380a9bf6cd68dc2bfc"},"withdrawalMetadata":{"type":"string","deprecated":true,"description":"Deprecated, please use `metadata` instead. Self hosted wallet metadata that can be used to identify the wallet or user outside of the CryptoSwift system","example":"be0bf82b-426e-40a6-a4e5-09800db30908"},"amount":{"type":"number","deprecated":true,"description":"Deprecated, please use `satoshiFlow.deposit` instead. Amount to deposit","example":5e-8},"withdrawalAddress":{"type":"string","deprecated":true,"description":"Deprecated, please use `address` instead. Self hosted wallet address to verify","example":"1LqBGSKuX8PhvWpExwi2u3CeptkUM3N4cS"},"walletVerificationId":{"type":"string","description":"Deprecated, please use 'id' instead.","example":"3d361a62-194a-4ddc-a7cc-c7e7ea78076e","deprecated":true},"signedMessage":{"type":"string","deprecated":true,"description":"Deprecated, please use `message` instead. The plain text message that was signed to prove ownership of the wallet address. This must be exactly the same as what the user signed.","example":"I own this wallet as of 2026-06-23 18:24:14"}},"required":["id","asset","blockchain","address","status","flow","createdAt","token","url","reuse","widgetUrl","withdrawalAddress","walletVerificationId"]},"WalletVerificationVisualProofSignedUrlResponseDto":{"type":"object","properties":{"urls":{"description":"A temporary array of URLs to access the visual proof that is valid for 15 minutes","type":"array","items":{"type":"string"}}},"required":["urls"]},"WalletVerificationUpdateRequestDto":{"type":"object","properties":{"metadata":{"type":"string","description":"Self hosted wallet metadata that can be used to identify the wallet or user outside of the CryptoSwift system","example":"be0bf82b-426e-40a6-a4e5-09800db30908"},"status":{"description":"Self hosted wallet verification status","example":"FAILED","allOf":[{"$ref":"#/components/schemas/WalletVerificationStatus"}]},"statusReasoning":{"type":"string","description":"Self hosted wallet verification status reasoning","example":"Verification has expired"},"withdrawalMetadata":{"type":"string","description":"Deprecated, please use metadata instead. Self hosted wallet metadata that can be used to identify the wallet or user outside of the CryptoSwift system","example":"be0bf82b-426e-40a6-a4e5-09800db30908","deprecated":true}},"required":["status"]},"BlockchainNameDto":{"type":"object","properties":{"name":{"type":"string","description":"The blockchain name"},"chainId":{"type":"string","description":"The EVM chain ID if applicable"},"supportedVerificationFlow":{"type":"array","description":"List of supported wallet verification flows for this blockchain (eg Satoshi-Test, Signature Proof, etc).","example":["SATOSHI_TEST","SIGNATURE_PROOF"],"items":{"type":"string","enum":["SATOSHI_TEST","VISUAL_PROOF","SELF_DECLARED","SIGNATURE_PROOF"]}}},"required":["name"]},"CheckTinResponseDto":{"type":"object","properties":{"country":{"type":"string","description":"Human readable country name for the provided code.","example":"Estonia"},"error":{"type":"boolean","description":"Indicates whether the upstream service flagged an error.","example":false},"structureValid":{"type":"boolean","description":"Structural validity of the TIN according to the EU service. This represents if the format of the TIN (e.g., the total number of characters, the mix of letters/numbers, the position of separators) matches the known pattern for that country.","example":true},"syntaxValid":{"type":"boolean","description":"Syntax validity of the TIN according to the EU service. This is a more sophisticated check that uses a mathematical rule or algorithm (like a checksum calculation) provided by the national tax authority to verify the internal consistency of the numbers themselves.","example":true},"syntaxUnavailable":{"type":"boolean","description":"If set to true, the national tax authority of that country has NOT provided the syntax validation algorithm to the service. Therefore, the system cannot perform a complete syntax check on the TIN you submitted.","example":false}},"required":["country","error","structureValid","syntaxValid","syntaxUnavailable"]},"ErrorResponse":{"type":"object","required":["message","statusCode"],"additionalProperties":true,"properties":{"statusCode":{"type":"integer","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Request validation failed"},"error":{"type":"string","example":"Bad Request"},"timestamp":{"type":"string","format":"date-time","example":"2026-01-15T10:20:30.000Z"}}},"TransactionWebhookEvent":{"description":"Current transaction webhook payload for integrations that receive transaction notifications from CryptoSwift. The request body is the transaction object itself (`TransactionDto`).\n\nEvent type header: `X-Event-Type` with value `transaction` for transaction notifications.\n\nSignature header: `CryptoSwift-Signature` with the format `t=<unix_epoch_ms>,s=<hex_hmac_sha256>`. Timestamp header: no separate timestamp header is currently sent; use the `t` value from `CryptoSwift-Signature`.\n\nTo verify the signature, compute `HMAC-SHA256` over `<t>.<raw JSON request body>` using your tenant `webhookSecret`, encode it as lowercase hexadecimal, and compare it with the `s` value using a timing-safe comparison. Reject stale timestamps according to your replay-protection policy.\n\nRetry behavior: webhook delivery logs failed requests and does not perform automatic retries.\n\nTimeout expectations: no custom HTTP timeout is configured. Webhook receivers should return a 2xx response quickly, ideally within 10 seconds, and process long-running work asynchronously.\n\nDuplicate handling: transaction status and update notifications can be delivered more than once by operational replays. Use the transaction `id`, latest `status`, and your own processed-event state to avoid duplicate side effects.","allOf":[{"$ref":"#/components/schemas/TransactionDto"}]}},"responses":{"BadRequest":{"description":"Bad request. The request payload, parameters, or headers are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"malformedJson":{"summary":"Malformed JSON","value":{"message":"Expected ',' or '}' after property value in JSON at position 26 (line 3 column 5)","error":"Bad Request","statusCode":400}},"genericBadRequest":{"summary":"Generic bad request","value":{"message":"Bad request, please check the provided data or contact customer support","error":"Bad Request","statusCode":400}}}}}},"Unauthorized":{"description":"Authentication failed or the X-Api-Key header is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"message":"Unauthorized","statusCode":401}}}}}},"Forbidden":{"description":"The authenticated caller is not allowed to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"detailedApiException":{"summary":"Detailed API exception","value":{"statusCode":403,"message":"Access Denied","error":"FORBIDDEN","timestamp":"2026-01-15T10:20:30.000Z"}}}}}},"NotFound":{"description":"The requested resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"message":"Cannot POST /transactionss","error":"Not Found","statusCode":404}}}}}},"RateLimited":{"description":"Too many requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"message":"ThrottlerException: Too Many Requests","error":"Too Many Requests","statusCode":429}}}}}},"InternalServerError":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"default":{"value":{"message":"Internal server error","error":"Internal Server Error","statusCode":500}}}}}}}},"externalDocs":{"description":"CryptoSwift Developer Portal","url":"https://dev.cryptoswift.eu"}}