From 0043a7efdfcb0c10abce1ab74b240de90d9ccbda Mon Sep 17 00:00:00 2001 From: Eric Viana Date: Mon, 27 Jul 2026 19:45:33 -0300 Subject: [PATCH 1/3] feat!: complete the receivers to customers rename (wave 2), with a wire contract check Wave-2 breaking release (3.0.0): the remaining receiver_* field renames, removal of the receiver.* webhook events and legacy surface, and a mechanical contract-check in CI that validates every SDK-declared wire key and the webhook enum against the committed public spec snapshot (.api-sync/spec-snapshot.json). Held until blindpay-v2 #1799 reaches production; the branch history was rebuilt as this single commit so the snapshot only ever contains the public filtered spec. Claude-Session: https://claude.ai/code/session_01F1stiNzuNtJXoXtiW9ZCbs --- .api-sync/contract-allowlist.json | 155 + .api-sync/spec-snapshot.json | 53604 ++++++++++++++++ .github/workflows/main.yaml | 13 +- CLAUDE.md | 9 +- composer.json | 3 +- scripts/contract-check.php | 312 + src/BlindPay.php | 22 +- src/Resources/ApiKeys/ApiKeys.php | 215 - src/Resources/Customers/Customers.php | 2 +- src/Resources/Instances/Instances.php | 6 +- src/Resources/Instances/InstancesWrapper.php | 2 - src/Resources/Payins/Payins.php | 13 +- src/Resources/Payouts/Payouts.php | 25 +- src/Resources/Quotes/Quotes.php | 6 +- src/Resources/Receivers/Receivers.php | 1594 - src/Resources/Receivers/ReceiversWrapper.php | 125 - .../TermsOfService/TermsOfService.php | 6 +- src/Resources/Transfers/Transfers.php | 28 +- src/Resources/Webhooks/Webhooks.php | 54 +- src/Types/ReceiverStatus.php | 16 - tests/Resources/ApiKeys/ApiKeysTest.php | 142 - .../BankAccounts/BankAccountsTest.php | 22 +- tests/Resources/Payins/PayinsTest.php | 10 +- tests/Resources/Payouts/PayoutsTest.php | 20 +- tests/Resources/Quotes/QuotesTest.php | 4 +- tests/Resources/Receivers/ReceiversTest.php | 618 - .../TermsOfService/TermsOfServiceTest.php | 2 +- tests/Resources/Transfers/TransfersTest.php | 28 +- tests/Resources/Webhooks/WebhooksTest.php | 6 +- 29 files changed, 54182 insertions(+), 2880 deletions(-) create mode 100644 .api-sync/contract-allowlist.json create mode 100644 .api-sync/spec-snapshot.json create mode 100644 scripts/contract-check.php delete mode 100644 src/Resources/ApiKeys/ApiKeys.php delete mode 100644 src/Resources/Receivers/Receivers.php delete mode 100644 src/Resources/Receivers/ReceiversWrapper.php delete mode 100644 src/Types/ReceiverStatus.php delete mode 100644 tests/Resources/ApiKeys/ApiKeysTest.php delete mode 100644 tests/Resources/Receivers/ReceiversTest.php diff --git a/.api-sync/contract-allowlist.json b/.api-sync/contract-allowlist.json new file mode 100644 index 0000000..a962769 --- /dev/null +++ b/.api-sync/contract-allowlist.json @@ -0,0 +1,155 @@ +{ + "$schema": "Entries exempt a specific SDK class from Direction A (declared wire key not found anywhere in .api-sync/spec-snapshot.json). Each entry needs a reason and an owner. Do not add entries for anything the current PR's changelist should fix.", + "entries": [ + { + "schema": "BankAccountResponse", + "field": "account_holder_name", + "reason": "Pre-existing: get-single-bank-account models a legacy shape that predates the current BankAccountOut wire contract (spec uses beneficiary_name). Not part of the customer rename; needs its own fix.", + "owner": "eric@blindpay.com" + }, + { + "schema": "BankAccountResponse", + "field": "swift_code", + "reason": "Pre-existing: spec only has swift_code_bic, no bare swift_code. Same legacy-shape issue as account_holder_name on this type.", + "owner": "eric@blindpay.com" + }, + { + "schema": "BankAccountResponse", + "field": "is_primary", + "reason": "Pre-existing: field does not exist anywhere in the wire contract for bank accounts. Same legacy-shape issue as account_holder_name on this type.", + "owner": "eric@blindpay.com" + }, + { + "schema": "IndividualWithStandardKYC", + "field": "aiprise_validation_key", + "reason": "Pre-existing: not a response property anywhere in the spec (only appears as an unrelated webhook route path segment). Predates the customer rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "IndividualWithEnhancedKYC", + "field": "aiprise_validation_key", + "reason": "Pre-existing: not a response property anywhere in the spec (only appears as an unrelated webhook route path segment). Predates the customer rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "BusinessWithStandardKYB", + "field": "aiprise_validation_key", + "reason": "Pre-existing: not a response property anywhere in the spec (only appears as an unrelated webhook route path segment). Predates the customer rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "IndividualWithEnhancedKYC", + "field": "individual_holding_doc_front_file", + "reason": "Pre-existing: field was dropped from CreateCustomerIn/CustomerOut/CustomerOut before wave 2; unrelated to the receiver-to-customer rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateIndividualWithEnhancedKYCInput", + "field": "individual_holding_doc_front_file", + "reason": "Pre-existing: same CreateCustomerIn shape gap as IndividualWithEnhancedKYC.individual_holding_doc_front_file. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "UpdateCustomerInput", + "field": "individual_holding_doc_front_file", + "reason": "Pre-existing: same UpdateCustomerIn shape gap as IndividualWithEnhancedKYC.individual_holding_doc_front_file. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payin", + "field": "billing_fee", + "reason": "Pre-existing: PayinOut only has billing_fee_amount (already modeled separately on this type). billing_fee is dead/incorrect and predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payin", + "field": "tracking_partner_fee", + "reason": "Pre-existing: PayinOut has no tracking_partner_fee key (it has a differently-shaped partner_fee object). Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payout", + "field": "tracking_partner_fee", + "reason": "Pre-existing: PayoutOut has no tracking_partner_fee key (it has a differently-shaped partner_fee object). Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Transfer", + "field": "tracking_partner_fee", + "reason": "Pre-existing: TransferOut has no tracking_partner_fee key. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateStellarPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Pre-existing: same PayoutOnEvmOut shape gap as Payout.tracking_partner_fee. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateEvmPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Pre-existing: same PayoutOnEvmOut shape gap as Payout.tracking_partner_fee. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateSolanaPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Pre-existing: same PayoutOnEvmOut shape gap as Payout.tracking_partner_fee. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateEvmPayinResponse", + "field": "tracking_partner_fee", + "reason": "Pre-existing: same PayinOut shape gap as Payin.tracking_partner_fee. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "PartnerFee", + "field": "evm_wallet_address", + "reason": "Pre-existing: the partner-fees create/response schema has no evm_wallet_address property. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "PartnerFee", + "field": "stellar_wallet_address", + "reason": "Pre-existing: the partner-fees create/response schema has no stellar_wallet_address property. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeInput", + "field": "evm_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.evm_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeInput", + "field": "stellar_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.stellar_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeResponse", + "field": "evm_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.evm_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeResponse", + "field": "stellar_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.stellar_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPartnerFeeResponse", + "field": "evm_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.evm_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPartnerFeeResponse", + "field": "stellar_wallet_address", + "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.stellar_wallet_address. Predates wave 2.", + "owner": "eric@blindpay.com" + } + ] +} diff --git a/.api-sync/spec-snapshot.json b/.api-sync/spec-snapshot.json new file mode 100644 index 0000000..c7ae4a9 --- /dev/null +++ b/.api-sync/spec-snapshot.json @@ -0,0 +1,53604 @@ +{ + "openapi": "3.1.0", + "info": { + "version": "1.0.0", + "title": "BlindPay API" + }, + "tags": [ + { + "name": "Instances" + }, + { + "name": "Terms Of Service" + }, + { + "name": "Customers" + }, + { + "name": "Bank Accounts" + }, + { + "name": "Virtual Accounts" + }, + { + "name": "Blockchain Wallets" + }, + { + "name": "Offramp Wallets" + }, + { + "name": "Payouts Quotes" + }, + { + "name": "Payouts" + }, + { + "name": "Payin Quotes" + }, + { + "name": "Payins" + }, + { + "name": "Wallets" + }, + { + "name": "Transfer Quotes" + }, + { + "name": "Transfers" + }, + { + "name": "Webhook Endpoints" + }, + { + "name": "Fees" + }, + { + "name": "Partner Fees" + }, + { + "name": "Upload" + }, + { + "name": "Available" + }, + { + "name": "Solana" + }, + { + "name": "Stellar" + }, + { + "name": "Errors", + "description": "## Error responses\n\nEvery error response uses this envelope:\n\n```json\n{\n \"success\": false,\n \"code\": \"QUOTES_EXPIRED\",\n \"message\": \"quote_expired\",\n \"description\": \"This quote has expired. Request a new quote and try again.\",\n \"errors\": [],\n \"trace_id\": \"0af7651916cd43dd8448eb211c80319c\"\n}\n```\n\n- `code` is a stable identifier, safe to build programmatic handling on.\n- `message` is a legacy machine string kept for backward compatibility. Prefer `code`.\n- `description` is human-readable text, safe to show to end users.\n- `trace_id` identifies the request. Include it when contacting support.\n\nRetry semantics per code: `retryable` means the same request can be retried as is, `terminal` means do not retry, and `actionable` means the request succeeds only after you fix something (for example funding a balance or correcting bank details).\n\nThe Status column shows the HTTP status a code typically responds with; the per-endpoint error tabs list the exact status each endpoint returns.\n\n### Error codes\n\n| Code | Status | Retry | Description |\n| --- | --- | --- | --- |\n| `AUTH_EMAIL_ALREADY_REGISTERED` | 409 | terminal | This email address is already registered. |\n| `AUTH_FORBIDDEN` | 403 | terminal | You do not have permission to perform this action. |\n| `AUTH_IP_BLOCKED` | 403 | terminal | Requests from this IP address are not allowed for this API key. |\n| `AUTH_RATE_LIMITED` | 429 | retryable | Too many requests. Wait a moment and try again. |\n| `AUTH_SERVICE_UNAVAILABLE` | 503 | retryable | The authentication service is temporarily unavailable. Try again shortly. |\n| `AUTH_TOKEN_INVALID` | 401 | actionable | This link or token is invalid or has expired. Request a new one. |\n| `AUTH_UNAUTHORIZED` | 401 | actionable | Authentication failed. Check your API key or session and try again. |\n| `BANK_ACCOUNTS_INCOMPLETE` | 400 | actionable | The bank account details are incomplete for this payment method. Provide the missing fields. |\n| `BANK_ACCOUNTS_INVALID_BANK_CODE` | 400 | actionable | The bank code provided is not valid for this payment rail. The message lists where to fetch the valid codes. |\n| `BANK_ACCOUNTS_INVALID_ROUTING` | 400 | actionable | The routing number provided is not valid. Check the number and try again. |\n| `BANK_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This bank account is not approved yet. |\n| `BANK_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested bank account was not found. |\n| `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED` | 400 | terminal | This banking option is not supported for this operation. |\n| `BANK_ACCOUNTS_RTP_NOT_SUPPORTED` | 400 | terminal | The provided routing number does not support instant payments. |\n| `BILLING_INVOICE_NOT_FOUND` | 404 | actionable | The requested invoice was not found. |\n| `BILLING_INVOICE_NOT_PAYABLE` | 409 | terminal | This invoice cannot be paid or collected in its current state. |\n| `BILLING_NOT_AVAILABLE` | 403 | terminal | Billing is not available for development instances. |\n| `BLOCKCHAIN_CALL_FAILED` | 400 | retryable | The blockchain call could not be completed. Check the transaction details and try again. |\n| `BLOCKCHAIN_NETWORK_NOT_SUPPORTED` | 400 | terminal | This network or token combination is not supported for this operation. |\n| `BLOCKCHAIN_TX_FAILED` | 502 | retryable | The blockchain transaction failed. Try again, and contact support if the problem persists. |\n| `COMPLIANCE_RFI_IN_PROGRESS` | 409 | actionable | An information request is already in progress. Resolve it before continuing. |\n| `COMPLIANCE_RFI_INVALID` | 400 | actionable | The information request could not be processed. Check the submitted fields. |\n| `CUSTOMERS_ALREADY_APPROVED` | 409 | terminal | This customer is already approved. |\n| `CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE` | 400 | terminal | Enhanced verification is not available for business customers. Use standard verification (kyc_type: standard) for businesses. |\n| `CUSTOMERS_COUNTRY_NOT_SUPPORTED` | 400 | terminal | This country is not supported for this operation. |\n| `CUSTOMERS_ENHANCED_KYC_REQUIRED` | 400 | actionable | Individuals from high-risk countries must use enhanced verification (kyc_type: enhanced); standard verification is not available for them. See https://www.blindpay.com/docs/kb/supported-countries for country tiers. |\n| `CUSTOMERS_ID_DOCUMENT_INVALID` | 400 | actionable | The identity document is not an accepted passport or national ID. Provide a valid passport or national ID for this customer (a driver license is not accepted for high-risk countries). |\n| `CUSTOMERS_INVALID_DATA` | 422 | actionable | The customer data was rejected by the banking provider. Check the highlighted fields and try again. |\n| `CUSTOMERS_INVALID_PHONE` | 400 | actionable | The phone number provided is not valid. Check the number and try again. |\n| `CUSTOMERS_INVALID_TAX_ID` | 400 | actionable | The tax ID provided is not valid. Check the value and try again. |\n| `CUSTOMERS_KYC_NOT_APPROVED` | 403 | actionable | This customer has not completed verification yet. Complete the verification before continuing. |\n| `CUSTOMERS_NOT_FOUND` | 404 | actionable | The requested customer was not found. |\n| `CUSTOMERS_ONBOARDING_INCOMPLETE` | 400 | actionable | Onboarding is not complete yet. Finish the remaining steps before continuing. |\n| `DATA_INTEGRITY_ERROR` | 422 | terminal | This record could not be loaded because it contains invalid stored data. Contact support with the ID below. |\n| `FEES_NOT_FOUND` | 404 | actionable | The requested fee configuration was not found. |\n| `FEES_PARTNER_FEE_EXCEEDED` | 400 | actionable | The partner fee exceeds the allowed maximum for this transaction. |\n| `FILES_ANALYSIS_FAILED` | 502 | retryable | The document could not be analyzed. Try again, and contact support if the problem persists. |\n| `FILES_EMPTY` | 400 | actionable | The uploaded file is empty. Upload a valid file. |\n| `FILES_TOO_LARGE` | 400 | actionable | The file is too large. Upload a smaller file. |\n| `FILES_TYPE_NOT_ALLOWED` | 400 | actionable | This file type is not allowed. Upload a supported file type. |\n| `FILES_UNREADABLE` | 400 | actionable | We could not read the uploaded file. Check the file and try again. |\n| `INSTANCES_BLOCKED` | 403 | terminal | This account is blocked. Contact support for assistance. |\n| `INSTANCES_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of instances allowed for your account. |\n| `INSTANCES_NOT_FOUND` | 404 | actionable | The requested instance was not found. |\n| `INTERNAL_ERROR` | 500 | retryable | Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists. |\n| `LIMITS_AMOUNT_OUT_OF_RANGE` | 400 | actionable | The amount is outside the allowed range. The message includes the allowed range. |\n| `LIMITS_VOLUME_EXCEEDED` | 400 | actionable | You exceeded your transaction volume limit. The message includes the remaining amount available. |\n| `PAYINS_ALREADY_TERMINAL` | 409 | terminal | This payin already reached a final status and cannot be changed. |\n| `PAYINS_METHOD_NOT_SUPPORTED` | 400 | terminal | This payment method is not supported for this operation. |\n| `PAYINS_NOT_FOUND` | 404 | actionable | The requested payin was not found. |\n| `PAYINS_TAX_ID_REQUIRED` | 400 | actionable | A tax ID is required for this payment method. Provide the tax ID and try again. |\n| `PAYOUTS_ALLOWANCE_NOT_CONFIRMED` | 400 | retryable | The token approval for this payout has not been confirmed on-chain yet, or the approved amount is lower than the payout amount. Wait for the approval transaction to confirm and execute the quote again. |\n| `PAYOUTS_AMOUNT_BELOW_MINIMUM` | 400 | actionable | The amount is below the minimum for this payment rail. |\n| `PAYOUTS_DOCUMENTS_NOT_ACCEPTED` | 400 | terminal | Document upload is only available for international wire payouts. |\n| `PAYOUTS_INSUFFICIENT_BALANCE` | 400 | actionable | There is not enough balance to complete this payout. Fund your balance and try again. |\n| `PAYOUTS_NOT_FOUND` | 404 | actionable | The requested payout was not found. |\n| `QUOTES_ALREADY_USED` | 409 | actionable | This quote was already used. Request a new quote. |\n| `QUOTES_EXPIRED` | 400 | actionable | This quote has expired. Request a new quote and try again. |\n| `QUOTES_INSUFFICIENT_LIQUIDITY` | 400 | actionable | There is not enough market liquidity to fill this amount right now. Try a smaller amount or try again later. |\n| `QUOTES_INVALID_STATE` | 400 | actionable | This quote cannot be authorized in its current state. Request a new quote and try again. |\n| `QUOTES_NOT_FOUND` | 404 | actionable | The requested quote was not found. |\n| `QUOTES_OTC_NOT_SUPPORTED` | 400 | actionable | This OTC configuration is not supported. OTC requires BRL with USDT, and either the sender amount with fees not covered, or the receiver amount with fees covered. |\n| `QUOTES_RATE_UNAVAILABLE` | 502 | retryable | An exchange rate is temporarily unavailable. Try again shortly. |\n| `TOS_ALREADY_ACCEPTED` | 409 | terminal | These terms of service were already accepted. |\n| `TOS_NOT_ACCEPTED` | 400 | actionable | The terms of service must be accepted before continuing. |\n| `TOS_NOT_FOUND` | 404 | actionable | The requested terms of service record was not found. |\n| `TRANSFERS_NOT_ENABLED` | 403 | terminal | Wallets and transfers are not enabled for this account. Contact support to enable them. |\n| `VALIDATION_FAILED` | 400 | actionable | The request contains invalid fields. Check the errors list for details. |\n| `VALIDATION_INVALID_REQUEST` | 400 | actionable | The request is not valid for this operation. Check the parameters and try again. |\n| `VALIDATION_MISSING_BODY` | 400 | actionable | The request body is missing or malformed. Send valid JSON with the Content-Type: application/json header. |\n| `VALIDATION_MISSING_REQUIRED_FIELDS` | 400 | actionable | Required fields are missing. Provide the missing fields and try again. |\n| `VIRTUAL_ACCOUNTS_DISABLED` | 403 | terminal | Virtual accounts are not enabled for this account. Contact support to enable them. |\n| `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED` | 400 | actionable | Additional documents are required to create this virtual account. Upload the requested documents. |\n| `VIRTUAL_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This virtual account is not approved yet. |\n| `VIRTUAL_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested virtual account was not found. |\n| `VIRTUAL_ACCOUNTS_PROVISION_FAILED` | 502 | retryable | We could not create the virtual account. Try again, and contact support if the problem persists. |\n| `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED` | 400 | terminal | Virtual accounts are not available for this country or region. |\n| `WALLETS_BALANCE_UNAVAILABLE` | 503 | retryable | The wallet balance is temporarily unavailable. Try again shortly. |\n| `WALLETS_NOT_FOUND` | 404 | actionable | The requested wallet was not found. |\n| `WEBHOOKS_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of webhook endpoints. |\n| `WEBHOOKS_SIGNATURE_INVALID` | 401 | terminal | The webhook signature is missing or invalid. |\n| `WEBHOOKS_URL_INVALID` | 400 | actionable | The webhook URL is not valid. Use a reachable HTTPS URL. |\n" + } + ], + "security": [ + { + "Bearer": [] + } + ], + "components": { + "securitySchemes": { + "Bearer": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + }, + "schemas": { + "BlockchainWalletWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "blockchainWallet.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bw_000000000000" + }, + "name": { + "type": [ + "string", + "null" + ], + "example": "Wallet Display Name" + }, + "network": { + "type": [ + "string", + "null" + ], + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "address": { + "type": [ + "string", + "null" + ], + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "signature_tx_hash": { + "type": [ + "string", + "null" + ], + "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" + }, + "is_account_abstraction": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + } + }, + "required": [ + "webhook_event", + "id", + "name", + "network", + "customer_id" + ] + }, + "BankAccountWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "bankAccount.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ], + "example": "wire" + }, + "name": { + "type": "string", + "example": "Bank Account Name" + }, + "pix_key": { + "type": [ + "string", + "null" + ], + "example": "14947677768" + }, + "beneficiary_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Individual full name or business name" + }, + "routing_number": { + "type": [ + "string", + "null" + ], + "example": "012345678" + }, + "account_number": { + "type": [ + "string", + "null" + ], + "example": "1001001234" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "checking", + "saving" + ], + "example": "checking" + }, + "account_class": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Address line 1" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Address line 2" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "State/Province/Region" + }, + "country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "Postal code" + }, + "spei_protocol": { + "type": [ + "string", + "null" + ], + "enum": [ + "clabe", + "debitcard", + "phonenum" + ], + "description": "For debitcard and phonenum the spei_institution_code is required", + "example": "clabe" + }, + "spei_institution_code": { + "type": [ + "string", + "null" + ], + "minLength": 5, + "maxLength": 5, + "example": "40002" + }, + "spei_clabe": { + "type": [ + "string", + "null" + ], + "example": "5482347403740546" + }, + "transfers_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "example": "CVU" + }, + "transfers_account": { + "type": [ + "string", + "null" + ], + "example": "BM123123123123" + }, + "ach_cop_beneficiary_first_name": { + "type": [ + "string", + "null" + ], + "example": "Fernando" + }, + "ach_cop_beneficiary_last_name": { + "type": [ + "string", + "null" + ], + "example": "Guzman Alarcón" + }, + "ach_cop_document_id": { + "type": [ + "string", + "null" + ], + "example": "1661105408" + }, + "ach_cop_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "CE", + "NIT", + "PASS", + "PEP" + ], + "description": "CC - Cédula de Ciudadanía; CE - Cédula de Extranjería; NIT - Número de Identificación Tributaria; PASS - Passport; PEP - Permiso Especial de Permanencia", + "example": "CC" + }, + "ach_cop_email": { + "type": [ + "string", + "null" + ], + "example": "fernando.guzman@gmail.com" + }, + "ach_cop_bank_code": { + "type": [ + "string", + "null" + ], + "example": "051" + }, + "ach_cop_bank_account": { + "type": [ + "string", + "null" + ], + "example": "12345678" + }, + "swift_code_bic": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_account_holder_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "example": "John Doe" + }, + "swift_account_number_iban": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 MAIN STREET SUITE 100" + }, + "swift_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "BUILDING A FLOOR 5" + }, + "swift_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "MEXICO CITY" + }, + "swift_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MX" + }, + "swift_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_bank_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 Main Street, Suite 100, Downtown District, City Center CP 12345" + }, + "swift_bank_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "456 Oak Avenue, Building 7, Financial District, Business Center CP 54321" + }, + "swift_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_bank_city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "swift_bank_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "District" + }, + "swift_bank_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_ifsc_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^[A-Z]{4}0[A-Z0-9]{6}$", + "example": "BARB0AHIMCI" + }, + "swift_intermediary_bank_swift_code_bic": { + "anyOf": [ + { + "type": "string", + "minLength": 8, + "maxLength": 8 + }, + { + "type": "string", + "minLength": 11, + "maxLength": 11 + }, + { + "type": "null" + } + ], + "example": "AEIBARB1" + }, + "swift_intermediary_bank_account_number_iban": { + "type": [ + "string", + "null" + ], + "maxLength": 34, + "example": "123456789" + }, + "swift_intermediary_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_intermediary_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "sepa_iban": { + "type": [ + "string", + "null" + ], + "example": "DE89370400440532013000" + }, + "sepa_beneficiary_bic": { + "type": [ + "string", + "null" + ], + "description": "BIC/SWIFT code of the beneficiary bank", + "example": "TRWIBEB1XXX" + }, + "sepa_beneficiary_legal_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Hans Müller" + }, + "sepa_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Friedrichstraße 12" + }, + "sepa_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Apt 4B" + }, + "sepa_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "10117" + }, + "sepa_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "DE" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "maxLength": 32, + "example": "536804398" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "pix_safe_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4,8}$", + "example": "00416968" + }, + "pix_safe_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "pix_safe_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "ted_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{3,5}$", + "example": "033" + }, + "ted_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "ted_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "tron_wallet_hash": { + "type": [ + "string", + "null" + ], + "example": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t" + }, + "offramp_wallets": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_external_id" + }, + "circle_wallet_id": { + "type": [ + "string", + "null" + ], + "example": "01234567-abcd-efgh-ijkl-012345678901" + }, + "network": { + "type": "string", + "enum": [ + "tron", + "solana", + "solana_devnet", + "arbitrum", + "base", + "ethereum", + "polygon", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "polygon_amoy" + ], + "example": "tron" + }, + "address": { + "type": "string", + "example": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb" + } + }, + "required": [ + "id", + "network", + "address" + ] + }, + "example": [ + { + "address": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb", + "id": "ow_000000000000", + "network": "tron", + "external_id": "your_external_id" + } + ] + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated" + ], + "example": "verifying" + }, + "recipient_relationship": { + "type": [ + "string", + "null" + ], + "enum": [ + "first_party", + "employee", + "independent_contractor", + "vendor_or_supplier", + "subsidiary_or_affiliate", + "merchant_or_partner", + "customer", + "landlord", + "family", + "other" + ], + "example": "vendor_or_supplier" + }, + "swift_payment_code": { + "type": [ + "string", + "null" + ], + "enum": [ + "ae_swift_str", + "ae_swift_tcs", + "ae_swift_ipc", + "ae_swift_ifs", + "ae_swift_sts", + "ae_swift_pms", + "ae_swift_its", + "ae_swift_gde", + "ae_swift_ots", + "ae_swift_tts", + "bh_swift_afa", + "bh_swift_afl", + "bh_swift_ats", + "bh_swift_cea", + "bh_swift_cel", + "bh_swift_chc", + "bh_swift_dla", + "bh_swift_dlf", + "bh_swift_dll", + "bh_swift_doe", + "bh_swift_dsa", + "bh_swift_dsf", + "bh_swift_dsl", + "bh_swift_fam", + "bh_swift_fda", + "bh_swift_fdl", + "bh_swift_fia", + "bh_swift_fil", + "bh_swift_fis", + "bh_swift_fsa", + "bh_swift_fsl", + "bh_swift_gde", + "bh_swift_gdi", + "bh_swift_gms", + "bh_swift_gos", + "bh_swift_gri", + "bh_swift_ifs", + "bh_swift_igd", + "bh_swift_iid", + "bh_swift_ins", + "bh_swift_iod", + "bh_swift_iol", + "bh_swift_ipc", + "bh_swift_ish", + "bh_swift_isl", + "bh_swift_iss", + "bh_swift_its", + "bh_swift_ldl", + "bh_swift_lds", + "bh_swift_lea", + "bh_swift_lel", + "bh_swift_lla", + "bh_swift_lll", + "bh_swift_ots", + "bh_swift_pip", + "bh_swift_pms", + "bh_swift_ppa", + "bh_swift_ppl", + "bh_swift_prr", + "bh_swift_prs", + "bh_swift_rda", + "bh_swift_rdl", + "bh_swift_rds", + "bh_swift_rea", + "bh_swift_rel", + "bh_swift_rfs", + "bh_swift_rls", + "bh_swift_sal", + "bh_swift_sco", + "bh_swift_sla", + "bh_swift_sll", + "bh_swift_str", + "bh_swift_sts", + "bh_swift_tcp", + "bh_swift_tcr", + "bh_swift_tcs", + "bh_swift_tts", + "ch_swift_ccdndr", + "ch_swift_cctfdr", + "ch_swift_cgoddr", + "ch_swift_cocadr", + "ch_swift_cstrdr", + "ch_swift_remtdr", + "cn_swift_ccdndr", + "cn_swift_cctfdr", + "cn_swift_cgoddr", + "cn_swift_cocadr", + "cn_swift_cstrdr", + "cn_swift_remtdr", + "hk_swift_charitabledonation", + "hk_swift_goods", + "hk_swift_personal", + "hk_swift_services", + "id_swift_2011", + "id_swift_2012", + "id_swift_2015", + "id_swift_2018", + "id_swift_2019", + "id_swift_2097", + "id_swift_2098", + "id_swift_2127", + "id_swift_2129", + "id_swift_2150", + "id_swift_2163", + "id_swift_2193", + "id_swift_2194", + "id_swift_2197", + "id_swift_2198", + "id_swift_2203", + "id_swift_2204", + "id_swift_2206", + "id_swift_2207", + "id_swift_2221", + "id_swift_2222", + "id_swift_2231", + "id_swift_2232", + "id_swift_2233", + "id_swift_2240", + "id_swift_2241", + "id_swift_2242", + "id_swift_2243", + "id_swift_2244", + "id_swift_2245", + "id_swift_2246", + "id_swift_2247", + "id_swift_2251", + "id_swift_2252", + "id_swift_2255", + "id_swift_2256", + "id_swift_2257", + "id_swift_2261", + "id_swift_2262", + "id_swift_2263", + "id_swift_2264", + "id_swift_2271", + "id_swift_2272", + "id_swift_2273", + "id_swift_2274", + "id_swift_2275", + "id_swift_2276", + "id_swift_2277", + "id_swift_2278", + "id_swift_2279", + "id_swift_2280", + "id_swift_2282", + "id_swift_2299", + "id_swift_2311", + "id_swift_2321", + "id_swift_2322", + "id_swift_2323", + "id_swift_2331", + "id_swift_2332", + "id_swift_2333", + "id_swift_2341", + "id_swift_2342", + "id_swift_2351", + "id_swift_2352", + "id_swift_2353", + "id_swift_2354", + "id_swift_2361", + "id_swift_2362", + "id_swift_2363", + "id_swift_2364", + "id_swift_2365", + "id_swift_2366", + "id_swift_2371", + "id_swift_2372", + "id_swift_2375", + "id_swift_2376", + "id_swift_2377", + "id_swift_2378", + "id_swift_2379", + "id_swift_2380", + "id_swift_2381", + "id_swift_2382", + "id_swift_2383", + "id_swift_2384", + "id_swift_2385", + "id_swift_2386", + "id_swift_2387", + "id_swift_2388", + "id_swift_2389", + "id_swift_2390", + "id_swift_2391", + "id_swift_2392", + "id_swift_2393", + "id_swift_2394", + "id_swift_2395", + "id_swift_2396", + "id_swift_2397", + "id_swift_2398", + "id_swift_2400", + "id_swift_2405", + "id_swift_2411", + "id_swift_2412", + "id_swift_2413", + "id_swift_2421", + "id_swift_2422", + "id_swift_2423", + "id_swift_2431", + "id_swift_2432", + "id_swift_2433", + "id_swift_2441", + "id_swift_2442", + "id_swift_2443", + "id_swift_2450", + "id_swift_2461", + "id_swift_2462", + "id_swift_2466", + "id_swift_2467", + "id_swift_2468", + "id_swift_2469", + "id_swift_2480", + "id_swift_2490", + "id_swift_2495", + "id_swift_2501", + "id_swift_2502", + "id_swift_2511", + "id_swift_2512", + "id_swift_2521", + "id_swift_2522", + "id_swift_2523", + "id_swift_2524", + "id_swift_2525", + "id_swift_2526", + "id_swift_2531", + "id_swift_2532", + "id_swift_2533", + "id_swift_2541", + "id_swift_2546", + "id_swift_2547", + "id_swift_2550", + "id_swift_2560", + "id_swift_2570", + "id_swift_2580", + "id_swift_2590", + "id_swift_2600", + "id_swift_2610", + "id_swift_2615", + "id_swift_2616", + "id_swift_2630", + "id_swift_2640", + "id_swift_2651", + "id_swift_2652", + "id_swift_2660", + "id_swift_2670", + "id_swift_2701", + "id_swift_2702", + "id_swift_2705", + "id_swift_2710", + "id_swift_2716", + "id_swift_2717", + "id_swift_2720", + "id_swift_2725", + "id_swift_2730", + "id_swift_2731", + "id_swift_2741", + "id_swift_2742", + "id_swift_2743", + "id_swift_2751", + "id_swift_2752", + "id_swift_2760", + "id_swift_2765", + "id_swift_2766", + "id_swift_2767", + "id_swift_2770", + "id_swift_2802", + "id_swift_2803", + "id_swift_2804", + "id_swift_2808", + "id_swift_2809", + "id_swift_2811", + "id_swift_2812", + "id_swift_2813", + "id_swift_2814", + "id_swift_2815", + "id_swift_2821", + "id_swift_2822", + "id_swift_2823", + "id_swift_2824", + "id_swift_2825", + "id_swift_2826", + "id_swift_2827", + "id_swift_2828", + "in_swift_p0001", + "in_swift_p0002", + "in_swift_p0003", + "in_swift_p0004", + "in_swift_p0005", + "in_swift_p0006", + "in_swift_p0007", + "in_swift_p0008", + "in_swift_p0009", + "in_swift_p0010", + "in_swift_p0011", + "in_swift_p0012", + "in_swift_p0013", + "in_swift_p0014", + "in_swift_p0015", + "in_swift_p0016", + "in_swift_p0017", + "in_swift_p0019", + "in_swift_p0020", + "in_swift_p0021", + "in_swift_p0022", + "in_swift_p0024", + "in_swift_p0025", + "in_swift_p0028", + "in_swift_p0029", + "in_swift_p0099", + "in_swift_p0101", + "in_swift_p0102", + "in_swift_p0103", + "in_swift_p0104", + "in_swift_p0105", + "in_swift_p0107", + "in_swift_p0108", + "in_swift_p0109", + "jp_swift_1001", + "jp_swift_1002", + "jp_swift_1003", + "jp_swift_1004", + "jp_swift_101", + "jp_swift_102", + "jp_swift_103", + "jp_swift_104", + "jp_swift_105", + "jp_swift_106", + "jp_swift_107", + "jp_swift_108", + "jp_swift_109", + "jp_swift_110", + "jp_swift_1101", + "jp_swift_1102", + "jp_swift_1103", + "jp_swift_1104", + "jp_swift_1105", + "jp_swift_1106", + "jp_swift_1107", + "jp_swift_1108", + "jp_swift_1109", + "jp_swift_111", + "jp_swift_1110", + "jp_swift_1111", + "jp_swift_1112", + "jp_swift_1201", + "jp_swift_1202", + "jp_swift_201", + "jp_swift_202", + "jp_swift_203", + "jp_swift_204", + "jp_swift_205", + "jp_swift_206", + "jp_swift_207", + "jp_swift_208", + "jp_swift_209", + "jp_swift_301", + "jp_swift_302", + "jp_swift_303", + "jp_swift_304", + "jp_swift_305", + "jp_swift_306", + "jp_swift_307", + "jp_swift_401", + "jp_swift_402", + "jp_swift_403", + "jp_swift_404", + "jp_swift_501", + "jp_swift_502", + "jp_swift_503", + "jp_swift_504", + "jp_swift_601", + "jp_swift_602", + "jp_swift_603", + "jp_swift_604", + "jp_swift_701", + "jp_swift_702", + "jp_swift_703", + "jp_swift_704", + "jp_swift_705", + "jp_swift_801", + "jp_swift_802", + "jp_swift_803", + "jp_swift_804", + "jp_swift_805", + "jp_swift_806", + "jp_swift_807", + "jp_swift_808", + "jp_swift_809", + "jp_swift_810", + "jp_swift_811", + "jp_swift_812", + "jp_swift_813", + "jp_swift_814", + "jp_swift_815", + "jp_swift_816", + "jp_swift_817", + "jp_swift_818", + "jp_swift_901", + "jp_swift_902", + "jp_swift_903", + "jp_swift_904", + "ke_swift_1001", + "ke_swift_1002", + "ke_swift_1101", + "ke_swift_1102", + "ke_swift_1201", + "ke_swift_1202", + "ke_swift_1206", + "ke_swift_1501", + "ke_swift_1518", + "ke_swift_1519", + "ke_swift_1527", + "ke_swift_1801", + "ke_swift_1802", + "ke_swift_1908", + "ke_swift_2101", + "ke_swift_2301", + "ke_swift_2501", + "ke_swift_2901", + "ke_swift_3001", + "ke_swift_3100", + "ke_swift_3101", + "ke_swift_3103", + "ke_swift_3200", + "ke_swift_3304", + "ke_swift_3509", + "ke_swift_3514", + "ke_swift_3801", + "ke_swift_4103", + "ke_swift_4301", + "ke_swift_4601", + "ke_swift_4702", + "ke_swift_512", + "ke_swift_6001", + "ke_swift_6002", + "ke_swift_6101", + "ke_swift_6102", + "ke_swift_6301", + "ke_swift_6401", + "ke_swift_6402", + "ke_swift_6501", + "ke_swift_6601", + "ke_swift_adtx", + "ke_swift_airb", + "ke_swift_artx", + "ke_swift_bech", + "ke_swift_bsd", + "ke_swift_bttx", + "ke_swift_busb", + "ke_swift_ccmc", + "ke_swift_cere", + "ke_swift_cfr", + "ke_swift_cgtx", + "ke_swift_chc", + "ke_swift_clot", + "ke_swift_comu", + "ke_swift_cons", + "ke_swift_cort", + "ke_swift_cotx", + "ke_swift_csdk", + "ke_swift_divd", + "ke_swift_edtx", + "ke_swift_educ", + "ke_swift_farm", + "ke_swift_foex", + "ke_swift_fuel", + "ke_swift_gokx", + "ke_swift_govt", + "ke_swift_hlfd", + "ke_swift_hlti", + "ke_swift_holi", + "ke_swift_ibld", + "ke_swift_inpc", + "ke_swift_insu", + "ke_swift_inte", + "ke_swift_intx", + "ke_swift_invs", + "ke_swift_istx", + "ke_swift_licf", + "ke_swift_lifi", + "ke_swift_loan", + "ke_swift_mach", + "ke_swift_mafc", + "ke_swift_mdcs", + "ke_swift_merc", + "ke_swift_paye", + "ke_swift_pena", + "ke_swift_pl39", + "ke_swift_pl40", + "ke_swift_pl41", + "ke_swift_pl42", + "ke_swift_pl43", + "ke_swift_pl44", + "ke_swift_pl45", + "ke_swift_pl46", + "ke_swift_pl47", + "ke_swift_pl48", + "ke_swift_pl49", + "ke_swift_pl50", + "ke_swift_pl51", + "ke_swift_pl52", + "ke_swift_pl53", + "ke_swift_ppti", + "ke_swift_prpy", + "ke_swift_psco", + "ke_swift_refu", + "ke_swift_relg", + "ke_swift_rent", + "ke_swift_ritx", + "ke_swift_rlwy", + "ke_swift_sala", + "ke_swift_savg", + "ke_swift_scho", + "ke_swift_sdtx", + "ke_swift_ship", + "ke_swift_swlf", + "ke_swift_taxr", + "ke_swift_taxs", + "ke_swift_tbil", + "ke_swift_tith", + "ke_swift_totx", + "ke_swift_trac", + "ke_swift_ubil", + "ke_swift_vatx", + "ke_swift_vipn", + "ke_swift_whld", + "ph_swift_1010101000", + "ph_swift_1010102001", + "ph_swift_1010102002", + "ph_swift_1010103001", + "ph_swift_1010103002", + "ph_swift_1010201000", + "ph_swift_1010202001", + "ph_swift_1010202002", + "ph_swift_1010203001", + "ph_swift_1010203002", + "ph_swift_1010300000", + "ph_swift_1110100001", + "ph_swift_1110200001", + "ph_swift_1110200002", + "ph_swift_1110200003", + "ph_swift_1110200004", + "ph_swift_1110300001", + "ph_swift_1110300002", + "ph_swift_1110300003", + "ph_swift_1110300004", + "ph_swift_1110400001", + "ph_swift_1110400002", + "ph_swift_1110400003", + "ph_swift_1110400004", + "ph_swift_1110400005", + "ph_swift_1110400006", + "ph_swift_1110500001", + "ph_swift_1110500002", + "ph_swift_1110500003", + "ph_swift_1110500004", + "ph_swift_1110500005", + "ph_swift_1110600001", + "ph_swift_1110700001", + "ph_swift_1310000001", + "ph_swift_1310000002", + "ph_swift_1310000003", + "ph_swift_1410100001", + "ph_swift_1410100002", + "ph_swift_1410200001", + "ph_swift_1410200002", + "ph_swift_1410200003", + "ph_swift_1410200004", + "ph_swift_1410300000", + "ph_swift_1410400000", + "ph_swift_1410500000", + "ph_swift_1410600000", + "ph_swift_1510000001", + "ph_swift_1510000002", + "ph_swift_1510000003", + "ph_swift_1510000004", + "ph_swift_1510000005", + "ph_swift_1510000006", + "ph_swift_1510000007", + "ph_swift_1510000008", + "ph_swift_1510000009", + "ph_swift_1510000010", + "ph_swift_1510000011", + "ph_swift_1510000012", + "ph_swift_1510000013", + "ph_swift_1510000014", + "ph_swift_1510000015", + "ph_swift_1510000016", + "ph_swift_1510000017", + "ph_swift_1510000018", + "ph_swift_1510000019", + "ph_swift_1510000020", + "ph_swift_1510000021", + "ph_swift_1510000023", + "ph_swift_1510000024", + "ph_swift_1510000025", + "ph_swift_210000001", + "ph_swift_210000002", + "ph_swift_210000003", + "ph_swift_210000004", + "ph_swift_210000005", + "ph_swift_210000006", + "ph_swift_210000007", + "ph_swift_210000008", + "ph_swift_210000009", + "ph_swift_210000010", + "ph_swift_510100001", + "ph_swift_510200001", + "ph_swift_510200002", + "ph_swift_510301001", + "ph_swift_510301002", + "ph_swift_510301003", + "ph_swift_510302001", + "ph_swift_510302002", + "ph_swift_510302003", + "ph_swift_510303000", + "ph_swift_510401000", + "ph_swift_510402001", + "ph_swift_510402002", + "ph_swift_510402003", + "ph_swift_510402004", + "ph_swift_510402005", + "ph_swift_510402006", + "ph_swift_510402007", + "ph_swift_510500001", + "ph_swift_510500002", + "ph_swift_510600001", + "ph_swift_510600002", + "ph_swift_510600003", + "ph_swift_510600004", + "ph_swift_510700000", + "ph_swift_510800001", + "ph_swift_510800002", + "ph_swift_510900000", + "ph_swift_511000001", + "ph_swift_511000002", + "ph_swift_511100001", + "ph_swift_511100002", + "ph_swift_511100003", + "ph_swift_511200000", + "ph_swift_511300001", + "ph_swift_511300002", + "ph_swift_511300003", + "ph_swift_511300004", + "ph_swift_511300005", + "ph_swift_511300006", + "ph_swift_511300007", + "ph_swift_511300008", + "ph_swift_511400001", + "ph_swift_511400002", + "ph_swift_511400003", + "ph_swift_511400004", + "ph_swift_511400005", + "ph_swift_511500001", + "ph_swift_511500002", + "ph_swift_511500003", + "ph_swift_511500004", + "ph_swift_511600001", + "ph_swift_511600002", + "ph_swift_511600003", + "ph_swift_511700001", + "ph_swift_511700002", + "ph_swift_511700003", + "ph_swift_610000001", + "ph_swift_610000002", + "ph_swift_610000003", + "ph_swift_610000004", + "ph_swift_610000005", + "ph_swift_610000006", + "ph_swift_610000007", + "ph_swift_710100001", + "ph_swift_710100002", + "ph_swift_710100003", + "ph_swift_710100004", + "ph_swift_710100006", + "ph_swift_710100007", + "ph_swift_710100008", + "ph_swift_710100009", + "ph_swift_710200001", + "ph_swift_710200002", + "ph_swift_710200003", + "ph_swift_710200004", + "ph_swift_710200009", + "ph_swift_710300001", + "ph_swift_710300002", + "ph_swift_710300003", + "ph_swift_710300004", + "ph_swift_710300009", + "ph_swift_710400001", + "ph_swift_710400002", + "ph_swift_810101001", + "ph_swift_810101002", + "ph_swift_810101003", + "ph_swift_810101004", + "ph_swift_810101007", + "ph_swift_810101008", + "ph_swift_810101011", + "ph_swift_810102001", + "ph_swift_810102002", + "ph_swift_810102003", + "ph_swift_810102004", + "ph_swift_810102005", + "ph_swift_810102006", + "ph_swift_810102007", + "ph_swift_810102008", + "ph_swift_810102009", + "ph_swift_810201001", + "ph_swift_810201002", + "ph_swift_810201003", + "ph_swift_810201004", + "ph_swift_810202001", + "ph_swift_810202002", + "ph_swift_810202003", + "ph_swift_810202005", + "ph_swift_810202006", + "ph_swift_910100001", + "ph_swift_910100002", + "ph_swift_910100003", + "ph_swift_910100004", + "ph_swift_910100005", + "ph_swift_910100006", + "ph_swift_910100007", + "ph_swift_910100009", + "ph_swift_910100010", + "ph_swift_910100011", + "ph_swift_910200001", + "ph_swift_910200002", + "ph_swift_910200003", + "ph_swift_910200004", + "ph_swift_910200005", + "ph_swift_910200006", + "ph_swift_910200007", + "ph_swift_910200009", + "ph_swift_910200010", + "ph_swift_910200011", + "pk_swift_9009", + "pk_swift_9010", + "pk_swift_9011", + "pk_swift_9012", + "pk_swift_9013", + "pk_swift_9014", + "pk_swift_9015", + "pk_swift_9016", + "pk_swift_9017", + "pk_swift_9018", + "pk_swift_9019", + "pk_swift_9020", + "pk_swift_9021", + "pk_swift_9022", + "pk_swift_9023", + "pk_swift_9024", + "pk_swift_9025", + "pk_swift_9026", + "pk_swift_9027", + "pk_swift_9028", + "pk_swift_9029", + "pk_swift_9030", + "pk_swift_9031", + "pk_swift_9032", + "pk_swift_9033", + "pk_swift_9041", + "pk_swift_9051", + "pk_swift_9052", + "pk_swift_9061", + "pk_swift_9071", + "pk_swift_9072", + "pk_swift_9073", + "pk_swift_9081", + "pk_swift_9082", + "pk_swift_9083", + "pk_swift_9084", + "pk_swift_9085", + "pk_swift_9086", + "pk_swift_9091", + "pk_swift_9092", + "pk_swift_9101", + "pk_swift_9102", + "pk_swift_9111", + "pk_swift_9121", + "pk_swift_9122", + "pk_swift_9124", + "pk_swift_9141", + "pk_swift_9146", + "pk_swift_9151", + "pk_swift_9152", + "pk_swift_9161", + "pk_swift_9171", + "pk_swift_9172", + "pk_swift_9173", + "pk_swift_9174", + "pk_swift_9181", + "pk_swift_9182", + "pk_swift_9183", + "pk_swift_9184", + "pk_swift_9185", + "pk_swift_9186", + "pk_swift_9191", + "pk_swift_9192", + "pk_swift_9193", + "pk_swift_9201", + "pk_swift_9202", + "pk_swift_9211", + "pk_swift_9212", + "pk_swift_9221", + "pk_swift_9222", + "pk_swift_9230", + "pk_swift_9231", + "pk_swift_9232", + "pk_swift_9233", + "pk_swift_9234", + "pk_swift_9235", + "pk_swift_9236", + "pk_swift_9237", + "pk_swift_9238", + "pk_swift_9239", + "pk_swift_9241", + "pk_swift_9242", + "pk_swift_9243", + "pk_swift_9244", + "pk_swift_9247", + "pk_swift_9248", + "pk_swift_9249", + "pk_swift_9250", + "pk_swift_9251", + "pk_swift_9261", + "pk_swift_9262", + "pk_swift_9271", + "pk_swift_9272", + "pk_swift_9273", + "pk_swift_9281", + "pk_swift_9291", + "pk_swift_9301", + "pk_swift_9302", + "pk_swift_9303", + "pk_swift_9311", + "pk_swift_9312", + "pk_swift_9322", + "pk_swift_9323", + "pk_swift_9324", + "pk_swift_9331", + "pk_swift_9332", + "pk_swift_9333", + "pk_swift_9341", + "pk_swift_9351", + "pk_swift_9361", + "pk_swift_9381", + "pk_swift_9391", + "pk_swift_9401", + "pk_swift_9412", + "pk_swift_9414", + "pk_swift_9421", + "pk_swift_9422", + "pk_swift_9423", + "pk_swift_9426", + "pk_swift_9431", + "pk_swift_9432", + "pk_swift_9433", + "pk_swift_9434", + "pk_swift_9435", + "pk_swift_9441", + "pk_swift_9442", + "pk_swift_9443", + "pk_swift_9444", + "pk_swift_9445", + "pk_swift_9448", + "pk_swift_9451", + "pk_swift_9452", + "pk_swift_9453", + "pk_swift_9454", + "pk_swift_9455", + "pk_swift_9456", + "pk_swift_9457", + "pk_swift_9458", + "pk_swift_9459", + "pk_swift_9461", + "pk_swift_9462", + "pk_swift_9463", + "pk_swift_9468", + "pk_swift_9469", + "pk_swift_9470", + "pk_swift_9471", + "pk_swift_9472", + "pk_swift_9473", + "pk_swift_9474", + "pk_swift_9475", + "pk_swift_9476", + "pk_swift_9477", + "pk_swift_9478", + "pk_swift_9479", + "pk_swift_9481", + "pk_swift_9482", + "pk_swift_9483", + "pk_swift_9484", + "pk_swift_9491", + "pk_swift_9492", + "pk_swift_9493", + "pk_swift_9494", + "pk_swift_9501", + "pk_swift_9502", + "pk_swift_9503", + "pk_swift_9521", + "pk_swift_9522", + "pk_swift_9523", + "pk_swift_9524", + "pk_swift_9525", + "pk_swift_9526", + "pk_swift_9527", + "pk_swift_9528", + "pk_swift_9529", + "pk_swift_9530", + "pk_swift_9531", + "pk_swift_9532", + "pk_swift_9533", + "pk_swift_9534", + "pk_swift_9535", + "pk_swift_9536", + "pk_swift_9537", + "pk_swift_9538", + "pk_swift_9539", + "pk_swift_9541", + "pk_swift_9542", + "pk_swift_9543", + "pk_swift_9544", + "pk_swift_9545", + "pk_swift_9546", + "pk_swift_9547", + "pk_swift_9548", + "pk_swift_9549", + "pk_swift_9551", + "pk_swift_9552", + "pk_swift_9553", + "pk_swift_9554", + "pk_swift_9555", + "pk_swift_9556", + "pk_swift_9561", + "pk_swift_9562", + "pk_swift_9563", + "pk_swift_9564", + "pk_swift_9565", + "pk_swift_9566", + "pk_swift_9572", + "pk_swift_9573", + "pk_swift_9574", + "pk_swift_9582", + "pk_swift_9583", + "pk_swift_9584", + "pk_swift_9592", + "pk_swift_9593", + "pk_swift_9594", + "pk_swift_9595", + "pk_swift_9596", + "pk_swift_9597", + "pk_swift_9602", + "pk_swift_9605", + "pk_swift_9606", + "pk_swift_9607", + "pk_swift_9608", + "pk_swift_9609", + "pk_swift_9612", + "pk_swift_9613", + "pk_swift_9614", + "pk_swift_9622", + "pk_swift_9623", + "pk_swift_9624", + "pk_swift_9625", + "pk_swift_9637", + "pk_swift_9638", + "pk_swift_9641", + "pk_swift_9642", + "pk_swift_9643", + "pk_swift_9644", + "pk_swift_9645", + "pk_swift_9646", + "pk_swift_9647", + "pk_swift_9648", + "pk_swift_9649", + "pk_swift_9650", + "pk_swift_9651", + "pk_swift_9652", + "pk_swift_9653", + "pk_swift_9654", + "pk_swift_9668", + "pk_swift_9669", + "pk_swift_9673", + "pk_swift_9674", + "pk_swift_9675", + "pk_swift_9676", + "pk_swift_9677", + "pk_swift_9678", + "pk_swift_9681", + "pk_swift_9682", + "pk_swift_9693", + "pk_swift_9694", + "pk_swift_9695", + "pk_swift_9697", + "pk_swift_9698", + "pk_swift_9699", + "pk_swift_9703", + "pk_swift_9707", + "pk_swift_9708", + "za_swift_105", + "za_swift_220", + "za_swift_231", + "za_swift_242", + "za_swift_250", + "za_swift_251", + "za_swift_265", + "za_swift_266", + "za_swift_275", + "za_swift_276", + "za_swift_280", + "za_swift_285", + "za_swift_287", + "za_swift_288", + "za_swift_289", + "za_swift_290", + "za_swift_291", + "za_swift_296", + "za_swift_297", + "za_swift_308", + "za_swift_401", + "za_swift_10101", + "za_swift_10301", + "za_swift_27201" + ], + "example": "bh_swift_afl" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "webhook_event", + "id", + "type", + "name" + ] + }, + "PayinNewWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payin.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "blindpay_bank_details": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "payment_method": { + "type": [ + "string", + "null" + ], + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + } + }, + "required": [ + "webhook_event", + "id", + "status", + "tracking_complete", + "tracking_payment", + "tracking_transaction", + "blindpay_bank_details" + ] + }, + "PayinCompleteWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payin.complete" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "blindpay_bank_details": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "payment_method": { + "type": [ + "string", + "null" + ], + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + } + }, + "required": [ + "webhook_event", + "id", + "status", + "tracking_complete", + "tracking_payment", + "tracking_transaction", + "blindpay_bank_details" + ] + }, + "LimitIncreaseNewWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "limitIncrease.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "rl_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "in_review", + "approved", + "rejected" + ], + "example": "in_review" + }, + "per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 100000 + }, + "daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 200000 + }, + "monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 1000000 + }, + "approved_per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 70000 + }, + "approved_daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 140000 + }, + "approved_monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 700000 + }, + "supporting_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual_bank_statement", + "individual_tax_return", + "individual_proof_of_income", + "individual_pay_stub", + "individual_employment_letter", + "individual_investment_statement", + "individual_crypto_exchange_statement", + "individual_blockchain_wallet_statement", + "business_bank_statement", + "business_financial_statements", + "business_tax_return", + "business_contract", + "business_accounts_receivable", + "business_merchant_processor_statement", + "business_shareholder_loan" + ], + "example": "individual_bank_statement" + }, + "supporting_document_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/document.pdf" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "customer_id" + ] + }, + "LimitIncreaseUpdateWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "limitIncrease.update" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "rl_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "in_review", + "approved", + "rejected" + ], + "example": "in_review" + }, + "per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 100000 + }, + "daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 200000 + }, + "monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 1000000 + }, + "approved_per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 70000 + }, + "approved_daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 140000 + }, + "approved_monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 700000 + }, + "supporting_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual_bank_statement", + "individual_tax_return", + "individual_proof_of_income", + "individual_pay_stub", + "individual_employment_letter", + "individual_investment_statement", + "individual_crypto_exchange_statement", + "individual_blockchain_wallet_statement", + "business_bank_statement", + "business_financial_statements", + "business_tax_return", + "business_contract", + "business_accounts_receivable", + "business_merchant_processor_statement", + "business_shareholder_loan" + ], + "example": "individual_bank_statement" + }, + "supporting_document_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/document.pdf" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "customer_id" + ] + }, + "PayinUpdateWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payin.update" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "blindpay_bank_details": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "payment_method": { + "type": [ + "string", + "null" + ], + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + } + }, + "required": [ + "webhook_event", + "id", + "status", + "tracking_complete", + "tracking_payment", + "tracking_transaction", + "blindpay_bank_details" + ] + }, + "PayinPartnerFeeWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payin.partnerFee" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "blindpay_bank_details": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "payment_method": { + "type": [ + "string", + "null" + ], + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + } + }, + "required": [ + "webhook_event", + "id", + "status", + "tracking_complete", + "tracking_payment", + "tracking_transaction", + "blindpay_bank_details" + ] + }, + "PayoutNewWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payout.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "offramp_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "sender_wallet_address", + "tracking_complete", + "tracking_payment", + "tracking_transaction" + ] + }, + "PayoutCompleteWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payout.complete" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "offramp_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "sender_wallet_address", + "tracking_complete", + "tracking_payment", + "tracking_transaction" + ] + }, + "PayoutUpdateWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payout.update" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "offramp_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "sender_wallet_address", + "tracking_complete", + "tracking_payment", + "tracking_transaction" + ] + }, + "PayoutPartnerFeeWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "payout.partnerFee" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "offramp_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + } + }, + "required": [ + "webhook_event", + "id", + "status", + "sender_wallet_address", + "tracking_complete", + "tracking_payment", + "tracking_transaction" + ] + }, + "AdditionalInfoItem": { + "type": "object", + "properties": { + "label": { + "type": "string", + "enum": [ + "EIN_LETTER", + "KYC_PROVIDER_DOCUMENT", + "FLOW_OF_FUNDS", + "BANK_STATEMENT", + "TAX_RETURN", + "AUDITED_FINANCIALS", + "OPERATING_AGREEMENT", + "BOARD_RESOLUTION", + "CERTIFICATE_OF_GOOD_STANDING", + "BUSINESS_LICENSE", + "MSB_LICENSE", + "POWER_OF_ATTORNEY", + "TRUST_DEED", + "SHAREHOLDER_REGISTRY", + "BENEFICIAL_OWNER_DECLARATION", + "COMPLIANCE_QUESTIONNAIRE", + "PROOF_OF_EMPLOYMENT", + "REFERENCE_LETTER", + "OTHER" + ] + }, + "value": { + "type": "string", + "minLength": 1 + } + }, + "required": [ + "label", + "value" + ], + "example": { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + } + }, + "CustomerNewWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "customer.new" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + }, + "kyc_status": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ], + "example": "verifying" + }, + "kyc_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "code": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "resolution_status": { + "type": [ + "string", + "null" + ] + }, + "warning_id": { + "type": [ + "string", + "null" + ] + } + } + }, + "description": "You can find more information here: https://docs.aiprise.com/docs/warnings-and-error-codes", + "example": [ + { + "code": "BIRTH_DATE_MISMATCH", + "message": "Mismatch between supplied birth date and extracted/looked up birth date.", + "resolution_status": "UNRESOLVED", + "warning_id": "38170889-50aa-4271-9eb1-61113ebf408c" + } + ] + }, + "fraud_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "operation": { + "type": [ + "string", + "null" + ] + }, + "score": { + "type": [ + "number", + "null" + ] + } + } + }, + "example": [ + { + "id": "UC114", + "name": "User never used a Datacenter proxy and this device before", + "operation": "+", + "score": 10 + } + ] + }, + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "Marshfield" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "02050" + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "format": "ip", + "example": "127.0.0.1" + }, + "latitude": { + "type": [ + "number", + "null" + ], + "minimum": -90, + "maximum": 90, + "description": "Optional geolocation latitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": 37.7749 + }, + "longitude": { + "type": [ + "number", + "null" + ], + "minimum": -180, + "maximum": 180, + "description": "Optional geolocation longitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": -122.4194 + }, + "image_url": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same physical address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "id_doc_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "alternate_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "formation_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z", + "format": "date-time" + }, + "website": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com" + }, + "owners": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ub_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "role": { + "type": "string", + "enum": [ + "beneficial_controlling", + "beneficial_owner", + "controlling_person" + ], + "description": "A beneficial owner is someone who directly or indirectly owns 25% or more of your business. A controlling person is someone with significant responsibility to control, manage or direct your business (typically a CEO, senior executive officer or equivalent).", + "example": "beneficial_owner" + }, + "first_name": { + "type": "string", + "minLength": 1, + "example": "John" + }, + "last_name": { + "type": "string", + "minLength": 1, + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": "string", + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": "string", + "example": "Marshfield" + }, + "state_province_region": { + "type": "string", + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": "string", + "example": "02050" + }, + "id_doc_country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": "string", + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB." + }, + "ownership_percentage": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Ownership percentage of the beneficial owner (0-100)", + "example": 25 + }, + "title": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "description": "Job title of the owner", + "example": "CEO" + }, + "tax_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "SSN", + "ITIN" + ], + "description": "Tax identifier type. Mandatory when country is US; must be SSN or ITIN.", + "example": "SSN" + } + } + }, + "description": "Customer owners", + "example": [ + { + "id": "ub_000000000000", + "first_name": "John", + "last_name": "Doe", + "address_line_1": "738 Plain St", + "address_line_2": "Building 22", + "city": "Marshfield", + "state_province_region": "MA", + "country": "US", + "postal_code": "02050", + "id_doc_country": "BR", + "id_doc_type": "PASSPORT", + "id_doc_front_file": "https://example.com/image.png", + "id_doc_back_file": "https://example.com/image.png" + } + ] + }, + "incorporation_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your articles of incorporation below. The articles of incorporation or a certificate of incorporation usually includes information like the company name, business purpose, number of shares offered, value of shares, etc. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "proof_of_ownership_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your proof of ownership below. This document usually includes information like the shareholders names and percentages. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "source_of_funds_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_income", + "gambling_proceeds", + "gifts", + "government_benefits", + "inheritance", + "investment_loans", + "pension_retirement", + "salary", + "sale_of_assets_real_estate", + "savings", + "esops", + "investment_proceeds", + "someone_else_funds" + ], + "example": "business_income" + }, + "source_of_funds_doc_file": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "selfie_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "purpose_of_transactions": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_transactions", + "charitable_donations", + "investment_purposes", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_good_and_services", + "receive_payment_for_freelancing", + "receive_salary", + "other" + ], + "example": "business_transactions" + }, + "purpose_of_transactions_explanation": { + "type": [ + "string", + "null" + ], + "example": "I am a business owner and I want to receive payments from my customers" + }, + "is_fbo": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "account_purpose": { + "type": [ + "string", + "null" + ], + "enum": [ + "charitable_donations", + "ecommerce_retail_payments", + "investment_purposes", + "business_expenses", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_goods_and_services", + "receive_payments_for_goods_and_services", + "tax_optimization", + "third_party_money_transmission", + "payroll", + "treasury_management", + "other" + ], + "example": "treasury_management" + }, + "account_purpose_other": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "description": "Required when account_purpose is \"other\". Max 512 characters.", + "example": "Custom account purpose description" + }, + "business_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "corporation", + "llc", + "partnership", + "sole_proprietorship", + "trust", + "non_profit" + ], + "example": "llc" + }, + "business_description": { + "type": [ + "string", + "null" + ], + "maxLength": 1000, + "example": "Software development company" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "estimated_annual_revenue": { + "type": [ + "string", + "null" + ], + "enum": [ + "0_99999", + "100000_999999", + "1000000_9999999", + "10000000_49999999", + "50000000_249999999", + "250000000_plus" + ], + "example": "1000000_9999999" + }, + "source_of_wealth": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_dividends_or_profits", + "investments", + "asset_sales", + "client_investor_contributions", + "gambling", + "charitable_contributions", + "inheritance", + "affiliate_or_royalty_income" + ], + "example": "affiliate_or_royalty_income" + }, + "publicly_traded": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "occupation": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "Software Engineer" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_company_external_id" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "tos_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "aml_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "clear", + "hit", + "error" + ], + "description": "AML screening status from SEON. null = not yet screened.", + "example": "clear" + }, + "aml_hits": { + "type": [ + "object", + "null" + ], + "properties": { + "has_sanction_match": { + "type": "boolean", + "default": false + }, + "has_pep_match": { + "type": "boolean", + "default": false + }, + "has_watchlist_match": { + "type": "boolean", + "default": false + }, + "has_crimelist_match": { + "type": "boolean", + "default": false + }, + "has_adversemedia_match": { + "type": "boolean", + "default": false + } + }, + "description": "AML screening match details from SEON.", + "example": { + "has_sanction_match": false, + "has_pep_match": false, + "has_watchlist_match": false, + "has_crimelist_match": false, + "has_adversemedia_match": false + } + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "limit": { + "type": "object", + "properties": { + "per_transaction": { + "type": [ + "number", + "null" + ], + "example": 100000 + }, + "daily": { + "type": [ + "number", + "null" + ], + "example": 200000 + }, + "monthly": { + "type": [ + "number", + "null" + ], + "example": 1000000 + } + }, + "required": [ + "per_transaction", + "daily", + "monthly" + ] + }, + "is_tos_accepted": { + "type": [ + "boolean", + "null" + ] + }, + "additional_info": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/AdditionalInfoItem" + }, + "description": "Optional extra documents or notes for this customer. `label` is a known category, `value` is either a URL to upload or a free-text description. Any URLs are downloaded and re-hosted on Blindpay storage before being stored.", + "example": [ + { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + }, + { + "label": "FLOW_OF_FUNDS", + "value": "Funds originate from US payroll deposits, forwarded weekly to customer." + } + ] + } + }, + "required": [ + "webhook_event", + "id", + "customer_id", + "type", + "kyc_type", + "kyc_status", + "email", + "country", + "instance_id", + "limit" + ] + }, + "CustomerUpdateWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "customer.update" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + }, + "kyc_status": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ], + "example": "verifying" + }, + "kyc_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "code": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "resolution_status": { + "type": [ + "string", + "null" + ] + }, + "warning_id": { + "type": [ + "string", + "null" + ] + } + } + }, + "description": "You can find more information here: https://docs.aiprise.com/docs/warnings-and-error-codes", + "example": [ + { + "code": "BIRTH_DATE_MISMATCH", + "message": "Mismatch between supplied birth date and extracted/looked up birth date.", + "resolution_status": "UNRESOLVED", + "warning_id": "38170889-50aa-4271-9eb1-61113ebf408c" + } + ] + }, + "fraud_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "operation": { + "type": [ + "string", + "null" + ] + }, + "score": { + "type": [ + "number", + "null" + ] + } + } + }, + "example": [ + { + "id": "UC114", + "name": "User never used a Datacenter proxy and this device before", + "operation": "+", + "score": 10 + } + ] + }, + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "Marshfield" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "02050" + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "format": "ip", + "example": "127.0.0.1" + }, + "latitude": { + "type": [ + "number", + "null" + ], + "minimum": -90, + "maximum": 90, + "description": "Optional geolocation latitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": 37.7749 + }, + "longitude": { + "type": [ + "number", + "null" + ], + "minimum": -180, + "maximum": 180, + "description": "Optional geolocation longitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": -122.4194 + }, + "image_url": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same physical address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "id_doc_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "alternate_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "formation_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z", + "format": "date-time" + }, + "website": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com" + }, + "owners": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ub_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "role": { + "type": "string", + "enum": [ + "beneficial_controlling", + "beneficial_owner", + "controlling_person" + ], + "description": "A beneficial owner is someone who directly or indirectly owns 25% or more of your business. A controlling person is someone with significant responsibility to control, manage or direct your business (typically a CEO, senior executive officer or equivalent).", + "example": "beneficial_owner" + }, + "first_name": { + "type": "string", + "minLength": 1, + "example": "John" + }, + "last_name": { + "type": "string", + "minLength": 1, + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": "string", + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": "string", + "example": "Marshfield" + }, + "state_province_region": { + "type": "string", + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": "string", + "example": "02050" + }, + "id_doc_country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": "string", + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB." + }, + "ownership_percentage": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Ownership percentage of the beneficial owner (0-100)", + "example": 25 + }, + "title": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "description": "Job title of the owner", + "example": "CEO" + }, + "tax_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "SSN", + "ITIN" + ], + "description": "Tax identifier type. Mandatory when country is US; must be SSN or ITIN.", + "example": "SSN" + } + } + }, + "description": "Customer owners", + "example": [ + { + "id": "ub_000000000000", + "first_name": "John", + "last_name": "Doe", + "address_line_1": "738 Plain St", + "address_line_2": "Building 22", + "city": "Marshfield", + "state_province_region": "MA", + "country": "US", + "postal_code": "02050", + "id_doc_country": "BR", + "id_doc_type": "PASSPORT", + "id_doc_front_file": "https://example.com/image.png", + "id_doc_back_file": "https://example.com/image.png" + } + ] + }, + "incorporation_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your articles of incorporation below. The articles of incorporation or a certificate of incorporation usually includes information like the company name, business purpose, number of shares offered, value of shares, etc. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "proof_of_ownership_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your proof of ownership below. This document usually includes information like the shareholders names and percentages. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "source_of_funds_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_income", + "gambling_proceeds", + "gifts", + "government_benefits", + "inheritance", + "investment_loans", + "pension_retirement", + "salary", + "sale_of_assets_real_estate", + "savings", + "esops", + "investment_proceeds", + "someone_else_funds" + ], + "example": "business_income" + }, + "source_of_funds_doc_file": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "selfie_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "purpose_of_transactions": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_transactions", + "charitable_donations", + "investment_purposes", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_good_and_services", + "receive_payment_for_freelancing", + "receive_salary", + "other" + ], + "example": "business_transactions" + }, + "purpose_of_transactions_explanation": { + "type": [ + "string", + "null" + ], + "example": "I am a business owner and I want to receive payments from my customers" + }, + "is_fbo": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "account_purpose": { + "type": [ + "string", + "null" + ], + "enum": [ + "charitable_donations", + "ecommerce_retail_payments", + "investment_purposes", + "business_expenses", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_goods_and_services", + "receive_payments_for_goods_and_services", + "tax_optimization", + "third_party_money_transmission", + "payroll", + "treasury_management", + "other" + ], + "example": "treasury_management" + }, + "account_purpose_other": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "description": "Required when account_purpose is \"other\". Max 512 characters.", + "example": "Custom account purpose description" + }, + "business_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "corporation", + "llc", + "partnership", + "sole_proprietorship", + "trust", + "non_profit" + ], + "example": "llc" + }, + "business_description": { + "type": [ + "string", + "null" + ], + "maxLength": 1000, + "example": "Software development company" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "estimated_annual_revenue": { + "type": [ + "string", + "null" + ], + "enum": [ + "0_99999", + "100000_999999", + "1000000_9999999", + "10000000_49999999", + "50000000_249999999", + "250000000_plus" + ], + "example": "1000000_9999999" + }, + "source_of_wealth": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_dividends_or_profits", + "investments", + "asset_sales", + "client_investor_contributions", + "gambling", + "charitable_contributions", + "inheritance", + "affiliate_or_royalty_income" + ], + "example": "affiliate_or_royalty_income" + }, + "publicly_traded": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "occupation": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "Software Engineer" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_company_external_id" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "tos_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "aml_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "clear", + "hit", + "error" + ], + "description": "AML screening status from SEON. null = not yet screened.", + "example": "clear" + }, + "aml_hits": { + "type": [ + "object", + "null" + ], + "properties": { + "has_sanction_match": { + "type": "boolean", + "default": false + }, + "has_pep_match": { + "type": "boolean", + "default": false + }, + "has_watchlist_match": { + "type": "boolean", + "default": false + }, + "has_crimelist_match": { + "type": "boolean", + "default": false + }, + "has_adversemedia_match": { + "type": "boolean", + "default": false + } + }, + "description": "AML screening match details from SEON.", + "example": { + "has_sanction_match": false, + "has_pep_match": false, + "has_watchlist_match": false, + "has_crimelist_match": false, + "has_adversemedia_match": false + } + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "limit": { + "type": "object", + "properties": { + "per_transaction": { + "type": [ + "number", + "null" + ], + "example": 100000 + }, + "daily": { + "type": [ + "number", + "null" + ], + "example": 200000 + }, + "monthly": { + "type": [ + "number", + "null" + ], + "example": 1000000 + } + }, + "required": [ + "per_transaction", + "daily", + "monthly" + ] + }, + "is_tos_accepted": { + "type": [ + "boolean", + "null" + ] + }, + "additional_info": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/AdditionalInfoItem" + }, + "description": "Optional extra documents or notes for this customer. `label` is a known category, `value` is either a URL to upload or a free-text description. Any URLs are downloaded and re-hosted on Blindpay storage before being stored.", + "example": [ + { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + }, + { + "label": "FLOW_OF_FUNDS", + "value": "Funds originate from US payroll deposits, forwarded weekly to customer." + } + ] + } + }, + "required": [ + "webhook_event", + "id", + "customer_id", + "type", + "kyc_type", + "kyc_status", + "email", + "country", + "instance_id", + "limit" + ] + }, + "CustomerDeleteWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "customer.delete" + ] + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + }, + "kyc_status": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ], + "example": "verifying" + }, + "deleted_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "webhook_event", + "id", + "customer_id", + "instance_id", + "type", + "kyc_type", + "kyc_status", + "deleted_at" + ] + }, + "TosAcceptWebhookOut": { + "type": "object", + "properties": { + "webhook_event": { + "type": "string", + "enum": [ + "tos.accept" + ] + }, + "tos_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "idempotency_key": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "version": { + "type": [ + "string", + "null" + ], + "enum": [ + "1.0.0", + "1.0.1" + ], + "example": "1.0.0" + } + }, + "required": [ + "webhook_event", + "tos_id", + "idempotency_key" + ] + }, + "CircleTransactionWebhookOut": { + "type": "object", + "properties": { + "notificationType": { + "type": "string", + "enum": [ + "transactions.outbound", + "transactions.inbound" + ] + }, + "notification": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "refId": { + "type": [ + "string", + "null" + ] + }, + "state": { + "type": "string", + "enum": [ + "INITIATED", + "PENDING_RISK_SCREENING", + "CLEARED", + "QUEUED", + "SENT", + "STUCK", + "CONFIRMED", + "COMPLETE", + "DENIED", + "FAILED", + "CANCELLED", + "ACCELERATED" + ] + }, + "errorReason": { + "type": [ + "string", + "null" + ] + }, + "transactionType": { + "type": "string", + "enum": [ + "OUTBOUND", + "INBOUND" + ] + }, + "txHash": { + "type": [ + "string", + "null" + ] + }, + "blockchain": { + "type": "string", + "enum": [ + "ETH", + "ETH-SEPOLIA", + "AVAX", + "AVAX-FUJI", + "MATIC", + "MATIC-AMOY", + "SOL", + "SOL-DEVNET", + "ARB", + "ARB-SEPOLIA", + "BASE", + "BASE-SEPOLIA", + "NEAR", + "NEAR-TESTNET", + "EVM", + "EVM-TESTNET", + "UNI-SEPOLIA" + ] + }, + "tokenId": { + "type": "string" + }, + "amounts": { + "type": "array", + "items": { + "type": "string" + } + }, + "walletId": { + "type": "string" + }, + "sourceAddress": { + "type": [ + "string", + "null" + ] + }, + "destinationAddress": { + "type": [ + "string", + "null" + ] + }, + "createDate": { + "type": [ + "string", + "null" + ] + }, + "updateDate": { + "type": [ + "string", + "null" + ] + }, + "networkFeeInUSD": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "state", + "transactionType", + "blockchain", + "tokenId", + "amounts", + "walletId" + ] + }, + "timestamp": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "notificationType", + "notification" + ] + }, + "CreateTransferSchemaOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed" + ], + "description": "Transfer general status", + "example": "processing" + }, + "tracking_bridge_swap": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_paymaster": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction_monitoring": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Transaction monitoring step", + "example": "processing" + }, + "blockchain_screening": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Blindpay screening step", + "example": 1 + }, + "risk_score": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Risk score", + "example": 1 + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Transfer transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + } + }, + "required": [ + "id", + "status", + "tracking_bridge_swap", + "tracking_complete", + "tracking_paymaster", + "tracking_transaction_monitoring" + ] + }, + "WalletTokenOut": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "id": { + "type": "string" + }, + "symbol": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ] + }, + "amount": { + "type": "number" + } + }, + "required": [ + "address", + "id", + "symbol", + "amount" + ] + }, + "WalletInboundSchemaOut": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ] + }, + "token": { + "$ref": "#/components/schemas/WalletTokenOut" + } + }, + "required": [ + "id", + "address", + "network", + "token" + ] + }, + "Success": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + } + }, + "required": [ + "success" + ] + }, + "Error": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "code": { + "type": "string", + "description": "Stable error code. See the Error codes section for the full list.", + "example": "PAYOUTS_INSUFFICIENT_BALANCE" + }, + "message": { + "type": "string", + "description": "Legacy machine-readable message. Prefer `code` for programmatic handling.", + "example": "not_enough_balance" + }, + "description": { + "type": "string", + "description": "Human-readable explanation, safe to show to end users.", + "example": "There is not enough balance to complete this payout. Fund your balance and try again." + }, + "errors": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "Bad Request" + ] + }, + "trace_id": { + "type": "string", + "description": "Request trace ID. Include it when contacting support.", + "example": "0af7651916cd43dd8448eb211c80319c" + } + }, + "required": [ + "success", + "message", + "errors" + ] + }, + "UploadOut": { + "type": "object", + "properties": { + "file_url": { + "type": "string" + } + }, + "required": [ + "file_url" + ] + }, + "UploadIn": { + "type": "object", + "properties": { + "file": {}, + "bucket": { + "type": "string", + "enum": [ + "avatar", + "onboarding", + "limit_increase" + ] + } + }, + "required": [ + "file", + "bucket" + ] + }, + "UploadAnalyzeOut": { + "type": "object", + "properties": { + "approval_rate": { + "type": "string", + "enum": [ + "low", + "medium", + "high" + ], + "description": "Confidence that the document should be approved.", + "example": "high" + }, + "description": { + "type": "string", + "description": "Short explanation of why the document should or should not be approved." + } + }, + "required": [ + "approval_rate", + "description" + ] + }, + "UploadAnalyzeIn": { + "type": "object", + "properties": { + "file": { + "description": "The document to analyze (PDF, JPG, or PNG).", + "example": {} + }, + "type": { + "type": "string", + "enum": [ + "proof_of_address", + "identity_document", + "incorporation_document", + "proof_of_ownership", + "source_of_funds", + "selfie", + "bank_statement", + "tax_return", + "proof_of_income", + "financial_statement", + "invoice", + "transaction_document", + "passport", + "pay_stub", + "employment_letter", + "investment", + "crypto_exchange", + "blockchain_wallet", + "contract", + "accounts_receivable", + "merchant_processor", + "shareholder_loan" + ], + "description": "The kind of document being analyzed. Selects the rule set used for the analysis.", + "example": "proof_of_address" + }, + "metadata": { + "type": "string", + "description": "Optional JSON object of expected values to verify against the document (e.g. {\"full_name\":\"Jane Doe\",\"date_of_birth\":\"1990-01-01\"}). When provided, a clear mismatch caps the rating at low.", + "example": "{\"full_name\":\"Jane Doe\"}" + } + }, + "required": [ + "file", + "type" + ] + }, + "QuoteOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "expires_at": { + "type": [ + "number", + "null" + ], + "description": "Epoch unix timestamp that represents the final datetime to transaction be received on blockchain. For SEPA payouts this may be shorter than the default 5 minute window if Circle CPN returns an earlier expiry.", + "example": 1712958191 + }, + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.85 BRL (commercial quotation - (blindpay taxes))", + "example": 485 + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL", + "example": 5240 + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC needs to be sent to bank account blockchain address", + "example": 1010 + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "flat_fee": { + "type": [ + "number", + "null" + ], + "description": "0.5 USDC", + "example": 50 + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "contract": { + "type": [ + "object", + "null" + ], + "properties": { + "abi": { + "type": "array", + "items": { + "type": "object", + "properties": {}, + "description": "Contract abi related to the network you send in request params", + "example": {} + } + }, + "address": { + "type": "string", + "description": "Token address related to the network you send in request params", + "example": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" + }, + "functionName": { + "type": "string", + "enum": [ + "approve" + ], + "description": "Function name from ERC20 smart contract", + "example": "approve" + }, + "blindpayContractAddress": { + "type": "string", + "description": "Blindpay contract address", + "example": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" + }, + "amount": { + "type": "string", + "description": "Amount to approve with correct decimal places", + "example": "1000000000000000000" + }, + "network": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Ethereum" + }, + "chainId": { + "type": "number", + "example": 1 + } + }, + "required": [ + "name", + "chainId" + ] + } + }, + "required": [ + "abi", + "address", + "functionName", + "blindpayContractAddress", + "amount", + "network" + ] + }, + "customer_local_amount": { + "type": [ + "number", + "null" + ], + "description": "Estimated amount in the currency of recipient bank account", + "example": 1000 + }, + "description": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Memo code or description, only works with USD and BRL" + } + }, + "required": [ + "id", + "expires_at", + "commercial_quotation", + "blindpay_quotation", + "receiver_amount", + "sender_amount" + ] + }, + "QuoteIn": { + "type": "object", + "properties": { + "bank_account_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "currency_type": { + "type": "string", + "enum": [ + "sender", + "receiver" + ], + "description": "", + "example": "sender" + }, + "cover_fees": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the sender will cover the fees. If false, the customer will cover the fees.", + "example": true + }, + "request_amount": { + "type": "integer", + "minimum": 500, + "description": "1000 represents 10.00, 2050 represents 20.50", + "example": 1000 + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "description": "Check blindpay available networks", + "example": "sepolia" + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "description": "Check blindpay available tokens", + "example": "USDC" + }, + "description": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Memo code or description, only works with USD and BRL" + }, + "partner_fee_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "pf_000000000000" + } + }, + "required": [ + "bank_account_id", + "currency_type", + "request_amount", + "network", + "token" + ] + }, + "PayoutOut": { + "type": "object", + "properties": { + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer id", + "example": "re_000000000000" + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "signed_transaction": { + "type": [ + "string", + "null" + ], + "description": "Signed transaction", + "example": "AAA...Zey8y0A" + }, + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "jpm_track_data": { + "type": [ + "object", + "null" + ], + "properties": { + "jpm_trace_number": { + "type": [ + "string", + "null" + ], + "description": "JPM trace number", + "example": "317802200000565" + }, + "jpm_processing_status": { + "type": [ + "string", + "null" + ], + "description": "JPM processing status", + "example": "Completed" + }, + "extended_tracking_status": { + "type": [ + "string", + "null" + ], + "description": "Extended tracking status from JPM", + "example": "Delivered to next bank" + }, + "jpm_reference_number": { + "type": [ + "string", + "null" + ], + "description": "JPM reference number", + "example": "9483400364JO" + }, + "uetr": { + "type": [ + "string", + "null" + ], + "description": "Unique end-to-end transaction reference", + "example": "4ad5f98a-5279-410a-99a2-39a729aceb35" + }, + "fed_imad": { + "type": [ + "string", + "null" + ], + "description": "Fed IMAD number (Wire payments only)", + "example": "1230MMQFMP2L034796" + }, + "payment_date": { + "type": [ + "string", + "null" + ], + "description": "Payment date", + "example": "Dec 30 2025" + }, + "payment_amount": { + "type": [ + "string", + "null" + ], + "description": "Payment amount", + "example": "3,914.00" + }, + "payment_currency": { + "type": [ + "string", + "null" + ], + "description": "Payment currency", + "example": "USD" + } + } + }, + "cpn_payment_id": { + "type": [ + "string", + "null" + ], + "description": "Circle CPN payment id", + "example": "f06dbc45-58a4-389f-beb8-581c3fafff3c" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "image_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "description": "Check blindpay available networks", + "example": "sepolia" + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "description": "Check blindpay available tokens", + "example": "USDC" + }, + "description": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Memo code or description, only works with USD and BRL" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC needs to be sent to bank account blockchain address", + "example": 1010 + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL", + "example": 5240 + }, + "partner_fee_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "pf_000000000000" + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.85 BRL (commercial quotation - (blindpay taxes))", + "example": 485 + }, + "total_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 1.5 + }, + "customer_local_amount": { + "type": [ + "number", + "null" + ], + "description": "Estimated amount in the currency of recipient bank account", + "example": 1000 + }, + "currency": { + "type": "string", + "enum": [ + "BRL", + "USD", + "MXN", + "COP", + "ARS", + "EUR" + ], + "description": "ISO 4271 currency code", + "example": "BRL" + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_document_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "transaction_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "invoice", + "purchase_order", + "delivery_slip", + "contract", + "customs_declaration", + "bill_of_lading", + "others" + ], + "example": "invoice" + }, + "transaction_document_id": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "example": "1234567890" + }, + "name": { + "type": "string", + "example": "Bank Account Name" + }, + "type": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ], + "example": "wire" + }, + "pix_key": { + "type": [ + "string", + "null" + ], + "example": "14947677768" + }, + "pix_safe_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4,8}$", + "example": "00416968" + }, + "pix_safe_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "pix_safe_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "ted_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{3,5}$", + "example": "033" + }, + "ted_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "ted_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "account_number": { + "type": [ + "string", + "null" + ], + "example": "1001001234" + }, + "routing_number": { + "type": [ + "string", + "null" + ], + "example": "012345678" + }, + "country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "account_class": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Address line 1" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Address line 2" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "State/Province/Region" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "Postal code" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "checking", + "saving" + ], + "example": "checking" + }, + "ach_cop_beneficiary_first_name": { + "type": [ + "string", + "null" + ], + "example": "Fernando" + }, + "ach_cop_bank_account": { + "type": [ + "string", + "null" + ], + "example": "12345678" + }, + "ach_cop_bank_code": { + "type": [ + "string", + "null" + ], + "example": "051" + }, + "ach_cop_beneficiary_last_name": { + "type": [ + "string", + "null" + ], + "example": "Guzman Alarcón" + }, + "ach_cop_document_id": { + "type": [ + "string", + "null" + ], + "example": "1661105408" + }, + "ach_cop_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "CE", + "NIT", + "PASS", + "PEP" + ], + "description": "CC - Cédula de Ciudadanía; CE - Cédula de Extranjería; NIT - Número de Identificación Tributaria; PASS - Passport; PEP - Permiso Especial de Permanencia", + "example": "CC" + }, + "ach_cop_email": { + "type": [ + "string", + "null" + ], + "example": "fernando.guzman@gmail.com" + }, + "beneficiary_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Individual full name or business name" + }, + "spei_clabe": { + "type": [ + "string", + "null" + ], + "example": "5482347403740546" + }, + "spei_protocol": { + "type": [ + "string", + "null" + ], + "enum": [ + "clabe", + "debitcard", + "phonenum" + ], + "description": "For debitcard and phonenum the spei_institution_code is required", + "example": "clabe" + }, + "spei_institution_code": { + "type": [ + "string", + "null" + ], + "minLength": 5, + "maxLength": 5, + "example": "40002" + }, + "swift_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_code_bic": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_account_holder_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "example": "John Doe" + }, + "swift_account_number_iban": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "transfers_account": { + "type": [ + "string", + "null" + ], + "example": "BM123123123123" + }, + "transfers_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "example": "CVU" + }, + "has_virtual_account": { + "type": [ + "boolean", + "null" + ], + "description": "Has virtual account", + "example": true + }, + "sender_legal_name": { + "type": [ + "string", + "null" + ], + "description": "Legal name of the sending instance (originator), shown on the receipt", + "example": "LRB TRADING INVESTMENT L.L.C" + } + }, + "required": [ + "customer_id", + "id", + "status", + "sender_wallet_address", + "quote_id", + "instance_id", + "tracking_transaction", + "tracking_payment", + "tracking_complete", + "network", + "token", + "sender_amount", + "receiver_amount", + "commercial_quotation", + "blindpay_quotation", + "currency", + "name", + "type" + ] + }, + "PaginationMetadata": { + "type": "object", + "properties": { + "has_more": { + "type": "boolean", + "description": "Whether or not there are more elements available after this set.", + "example": true + }, + "next_page": { + "type": [ + "string", + "null" + ], + "description": "The ID of the first item in the next page of results.", + "example": "pi_123" + }, + "prev_page": { + "type": [ + "string", + "null" + ], + "description": "The ID of the first item in the previous page of results.", + "example": "pi_123" + } + }, + "required": [ + "has_more" + ] + }, + "PayoutOnStellarAuthorizeIn": { + "type": "object", + "properties": { + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + } + }, + "required": [ + "quote_id", + "sender_wallet_address" + ] + }, + "PayoutOnEvmOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ], + "description": "Payout general status", + "example": "processing" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged via invoice at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payout partner fee amount in cents (can be negative for rebates)", + "example": -25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "tokens_refunded", + "paid" + ], + "description": "Complete status", + "example": "tokens_refunded" + }, + "refund_reason": { + "type": [ + "string", + "null" + ], + "description": "Reason for refund when tokens are returned to sender", + "example": "fiat_payment_failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the refund transaction (e.g. Circle transaction id)", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_integration": { + "type": [ + "string", + "null" + ], + "enum": [ + "veem", + "zenus", + "checkbook", + "onemoney", + "bitso", + "starkbank", + "triplea", + "infinitus" + ], + "description": "Machine-readable integration that executed the fiat leg. Unlike provider_name (a client-facing bank label), this uniquely identifies the integration — e.g. zenus vs checkbook, which share the \"JPMorgan Chase\" label.", + "example": "zenus" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "canceled", + "failed", + "returned", + "sent" + ], + "description": "Payment provider status", + "example": "canceled" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when payment fails (e.g. invalid_key, wrong_parameters)", + "example": "invalid_key" + }, + "provider_uetr": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Unique end-to-end transaction reference (UETR). Populated once the wire is confirmed by the network; null while the payment is in flight or when the rail does not expose it (e.g. ACH).", + "example": "37d10eff-d450-4aba-a5d4-e3978f5a3343" + }, + "provider_imad": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", + "example": "20260526MMQFMP2M008120" + }, + "provider_clearing_system": { + "type": [ + "string", + "null" + ], + "maxLength": 40, + "description": "Clearing system that processed the payment (e.g. FED, CHIPS, ACH, SWIFT).", + "example": "FED" + }, + "recipient_name": { + "type": [ + "string", + "null" + ], + "description": "Recipient name", + "example": "John Doe" + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ], + "description": "Recipient tax id", + "example": "123.456.789-10" + }, + "recipient_bank_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient bank code", + "example": "00416968" + }, + "recipient_branch_code": { + "type": [ + "string", + "null" + ], + "description": "Recipient branch code", + "example": "0001" + }, + "recipient_account_number": { + "type": [ + "string", + "null" + ], + "description": "Recipient account number", + "example": "1234567890" + }, + "recipient_account_type": { + "type": [ + "string", + "null" + ], + "description": "Recipient account type", + "example": "checking" + }, + "coelsa_id": { + "type": [ + "string", + "null" + ], + "description": "COELSA transaction reference ID for ARS transfers (Argentine national banking system)", + "example": "1LMP68NKV46DRDYK2R7OEV" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "5_min" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "found" + ], + "description": "Payout transaction status", + "example": "failed" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Provider-side handle for the on-chain leg (e.g. Circle CPN payment id).", + "example": "67c12eae-b7bc-31cc-a5ef-623dcea82346" + }, + "provider_error_reason": { + "type": [ + "string", + "null" + ], + "description": "Provider error reason when the crypto collection fails (e.g. erc20_allowance_insufficient, ESTIMATION_ERROR: execution reverted)", + "example": "erc20_allowance_insufficient" + }, + "ledger_in_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the IN (crypto deposit) transaction" + }, + "ledger_out_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Ledger transaction ID for the OUT (fiat withdrawal) transaction" + } + }, + "required": [ + "step" + ] + }, + "tracking_liquidity": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payout liquidity step", + "example": "processing" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "0x123...890" + }, + "provider_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "deposited", + "converted", + "withdrawn" + ], + "description": "Payment provider status", + "example": "deposited" + }, + "estimated_time_of_arrival": { + "type": [ + "string", + "null" + ], + "enum": [ + "5_min", + "5_30_min", + "30_min", + "2_hours", + "1_business_day", + "2_business_days", + "5_business_days" + ], + "description": "Estimated time of arrival", + "example": "1_business_day" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payout transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_documents": { + "type": [ + "object", + "null" + ], + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Documents step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "waiting_documents", + "compliance_reviewing" + ], + "description": "Documents status", + "example": "waiting_documents" + }, + "reviewed_by": { + "type": [ + "string", + "null" + ], + "description": "Reviewer email/name", + "example": "compliance@example.com" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Documents completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "offramp_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + } + }, + "required": [ + "id", + "status", + "sender_wallet_address", + "tracking_complete", + "tracking_payment", + "tracking_transaction" + ] + }, + "PayoutOnStellarIn": { + "type": "object", + "properties": { + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "signed_transaction": { + "type": [ + "string", + "null" + ], + "description": "Signed transaction", + "example": "AAA...Zey8y0A" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + } + }, + "required": [ + "quote_id", + "sender_wallet_address" + ] + }, + "PayoutOnSolanaIn": { + "type": "object", + "properties": { + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "signed_transaction": { + "type": [ + "string", + "null" + ], + "description": "Signed transaction", + "example": "AAA...Zey8y0A" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + } + }, + "required": [ + "quote_id", + "sender_wallet_address" + ] + }, + "PayoutOnEvmIn": { + "type": "object", + "properties": { + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "sender_wallet_address": { + "type": "string", + "description": "Payout wallet address", + "example": "0x123...890" + } + }, + "required": [ + "quote_id", + "sender_wallet_address" + ] + }, + "SubmitPayoutDocumentsIn": { + "type": "object", + "properties": { + "transaction_document_type": { + "type": "string", + "enum": [ + "invoice", + "purchase_order", + "delivery_slip", + "contract", + "customs_declaration", + "bill_of_lading", + "others" + ], + "description": "Document type", + "example": "invoice" + }, + "transaction_document_id": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "description": "Document identifier (invoice number, contract ID, etc.)", + "example": "INV-12345" + }, + "transaction_document_file": { + "type": "string", + "format": "uri", + "description": "URL to the uploaded document", + "example": "https://example.com/document.pdf" + }, + "description": { + "type": "string", + "maxLength": 128, + "description": "Optional payment description/memo (max 128 chars)", + "example": "Payment for services - Invoice #12345" + } + }, + "required": [ + "transaction_document_type", + "transaction_document_id", + "transaction_document_file" + ] + }, + "AvailableBankDetails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "example": "Account Number" + }, + "regex": { + "type": "string", + "example": "^[0-9]{9}$" + }, + "key": { + "type": "string", + "enum": [ + "type", + "name", + "status", + "recipient_relationship", + "swift_payment_code", + "pix_key", + "force_cpf_cnpj", + "beneficiary_name", + "routing_number", + "account_number", + "account_type", + "account_class", + "address_line_1", + "address_line_2", + "city", + "state_province_region", + "country", + "postal_code", + "checkbook_account_id", + "checkbook_user_key", + "onemoney_external_account_id", + "pix_safe_bank_code", + "pix_safe_branch_code", + "pix_safe_cpf_cnpj", + "ted_bank_code", + "ted_branch_code", + "ted_cpf_cnpj", + "spei_protocol", + "spei_institution_code", + "spei_clabe", + "transfers_type", + "transfers_account", + "ach_cop_beneficiary_first_name", + "ach_cop_beneficiary_last_name", + "ach_cop_document_id", + "ach_cop_document_type", + "ach_cop_email", + "ach_cop_bank_code", + "ach_cop_bank_account", + "swift_code_bic", + "swift_account_holder_name", + "swift_account_number_iban", + "swift_beneficiary_address_line_1", + "swift_beneficiary_address_line_2", + "swift_beneficiary_country", + "swift_beneficiary_city", + "swift_beneficiary_state_province_region", + "swift_beneficiary_postal_code", + "swift_bank_name", + "swift_bank_address_line_1", + "swift_bank_address_line_2", + "swift_bank_country", + "swift_bank_city", + "swift_bank_state_province_region", + "swift_bank_postal_code", + "swift_ifsc_branch_code", + "swift_intermediary_bank_swift_code_bic", + "swift_intermediary_bank_account_number_iban", + "swift_intermediary_bank_name", + "swift_intermediary_bank_country", + "sepa_iban", + "sepa_beneficiary_bic", + "sepa_beneficiary_legal_name", + "sepa_beneficiary_address_line_1", + "sepa_beneficiary_address_line_2", + "sepa_beneficiary_city", + "sepa_beneficiary_state_province_region", + "sepa_beneficiary_postal_code", + "sepa_beneficiary_country", + "business_industry", + "phone_number", + "tax_id", + "date_of_birth" + ], + "example": "account_number" + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "example": "United States of America" + }, + "value": { + "type": "string", + "example": "US" + }, + "is_active": { + "type": "boolean", + "example": true + } + }, + "required": [ + "label", + "value" + ] + } + }, + "required": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "requiredWhen": { + "type": "object", + "properties": { + "field": { + "type": "string", + "enum": [ + "type", + "name", + "status", + "recipient_relationship", + "swift_payment_code", + "pix_key", + "force_cpf_cnpj", + "beneficiary_name", + "routing_number", + "account_number", + "account_type", + "account_class", + "address_line_1", + "address_line_2", + "city", + "state_province_region", + "country", + "postal_code", + "checkbook_account_id", + "checkbook_user_key", + "onemoney_external_account_id", + "pix_safe_bank_code", + "pix_safe_branch_code", + "pix_safe_cpf_cnpj", + "ted_bank_code", + "ted_branch_code", + "ted_cpf_cnpj", + "spei_protocol", + "spei_institution_code", + "spei_clabe", + "transfers_type", + "transfers_account", + "ach_cop_beneficiary_first_name", + "ach_cop_beneficiary_last_name", + "ach_cop_document_id", + "ach_cop_document_type", + "ach_cop_email", + "ach_cop_bank_code", + "ach_cop_bank_account", + "swift_code_bic", + "swift_account_holder_name", + "swift_account_number_iban", + "swift_beneficiary_address_line_1", + "swift_beneficiary_address_line_2", + "swift_beneficiary_country", + "swift_beneficiary_city", + "swift_beneficiary_state_province_region", + "swift_beneficiary_postal_code", + "swift_bank_name", + "swift_bank_address_line_1", + "swift_bank_address_line_2", + "swift_bank_country", + "swift_bank_city", + "swift_bank_state_province_region", + "swift_bank_postal_code", + "swift_ifsc_branch_code", + "swift_intermediary_bank_swift_code_bic", + "swift_intermediary_bank_account_number_iban", + "swift_intermediary_bank_name", + "swift_intermediary_bank_country", + "sepa_iban", + "sepa_beneficiary_bic", + "sepa_beneficiary_legal_name", + "sepa_beneficiary_address_line_1", + "sepa_beneficiary_address_line_2", + "sepa_beneficiary_city", + "sepa_beneficiary_state_province_region", + "sepa_beneficiary_postal_code", + "sepa_beneficiary_country", + "business_industry", + "phone_number", + "tax_id", + "date_of_birth" + ], + "example": "country" + }, + "operator": { + "type": "string", + "enum": [ + "in", + "eq", + "notIn", + "notEq" + ], + "example": "in" + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "US", + "GB" + ] + } + }, + "required": [ + "field", + "operator", + "values" + ], + "example": { + "field": "country", + "operator": "in", + "values": [ + "US", + "GB" + ] + } + } + }, + "required": [ + "label", + "regex", + "key" + ] + } + }, + "AvailableRails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "example": "Domestic Wire" + }, + "value": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ], + "example": "wire" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + } + }, + "required": [ + "label", + "value", + "country" + ] + } + }, + "AvailableNaicsList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "example": "(339910) Jewelry and Silverware Manufacturing" + }, + "value": { + "type": "string", + "example": "339910" + } + }, + "required": [ + "label", + "value" + ] + } + }, + "SwiftCodeItem": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "416" + }, + "bank": { + "type": "string", + "example": "BANK OF AMERICA, N.A." + }, + "city": { + "type": "string", + "example": "NEW JERSEY" + }, + "branch": { + "type": "string", + "example": "LENDING SERVICES AND OPERATIONS (LSOP)" + }, + "swiftCode": { + "type": "string", + "example": "BOFAUS3NLMA" + }, + "swiftCodeLink": { + "type": "string", + "example": "https://bank.codes/swift-code/united-states/bofaus3nlma/" + }, + "country": { + "type": "string", + "example": "United States" + }, + "countrySlug": { + "type": "string", + "example": "united-states" + } + }, + "required": [ + "id", + "bank", + "city", + "branch", + "swiftCode", + "swiftCodeLink", + "country", + "countrySlug" + ] + }, + "SwiftCodeResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SwiftCodeItem" + } + }, + "ExternalOnboardingInfo": { + "type": "object", + "properties": { + "legal_name": { + "type": [ + "string", + "null" + ] + }, + "onboarding_step": { + "type": "string", + "enum": [ + "initial", + "business_details", + "business_profile", + "documents", + "applicant", + "completed", + "blocked" + ], + "example": "initial" + }, + "email": { + "type": "string", + "format": "email" + } + }, + "required": [ + "legal_name", + "onboarding_step", + "email" + ] + }, + "InstanceIn": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 3, + "maxLength": 100, + "example": "My Instance" + }, + "type": { + "type": "string", + "enum": [ + "production", + "development" + ], + "example": "development" + }, + "seed_sample_data": { + "type": "boolean", + "description": "Development instances only: seed sample customers, payouts and payins so the dashboard lands populated.", + "example": true + } + }, + "required": [ + "name", + "type" + ] + }, + "PaymentRoute": { + "type": [ + "object", + "null" + ], + "properties": { + "ach": { + "type": "string", + "enum": [ + "zenus", + "veem", + "infinitus_portage", + "blocked" + ] + }, + "wire": { + "type": "string", + "enum": [ + "zenus", + "veem", + "infinitus_portage", + "blocked" + ] + }, + "international_swift": { + "type": "string", + "enum": [ + "zenus", + "veem", + "infinitus_portage", + "blocked" + ] + }, + "rtp": { + "type": "string", + "enum": [ + "zenus", + "veem", + "infinitus_portage", + "blocked" + ] + } + }, + "description": "Per-instance USD payout rail override. Maps a bank rail to a PSP (zenus | veem | infinitus) or to \"blocked\" to disable the rail. Absent rails fall back to default routing.", + "example": { + "ach": "zenus", + "wire": "zenus", + "international_swift": "zenus", + "rtp": "blocked" + } + }, + "ManualReviewSkip": { + "type": [ + "object", + "null" + ], + "properties": { + "ach": { + "type": "object", + "properties": { + "max_amount_usd_cents": { + "type": "integer", + "minimum": 0, + "description": "Threshold in USD cents. Payins and payouts on this rail at or below it skip the manual review.", + "example": 100000 + } + }, + "required": [ + "max_amount_usd_cents" + ] + }, + "wire": { + "type": "object", + "properties": { + "max_amount_usd_cents": { + "type": "integer", + "minimum": 0, + "description": "Threshold in USD cents. Payins and payouts on this rail at or below it skip the manual review.", + "example": 100000 + } + }, + "required": [ + "max_amount_usd_cents" + ] + }, + "rtp": { + "type": "object", + "properties": { + "max_amount_usd_cents": { + "type": "integer", + "minimum": 0, + "description": "Threshold in USD cents. Payins and payouts on this rail at or below it skip the manual review.", + "example": 100000 + } + }, + "required": [ + "max_amount_usd_cents" + ] + }, + "pix": { + "type": "object", + "properties": { + "max_amount_brl_cents": { + "type": "integer", + "minimum": 0, + "description": "Threshold in BRL cents. Pix payins and payouts at or below it skip the manual review.", + "example": 500000 + } + }, + "required": [ + "max_amount_brl_cents" + ] + } + }, + "description": "Per-rail threshold (in cents of the rail currency: USD for ach/wire/rtp, BRL for pix) at or below which payins and payouts skip the manual review. Takes precedence over the manual-review toggles (customer force_manual_review and instance manual_review_all_payments). FULL bypass: it also takes precedence over the SEON pre-send fraud gate (the check still runs and flags are still posted to Slack for audit). Configure only for fully trusted instances with low thresholds.", + "example": { + "ach": { + "max_amount_usd_cents": 100000 + }, + "wire": { + "max_amount_usd_cents": 500000 + }, + "rtp": { + "max_amount_usd_cents": 50000 + }, + "pix": { + "max_amount_brl_cents": 500000 + } + } + }, + "InstanceOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "name": { + "type": "string", + "minLength": 3, + "maxLength": 100, + "example": "My Instance" + }, + "type": { + "type": "string", + "enum": [ + "production", + "development" + ], + "example": "development" + }, + "last_payout_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "2022-01-01T00:00:00.000Z" + }, + "customers_amount": { + "type": [ + "number", + "null" + ], + "example": 150 + }, + "subscription_features": { + "anyOf": [ + { + "type": "object", + "properties": { + "international_swift": { + "type": "boolean" + }, + "virtual_accounts": { + "type": "boolean" + }, + "otc": { + "type": [ + "boolean", + "null" + ] + }, + "otc_dynamic_rate": { + "type": [ + "boolean", + "null" + ] + }, + "otc_manual_execution": { + "type": [ + "boolean", + "null" + ] + }, + "billing_charge": { + "type": [ + "boolean", + "null" + ] + }, + "wallets_and_transfers": { + "type": [ + "boolean", + "null" + ] + }, + "manual_review_all_payments": { + "type": [ + "boolean", + "null" + ] + }, + "ted_payin": { + "type": [ + "boolean", + "null" + ] + }, + "payment_route": { + "$ref": "#/components/schemas/PaymentRoute" + }, + "manual_review_skip": { + "$ref": "#/components/schemas/ManualReviewSkip" + } + }, + "required": [ + "international_swift", + "virtual_accounts" + ] + }, + { + "type": "string" + } + ], + "example": { + "international_swift": true, + "virtual_accounts": false, + "otc": false, + "otc_manual_execution": false, + "billing_charge": false, + "wallets_and_transfers": false, + "manual_review_all_payments": false + } + }, + "subscription_plan": { + "type": [ + "string", + "null" + ], + "enum": [ + "Basic", + "Business", + "Enterprise" + ], + "description": "Subscription plan: Basic, Business, or Enterprise", + "example": "Basic" + }, + "subscription_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "active", + "pending_payment", + "past_due", + "cancelled" + ], + "description": "Subscription status: active, pending_payment, past_due, or cancelled", + "example": "active" + }, + "subscription_plan_amount": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "description": "Monthly subscription plan amount in USD", + "example": 249 + }, + "invoice_due_date_days": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "Number of days from invoice creation to due date", + "example": 15 + }, + "minimum_monthly_amount": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "description": "Minimum monthly billing amount in USD", + "example": 2000 + }, + "user_owner_id": { + "type": "string", + "example": "us_000000000000" + }, + "user_role": { + "type": [ + "string", + "null" + ], + "enum": [ + "owner", + "admin", + "finance", + "checker", + "operations", + "developer", + "viewer" + ], + "example": "admin" + }, + "onboarding_step": { + "type": "string", + "enum": [ + "initial", + "business_details", + "business_profile", + "documents", + "applicant", + "completed", + "blocked" + ], + "example": "initial" + }, + "customer_invite_redirect_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://blindpay.com" + }, + "email_notifications": { + "type": "boolean", + "default": true, + "description": "Whether email notifications are enabled for this instance", + "example": true + }, + "require_passkey": { + "type": "boolean", + "default": false, + "description": "Whether passkey verification is required for protected actions", + "example": false + }, + "compliance_emails": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "email" + }, + "maxItems": 20, + "description": "When non-empty, compliance Request for Information emails are sent only to these addresses instead of all instance members", + "example": [ + "compliance@example.com" + ] + }, + "customer_rfi_emails_enabled": { + "type": "boolean", + "default": true, + "description": "Whether customer (customer) Request for Information notification emails are sent for this instance. Instance-level RFI emails are always sent regardless of this setting.", + "example": true + }, + "is_fbo": { + "type": [ + "boolean", + "null" + ], + "example": false + } + }, + "required": [ + "id", + "name", + "type", + "subscription_features", + "user_owner_id", + "onboarding_step" + ] + }, + "ExternalInstanceOut": { + "type": "object", + "properties": { + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "My Company" + }, + "customer_invite_redirect_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://blindpay.com" + } + } + }, + "UpdateInstanceIn": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 3, + "maxLength": 100, + "example": "My Instance" + }, + "customer_invite_redirect_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://blindpay.com" + }, + "email_notifications": { + "type": "boolean", + "default": true, + "description": "Whether email notifications are enabled for this instance", + "example": true + }, + "require_passkey": { + "type": "boolean", + "default": false, + "description": "Whether passkey verification is required for protected actions", + "example": false + }, + "compliance_emails": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "email" + }, + "maxItems": 20, + "description": "When non-empty, compliance Request for Information emails are sent only to these addresses instead of all instance members", + "example": [ + "compliance@example.com" + ] + }, + "customer_rfi_emails_enabled": { + "type": "boolean", + "description": "Whether customer (customer) Request for Information notification emails are sent for this instance. Omit to leave unchanged.", + "example": true + } + }, + "required": [ + "name" + ] + }, + "UpdateInstanceMemberIn": { + "type": "object", + "properties": { + "user_role": { + "type": "string", + "enum": [ + "owner", + "admin", + "finance", + "checker", + "operations", + "developer", + "viewer" + ], + "example": "admin" + } + }, + "required": [ + "user_role" + ] + }, + "CopyInstanceMembersOut": { + "type": "object", + "properties": { + "copied_members": { + "type": "integer", + "example": 3 + }, + "copied_invites": { + "type": "integer", + "example": 1 + }, + "skipped_members": { + "type": "integer", + "description": "Source members that already belong to the target instance", + "example": 2 + } + }, + "required": [ + "copied_members", + "copied_invites", + "skipped_members" + ] + }, + "CopyInstanceMembersIn": { + "type": "object", + "properties": { + "source_instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + } + }, + "required": [ + "source_instance_id" + ] + }, + "MigrateInstanceOwnershipIn": { + "type": "object", + "properties": { + "user_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "us_000000000000" + } + }, + "required": [ + "user_id" + ] + }, + "AuditActor": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "image_url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "email", + "image_url" + ] + }, + "AuditLog": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "al_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "actor_type": { + "type": "string", + "enum": [ + "user", + "api_key" + ], + "example": "user" + }, + "user_id": { + "type": [ + "string", + "null" + ], + "example": "us_000000000000" + }, + "api_key_id": { + "type": [ + "string", + "null" + ], + "example": null + }, + "role": { + "type": "string", + "example": "admin" + }, + "feature": { + "type": "string", + "example": "payin" + }, + "operation": { + "type": "string", + "enum": [ + "create", + "update", + "delete" + ], + "example": "create" + }, + "entity_type": { + "type": "string", + "example": "payin" + }, + "entity_id": { + "type": "string", + "example": "pi_000000000000" + }, + "metadata": { + "type": "object", + "additionalProperties": {}, + "example": {} + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "example": "177.137.230.244" + }, + "user_agent": { + "type": [ + "string", + "null" + ], + "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" + }, + "country": { + "type": [ + "string", + "null" + ], + "example": "US" + }, + "has_passkey": { + "type": [ + "boolean", + "null" + ], + "example": true + }, + "request_id": { + "type": [ + "string", + "null" + ], + "example": "abcd1234" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "instance_id", + "actor_type", + "user_id", + "api_key_id", + "role", + "feature", + "operation", + "entity_type", + "entity_id", + "metadata", + "ip_address", + "user_agent", + "country", + "has_passkey", + "request_id" + ] + }, + "AuditLogOut": { + "allOf": [ + { + "$ref": "#/components/schemas/AuditLog" + }, + { + "type": "object", + "properties": { + "actor": { + "$ref": "#/components/schemas/AuditActor" + } + }, + "required": [ + "actor" + ] + } + ] + }, + "FeedbackOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "fb_000000000000" + }, + "instance_id": { + "type": [ + "string", + "null" + ], + "example": "in_000000000000" + }, + "user_id": { + "type": [ + "string", + "null" + ], + "example": "us_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "bug", + "suggestion", + "feedback", + "praise", + "complaint" + ] + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "user_agent": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "instance_id", + "user_id", + "type", + "title", + "description", + "email", + "page_url", + "user_agent" + ] + }, + "CreateFeedbackIn": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "bug", + "suggestion", + "feedback", + "praise" + ], + "example": "bug" + }, + "title": { + "type": "string", + "minLength": 1, + "maxLength": 200, + "example": "Cannot create payout" + }, + "description": { + "type": "string", + "minLength": 1, + "maxLength": 5000, + "example": "When I click the create payout button, nothing happens." + }, + "page_url": { + "type": [ + "string", + "null" + ], + "maxLength": 2000, + "example": "https://app.blindpay.com/instances/in_123/payouts" + }, + "user_agent": { + "type": [ + "string", + "null" + ], + "maxLength": 500, + "example": "Mozilla/5.0" + } + }, + "required": [ + "type", + "title", + "description" + ] + }, + "FeeOptions": { + "type": "object", + "properties": { + "payin_flat": { + "type": "integer", + "description": "Payin flat fee in cents", + "example": 40 + }, + "payin_percentage": { + "type": "integer", + "description": "Payin percentage fee in basis points", + "example": 50 + }, + "payout_flat": { + "type": "integer", + "description": "Payout flat fee in cents", + "example": 40 + }, + "payout_percentage": { + "type": "integer", + "description": "Payout percentage fee in basis points", + "example": 50 + } + }, + "required": [ + "payin_flat", + "payin_percentage", + "payout_flat", + "payout_percentage" + ] + }, + "GetFeesOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "ach": { + "$ref": "#/components/schemas/FeeOptions" + }, + "domestic_wire": { + "$ref": "#/components/schemas/FeeOptions" + }, + "rtp": { + "$ref": "#/components/schemas/FeeOptions" + }, + "international_swift": { + "$ref": "#/components/schemas/FeeOptions" + }, + "pix": { + "$ref": "#/components/schemas/FeeOptions" + }, + "pix_safe": { + "$ref": "#/components/schemas/FeeOptions" + }, + "ted": { + "allOf": [ + { + "$ref": "#/components/schemas/FeeOptions" + }, + { + "type": [ + "object", + "null" + ] + } + ] + }, + "ach_colombia": { + "$ref": "#/components/schemas/FeeOptions" + }, + "transfers_3": { + "$ref": "#/components/schemas/FeeOptions" + }, + "spei": { + "$ref": "#/components/schemas/FeeOptions" + }, + "sepa": { + "$ref": "#/components/schemas/FeeOptions" + }, + "tron": { + "$ref": "#/components/schemas/FeeOptions" + }, + "ethereum": { + "$ref": "#/components/schemas/FeeOptions" + }, + "polygon": { + "$ref": "#/components/schemas/FeeOptions" + }, + "base": { + "$ref": "#/components/schemas/FeeOptions" + }, + "arbitrum": { + "$ref": "#/components/schemas/FeeOptions" + }, + "stellar": { + "$ref": "#/components/schemas/FeeOptions" + }, + "solana": { + "$ref": "#/components/schemas/FeeOptions" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "instance_id", + "ach", + "domestic_wire", + "rtp", + "international_swift", + "pix", + "pix_safe", + "ach_colombia", + "transfers_3", + "spei", + "sepa", + "tron", + "ethereum", + "polygon", + "base", + "arbitrum", + "stellar", + "solana" + ] + }, + "CreateInviteIn": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "example": "john@doe.com" + }, + "user_role": { + "type": "string", + "enum": [ + "owner", + "admin", + "finance", + "checker", + "operations", + "developer", + "viewer" + ], + "example": "admin" + }, + "invite_all_owned_instances": { + "type": "boolean", + "default": false, + "description": "When true, the member is added/invited to every instance the inviter owns, ignoring the instance in the path.", + "example": false + } + }, + "required": [ + "email", + "user_role" + ] + }, + "InitiateTosOut": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "example": "https://app.blindpay.com/e/terms-of-service?session_token=SESSION_TOKEN_FROM_INITIATE_TOS_RESPONSE" + } + }, + "required": [ + "url" + ] + }, + "InitiateTosIn": { + "type": "object", + "properties": { + "idempotency_key": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "redirect_url": { + "type": [ + "string", + "null" + ], + "format": "uri" + } + }, + "required": [ + "idempotency_key" + ] + }, + "AcceptTosOut": { + "type": "object", + "properties": { + "tos_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "idempotency_key": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "version": { + "type": [ + "string", + "null" + ], + "enum": [ + "1.0.0", + "1.0.1" + ], + "example": "1.0.0" + } + }, + "required": [ + "tos_id", + "idempotency_key" + ] + }, + "AcceptTosIn": { + "type": "object", + "properties": { + "session_token": { + "type": "string", + "example": "SESSION_TOKEN_FROM_INITIATE_TOS_RESPONSE" + }, + "idempotency_key": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "session": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "session_token", + "idempotency_key" + ] + }, + "CreateExternalCustomerTokenIn": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + } + }, + "required": [ + "type", + "kyc_type" + ] + }, + "CreateInstanceOnboardingInviteIn": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "description": "Email address of the person who will receive the onboarding invite", + "example": "collaborator@example.com" + } + }, + "required": [ + "email" + ] + }, + "CreateApiKeyOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ap_000000000000" + }, + "token": { + "type": "string", + "example": "token" + } + }, + "required": [ + "id", + "token" + ] + }, + "CreateApiKeyIn": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "example": "API Key Name" + }, + "permission": { + "type": "string", + "enum": [ + "full_access" + ], + "example": "full_access" + }, + "ip_whitelist": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "ip" + }, + "example": [ + "127.0.0.1", + "192.168.0.1" + ] + } + }, + "required": [ + "name", + "permission" + ] + }, + "ApiKeyPublic": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ap_000000000000" + }, + "name": { + "type": "string", + "minLength": 1, + "example": "API Key Name" + }, + "permission": { + "type": "string", + "enum": [ + "full_access" + ], + "example": "full_access" + }, + "token": { + "type": "string", + "example": "token" + }, + "ip_whitelist": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "format": "ip" + }, + "example": [ + "127.0.0.1", + "192.168.0.1" + ] + }, + "last_used_at": { + "example": "2021-01-01T00:00:00Z" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "name", + "permission", + "token", + "instance_id" + ] + }, + "WebhookEndpointOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "we_000000000000" + } + }, + "required": [ + "id" + ] + }, + "WebhookEndpointIn": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "example": "https://example.com/webhook" + }, + "events": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "customer.new", + "customer.update", + "customer.delete", + "bankAccount.new", + "payout.new", + "payout.update", + "payout.complete", + "payout.partnerFee", + "blockchainWallet.new", + "payin.new", + "payin.update", + "payin.complete", + "payin.partnerFee", + "tos.accept", + "limitIncrease.new", + "limitIncrease.update", + "virtualAccount.new", + "virtualAccount.complete", + "transfer.new", + "transfer.update", + "transfer.complete", + "wallet.new", + "wallet.inbound" + ] + }, + "example": [ + "customer.new" + ] + } + }, + "required": [ + "url", + "events" + ] + }, + "WebhookEndpoint": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "we_000000000000" + }, + "url": { + "type": "string", + "format": "uri", + "example": "https://example.com/webhook" + }, + "events": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "customer.new", + "customer.update", + "customer.delete", + "bankAccount.new", + "payout.new", + "payout.update", + "payout.complete", + "payout.partnerFee", + "blockchainWallet.new", + "payin.new", + "payin.update", + "payin.complete", + "payin.partnerFee", + "tos.accept", + "limitIncrease.new", + "limitIncrease.update", + "virtualAccount.new", + "virtualAccount.complete", + "transfer.new", + "transfer.update", + "transfer.complete", + "wallet.new", + "wallet.inbound" + ] + }, + "example": [ + "customer.new" + ] + }, + "last_event_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "2024-01-01T00:00:00.000Z" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "url", + "events", + "instance_id" + ] + }, + "PortalAccessOut": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "example": "https://example.com/webhook" + } + }, + "required": [ + "url" + ] + }, + "PayinOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "payin_quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pq_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "manual_execution_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "pending", + "concluded", + "failed" + ], + "description": "When non-null, the payin was created while the manual OTC liquidity toggle was ON. `pending` means an operator must convert BRL→USDT manually and click \"Mark concluded\"; `concluded` closes the internal flow. Customer-facing behavior is identical in either mode.", + "example": null + }, + "manual_concluded_at": { + "description": "When `manual_execution_status` transitioned to `concluded`. Postgres returns a Date; this transform normalizes to an ISO string for the SDK.", + "example": null + }, + "manual_concluded_by": { + "type": [ + "string", + "null" + ], + "description": "Identifier of the operator who marked the manual OTC concluded.", + "example": null + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "image_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "payment_method": { + "type": "string", + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "partner_fee_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "pf_000000000000" + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "total_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.53 USDC", + "example": 1.53 + }, + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 5.05 BRL (commercial quotation + (blindpay taxes))", + "example": 505 + }, + "currency": { + "type": "string", + "enum": [ + "BRL", + "USD", + "MXN", + "COP", + "ARS", + "EUR" + ], + "description": "ISO 4271 currency code", + "example": "BRL" + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "is_otc": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the payin quote is for an OTC (Over the Counter) transaction", + "example": false + }, + "payer_rules": { + "type": [ + "object", + "null" + ], + "properties": { + "pix_allowed_tax_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "example": "123.456.789-09" + } + }, + "transfers_allowed_tax_id": { + "type": [ + "string", + "null" + ], + "example": "20-12345678-3" + }, + "pse_allowed_tax_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "example": "1234567890" + } + }, + "pse_full_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50 + }, + "pse_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "NIT" + ] + }, + "pse_document_number": { + "type": [ + "string", + "null" + ] + }, + "pse_email": { + "type": [ + "string", + "null" + ], + "format": "email" + }, + "pse_phone": { + "type": [ + "string", + "null" + ], + "pattern": "^\\+573\\d{9}$" + }, + "pse_bank_code": { + "type": [ + "string", + "null" + ] + } + }, + "example": { + "pix_allowed_tax_ids": [ + "123.456.789-09" + ], + "transfers_allowed_tax_id": "20-12345678-3", + "pse_allowed_tax_ids": [ + "1234567890" + ] + } + }, + "name": { + "type": "string", + "example": "Wallet Display Name" + }, + "address": { + "type": [ + "string", + "null" + ], + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "blindpay_bank_details": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "pse_payment_link": { + "type": [ + "string", + "null" + ], + "description": "PSE payment link (derived from tracking_transaction.pse_instruction)", + "example": "https://pse.example.com/payment/abc123" + }, + "pse_full_name": { + "type": [ + "string", + "null" + ], + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "pse_tax_id": { + "type": [ + "string", + "null" + ], + "description": "PSE payer document number", + "example": "1234567890" + }, + "pse_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + } + }, + "required": [ + "id", + "status", + "payin_quote_id", + "instance_id", + "customer_id", + "tracking_transaction", + "tracking_payment", + "tracking_complete", + "type", + "payment_method", + "sender_amount", + "receiver_amount", + "token", + "commercial_quotation", + "blindpay_quotation", + "currency", + "name", + "network" + ] + }, + "CreatePayinOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ], + "description": "Payin general status", + "example": "processing" + }, + "pix_code": { + "type": [ + "string", + "null" + ], + "description": "PIX code", + "example": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB" + }, + "memo_code": { + "type": [ + "string", + "null" + ], + "description": "Memo code", + "example": "8K45GHBNT6BQ6462" + }, + "clabe": { + "type": [ + "string", + "null" + ], + "description": "CLABE code", + "example": "014027000000000008" + }, + "partner_fee": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "Payin partner fee amount in cents", + "example": 25000 + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_payment": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payment step", + "example": "on_hold" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "description": "Payment provider name", + "example": "blockchain" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payment completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "review_source": { + "type": [ + "string", + "null" + ], + "description": "Risk source that sent this payin to manual review", + "example": "seon_review" + }, + "review_context": { + "type": [ + "object", + "null" + ], + "additionalProperties": {}, + "description": "Structured risk context for manual review" + }, + "approved_risk_sources": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "Risk sources already approved by an analyst", + "example": [ + "seon_review" + ] + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Payin transaction step", + "example": "processing" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "failed", + "completed" + ], + "description": "Payin transaction status", + "example": "failed" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction external id", + "example": "12345678" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Payin transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Blockchain transaction hash", + "example": "0x123...890" + }, + "provider_name": { + "type": [ + "string", + "null" + ], + "enum": [ + "Nvio Pagos", + "Brex", + "Stark Bank", + "JPMorgan Chase", + "HSBC", + "Inter", + "JP Morgan Chase", + "Bitso", + "Citi", + "CFSB", + "Triple A Technologies", + "Portage Bank" + ], + "description": "Payment provider name", + "example": "HSBC" + }, + "provider_transaction_id": { + "type": [ + "string", + "null" + ], + "description": "Payment provider transaction id", + "example": "" + }, + "sender_name": { + "type": [ + "string", + "null" + ], + "example": "John Doe Smith" + }, + "sender_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Bank of America" + }, + "sender_tax_id": { + "type": [ + "string", + "null" + ], + "example": "123.456.789-10" + }, + "sender_bank_code": { + "type": [ + "string", + "null" + ], + "example": "00416968" + }, + "sender_account_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "end_to_end_id": { + "type": [ + "string", + "null" + ], + "description": "BACEN Pix end-to-end transaction ID (govt Pix ID)", + "example": "E20018183202603311320vm6ALFpJpsS" + }, + "trace_number": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "transaction_reference": { + "type": [ + "string", + "null" + ], + "example": "1234567890" + }, + "description": { + "type": [ + "string", + "null" + ], + "example": "Payment from John Doe Smith" + }, + "pse_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "payment_link": { + "type": "string", + "description": "PSE payment link URL", + "example": "https://pse.example.com/payment/abc123" + }, + "fid": { + "type": "string", + "description": "PSE funding identifier for webhook matching", + "example": "fid_abc123" + }, + "full_name": { + "type": "string", + "description": "PSE payer full name", + "example": "Juan Pérez García" + }, + "tax_id": { + "type": "string", + "description": "PSE payer document number", + "example": "1234567890" + }, + "document_type": { + "type": "string", + "enum": [ + "CC", + "NIT" + ], + "description": "PSE payer document type", + "example": "CC" + }, + "phone": { + "type": "string", + "description": "PSE payer phone number", + "example": "+573001234567" + }, + "email": { + "type": "string", + "description": "PSE payer email", + "example": "juan@example.com" + }, + "bank_code": { + "type": [ + "string", + "null" + ], + "description": "PSE payer bank code", + "example": "1007" + } + }, + "required": [ + "payment_link", + "fid", + "full_name", + "tax_id", + "document_type", + "phone", + "email" + ] + }, + "transfers_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "account": { + "type": "string", + "description": "CVU/CBU/Alias account number", + "example": "0000003100012389237485" + }, + "type": { + "type": "string", + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "description": "Account type (CVU, CBU, or ALIAS)", + "example": "CVU" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "description": "CUIT/CUIL (normalized, digits only)", + "example": "20123456783" + } + }, + "required": [ + "account", + "type" + ] + }, + "ted_instruction": { + "type": [ + "object", + "null" + ], + "properties": { + "beneficiary_name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "tax_id": { + "type": "string", + "example": "57.599.376/0001-81" + }, + "bank_code": { + "type": "string", + "example": "665" + }, + "bank_name": { + "type": "string", + "example": "STARK BANK S.A." + }, + "branch_code": { + "type": "string", + "example": "5340" + }, + "account_number": { + "type": "string", + "example": "01011707084-8" + }, + "account_type": { + "type": "string", + "example": "checking" + } + }, + "required": [ + "beneficiary_name", + "tax_id", + "bank_code", + "bank_name", + "branch_code", + "account_number", + "account_type" + ] + } + }, + "required": [ + "step" + ] + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "transaction_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Transaction fee in cents (percentage-based fee)", + "example": 100 + }, + "blindpay_bank_details": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "default": "121145349", + "example": "121145349" + }, + "account_number": { + "type": "string", + "default": "621327727210181", + "example": "621327727210181" + }, + "account_type": { + "type": "string", + "default": "Business checking", + "example": "Business checking" + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "default": "CHASUS33", + "example": "CHASUS33" + }, + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "beneficiary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "BlindPay, Inc.", + "example": "BlindPay, Inc." + }, + "address_line_1": { + "type": "string", + "default": "8 The Green, #19364", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "default": "Dover, DE 19901", + "example": "Dover, DE 19901" + } + } + }, + "receiving_bank": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "CFSB", + "example": "CFSB" + }, + "address_line_1": { + "type": "string", + "default": "1 Letterman Drive, Building A, Suite A4-700", + "example": "1 Letterman Drive, Building A, Suite A4-700" + }, + "address_line_2": { + "type": "string", + "default": "San Francisco, CA 94129", + "example": "San Francisco, CA 94129" + } + } + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "beneficiary", + "receiving_bank" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "payment_method": { + "type": [ + "string", + "null" + ], + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + } + }, + "required": [ + "id", + "status", + "tracking_complete", + "tracking_payment", + "tracking_transaction", + "blindpay_bank_details" + ] + }, + "CreatePayinIn": { + "type": "object", + "properties": { + "payin_quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pq_000000000000" + } + }, + "required": [ + "payin_quote_id" + ] + }, + "CreatePayinQuoteOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "expires_at": { + "type": [ + "number", + "null" + ], + "description": "Epoch unix timestamp that represents the final datetime to transaction be received on blockchain", + "example": 1712958191 + }, + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 5.05 BRL (commercial quotation + (blindpay taxes))", + "example": 505 + }, + "receiver_amount": { + "type": [ + "number", + "null" + ], + "description": "10.10 USDC", + "example": 1010 + }, + "sender_amount": { + "type": [ + "number", + "null" + ], + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "flat_fee": { + "type": [ + "number", + "null" + ], + "description": "0.5 USDC", + "example": 50 + }, + "billing_fee_amount": { + "type": [ + "number", + "null" + ], + "description": "Billing fee in cents (charged at the end of the month)", + "example": 50 + }, + "is_otc": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the payin quote is for an OTC (Over the Counter) transaction", + "example": false + } + }, + "required": [ + "id", + "expires_at", + "commercial_quotation", + "blindpay_quotation", + "receiver_amount", + "sender_amount", + "flat_fee" + ] + }, + "CreatePayinQuoteIn": { + "type": "object", + "properties": { + "blockchain_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "bw_000000000000" + }, + "wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "bl_000000000000" + }, + "currency_type": { + "type": "string", + "enum": [ + "sender", + "receiver" + ], + "description": "", + "example": "sender" + }, + "cover_fees": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the sender will cover the fees. If false, the customer will cover the fees.", + "example": true + }, + "request_amount": { + "type": "integer", + "minimum": 500, + "description": "1000 represents 10.00, 2050 represents 20.50", + "example": 1000 + }, + "payment_method": { + "type": "string", + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ], + "example": "pix" + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "partner_fee_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "pf_000000000000" + }, + "payer_rules": { + "type": [ + "object", + "null" + ], + "properties": { + "pix_allowed_tax_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "example": "123.456.789-09" + } + }, + "transfers_allowed_tax_id": { + "type": [ + "string", + "null" + ], + "example": "20-12345678-3" + }, + "pse_allowed_tax_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string", + "example": "1234567890" + } + }, + "pse_full_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50 + }, + "pse_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "NIT" + ] + }, + "pse_document_number": { + "type": [ + "string", + "null" + ] + }, + "pse_email": { + "type": [ + "string", + "null" + ], + "format": "email" + }, + "pse_phone": { + "type": [ + "string", + "null" + ], + "pattern": "^\\+573\\d{9}$" + }, + "pse_bank_code": { + "type": [ + "string", + "null" + ] + } + }, + "example": { + "pix_allowed_tax_ids": [ + "123.456.789-09" + ], + "transfers_allowed_tax_id": "20-12345678-3", + "pse_allowed_tax_ids": [ + "1234567890" + ] + } + }, + "is_otc": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the payin quote is for an OTC (Over the Counter) transaction", + "example": false + } + }, + "required": [ + "currency_type", + "request_amount", + "payment_method", + "token" + ] + }, + "BillingSubscription": { + "type": "object", + "properties": { + "minimum_per_month": { + "type": "integer", + "description": "Minimum monthly billing amount in cents", + "example": 0 + }, + "subscription_plan": { + "type": [ + "string", + "null" + ], + "enum": [ + "Basic", + "Business", + "Enterprise" + ], + "description": "Subscription plan: Basic, Business, or Enterprise", + "example": "Basic" + }, + "subscription_price": { + "type": "integer", + "description": "Subscription price in cents", + "example": 24900 + }, + "started_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "When the subscription started", + "example": "2025-01-01T00:00:00.000Z" + }, + "invoice_due_date_days": { + "type": "integer", + "description": "Days after period end when invoice is due", + "example": 15 + }, + "status": { + "type": "string", + "enum": [ + "active", + "pending_payment", + "past_due", + "cancelled" + ], + "description": "Subscription billing status: active (no issues), overdue (invoice past due), pending (awaiting payment)", + "example": "active" + }, + "billing_charge": { + "type": [ + "boolean", + "null" + ], + "description": "If true, fees are charged via monthly invoice instead of at transaction time", + "example": false + } + }, + "required": [ + "minimum_per_month", + "subscription_price", + "invoice_due_date_days", + "status" + ] + }, + "BillingDetails": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Blind Pay, Inc." + }, + "email": { + "anyOf": [ + { + "type": "string", + "format": "email" + }, + { + "type": "string", + "enum": [ + "" + ] + } + ], + "example": "billing@blindpay.com" + }, + "tax_id": { + "type": "string", + "example": "123456789" + }, + "address_line_1": { + "type": "string", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "example": "Suite 200" + }, + "city": { + "type": "string", + "example": "Dover" + }, + "state_province_region": { + "type": "string", + "example": "DE" + }, + "postal_code": { + "type": "string", + "example": "19901" + }, + "country": { + "type": "string", + "example": "United States" + }, + "copy_emails": { + "type": "array", + "items": { + "type": "string", + "format": "email" + }, + "default": [], + "description": "Optional CC emails for billing communications", + "example": [ + "finance@example.com" + ] + } + }, + "required": [ + "name", + "email", + "tax_id", + "address_line_1", + "address_line_2", + "city", + "state_province_region", + "postal_code", + "country" + ] + }, + "VirtualAccountsUsage": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "description": "Number of active virtual accounts", + "example": 100 + }, + "unit_cost": { + "type": "integer", + "description": "Cost per virtual account in cents", + "example": 1500 + }, + "total": { + "type": "integer", + "description": "Total virtual account fees in cents", + "example": 150000 + } + }, + "required": [ + "count", + "unit_cost", + "total" + ] + }, + "AddonItemSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Recurring item or invoice item ID", + "example": "ri_000000000000" + }, + "name": { + "type": "string", + "description": "Addon name", + "example": "Swift" + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "Addon description", + "example": "Swift" + }, + "amount": { + "type": "integer", + "description": "Addon amount in cents", + "example": 50000 + }, + "quantity": { + "type": "integer", + "description": "Addon quantity", + "example": 1 + } + }, + "required": [ + "id", + "name", + "amount", + "quantity" + ] + }, + "CurrentUsageSchema": { + "type": "object", + "properties": { + "period_start": { + "type": "string", + "format": "date-time", + "description": "Start of billing period", + "example": "2025-12-01T00:00:00.000Z" + }, + "period_end": { + "type": "string", + "format": "date-time", + "description": "End of billing period", + "example": "2025-12-31T23:59:59.999Z" + }, + "due_date": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Expected due date when invoice is generated (null for partner-fee-only invoices)", + "example": "2025-01-21T00:00:00.000Z" + }, + "minimum_monthly_amount": { + "type": "integer", + "description": "Minimum monthly amount in cents", + "example": 200000 + }, + "subscription_plan": { + "type": [ + "string", + "null" + ], + "enum": [ + "Basic", + "Business", + "Enterprise" + ], + "description": "Subscription plan: Basic, Business, or Enterprise", + "example": "Basic" + }, + "subscription_plan_amount": { + "type": "integer", + "description": "Subscription plan amount in cents", + "example": 24900 + }, + "virtual_accounts": { + "$ref": "#/components/schemas/VirtualAccountsUsage" + }, + "virtual_account_fees": { + "type": "integer", + "description": "Virtual account fees in cents", + "example": 10000 + }, + "payin_billing_fees": { + "type": "integer", + "description": "Payin billing fees in cents", + "example": 10000 + }, + "payin_partner_fees": { + "type": "integer", + "description": "Payin partner fees in cents (earnings)", + "example": 25000 + }, + "payout_billing_fees": { + "type": "integer", + "description": "Payout billing fees in cents", + "example": 10000 + }, + "payout_partner_fees": { + "type": "integer", + "description": "Payout partner fees in cents (earnings)", + "example": 25000 + }, + "total_to_pay": { + "type": "integer", + "description": "Total amount owed to Blindpay in cents", + "example": 40000 + }, + "total_to_collect": { + "type": "integer", + "description": "Total partner fees to collect (earnings) in cents", + "example": 50000 + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddonItemSchema" + }, + "description": "Recurring addon items due for the current period" + } + }, + "required": [ + "period_start", + "period_end", + "due_date", + "minimum_monthly_amount", + "subscription_plan_amount", + "virtual_accounts", + "virtual_account_fees", + "payin_billing_fees", + "payin_partner_fees", + "payout_billing_fees", + "payout_partner_fees", + "total_to_pay", + "total_to_collect", + "items" + ] + }, + "InvoiceItemSchema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Invoice ID", + "example": "iv_000000000000" + }, + "period_start": { + "type": "string", + "format": "date-time", + "description": "Start of billing period", + "example": "2025-11-01T00:00:00.000Z" + }, + "period_end": { + "type": "string", + "format": "date-time", + "description": "End of billing period", + "example": "2025-11-30T23:59:59.999Z" + }, + "due_date": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Invoice due date (null for partner-fee-only invoices)", + "example": "2025-11-21T00:00:00.000Z" + }, + "status": { + "type": "string", + "enum": [ + "owing", + "paid", + "claimable", + "collected", + "expired", + "overdue" + ], + "description": "Invoice status: owing (unpaid), paid (payment received), claimable (has partner fees to claim), collected (partner fees claimed), expired (voided), overdue (past due date)", + "example": "paid" + }, + "virtual_account_fees": { + "type": "integer", + "description": "Virtual account fees in cents", + "example": 10000 + }, + "payin_billing_fees": { + "type": "integer", + "description": "Payin billing fees in cents", + "example": 10000 + }, + "payin_partner_fees": { + "type": "integer", + "description": "Payin partner fees in cents (earnings)", + "example": 25000 + }, + "payout_billing_fees": { + "type": "integer", + "description": "Payout billing fees in cents", + "example": 10000 + }, + "payout_partner_fees": { + "type": "integer", + "description": "Payout partner fees in cents (earnings)", + "example": 25000 + }, + "total_to_pay": { + "type": "integer", + "description": "Total amount owed to Blindpay in cents", + "example": 40000 + }, + "total_to_collect": { + "type": "integer", + "description": "Total partner fees to collect (earnings) in cents", + "example": 50000 + }, + "discount": { + "type": "integer", + "description": "Discount amount in cents from Stripe coupon", + "example": 0 + }, + "reference": { + "type": [ + "string", + "null" + ], + "description": "Invoice reference (billing period month/year)", + "example": "01/2026" + }, + "url": { + "type": "string", + "description": "Invoice URL", + "example": "https://example.com" + }, + "payment_id": { + "type": [ + "string", + "null" + ], + "description": "Reference to invoice_payment record", + "example": "ip_000000000000" + }, + "collection_id": { + "type": [ + "string", + "null" + ], + "description": "Reference to invoice_collection record", + "example": "ic_000000000000" + }, + "has_partner_fee_invoice": { + "type": "boolean", + "description": "Whether a partner fee collection invoice PDF is available", + "example": false + }, + "minimum_per_month": { + "type": "integer", + "description": "Minimum monthly amount in cents at time of invoice", + "example": 200000 + }, + "subscription_plan": { + "type": [ + "string", + "null" + ], + "enum": [ + "Basic", + "Business", + "Enterprise" + ], + "description": "Subscription plan used", + "example": "Basic" + }, + "subscription_price": { + "type": "integer", + "description": "Subscription price in cents used", + "example": 24900 + } + }, + "required": [ + "id", + "period_start", + "period_end", + "due_date", + "status", + "virtual_account_fees", + "payin_billing_fees", + "payin_partner_fees", + "payout_billing_fees", + "payout_partner_fees", + "total_to_pay", + "total_to_collect", + "discount", + "url", + "has_partner_fee_invoice", + "minimum_per_month", + "subscription_price" + ] + }, + "GetInvoicesSchemaOut": { + "type": "object", + "properties": { + "current": { + "$ref": "#/components/schemas/CurrentUsageSchema" + }, + "invoices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InvoiceItemSchema" + } + } + }, + "required": [ + "current", + "invoices" + ] + }, + "GetInvoiceSchemaOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Invoice ID", + "example": "iv_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "owing", + "paid", + "claimable", + "collected", + "expired", + "overdue" + ], + "description": "Invoice status: owing (unpaid), paid (payment received), claimable (has partner fees to claim), collected (partner fees claimed), expired (voided), overdue (past due date)", + "example": "paid" + }, + "period_start": { + "type": "string", + "format": "date-time", + "description": "Start of billing period", + "example": "2025-11-01T00:00:00.000Z" + }, + "period_end": { + "type": "string", + "format": "date-time", + "description": "End of billing period", + "example": "2025-11-30T23:59:59.999Z" + }, + "due_date": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Invoice due date (null for partner-fee-only invoices)", + "example": "2025-11-21T00:00:00.000Z" + }, + "virtual_account_fees": { + "type": "integer", + "description": "Virtual account fees in cents", + "example": 10000 + }, + "payin_billing_fees": { + "type": "integer", + "description": "Payin billing fees in cents", + "example": 10000 + }, + "payin_partner_fees": { + "type": "integer", + "description": "Payin partner fees in cents (earnings)", + "example": 25000 + }, + "payout_billing_fees": { + "type": "integer", + "description": "Payout billing fees in cents", + "example": 10000 + }, + "payout_partner_fees": { + "type": "integer", + "description": "Payout partner fees in cents (earnings)", + "example": 25000 + }, + "total_to_pay": { + "type": "integer", + "description": "Total amount owed to Blindpay in cents", + "example": 40000 + }, + "total_to_collect": { + "type": "integer", + "description": "Total partner fees to collect (earnings) in cents", + "example": 50000 + }, + "discount": { + "type": "integer", + "description": "Discount amount in cents from Stripe coupon", + "example": 0 + }, + "credit_note_amount": { + "type": "integer", + "description": "Credit note amount in cents", + "example": 0 + }, + "url": { + "type": "string", + "description": "Invoice URL", + "example": "https://example.com" + }, + "payment_id": { + "type": [ + "string", + "null" + ], + "description": "Reference to invoice payment record", + "example": "ip_000000000000" + }, + "collection_id": { + "type": [ + "string", + "null" + ], + "description": "Reference to invoice collection record", + "example": "ic_000000000000" + }, + "has_partner_fee_invoice": { + "type": "boolean", + "description": "Whether a partner fee collection invoice PDF is available", + "example": false + }, + "minimum_per_month": { + "type": "integer", + "description": "Minimum monthly amount in cents", + "example": 200000 + }, + "subscription_plan": { + "type": [ + "string", + "null" + ], + "enum": [ + "Basic", + "Business", + "Enterprise" + ], + "description": "Subscription plan: Basic, Business, or Enterprise", + "example": "Basic" + }, + "subscription_price": { + "type": "integer", + "description": "Subscription price in cents", + "example": 24900 + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddonItemSchema" + }, + "description": "Addon items" + } + }, + "required": [ + "id", + "status", + "period_start", + "period_end", + "due_date", + "virtual_account_fees", + "payin_billing_fees", + "payin_partner_fees", + "payout_billing_fees", + "payout_partner_fees", + "total_to_pay", + "total_to_collect", + "discount", + "credit_note_amount", + "url", + "has_partner_fee_invoice", + "minimum_per_month", + "subscription_price", + "items" + ] + }, + "GetInvoicePdfSchemaOut": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Signed URL to the partner fee invoice PDF (expires in 15 minutes)", + "example": "https://invoices-bucket.s3.us-east-1.amazonaws.com/signed-url..." + } + }, + "required": [ + "url" + ] + }, + "PayInvoiceSchemaOut": { + "type": "object", + "properties": { + "amount": { + "type": "integer", + "description": "Amount to pay in cents (USD)", + "example": 40000 + }, + "tron_wallet": { + "type": "string", + "description": "Tron wallet address to send USDT to", + "example": "TXYZabcd1234567890" + }, + "solana_wallet": { + "type": "string", + "description": "Solana wallet address to send USDC to", + "example": "Sol1abc123def456" + } + }, + "required": [ + "amount", + "tron_wallet", + "solana_wallet" + ] + }, + "CollectInvoiceSchemaOut": { + "type": "object", + "properties": { + "collection_id": { + "type": "string", + "description": "Invoice collection record ID", + "example": "ic_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "processing", + "completed", + "failed" + ], + "example": "pending" + }, + "amount": { + "type": "integer", + "description": "Amount to collect in cents", + "example": 50000 + }, + "network": { + "type": "string", + "example": "polygon" + }, + "token": { + "type": "string", + "example": "USDC" + }, + "wallet_address": { + "type": "string", + "example": "0x1234567890abcdef1234567890abcdef12345678" + } + }, + "required": [ + "collection_id", + "status", + "amount", + "network", + "token", + "wallet_address" + ] + }, + "CollectInvoiceBody": { + "type": "object", + "properties": { + "network": { + "type": "string", + "enum": [ + "polygon", + "base", + "arbitrum", + "ethereum", + "tron", + "solana", + "stellar" + ], + "description": "Blockchain network for collection", + "example": "polygon" + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT" + ], + "description": "Token to collect", + "example": "USDC" + }, + "wallet_address": { + "type": "string", + "description": "Wallet address to receive partner fees", + "example": "0x1234567890abcdef1234567890abcdef12345678" + } + }, + "required": [ + "network", + "token", + "wallet_address" + ] + }, + "CreatePortalSessionSchemaOut": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "Stripe Customer Portal session URL", + "example": "https://billing.stripe.com/p/session/test_xxx" + } + }, + "required": [ + "url" + ] + }, + "PaymentMethodSchemaOut": { + "type": "object", + "properties": { + "type": { + "type": [ + "string", + "null" + ], + "enum": [ + "card", + "us_bank_account" + ], + "description": "Payment method type: card or us_bank_account", + "example": "card" + }, + "brand": { + "type": [ + "string", + "null" + ], + "description": "Card brand (visa, mastercard, amex, etc)", + "example": "visa" + }, + "last4": { + "type": [ + "string", + "null" + ], + "description": "Last 4 digits of card number or bank account", + "example": "4242" + }, + "exp_month": { + "type": [ + "number", + "null" + ], + "description": "Card expiration month (1-12)", + "example": 12 + }, + "exp_year": { + "type": [ + "number", + "null" + ], + "description": "Card expiration year", + "example": 2025 + }, + "bank_name": { + "type": [ + "string", + "null" + ], + "description": "Bank name for us_bank_account type", + "example": "Chase" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "description": "Bank account type: checking or savings", + "example": "checking" + }, + "created_at": { + "type": [ + "string", + "null" + ], + "description": "ISO timestamp when payment method was added", + "example": "2024-12-27T00:00:00.000Z" + } + }, + "required": [ + "type", + "brand", + "last4", + "exp_month", + "exp_year", + "bank_name", + "account_type", + "created_at" + ] + }, + "TransferOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bl_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed" + ], + "description": "Transfer general status", + "example": "processing" + }, + "transfer_quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pq_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "tracking_transaction_monitoring": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Transaction monitoring step", + "example": "processing" + }, + "blockchain_screening": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Blindpay screening step", + "example": 1 + }, + "risk_score": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Risk score", + "example": 1 + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Transfer transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + }, + "tracking_paymaster": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_bridge_swap": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "image_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "wallet_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bl_000000000000" + }, + "sender_token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "sender_amount": { + "type": "number", + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + }, + "receiver_amount": { + "type": "number", + "description": "10.10 USDC", + "example": 1010 + }, + "customer_network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "customer_token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "customer_wallet_address": { + "type": "string", + "minLength": 32, + "maxLength": 64, + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "external_id": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "your-database-id" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "address": { + "type": [ + "string", + "null" + ], + "maxLength": 64, + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + } + }, + "required": [ + "id", + "status", + "transfer_quote_id", + "instance_id", + "tracking_transaction_monitoring", + "tracking_paymaster", + "tracking_bridge_swap", + "tracking_complete", + "wallet_id", + "sender_token", + "sender_amount", + "receiver_amount", + "customer_network", + "customer_token", + "customer_wallet_address", + "customer_id", + "network" + ] + }, + "CreateTransferOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed" + ], + "description": "Transfer general status", + "example": "processing" + }, + "tracking_bridge_swap": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_complete": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_paymaster": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Complete step", + "example": "on_hold" + }, + "transaction_hash": { + "type": [ + "string", + "null" + ], + "description": "Complete transaction hash", + "example": "0x123...890" + }, + "gas_fee": { + "type": [ + "string", + "null" + ], + "description": "Gas fee related to transaction", + "example": "100" + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Complete completed date", + "example": "2011-10-05T14:48:00.000Z" + }, + "error_message": { + "type": [ + "string", + "null" + ], + "example": "Gas fee is too low" + } + }, + "required": [ + "step" + ] + }, + "tracking_transaction_monitoring": { + "type": "object", + "properties": { + "step": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "pending_review", + "completed" + ], + "description": "Transaction monitoring step", + "example": "processing" + }, + "blockchain_screening": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Blindpay screening step", + "example": 1 + }, + "risk_score": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Risk score", + "example": 1 + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "description": "Transfer transaction completed date", + "example": "2011-10-05T14:48:00.000Z" + } + }, + "required": [ + "step" + ] + } + }, + "required": [ + "id", + "status", + "tracking_bridge_swap", + "tracking_complete", + "tracking_paymaster", + "tracking_transaction_monitoring" + ] + }, + "CreateTransferIn": { + "type": "object", + "properties": { + "transfer_quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pq_000000000000" + } + }, + "required": [ + "transfer_quote_id" + ] + }, + "CreateTransferQuoteOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "qu_000000000000" + }, + "expires_at": { + "type": [ + "number", + "null" + ], + "description": "Epoch unix timestamp that represents the final datetime to transaction be received on blockchain", + "example": 1712958191 + }, + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 5.05 BRL (commercial quotation + (blindpay taxes))", + "example": 505 + }, + "receiver_amount": { + "type": "number", + "description": "10.10 USDC", + "example": 1010 + }, + "sender_amount": { + "type": "number", + "description": "52.40 BRL needs to be sent in a pix transfer", + "example": 5240 + }, + "partner_fee_amount": { + "type": [ + "number", + "null" + ], + "default": 0, + "description": "1.5 USDC", + "example": 150 + }, + "flat_fee": { + "type": "number", + "description": "0.5 USDC", + "example": 50 + } + }, + "required": [ + "id", + "expires_at", + "commercial_quotation", + "blindpay_quotation", + "receiver_amount", + "sender_amount", + "flat_fee" + ] + }, + "CreateTransferQuoteIn": { + "type": "object", + "properties": { + "wallet_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bl_000000000000" + }, + "amount_reference": { + "type": "string", + "enum": [ + "sender", + "receiver" + ], + "description": "", + "example": "sender" + }, + "cover_fees": { + "type": [ + "boolean", + "null" + ], + "description": "If true, the sender will cover the fees. If false, the customer will cover the fees.", + "example": true + }, + "request_amount": { + "type": "integer", + "minimum": 1, + "description": "100 represents 1, 2050 represents 20.50", + "example": 1000 + }, + "sender_token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "customer_wallet_address": { + "type": "string", + "minLength": 32, + "maxLength": 64, + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "customer_token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "customer_network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "partner_fee_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "pf_000000000000" + } + }, + "required": [ + "wallet_id", + "amount_reference", + "request_amount", + "sender_token", + "customer_wallet_address", + "customer_token", + "customer_network" + ] + }, + "CustomerLimitIncreaseOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "rl_000000000000" + } + }, + "required": [ + "id" + ] + }, + "CustomerLimitIncreaseIn": { + "type": "object", + "properties": { + "per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 100000 + }, + "daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 200000 + }, + "monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 1000000 + }, + "supporting_document_type": { + "type": "string", + "enum": [ + "individual_bank_statement", + "individual_tax_return", + "individual_proof_of_income", + "individual_pay_stub", + "individual_employment_letter", + "individual_investment_statement", + "individual_crypto_exchange_statement", + "individual_blockchain_wallet_statement", + "business_bank_statement", + "business_financial_statements", + "business_tax_return", + "business_contract", + "business_accounts_receivable", + "business_merchant_processor_statement", + "business_shareholder_loan" + ], + "example": "individual_bank_statement" + }, + "supporting_document_file": { + "type": "string", + "format": "uri", + "example": "https://example.com/document.pdf" + } + }, + "required": [ + "per_transaction", + "daily", + "monthly", + "supporting_document_type", + "supporting_document_file" + ] + }, + "GetCustomerLimitIncreaseOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "rl_000000000000" + }, + "status": { + "type": "string", + "enum": [ + "in_review", + "approved", + "rejected" + ], + "example": "in_review" + }, + "per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 100000 + }, + "daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 200000 + }, + "monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 1000000 + }, + "approved_per_transaction": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 70000 + }, + "approved_daily": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 140000 + }, + "approved_monthly": { + "type": [ + "integer", + "null" + ], + "maximum": 100000000000, + "example": 700000 + }, + "supporting_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual_bank_statement", + "individual_tax_return", + "individual_proof_of_income", + "individual_pay_stub", + "individual_employment_letter", + "individual_investment_statement", + "individual_crypto_exchange_statement", + "individual_blockchain_wallet_statement", + "business_bank_statement", + "business_financial_statements", + "business_tax_return", + "business_contract", + "business_accounts_receivable", + "business_merchant_processor_statement", + "business_shareholder_loan" + ], + "example": "individual_bank_statement" + }, + "supporting_document_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/document.pdf" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "status", + "customer_id" + ] + }, + "OfframpWallet": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_external_id" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "bank_account_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "circle_wallet_id": { + "type": [ + "string", + "null" + ], + "example": "01234567-abcd-efgh-ijkl-012345678901" + }, + "network": { + "type": "string", + "enum": [ + "tron", + "solana", + "solana_devnet", + "arbitrum", + "base", + "ethereum", + "polygon", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "polygon_amoy" + ], + "example": "tron" + }, + "address": { + "type": "string", + "example": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "instance_id", + "customer_id", + "bank_account_id", + "network", + "address" + ] + }, + "WalletOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bl_000000000000" + }, + "name": { + "type": "string", + "maxLength": 255, + "example": "Blindpay Wallet" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "your-database-id" + }, + "address": { + "type": [ + "string", + "null" + ], + "maxLength": 64, + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "name", + "network" + ] + }, + "CreateWalletIn": { + "type": "object", + "properties": { + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "your-database-id" + }, + "name": { + "type": "string", + "maxLength": 255, + "example": "Blindpay Wallet" + } + }, + "required": [ + "network", + "name" + ] + }, + "WalletBalanceOut": { + "type": "object", + "properties": { + "USDC": { + "$ref": "#/components/schemas/WalletTokenOut" + }, + "USDT": { + "$ref": "#/components/schemas/WalletTokenOut" + }, + "USDB": { + "$ref": "#/components/schemas/WalletTokenOut" + } + }, + "required": [ + "USDC", + "USDT", + "USDB" + ] + }, + "BlockchainWalletMessageOut": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + }, + "BlockchainWalletOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bw_000000000000" + }, + "name": { + "type": [ + "string", + "null" + ], + "example": "Wallet Display Name" + }, + "network": { + "type": [ + "string", + "null" + ], + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "address": { + "type": [ + "string", + "null" + ], + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "signature_tx_hash": { + "type": [ + "string", + "null" + ], + "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" + }, + "is_account_abstraction": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + } + }, + "required": [ + "id", + "name", + "network", + "customer_id" + ] + }, + "CreateBlockchainWalletIn": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Wallet Display Name" + }, + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "signature_tx_hash": { + "type": [ + "string", + "null" + ], + "example": "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" + }, + "address": { + "type": [ + "string", + "null" + ], + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + }, + "is_account_abstraction": { + "type": [ + "boolean", + "null" + ], + "example": false + } + }, + "required": [ + "name", + "network" + ] + }, + "BankAccountOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ], + "example": "wire" + }, + "name": { + "type": "string", + "example": "Bank Account Name" + }, + "pix_key": { + "type": [ + "string", + "null" + ], + "example": "14947677768" + }, + "beneficiary_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Individual full name or business name" + }, + "routing_number": { + "type": [ + "string", + "null" + ], + "example": "012345678" + }, + "account_number": { + "type": [ + "string", + "null" + ], + "example": "1001001234" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "checking", + "saving" + ], + "example": "checking" + }, + "account_class": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Address line 1" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Address line 2" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "State/Province/Region" + }, + "country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "Postal code" + }, + "spei_protocol": { + "type": [ + "string", + "null" + ], + "enum": [ + "clabe", + "debitcard", + "phonenum" + ], + "description": "For debitcard and phonenum the spei_institution_code is required", + "example": "clabe" + }, + "spei_institution_code": { + "type": [ + "string", + "null" + ], + "minLength": 5, + "maxLength": 5, + "example": "40002" + }, + "spei_clabe": { + "type": [ + "string", + "null" + ], + "example": "5482347403740546" + }, + "transfers_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "example": "CVU" + }, + "transfers_account": { + "type": [ + "string", + "null" + ], + "example": "BM123123123123" + }, + "ach_cop_beneficiary_first_name": { + "type": [ + "string", + "null" + ], + "example": "Fernando" + }, + "ach_cop_beneficiary_last_name": { + "type": [ + "string", + "null" + ], + "example": "Guzman Alarcón" + }, + "ach_cop_document_id": { + "type": [ + "string", + "null" + ], + "example": "1661105408" + }, + "ach_cop_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "CE", + "NIT", + "PASS", + "PEP" + ], + "description": "CC - Cédula de Ciudadanía; CE - Cédula de Extranjería; NIT - Número de Identificación Tributaria; PASS - Passport; PEP - Permiso Especial de Permanencia", + "example": "CC" + }, + "ach_cop_email": { + "type": [ + "string", + "null" + ], + "example": "fernando.guzman@gmail.com" + }, + "ach_cop_bank_code": { + "type": [ + "string", + "null" + ], + "example": "051" + }, + "ach_cop_bank_account": { + "type": [ + "string", + "null" + ], + "example": "12345678" + }, + "swift_code_bic": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_account_holder_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "example": "John Doe" + }, + "swift_account_number_iban": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 MAIN STREET SUITE 100" + }, + "swift_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "BUILDING A FLOOR 5" + }, + "swift_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "MEXICO CITY" + }, + "swift_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MX" + }, + "swift_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_bank_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 Main Street, Suite 100, Downtown District, City Center CP 12345" + }, + "swift_bank_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "456 Oak Avenue, Building 7, Financial District, Business Center CP 54321" + }, + "swift_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_bank_city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "swift_bank_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "District" + }, + "swift_bank_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_ifsc_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^[A-Z]{4}0[A-Z0-9]{6}$", + "example": "BARB0AHIMCI" + }, + "swift_intermediary_bank_swift_code_bic": { + "anyOf": [ + { + "type": "string", + "minLength": 8, + "maxLength": 8 + }, + { + "type": "string", + "minLength": 11, + "maxLength": 11 + }, + { + "type": "null" + } + ], + "example": "AEIBARB1" + }, + "swift_intermediary_bank_account_number_iban": { + "type": [ + "string", + "null" + ], + "maxLength": 34, + "example": "123456789" + }, + "swift_intermediary_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_intermediary_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "sepa_iban": { + "type": [ + "string", + "null" + ], + "example": "DE89370400440532013000" + }, + "sepa_beneficiary_bic": { + "type": [ + "string", + "null" + ], + "description": "BIC/SWIFT code of the beneficiary bank", + "example": "TRWIBEB1XXX" + }, + "sepa_beneficiary_legal_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Hans Müller" + }, + "sepa_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Friedrichstraße 12" + }, + "sepa_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Apt 4B" + }, + "sepa_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "10117" + }, + "sepa_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "DE" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "maxLength": 32, + "example": "536804398" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "pix_safe_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4,8}$", + "example": "00416968" + }, + "pix_safe_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "pix_safe_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "ted_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{3,5}$", + "example": "033" + }, + "ted_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "ted_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "tron_wallet_hash": { + "type": [ + "string", + "null" + ], + "example": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t" + }, + "offramp_wallets": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_external_id" + }, + "circle_wallet_id": { + "type": [ + "string", + "null" + ], + "example": "01234567-abcd-efgh-ijkl-012345678901" + }, + "network": { + "type": "string", + "enum": [ + "tron", + "solana", + "solana_devnet", + "arbitrum", + "base", + "ethereum", + "polygon", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "polygon_amoy" + ], + "example": "tron" + }, + "address": { + "type": "string", + "example": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb" + } + }, + "required": [ + "id", + "network", + "address" + ] + }, + "example": [ + { + "address": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb", + "id": "ow_000000000000", + "network": "tron", + "external_id": "your_external_id" + } + ] + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated" + ], + "example": "verifying" + }, + "recipient_relationship": { + "type": [ + "string", + "null" + ], + "enum": [ + "first_party", + "employee", + "independent_contractor", + "vendor_or_supplier", + "subsidiary_or_affiliate", + "merchant_or_partner", + "customer", + "landlord", + "family", + "other" + ], + "example": "vendor_or_supplier" + }, + "swift_payment_code": { + "type": [ + "string", + "null" + ], + "enum": [ + "ae_swift_str", + "ae_swift_tcs", + "ae_swift_ipc", + "ae_swift_ifs", + "ae_swift_sts", + "ae_swift_pms", + "ae_swift_its", + "ae_swift_gde", + "ae_swift_ots", + "ae_swift_tts", + "bh_swift_afa", + "bh_swift_afl", + "bh_swift_ats", + "bh_swift_cea", + "bh_swift_cel", + "bh_swift_chc", + "bh_swift_dla", + "bh_swift_dlf", + "bh_swift_dll", + "bh_swift_doe", + "bh_swift_dsa", + "bh_swift_dsf", + "bh_swift_dsl", + "bh_swift_fam", + "bh_swift_fda", + "bh_swift_fdl", + "bh_swift_fia", + "bh_swift_fil", + "bh_swift_fis", + "bh_swift_fsa", + "bh_swift_fsl", + "bh_swift_gde", + "bh_swift_gdi", + "bh_swift_gms", + "bh_swift_gos", + "bh_swift_gri", + "bh_swift_ifs", + "bh_swift_igd", + "bh_swift_iid", + "bh_swift_ins", + "bh_swift_iod", + "bh_swift_iol", + "bh_swift_ipc", + "bh_swift_ish", + "bh_swift_isl", + "bh_swift_iss", + "bh_swift_its", + "bh_swift_ldl", + "bh_swift_lds", + "bh_swift_lea", + "bh_swift_lel", + "bh_swift_lla", + "bh_swift_lll", + "bh_swift_ots", + "bh_swift_pip", + "bh_swift_pms", + "bh_swift_ppa", + "bh_swift_ppl", + "bh_swift_prr", + "bh_swift_prs", + "bh_swift_rda", + "bh_swift_rdl", + "bh_swift_rds", + "bh_swift_rea", + "bh_swift_rel", + "bh_swift_rfs", + "bh_swift_rls", + "bh_swift_sal", + "bh_swift_sco", + "bh_swift_sla", + "bh_swift_sll", + "bh_swift_str", + "bh_swift_sts", + "bh_swift_tcp", + "bh_swift_tcr", + "bh_swift_tcs", + "bh_swift_tts", + "ch_swift_ccdndr", + "ch_swift_cctfdr", + "ch_swift_cgoddr", + "ch_swift_cocadr", + "ch_swift_cstrdr", + "ch_swift_remtdr", + "cn_swift_ccdndr", + "cn_swift_cctfdr", + "cn_swift_cgoddr", + "cn_swift_cocadr", + "cn_swift_cstrdr", + "cn_swift_remtdr", + "hk_swift_charitabledonation", + "hk_swift_goods", + "hk_swift_personal", + "hk_swift_services", + "id_swift_2011", + "id_swift_2012", + "id_swift_2015", + "id_swift_2018", + "id_swift_2019", + "id_swift_2097", + "id_swift_2098", + "id_swift_2127", + "id_swift_2129", + "id_swift_2150", + "id_swift_2163", + "id_swift_2193", + "id_swift_2194", + "id_swift_2197", + "id_swift_2198", + "id_swift_2203", + "id_swift_2204", + "id_swift_2206", + "id_swift_2207", + "id_swift_2221", + "id_swift_2222", + "id_swift_2231", + "id_swift_2232", + "id_swift_2233", + "id_swift_2240", + "id_swift_2241", + "id_swift_2242", + "id_swift_2243", + "id_swift_2244", + "id_swift_2245", + "id_swift_2246", + "id_swift_2247", + "id_swift_2251", + "id_swift_2252", + "id_swift_2255", + "id_swift_2256", + "id_swift_2257", + "id_swift_2261", + "id_swift_2262", + "id_swift_2263", + "id_swift_2264", + "id_swift_2271", + "id_swift_2272", + "id_swift_2273", + "id_swift_2274", + "id_swift_2275", + "id_swift_2276", + "id_swift_2277", + "id_swift_2278", + "id_swift_2279", + "id_swift_2280", + "id_swift_2282", + "id_swift_2299", + "id_swift_2311", + "id_swift_2321", + "id_swift_2322", + "id_swift_2323", + "id_swift_2331", + "id_swift_2332", + "id_swift_2333", + "id_swift_2341", + "id_swift_2342", + "id_swift_2351", + "id_swift_2352", + "id_swift_2353", + "id_swift_2354", + "id_swift_2361", + "id_swift_2362", + "id_swift_2363", + "id_swift_2364", + "id_swift_2365", + "id_swift_2366", + "id_swift_2371", + "id_swift_2372", + "id_swift_2375", + "id_swift_2376", + "id_swift_2377", + "id_swift_2378", + "id_swift_2379", + "id_swift_2380", + "id_swift_2381", + "id_swift_2382", + "id_swift_2383", + "id_swift_2384", + "id_swift_2385", + "id_swift_2386", + "id_swift_2387", + "id_swift_2388", + "id_swift_2389", + "id_swift_2390", + "id_swift_2391", + "id_swift_2392", + "id_swift_2393", + "id_swift_2394", + "id_swift_2395", + "id_swift_2396", + "id_swift_2397", + "id_swift_2398", + "id_swift_2400", + "id_swift_2405", + "id_swift_2411", + "id_swift_2412", + "id_swift_2413", + "id_swift_2421", + "id_swift_2422", + "id_swift_2423", + "id_swift_2431", + "id_swift_2432", + "id_swift_2433", + "id_swift_2441", + "id_swift_2442", + "id_swift_2443", + "id_swift_2450", + "id_swift_2461", + "id_swift_2462", + "id_swift_2466", + "id_swift_2467", + "id_swift_2468", + "id_swift_2469", + "id_swift_2480", + "id_swift_2490", + "id_swift_2495", + "id_swift_2501", + "id_swift_2502", + "id_swift_2511", + "id_swift_2512", + "id_swift_2521", + "id_swift_2522", + "id_swift_2523", + "id_swift_2524", + "id_swift_2525", + "id_swift_2526", + "id_swift_2531", + "id_swift_2532", + "id_swift_2533", + "id_swift_2541", + "id_swift_2546", + "id_swift_2547", + "id_swift_2550", + "id_swift_2560", + "id_swift_2570", + "id_swift_2580", + "id_swift_2590", + "id_swift_2600", + "id_swift_2610", + "id_swift_2615", + "id_swift_2616", + "id_swift_2630", + "id_swift_2640", + "id_swift_2651", + "id_swift_2652", + "id_swift_2660", + "id_swift_2670", + "id_swift_2701", + "id_swift_2702", + "id_swift_2705", + "id_swift_2710", + "id_swift_2716", + "id_swift_2717", + "id_swift_2720", + "id_swift_2725", + "id_swift_2730", + "id_swift_2731", + "id_swift_2741", + "id_swift_2742", + "id_swift_2743", + "id_swift_2751", + "id_swift_2752", + "id_swift_2760", + "id_swift_2765", + "id_swift_2766", + "id_swift_2767", + "id_swift_2770", + "id_swift_2802", + "id_swift_2803", + "id_swift_2804", + "id_swift_2808", + "id_swift_2809", + "id_swift_2811", + "id_swift_2812", + "id_swift_2813", + "id_swift_2814", + "id_swift_2815", + "id_swift_2821", + "id_swift_2822", + "id_swift_2823", + "id_swift_2824", + "id_swift_2825", + "id_swift_2826", + "id_swift_2827", + "id_swift_2828", + "in_swift_p0001", + "in_swift_p0002", + "in_swift_p0003", + "in_swift_p0004", + "in_swift_p0005", + "in_swift_p0006", + "in_swift_p0007", + "in_swift_p0008", + "in_swift_p0009", + "in_swift_p0010", + "in_swift_p0011", + "in_swift_p0012", + "in_swift_p0013", + "in_swift_p0014", + "in_swift_p0015", + "in_swift_p0016", + "in_swift_p0017", + "in_swift_p0019", + "in_swift_p0020", + "in_swift_p0021", + "in_swift_p0022", + "in_swift_p0024", + "in_swift_p0025", + "in_swift_p0028", + "in_swift_p0029", + "in_swift_p0099", + "in_swift_p0101", + "in_swift_p0102", + "in_swift_p0103", + "in_swift_p0104", + "in_swift_p0105", + "in_swift_p0107", + "in_swift_p0108", + "in_swift_p0109", + "jp_swift_1001", + "jp_swift_1002", + "jp_swift_1003", + "jp_swift_1004", + "jp_swift_101", + "jp_swift_102", + "jp_swift_103", + "jp_swift_104", + "jp_swift_105", + "jp_swift_106", + "jp_swift_107", + "jp_swift_108", + "jp_swift_109", + "jp_swift_110", + "jp_swift_1101", + "jp_swift_1102", + "jp_swift_1103", + "jp_swift_1104", + "jp_swift_1105", + "jp_swift_1106", + "jp_swift_1107", + "jp_swift_1108", + "jp_swift_1109", + "jp_swift_111", + "jp_swift_1110", + "jp_swift_1111", + "jp_swift_1112", + "jp_swift_1201", + "jp_swift_1202", + "jp_swift_201", + "jp_swift_202", + "jp_swift_203", + "jp_swift_204", + "jp_swift_205", + "jp_swift_206", + "jp_swift_207", + "jp_swift_208", + "jp_swift_209", + "jp_swift_301", + "jp_swift_302", + "jp_swift_303", + "jp_swift_304", + "jp_swift_305", + "jp_swift_306", + "jp_swift_307", + "jp_swift_401", + "jp_swift_402", + "jp_swift_403", + "jp_swift_404", + "jp_swift_501", + "jp_swift_502", + "jp_swift_503", + "jp_swift_504", + "jp_swift_601", + "jp_swift_602", + "jp_swift_603", + "jp_swift_604", + "jp_swift_701", + "jp_swift_702", + "jp_swift_703", + "jp_swift_704", + "jp_swift_705", + "jp_swift_801", + "jp_swift_802", + "jp_swift_803", + "jp_swift_804", + "jp_swift_805", + "jp_swift_806", + "jp_swift_807", + "jp_swift_808", + "jp_swift_809", + "jp_swift_810", + "jp_swift_811", + "jp_swift_812", + "jp_swift_813", + "jp_swift_814", + "jp_swift_815", + "jp_swift_816", + "jp_swift_817", + "jp_swift_818", + "jp_swift_901", + "jp_swift_902", + "jp_swift_903", + "jp_swift_904", + "ke_swift_1001", + "ke_swift_1002", + "ke_swift_1101", + "ke_swift_1102", + "ke_swift_1201", + "ke_swift_1202", + "ke_swift_1206", + "ke_swift_1501", + "ke_swift_1518", + "ke_swift_1519", + "ke_swift_1527", + "ke_swift_1801", + "ke_swift_1802", + "ke_swift_1908", + "ke_swift_2101", + "ke_swift_2301", + "ke_swift_2501", + "ke_swift_2901", + "ke_swift_3001", + "ke_swift_3100", + "ke_swift_3101", + "ke_swift_3103", + "ke_swift_3200", + "ke_swift_3304", + "ke_swift_3509", + "ke_swift_3514", + "ke_swift_3801", + "ke_swift_4103", + "ke_swift_4301", + "ke_swift_4601", + "ke_swift_4702", + "ke_swift_512", + "ke_swift_6001", + "ke_swift_6002", + "ke_swift_6101", + "ke_swift_6102", + "ke_swift_6301", + "ke_swift_6401", + "ke_swift_6402", + "ke_swift_6501", + "ke_swift_6601", + "ke_swift_adtx", + "ke_swift_airb", + "ke_swift_artx", + "ke_swift_bech", + "ke_swift_bsd", + "ke_swift_bttx", + "ke_swift_busb", + "ke_swift_ccmc", + "ke_swift_cere", + "ke_swift_cfr", + "ke_swift_cgtx", + "ke_swift_chc", + "ke_swift_clot", + "ke_swift_comu", + "ke_swift_cons", + "ke_swift_cort", + "ke_swift_cotx", + "ke_swift_csdk", + "ke_swift_divd", + "ke_swift_edtx", + "ke_swift_educ", + "ke_swift_farm", + "ke_swift_foex", + "ke_swift_fuel", + "ke_swift_gokx", + "ke_swift_govt", + "ke_swift_hlfd", + "ke_swift_hlti", + "ke_swift_holi", + "ke_swift_ibld", + "ke_swift_inpc", + "ke_swift_insu", + "ke_swift_inte", + "ke_swift_intx", + "ke_swift_invs", + "ke_swift_istx", + "ke_swift_licf", + "ke_swift_lifi", + "ke_swift_loan", + "ke_swift_mach", + "ke_swift_mafc", + "ke_swift_mdcs", + "ke_swift_merc", + "ke_swift_paye", + "ke_swift_pena", + "ke_swift_pl39", + "ke_swift_pl40", + "ke_swift_pl41", + "ke_swift_pl42", + "ke_swift_pl43", + "ke_swift_pl44", + "ke_swift_pl45", + "ke_swift_pl46", + "ke_swift_pl47", + "ke_swift_pl48", + "ke_swift_pl49", + "ke_swift_pl50", + "ke_swift_pl51", + "ke_swift_pl52", + "ke_swift_pl53", + "ke_swift_ppti", + "ke_swift_prpy", + "ke_swift_psco", + "ke_swift_refu", + "ke_swift_relg", + "ke_swift_rent", + "ke_swift_ritx", + "ke_swift_rlwy", + "ke_swift_sala", + "ke_swift_savg", + "ke_swift_scho", + "ke_swift_sdtx", + "ke_swift_ship", + "ke_swift_swlf", + "ke_swift_taxr", + "ke_swift_taxs", + "ke_swift_tbil", + "ke_swift_tith", + "ke_swift_totx", + "ke_swift_trac", + "ke_swift_ubil", + "ke_swift_vatx", + "ke_swift_vipn", + "ke_swift_whld", + "ph_swift_1010101000", + "ph_swift_1010102001", + "ph_swift_1010102002", + "ph_swift_1010103001", + "ph_swift_1010103002", + "ph_swift_1010201000", + "ph_swift_1010202001", + "ph_swift_1010202002", + "ph_swift_1010203001", + "ph_swift_1010203002", + "ph_swift_1010300000", + "ph_swift_1110100001", + "ph_swift_1110200001", + "ph_swift_1110200002", + "ph_swift_1110200003", + "ph_swift_1110200004", + "ph_swift_1110300001", + "ph_swift_1110300002", + "ph_swift_1110300003", + "ph_swift_1110300004", + "ph_swift_1110400001", + "ph_swift_1110400002", + "ph_swift_1110400003", + "ph_swift_1110400004", + "ph_swift_1110400005", + "ph_swift_1110400006", + "ph_swift_1110500001", + "ph_swift_1110500002", + "ph_swift_1110500003", + "ph_swift_1110500004", + "ph_swift_1110500005", + "ph_swift_1110600001", + "ph_swift_1110700001", + "ph_swift_1310000001", + "ph_swift_1310000002", + "ph_swift_1310000003", + "ph_swift_1410100001", + "ph_swift_1410100002", + "ph_swift_1410200001", + "ph_swift_1410200002", + "ph_swift_1410200003", + "ph_swift_1410200004", + "ph_swift_1410300000", + "ph_swift_1410400000", + "ph_swift_1410500000", + "ph_swift_1410600000", + "ph_swift_1510000001", + "ph_swift_1510000002", + "ph_swift_1510000003", + "ph_swift_1510000004", + "ph_swift_1510000005", + "ph_swift_1510000006", + "ph_swift_1510000007", + "ph_swift_1510000008", + "ph_swift_1510000009", + "ph_swift_1510000010", + "ph_swift_1510000011", + "ph_swift_1510000012", + "ph_swift_1510000013", + "ph_swift_1510000014", + "ph_swift_1510000015", + "ph_swift_1510000016", + "ph_swift_1510000017", + "ph_swift_1510000018", + "ph_swift_1510000019", + "ph_swift_1510000020", + "ph_swift_1510000021", + "ph_swift_1510000023", + "ph_swift_1510000024", + "ph_swift_1510000025", + "ph_swift_210000001", + "ph_swift_210000002", + "ph_swift_210000003", + "ph_swift_210000004", + "ph_swift_210000005", + "ph_swift_210000006", + "ph_swift_210000007", + "ph_swift_210000008", + "ph_swift_210000009", + "ph_swift_210000010", + "ph_swift_510100001", + "ph_swift_510200001", + "ph_swift_510200002", + "ph_swift_510301001", + "ph_swift_510301002", + "ph_swift_510301003", + "ph_swift_510302001", + "ph_swift_510302002", + "ph_swift_510302003", + "ph_swift_510303000", + "ph_swift_510401000", + "ph_swift_510402001", + "ph_swift_510402002", + "ph_swift_510402003", + "ph_swift_510402004", + "ph_swift_510402005", + "ph_swift_510402006", + "ph_swift_510402007", + "ph_swift_510500001", + "ph_swift_510500002", + "ph_swift_510600001", + "ph_swift_510600002", + "ph_swift_510600003", + "ph_swift_510600004", + "ph_swift_510700000", + "ph_swift_510800001", + "ph_swift_510800002", + "ph_swift_510900000", + "ph_swift_511000001", + "ph_swift_511000002", + "ph_swift_511100001", + "ph_swift_511100002", + "ph_swift_511100003", + "ph_swift_511200000", + "ph_swift_511300001", + "ph_swift_511300002", + "ph_swift_511300003", + "ph_swift_511300004", + "ph_swift_511300005", + "ph_swift_511300006", + "ph_swift_511300007", + "ph_swift_511300008", + "ph_swift_511400001", + "ph_swift_511400002", + "ph_swift_511400003", + "ph_swift_511400004", + "ph_swift_511400005", + "ph_swift_511500001", + "ph_swift_511500002", + "ph_swift_511500003", + "ph_swift_511500004", + "ph_swift_511600001", + "ph_swift_511600002", + "ph_swift_511600003", + "ph_swift_511700001", + "ph_swift_511700002", + "ph_swift_511700003", + "ph_swift_610000001", + "ph_swift_610000002", + "ph_swift_610000003", + "ph_swift_610000004", + "ph_swift_610000005", + "ph_swift_610000006", + "ph_swift_610000007", + "ph_swift_710100001", + "ph_swift_710100002", + "ph_swift_710100003", + "ph_swift_710100004", + "ph_swift_710100006", + "ph_swift_710100007", + "ph_swift_710100008", + "ph_swift_710100009", + "ph_swift_710200001", + "ph_swift_710200002", + "ph_swift_710200003", + "ph_swift_710200004", + "ph_swift_710200009", + "ph_swift_710300001", + "ph_swift_710300002", + "ph_swift_710300003", + "ph_swift_710300004", + "ph_swift_710300009", + "ph_swift_710400001", + "ph_swift_710400002", + "ph_swift_810101001", + "ph_swift_810101002", + "ph_swift_810101003", + "ph_swift_810101004", + "ph_swift_810101007", + "ph_swift_810101008", + "ph_swift_810101011", + "ph_swift_810102001", + "ph_swift_810102002", + "ph_swift_810102003", + "ph_swift_810102004", + "ph_swift_810102005", + "ph_swift_810102006", + "ph_swift_810102007", + "ph_swift_810102008", + "ph_swift_810102009", + "ph_swift_810201001", + "ph_swift_810201002", + "ph_swift_810201003", + "ph_swift_810201004", + "ph_swift_810202001", + "ph_swift_810202002", + "ph_swift_810202003", + "ph_swift_810202005", + "ph_swift_810202006", + "ph_swift_910100001", + "ph_swift_910100002", + "ph_swift_910100003", + "ph_swift_910100004", + "ph_swift_910100005", + "ph_swift_910100006", + "ph_swift_910100007", + "ph_swift_910100009", + "ph_swift_910100010", + "ph_swift_910100011", + "ph_swift_910200001", + "ph_swift_910200002", + "ph_swift_910200003", + "ph_swift_910200004", + "ph_swift_910200005", + "ph_swift_910200006", + "ph_swift_910200007", + "ph_swift_910200009", + "ph_swift_910200010", + "ph_swift_910200011", + "pk_swift_9009", + "pk_swift_9010", + "pk_swift_9011", + "pk_swift_9012", + "pk_swift_9013", + "pk_swift_9014", + "pk_swift_9015", + "pk_swift_9016", + "pk_swift_9017", + "pk_swift_9018", + "pk_swift_9019", + "pk_swift_9020", + "pk_swift_9021", + "pk_swift_9022", + "pk_swift_9023", + "pk_swift_9024", + "pk_swift_9025", + "pk_swift_9026", + "pk_swift_9027", + "pk_swift_9028", + "pk_swift_9029", + "pk_swift_9030", + "pk_swift_9031", + "pk_swift_9032", + "pk_swift_9033", + "pk_swift_9041", + "pk_swift_9051", + "pk_swift_9052", + "pk_swift_9061", + "pk_swift_9071", + "pk_swift_9072", + "pk_swift_9073", + "pk_swift_9081", + "pk_swift_9082", + "pk_swift_9083", + "pk_swift_9084", + "pk_swift_9085", + "pk_swift_9086", + "pk_swift_9091", + "pk_swift_9092", + "pk_swift_9101", + "pk_swift_9102", + "pk_swift_9111", + "pk_swift_9121", + "pk_swift_9122", + "pk_swift_9124", + "pk_swift_9141", + "pk_swift_9146", + "pk_swift_9151", + "pk_swift_9152", + "pk_swift_9161", + "pk_swift_9171", + "pk_swift_9172", + "pk_swift_9173", + "pk_swift_9174", + "pk_swift_9181", + "pk_swift_9182", + "pk_swift_9183", + "pk_swift_9184", + "pk_swift_9185", + "pk_swift_9186", + "pk_swift_9191", + "pk_swift_9192", + "pk_swift_9193", + "pk_swift_9201", + "pk_swift_9202", + "pk_swift_9211", + "pk_swift_9212", + "pk_swift_9221", + "pk_swift_9222", + "pk_swift_9230", + "pk_swift_9231", + "pk_swift_9232", + "pk_swift_9233", + "pk_swift_9234", + "pk_swift_9235", + "pk_swift_9236", + "pk_swift_9237", + "pk_swift_9238", + "pk_swift_9239", + "pk_swift_9241", + "pk_swift_9242", + "pk_swift_9243", + "pk_swift_9244", + "pk_swift_9247", + "pk_swift_9248", + "pk_swift_9249", + "pk_swift_9250", + "pk_swift_9251", + "pk_swift_9261", + "pk_swift_9262", + "pk_swift_9271", + "pk_swift_9272", + "pk_swift_9273", + "pk_swift_9281", + "pk_swift_9291", + "pk_swift_9301", + "pk_swift_9302", + "pk_swift_9303", + "pk_swift_9311", + "pk_swift_9312", + "pk_swift_9322", + "pk_swift_9323", + "pk_swift_9324", + "pk_swift_9331", + "pk_swift_9332", + "pk_swift_9333", + "pk_swift_9341", + "pk_swift_9351", + "pk_swift_9361", + "pk_swift_9381", + "pk_swift_9391", + "pk_swift_9401", + "pk_swift_9412", + "pk_swift_9414", + "pk_swift_9421", + "pk_swift_9422", + "pk_swift_9423", + "pk_swift_9426", + "pk_swift_9431", + "pk_swift_9432", + "pk_swift_9433", + "pk_swift_9434", + "pk_swift_9435", + "pk_swift_9441", + "pk_swift_9442", + "pk_swift_9443", + "pk_swift_9444", + "pk_swift_9445", + "pk_swift_9448", + "pk_swift_9451", + "pk_swift_9452", + "pk_swift_9453", + "pk_swift_9454", + "pk_swift_9455", + "pk_swift_9456", + "pk_swift_9457", + "pk_swift_9458", + "pk_swift_9459", + "pk_swift_9461", + "pk_swift_9462", + "pk_swift_9463", + "pk_swift_9468", + "pk_swift_9469", + "pk_swift_9470", + "pk_swift_9471", + "pk_swift_9472", + "pk_swift_9473", + "pk_swift_9474", + "pk_swift_9475", + "pk_swift_9476", + "pk_swift_9477", + "pk_swift_9478", + "pk_swift_9479", + "pk_swift_9481", + "pk_swift_9482", + "pk_swift_9483", + "pk_swift_9484", + "pk_swift_9491", + "pk_swift_9492", + "pk_swift_9493", + "pk_swift_9494", + "pk_swift_9501", + "pk_swift_9502", + "pk_swift_9503", + "pk_swift_9521", + "pk_swift_9522", + "pk_swift_9523", + "pk_swift_9524", + "pk_swift_9525", + "pk_swift_9526", + "pk_swift_9527", + "pk_swift_9528", + "pk_swift_9529", + "pk_swift_9530", + "pk_swift_9531", + "pk_swift_9532", + "pk_swift_9533", + "pk_swift_9534", + "pk_swift_9535", + "pk_swift_9536", + "pk_swift_9537", + "pk_swift_9538", + "pk_swift_9539", + "pk_swift_9541", + "pk_swift_9542", + "pk_swift_9543", + "pk_swift_9544", + "pk_swift_9545", + "pk_swift_9546", + "pk_swift_9547", + "pk_swift_9548", + "pk_swift_9549", + "pk_swift_9551", + "pk_swift_9552", + "pk_swift_9553", + "pk_swift_9554", + "pk_swift_9555", + "pk_swift_9556", + "pk_swift_9561", + "pk_swift_9562", + "pk_swift_9563", + "pk_swift_9564", + "pk_swift_9565", + "pk_swift_9566", + "pk_swift_9572", + "pk_swift_9573", + "pk_swift_9574", + "pk_swift_9582", + "pk_swift_9583", + "pk_swift_9584", + "pk_swift_9592", + "pk_swift_9593", + "pk_swift_9594", + "pk_swift_9595", + "pk_swift_9596", + "pk_swift_9597", + "pk_swift_9602", + "pk_swift_9605", + "pk_swift_9606", + "pk_swift_9607", + "pk_swift_9608", + "pk_swift_9609", + "pk_swift_9612", + "pk_swift_9613", + "pk_swift_9614", + "pk_swift_9622", + "pk_swift_9623", + "pk_swift_9624", + "pk_swift_9625", + "pk_swift_9637", + "pk_swift_9638", + "pk_swift_9641", + "pk_swift_9642", + "pk_swift_9643", + "pk_swift_9644", + "pk_swift_9645", + "pk_swift_9646", + "pk_swift_9647", + "pk_swift_9648", + "pk_swift_9649", + "pk_swift_9650", + "pk_swift_9651", + "pk_swift_9652", + "pk_swift_9653", + "pk_swift_9654", + "pk_swift_9668", + "pk_swift_9669", + "pk_swift_9673", + "pk_swift_9674", + "pk_swift_9675", + "pk_swift_9676", + "pk_swift_9677", + "pk_swift_9678", + "pk_swift_9681", + "pk_swift_9682", + "pk_swift_9693", + "pk_swift_9694", + "pk_swift_9695", + "pk_swift_9697", + "pk_swift_9698", + "pk_swift_9699", + "pk_swift_9703", + "pk_swift_9707", + "pk_swift_9708", + "za_swift_105", + "za_swift_220", + "za_swift_231", + "za_swift_242", + "za_swift_250", + "za_swift_251", + "za_swift_265", + "za_swift_266", + "za_swift_275", + "za_swift_276", + "za_swift_280", + "za_swift_285", + "za_swift_287", + "za_swift_288", + "za_swift_289", + "za_swift_290", + "za_swift_291", + "za_swift_296", + "za_swift_297", + "za_swift_308", + "za_swift_401", + "za_swift_10101", + "za_swift_10301", + "za_swift_27201" + ], + "example": "bh_swift_afl" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + } + }, + "required": [ + "id", + "type", + "name" + ] + }, + "CreateBankAccountIn": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ], + "example": "wire" + }, + "name": { + "type": "string", + "example": "Bank Account Name" + }, + "status": { + "type": [ + "string", + "null" + ], + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated" + ], + "example": "verifying" + }, + "recipient_relationship": { + "type": [ + "string", + "null" + ], + "enum": [ + "first_party", + "employee", + "independent_contractor", + "vendor_or_supplier", + "subsidiary_or_affiliate", + "merchant_or_partner", + "customer", + "landlord", + "family", + "other" + ], + "example": "vendor_or_supplier" + }, + "swift_payment_code": { + "type": [ + "string", + "null" + ], + "enum": [ + "ae_swift_str", + "ae_swift_tcs", + "ae_swift_ipc", + "ae_swift_ifs", + "ae_swift_sts", + "ae_swift_pms", + "ae_swift_its", + "ae_swift_gde", + "ae_swift_ots", + "ae_swift_tts", + "bh_swift_afa", + "bh_swift_afl", + "bh_swift_ats", + "bh_swift_cea", + "bh_swift_cel", + "bh_swift_chc", + "bh_swift_dla", + "bh_swift_dlf", + "bh_swift_dll", + "bh_swift_doe", + "bh_swift_dsa", + "bh_swift_dsf", + "bh_swift_dsl", + "bh_swift_fam", + "bh_swift_fda", + "bh_swift_fdl", + "bh_swift_fia", + "bh_swift_fil", + "bh_swift_fis", + "bh_swift_fsa", + "bh_swift_fsl", + "bh_swift_gde", + "bh_swift_gdi", + "bh_swift_gms", + "bh_swift_gos", + "bh_swift_gri", + "bh_swift_ifs", + "bh_swift_igd", + "bh_swift_iid", + "bh_swift_ins", + "bh_swift_iod", + "bh_swift_iol", + "bh_swift_ipc", + "bh_swift_ish", + "bh_swift_isl", + "bh_swift_iss", + "bh_swift_its", + "bh_swift_ldl", + "bh_swift_lds", + "bh_swift_lea", + "bh_swift_lel", + "bh_swift_lla", + "bh_swift_lll", + "bh_swift_ots", + "bh_swift_pip", + "bh_swift_pms", + "bh_swift_ppa", + "bh_swift_ppl", + "bh_swift_prr", + "bh_swift_prs", + "bh_swift_rda", + "bh_swift_rdl", + "bh_swift_rds", + "bh_swift_rea", + "bh_swift_rel", + "bh_swift_rfs", + "bh_swift_rls", + "bh_swift_sal", + "bh_swift_sco", + "bh_swift_sla", + "bh_swift_sll", + "bh_swift_str", + "bh_swift_sts", + "bh_swift_tcp", + "bh_swift_tcr", + "bh_swift_tcs", + "bh_swift_tts", + "ch_swift_ccdndr", + "ch_swift_cctfdr", + "ch_swift_cgoddr", + "ch_swift_cocadr", + "ch_swift_cstrdr", + "ch_swift_remtdr", + "cn_swift_ccdndr", + "cn_swift_cctfdr", + "cn_swift_cgoddr", + "cn_swift_cocadr", + "cn_swift_cstrdr", + "cn_swift_remtdr", + "hk_swift_charitabledonation", + "hk_swift_goods", + "hk_swift_personal", + "hk_swift_services", + "id_swift_2011", + "id_swift_2012", + "id_swift_2015", + "id_swift_2018", + "id_swift_2019", + "id_swift_2097", + "id_swift_2098", + "id_swift_2127", + "id_swift_2129", + "id_swift_2150", + "id_swift_2163", + "id_swift_2193", + "id_swift_2194", + "id_swift_2197", + "id_swift_2198", + "id_swift_2203", + "id_swift_2204", + "id_swift_2206", + "id_swift_2207", + "id_swift_2221", + "id_swift_2222", + "id_swift_2231", + "id_swift_2232", + "id_swift_2233", + "id_swift_2240", + "id_swift_2241", + "id_swift_2242", + "id_swift_2243", + "id_swift_2244", + "id_swift_2245", + "id_swift_2246", + "id_swift_2247", + "id_swift_2251", + "id_swift_2252", + "id_swift_2255", + "id_swift_2256", + "id_swift_2257", + "id_swift_2261", + "id_swift_2262", + "id_swift_2263", + "id_swift_2264", + "id_swift_2271", + "id_swift_2272", + "id_swift_2273", + "id_swift_2274", + "id_swift_2275", + "id_swift_2276", + "id_swift_2277", + "id_swift_2278", + "id_swift_2279", + "id_swift_2280", + "id_swift_2282", + "id_swift_2299", + "id_swift_2311", + "id_swift_2321", + "id_swift_2322", + "id_swift_2323", + "id_swift_2331", + "id_swift_2332", + "id_swift_2333", + "id_swift_2341", + "id_swift_2342", + "id_swift_2351", + "id_swift_2352", + "id_swift_2353", + "id_swift_2354", + "id_swift_2361", + "id_swift_2362", + "id_swift_2363", + "id_swift_2364", + "id_swift_2365", + "id_swift_2366", + "id_swift_2371", + "id_swift_2372", + "id_swift_2375", + "id_swift_2376", + "id_swift_2377", + "id_swift_2378", + "id_swift_2379", + "id_swift_2380", + "id_swift_2381", + "id_swift_2382", + "id_swift_2383", + "id_swift_2384", + "id_swift_2385", + "id_swift_2386", + "id_swift_2387", + "id_swift_2388", + "id_swift_2389", + "id_swift_2390", + "id_swift_2391", + "id_swift_2392", + "id_swift_2393", + "id_swift_2394", + "id_swift_2395", + "id_swift_2396", + "id_swift_2397", + "id_swift_2398", + "id_swift_2400", + "id_swift_2405", + "id_swift_2411", + "id_swift_2412", + "id_swift_2413", + "id_swift_2421", + "id_swift_2422", + "id_swift_2423", + "id_swift_2431", + "id_swift_2432", + "id_swift_2433", + "id_swift_2441", + "id_swift_2442", + "id_swift_2443", + "id_swift_2450", + "id_swift_2461", + "id_swift_2462", + "id_swift_2466", + "id_swift_2467", + "id_swift_2468", + "id_swift_2469", + "id_swift_2480", + "id_swift_2490", + "id_swift_2495", + "id_swift_2501", + "id_swift_2502", + "id_swift_2511", + "id_swift_2512", + "id_swift_2521", + "id_swift_2522", + "id_swift_2523", + "id_swift_2524", + "id_swift_2525", + "id_swift_2526", + "id_swift_2531", + "id_swift_2532", + "id_swift_2533", + "id_swift_2541", + "id_swift_2546", + "id_swift_2547", + "id_swift_2550", + "id_swift_2560", + "id_swift_2570", + "id_swift_2580", + "id_swift_2590", + "id_swift_2600", + "id_swift_2610", + "id_swift_2615", + "id_swift_2616", + "id_swift_2630", + "id_swift_2640", + "id_swift_2651", + "id_swift_2652", + "id_swift_2660", + "id_swift_2670", + "id_swift_2701", + "id_swift_2702", + "id_swift_2705", + "id_swift_2710", + "id_swift_2716", + "id_swift_2717", + "id_swift_2720", + "id_swift_2725", + "id_swift_2730", + "id_swift_2731", + "id_swift_2741", + "id_swift_2742", + "id_swift_2743", + "id_swift_2751", + "id_swift_2752", + "id_swift_2760", + "id_swift_2765", + "id_swift_2766", + "id_swift_2767", + "id_swift_2770", + "id_swift_2802", + "id_swift_2803", + "id_swift_2804", + "id_swift_2808", + "id_swift_2809", + "id_swift_2811", + "id_swift_2812", + "id_swift_2813", + "id_swift_2814", + "id_swift_2815", + "id_swift_2821", + "id_swift_2822", + "id_swift_2823", + "id_swift_2824", + "id_swift_2825", + "id_swift_2826", + "id_swift_2827", + "id_swift_2828", + "in_swift_p0001", + "in_swift_p0002", + "in_swift_p0003", + "in_swift_p0004", + "in_swift_p0005", + "in_swift_p0006", + "in_swift_p0007", + "in_swift_p0008", + "in_swift_p0009", + "in_swift_p0010", + "in_swift_p0011", + "in_swift_p0012", + "in_swift_p0013", + "in_swift_p0014", + "in_swift_p0015", + "in_swift_p0016", + "in_swift_p0017", + "in_swift_p0019", + "in_swift_p0020", + "in_swift_p0021", + "in_swift_p0022", + "in_swift_p0024", + "in_swift_p0025", + "in_swift_p0028", + "in_swift_p0029", + "in_swift_p0099", + "in_swift_p0101", + "in_swift_p0102", + "in_swift_p0103", + "in_swift_p0104", + "in_swift_p0105", + "in_swift_p0107", + "in_swift_p0108", + "in_swift_p0109", + "jp_swift_1001", + "jp_swift_1002", + "jp_swift_1003", + "jp_swift_1004", + "jp_swift_101", + "jp_swift_102", + "jp_swift_103", + "jp_swift_104", + "jp_swift_105", + "jp_swift_106", + "jp_swift_107", + "jp_swift_108", + "jp_swift_109", + "jp_swift_110", + "jp_swift_1101", + "jp_swift_1102", + "jp_swift_1103", + "jp_swift_1104", + "jp_swift_1105", + "jp_swift_1106", + "jp_swift_1107", + "jp_swift_1108", + "jp_swift_1109", + "jp_swift_111", + "jp_swift_1110", + "jp_swift_1111", + "jp_swift_1112", + "jp_swift_1201", + "jp_swift_1202", + "jp_swift_201", + "jp_swift_202", + "jp_swift_203", + "jp_swift_204", + "jp_swift_205", + "jp_swift_206", + "jp_swift_207", + "jp_swift_208", + "jp_swift_209", + "jp_swift_301", + "jp_swift_302", + "jp_swift_303", + "jp_swift_304", + "jp_swift_305", + "jp_swift_306", + "jp_swift_307", + "jp_swift_401", + "jp_swift_402", + "jp_swift_403", + "jp_swift_404", + "jp_swift_501", + "jp_swift_502", + "jp_swift_503", + "jp_swift_504", + "jp_swift_601", + "jp_swift_602", + "jp_swift_603", + "jp_swift_604", + "jp_swift_701", + "jp_swift_702", + "jp_swift_703", + "jp_swift_704", + "jp_swift_705", + "jp_swift_801", + "jp_swift_802", + "jp_swift_803", + "jp_swift_804", + "jp_swift_805", + "jp_swift_806", + "jp_swift_807", + "jp_swift_808", + "jp_swift_809", + "jp_swift_810", + "jp_swift_811", + "jp_swift_812", + "jp_swift_813", + "jp_swift_814", + "jp_swift_815", + "jp_swift_816", + "jp_swift_817", + "jp_swift_818", + "jp_swift_901", + "jp_swift_902", + "jp_swift_903", + "jp_swift_904", + "ke_swift_1001", + "ke_swift_1002", + "ke_swift_1101", + "ke_swift_1102", + "ke_swift_1201", + "ke_swift_1202", + "ke_swift_1206", + "ke_swift_1501", + "ke_swift_1518", + "ke_swift_1519", + "ke_swift_1527", + "ke_swift_1801", + "ke_swift_1802", + "ke_swift_1908", + "ke_swift_2101", + "ke_swift_2301", + "ke_swift_2501", + "ke_swift_2901", + "ke_swift_3001", + "ke_swift_3100", + "ke_swift_3101", + "ke_swift_3103", + "ke_swift_3200", + "ke_swift_3304", + "ke_swift_3509", + "ke_swift_3514", + "ke_swift_3801", + "ke_swift_4103", + "ke_swift_4301", + "ke_swift_4601", + "ke_swift_4702", + "ke_swift_512", + "ke_swift_6001", + "ke_swift_6002", + "ke_swift_6101", + "ke_swift_6102", + "ke_swift_6301", + "ke_swift_6401", + "ke_swift_6402", + "ke_swift_6501", + "ke_swift_6601", + "ke_swift_adtx", + "ke_swift_airb", + "ke_swift_artx", + "ke_swift_bech", + "ke_swift_bsd", + "ke_swift_bttx", + "ke_swift_busb", + "ke_swift_ccmc", + "ke_swift_cere", + "ke_swift_cfr", + "ke_swift_cgtx", + "ke_swift_chc", + "ke_swift_clot", + "ke_swift_comu", + "ke_swift_cons", + "ke_swift_cort", + "ke_swift_cotx", + "ke_swift_csdk", + "ke_swift_divd", + "ke_swift_edtx", + "ke_swift_educ", + "ke_swift_farm", + "ke_swift_foex", + "ke_swift_fuel", + "ke_swift_gokx", + "ke_swift_govt", + "ke_swift_hlfd", + "ke_swift_hlti", + "ke_swift_holi", + "ke_swift_ibld", + "ke_swift_inpc", + "ke_swift_insu", + "ke_swift_inte", + "ke_swift_intx", + "ke_swift_invs", + "ke_swift_istx", + "ke_swift_licf", + "ke_swift_lifi", + "ke_swift_loan", + "ke_swift_mach", + "ke_swift_mafc", + "ke_swift_mdcs", + "ke_swift_merc", + "ke_swift_paye", + "ke_swift_pena", + "ke_swift_pl39", + "ke_swift_pl40", + "ke_swift_pl41", + "ke_swift_pl42", + "ke_swift_pl43", + "ke_swift_pl44", + "ke_swift_pl45", + "ke_swift_pl46", + "ke_swift_pl47", + "ke_swift_pl48", + "ke_swift_pl49", + "ke_swift_pl50", + "ke_swift_pl51", + "ke_swift_pl52", + "ke_swift_pl53", + "ke_swift_ppti", + "ke_swift_prpy", + "ke_swift_psco", + "ke_swift_refu", + "ke_swift_relg", + "ke_swift_rent", + "ke_swift_ritx", + "ke_swift_rlwy", + "ke_swift_sala", + "ke_swift_savg", + "ke_swift_scho", + "ke_swift_sdtx", + "ke_swift_ship", + "ke_swift_swlf", + "ke_swift_taxr", + "ke_swift_taxs", + "ke_swift_tbil", + "ke_swift_tith", + "ke_swift_totx", + "ke_swift_trac", + "ke_swift_ubil", + "ke_swift_vatx", + "ke_swift_vipn", + "ke_swift_whld", + "ph_swift_1010101000", + "ph_swift_1010102001", + "ph_swift_1010102002", + "ph_swift_1010103001", + "ph_swift_1010103002", + "ph_swift_1010201000", + "ph_swift_1010202001", + "ph_swift_1010202002", + "ph_swift_1010203001", + "ph_swift_1010203002", + "ph_swift_1010300000", + "ph_swift_1110100001", + "ph_swift_1110200001", + "ph_swift_1110200002", + "ph_swift_1110200003", + "ph_swift_1110200004", + "ph_swift_1110300001", + "ph_swift_1110300002", + "ph_swift_1110300003", + "ph_swift_1110300004", + "ph_swift_1110400001", + "ph_swift_1110400002", + "ph_swift_1110400003", + "ph_swift_1110400004", + "ph_swift_1110400005", + "ph_swift_1110400006", + "ph_swift_1110500001", + "ph_swift_1110500002", + "ph_swift_1110500003", + "ph_swift_1110500004", + "ph_swift_1110500005", + "ph_swift_1110600001", + "ph_swift_1110700001", + "ph_swift_1310000001", + "ph_swift_1310000002", + "ph_swift_1310000003", + "ph_swift_1410100001", + "ph_swift_1410100002", + "ph_swift_1410200001", + "ph_swift_1410200002", + "ph_swift_1410200003", + "ph_swift_1410200004", + "ph_swift_1410300000", + "ph_swift_1410400000", + "ph_swift_1410500000", + "ph_swift_1410600000", + "ph_swift_1510000001", + "ph_swift_1510000002", + "ph_swift_1510000003", + "ph_swift_1510000004", + "ph_swift_1510000005", + "ph_swift_1510000006", + "ph_swift_1510000007", + "ph_swift_1510000008", + "ph_swift_1510000009", + "ph_swift_1510000010", + "ph_swift_1510000011", + "ph_swift_1510000012", + "ph_swift_1510000013", + "ph_swift_1510000014", + "ph_swift_1510000015", + "ph_swift_1510000016", + "ph_swift_1510000017", + "ph_swift_1510000018", + "ph_swift_1510000019", + "ph_swift_1510000020", + "ph_swift_1510000021", + "ph_swift_1510000023", + "ph_swift_1510000024", + "ph_swift_1510000025", + "ph_swift_210000001", + "ph_swift_210000002", + "ph_swift_210000003", + "ph_swift_210000004", + "ph_swift_210000005", + "ph_swift_210000006", + "ph_swift_210000007", + "ph_swift_210000008", + "ph_swift_210000009", + "ph_swift_210000010", + "ph_swift_510100001", + "ph_swift_510200001", + "ph_swift_510200002", + "ph_swift_510301001", + "ph_swift_510301002", + "ph_swift_510301003", + "ph_swift_510302001", + "ph_swift_510302002", + "ph_swift_510302003", + "ph_swift_510303000", + "ph_swift_510401000", + "ph_swift_510402001", + "ph_swift_510402002", + "ph_swift_510402003", + "ph_swift_510402004", + "ph_swift_510402005", + "ph_swift_510402006", + "ph_swift_510402007", + "ph_swift_510500001", + "ph_swift_510500002", + "ph_swift_510600001", + "ph_swift_510600002", + "ph_swift_510600003", + "ph_swift_510600004", + "ph_swift_510700000", + "ph_swift_510800001", + "ph_swift_510800002", + "ph_swift_510900000", + "ph_swift_511000001", + "ph_swift_511000002", + "ph_swift_511100001", + "ph_swift_511100002", + "ph_swift_511100003", + "ph_swift_511200000", + "ph_swift_511300001", + "ph_swift_511300002", + "ph_swift_511300003", + "ph_swift_511300004", + "ph_swift_511300005", + "ph_swift_511300006", + "ph_swift_511300007", + "ph_swift_511300008", + "ph_swift_511400001", + "ph_swift_511400002", + "ph_swift_511400003", + "ph_swift_511400004", + "ph_swift_511400005", + "ph_swift_511500001", + "ph_swift_511500002", + "ph_swift_511500003", + "ph_swift_511500004", + "ph_swift_511600001", + "ph_swift_511600002", + "ph_swift_511600003", + "ph_swift_511700001", + "ph_swift_511700002", + "ph_swift_511700003", + "ph_swift_610000001", + "ph_swift_610000002", + "ph_swift_610000003", + "ph_swift_610000004", + "ph_swift_610000005", + "ph_swift_610000006", + "ph_swift_610000007", + "ph_swift_710100001", + "ph_swift_710100002", + "ph_swift_710100003", + "ph_swift_710100004", + "ph_swift_710100006", + "ph_swift_710100007", + "ph_swift_710100008", + "ph_swift_710100009", + "ph_swift_710200001", + "ph_swift_710200002", + "ph_swift_710200003", + "ph_swift_710200004", + "ph_swift_710200009", + "ph_swift_710300001", + "ph_swift_710300002", + "ph_swift_710300003", + "ph_swift_710300004", + "ph_swift_710300009", + "ph_swift_710400001", + "ph_swift_710400002", + "ph_swift_810101001", + "ph_swift_810101002", + "ph_swift_810101003", + "ph_swift_810101004", + "ph_swift_810101007", + "ph_swift_810101008", + "ph_swift_810101011", + "ph_swift_810102001", + "ph_swift_810102002", + "ph_swift_810102003", + "ph_swift_810102004", + "ph_swift_810102005", + "ph_swift_810102006", + "ph_swift_810102007", + "ph_swift_810102008", + "ph_swift_810102009", + "ph_swift_810201001", + "ph_swift_810201002", + "ph_swift_810201003", + "ph_swift_810201004", + "ph_swift_810202001", + "ph_swift_810202002", + "ph_swift_810202003", + "ph_swift_810202005", + "ph_swift_810202006", + "ph_swift_910100001", + "ph_swift_910100002", + "ph_swift_910100003", + "ph_swift_910100004", + "ph_swift_910100005", + "ph_swift_910100006", + "ph_swift_910100007", + "ph_swift_910100009", + "ph_swift_910100010", + "ph_swift_910100011", + "ph_swift_910200001", + "ph_swift_910200002", + "ph_swift_910200003", + "ph_swift_910200004", + "ph_swift_910200005", + "ph_swift_910200006", + "ph_swift_910200007", + "ph_swift_910200009", + "ph_swift_910200010", + "ph_swift_910200011", + "pk_swift_9009", + "pk_swift_9010", + "pk_swift_9011", + "pk_swift_9012", + "pk_swift_9013", + "pk_swift_9014", + "pk_swift_9015", + "pk_swift_9016", + "pk_swift_9017", + "pk_swift_9018", + "pk_swift_9019", + "pk_swift_9020", + "pk_swift_9021", + "pk_swift_9022", + "pk_swift_9023", + "pk_swift_9024", + "pk_swift_9025", + "pk_swift_9026", + "pk_swift_9027", + "pk_swift_9028", + "pk_swift_9029", + "pk_swift_9030", + "pk_swift_9031", + "pk_swift_9032", + "pk_swift_9033", + "pk_swift_9041", + "pk_swift_9051", + "pk_swift_9052", + "pk_swift_9061", + "pk_swift_9071", + "pk_swift_9072", + "pk_swift_9073", + "pk_swift_9081", + "pk_swift_9082", + "pk_swift_9083", + "pk_swift_9084", + "pk_swift_9085", + "pk_swift_9086", + "pk_swift_9091", + "pk_swift_9092", + "pk_swift_9101", + "pk_swift_9102", + "pk_swift_9111", + "pk_swift_9121", + "pk_swift_9122", + "pk_swift_9124", + "pk_swift_9141", + "pk_swift_9146", + "pk_swift_9151", + "pk_swift_9152", + "pk_swift_9161", + "pk_swift_9171", + "pk_swift_9172", + "pk_swift_9173", + "pk_swift_9174", + "pk_swift_9181", + "pk_swift_9182", + "pk_swift_9183", + "pk_swift_9184", + "pk_swift_9185", + "pk_swift_9186", + "pk_swift_9191", + "pk_swift_9192", + "pk_swift_9193", + "pk_swift_9201", + "pk_swift_9202", + "pk_swift_9211", + "pk_swift_9212", + "pk_swift_9221", + "pk_swift_9222", + "pk_swift_9230", + "pk_swift_9231", + "pk_swift_9232", + "pk_swift_9233", + "pk_swift_9234", + "pk_swift_9235", + "pk_swift_9236", + "pk_swift_9237", + "pk_swift_9238", + "pk_swift_9239", + "pk_swift_9241", + "pk_swift_9242", + "pk_swift_9243", + "pk_swift_9244", + "pk_swift_9247", + "pk_swift_9248", + "pk_swift_9249", + "pk_swift_9250", + "pk_swift_9251", + "pk_swift_9261", + "pk_swift_9262", + "pk_swift_9271", + "pk_swift_9272", + "pk_swift_9273", + "pk_swift_9281", + "pk_swift_9291", + "pk_swift_9301", + "pk_swift_9302", + "pk_swift_9303", + "pk_swift_9311", + "pk_swift_9312", + "pk_swift_9322", + "pk_swift_9323", + "pk_swift_9324", + "pk_swift_9331", + "pk_swift_9332", + "pk_swift_9333", + "pk_swift_9341", + "pk_swift_9351", + "pk_swift_9361", + "pk_swift_9381", + "pk_swift_9391", + "pk_swift_9401", + "pk_swift_9412", + "pk_swift_9414", + "pk_swift_9421", + "pk_swift_9422", + "pk_swift_9423", + "pk_swift_9426", + "pk_swift_9431", + "pk_swift_9432", + "pk_swift_9433", + "pk_swift_9434", + "pk_swift_9435", + "pk_swift_9441", + "pk_swift_9442", + "pk_swift_9443", + "pk_swift_9444", + "pk_swift_9445", + "pk_swift_9448", + "pk_swift_9451", + "pk_swift_9452", + "pk_swift_9453", + "pk_swift_9454", + "pk_swift_9455", + "pk_swift_9456", + "pk_swift_9457", + "pk_swift_9458", + "pk_swift_9459", + "pk_swift_9461", + "pk_swift_9462", + "pk_swift_9463", + "pk_swift_9468", + "pk_swift_9469", + "pk_swift_9470", + "pk_swift_9471", + "pk_swift_9472", + "pk_swift_9473", + "pk_swift_9474", + "pk_swift_9475", + "pk_swift_9476", + "pk_swift_9477", + "pk_swift_9478", + "pk_swift_9479", + "pk_swift_9481", + "pk_swift_9482", + "pk_swift_9483", + "pk_swift_9484", + "pk_swift_9491", + "pk_swift_9492", + "pk_swift_9493", + "pk_swift_9494", + "pk_swift_9501", + "pk_swift_9502", + "pk_swift_9503", + "pk_swift_9521", + "pk_swift_9522", + "pk_swift_9523", + "pk_swift_9524", + "pk_swift_9525", + "pk_swift_9526", + "pk_swift_9527", + "pk_swift_9528", + "pk_swift_9529", + "pk_swift_9530", + "pk_swift_9531", + "pk_swift_9532", + "pk_swift_9533", + "pk_swift_9534", + "pk_swift_9535", + "pk_swift_9536", + "pk_swift_9537", + "pk_swift_9538", + "pk_swift_9539", + "pk_swift_9541", + "pk_swift_9542", + "pk_swift_9543", + "pk_swift_9544", + "pk_swift_9545", + "pk_swift_9546", + "pk_swift_9547", + "pk_swift_9548", + "pk_swift_9549", + "pk_swift_9551", + "pk_swift_9552", + "pk_swift_9553", + "pk_swift_9554", + "pk_swift_9555", + "pk_swift_9556", + "pk_swift_9561", + "pk_swift_9562", + "pk_swift_9563", + "pk_swift_9564", + "pk_swift_9565", + "pk_swift_9566", + "pk_swift_9572", + "pk_swift_9573", + "pk_swift_9574", + "pk_swift_9582", + "pk_swift_9583", + "pk_swift_9584", + "pk_swift_9592", + "pk_swift_9593", + "pk_swift_9594", + "pk_swift_9595", + "pk_swift_9596", + "pk_swift_9597", + "pk_swift_9602", + "pk_swift_9605", + "pk_swift_9606", + "pk_swift_9607", + "pk_swift_9608", + "pk_swift_9609", + "pk_swift_9612", + "pk_swift_9613", + "pk_swift_9614", + "pk_swift_9622", + "pk_swift_9623", + "pk_swift_9624", + "pk_swift_9625", + "pk_swift_9637", + "pk_swift_9638", + "pk_swift_9641", + "pk_swift_9642", + "pk_swift_9643", + "pk_swift_9644", + "pk_swift_9645", + "pk_swift_9646", + "pk_swift_9647", + "pk_swift_9648", + "pk_swift_9649", + "pk_swift_9650", + "pk_swift_9651", + "pk_swift_9652", + "pk_swift_9653", + "pk_swift_9654", + "pk_swift_9668", + "pk_swift_9669", + "pk_swift_9673", + "pk_swift_9674", + "pk_swift_9675", + "pk_swift_9676", + "pk_swift_9677", + "pk_swift_9678", + "pk_swift_9681", + "pk_swift_9682", + "pk_swift_9693", + "pk_swift_9694", + "pk_swift_9695", + "pk_swift_9697", + "pk_swift_9698", + "pk_swift_9699", + "pk_swift_9703", + "pk_swift_9707", + "pk_swift_9708", + "za_swift_105", + "za_swift_220", + "za_swift_231", + "za_swift_242", + "za_swift_250", + "za_swift_251", + "za_swift_265", + "za_swift_266", + "za_swift_275", + "za_swift_276", + "za_swift_280", + "za_swift_285", + "za_swift_287", + "za_swift_288", + "za_swift_289", + "za_swift_290", + "za_swift_291", + "za_swift_296", + "za_swift_297", + "za_swift_308", + "za_swift_401", + "za_swift_10101", + "za_swift_10301", + "za_swift_27201" + ], + "example": "bh_swift_afl" + }, + "pix_key": { + "type": [ + "string", + "null" + ], + "example": "14947677768" + }, + "force_cpf_cnpj": { + "type": [ + "boolean", + "null" + ], + "description": "Force CPF/CNPJ validation for PIX key", + "example": false + }, + "beneficiary_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Individual full name or business name" + }, + "routing_number": { + "type": [ + "string", + "null" + ], + "example": "012345678" + }, + "account_number": { + "type": [ + "string", + "null" + ], + "example": "1001001234" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "checking", + "saving" + ], + "example": "checking" + }, + "account_class": { + "type": [ + "string", + "null" + ], + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Address line 1" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Address line 2" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "State/Province/Region" + }, + "country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "Postal code" + }, + "checkbook_account_id": { + "type": [ + "string", + "null" + ], + "example": "dc809ff8f4d3417d83e5697e76f0b88a" + }, + "checkbook_user_key": { + "type": [ + "string", + "null" + ], + "example": "d84fd0dc-3882-4de9-97f8-656730214619" + }, + "onemoney_external_account_id": { + "type": [ + "string", + "null" + ], + "example": "ex_000000000000" + }, + "pix_safe_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4,8}$", + "example": "00416968" + }, + "pix_safe_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "pix_safe_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "ted_bank_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{3,5}$", + "example": "033" + }, + "ted_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^\\d{4}(-\\d)?$", + "example": "0001" + }, + "ted_cpf_cnpj": { + "type": [ + "string", + "null" + ], + "example": "12345678901" + }, + "spei_protocol": { + "type": [ + "string", + "null" + ], + "enum": [ + "clabe", + "debitcard", + "phonenum" + ], + "description": "For debitcard and phonenum the spei_institution_code is required", + "example": "clabe" + }, + "spei_institution_code": { + "type": [ + "string", + "null" + ], + "minLength": 5, + "maxLength": 5, + "example": "40002" + }, + "spei_clabe": { + "type": [ + "string", + "null" + ], + "example": "5482347403740546" + }, + "transfers_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CVU", + "CBU", + "ALIAS" + ], + "example": "CVU" + }, + "transfers_account": { + "type": [ + "string", + "null" + ], + "example": "BM123123123123" + }, + "ach_cop_beneficiary_first_name": { + "type": [ + "string", + "null" + ], + "example": "Fernando" + }, + "ach_cop_beneficiary_last_name": { + "type": [ + "string", + "null" + ], + "example": "Guzman Alarcón" + }, + "ach_cop_document_id": { + "type": [ + "string", + "null" + ], + "example": "1661105408" + }, + "ach_cop_document_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "CC", + "CE", + "NIT", + "PASS", + "PEP" + ], + "description": "CC - Cédula de Ciudadanía; CE - Cédula de Extranjería; NIT - Número de Identificación Tributaria; PASS - Passport; PEP - Permiso Especial de Permanencia", + "example": "CC" + }, + "ach_cop_email": { + "type": [ + "string", + "null" + ], + "example": "fernando.guzman@gmail.com" + }, + "ach_cop_bank_code": { + "type": [ + "string", + "null" + ], + "example": "051" + }, + "ach_cop_bank_account": { + "type": [ + "string", + "null" + ], + "example": "12345678" + }, + "swift_code_bic": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_account_holder_name": { + "type": [ + "string", + "null" + ], + "maxLength": 50, + "example": "John Doe" + }, + "swift_account_number_iban": { + "type": [ + "string", + "null" + ], + "example": "123456789" + }, + "swift_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 MAIN STREET SUITE 100" + }, + "swift_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "BUILDING A FLOOR 5" + }, + "swift_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "MEXICO CITY" + }, + "swift_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MX" + }, + "swift_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_bank_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "123 Main Street, Suite 100, Downtown District, City Center CP 12345" + }, + "swift_bank_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "456 Oak Avenue, Building 7, Financial District, Business Center CP 54321" + }, + "swift_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "MX" + }, + "swift_bank_city": { + "type": [ + "string", + "null" + ], + "example": "City" + }, + "swift_bank_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "District" + }, + "swift_bank_postal_code": { + "type": [ + "string", + "null" + ], + "example": "11530" + }, + "swift_ifsc_branch_code": { + "type": [ + "string", + "null" + ], + "pattern": "^[A-Z]{4}0[A-Z0-9]{6}$", + "example": "BARB0AHIMCI" + }, + "swift_intermediary_bank_swift_code_bic": { + "anyOf": [ + { + "type": "string", + "minLength": 8, + "maxLength": 8 + }, + { + "type": "string", + "minLength": 11, + "maxLength": 11 + }, + { + "type": "null" + } + ], + "example": "AEIBARB1" + }, + "swift_intermediary_bank_account_number_iban": { + "type": [ + "string", + "null" + ], + "maxLength": 34, + "example": "123456789" + }, + "swift_intermediary_bank_name": { + "type": [ + "string", + "null" + ], + "example": "Banco Regional SA" + }, + "swift_intermediary_bank_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "sepa_iban": { + "type": [ + "string", + "null" + ], + "example": "DE89370400440532013000" + }, + "sepa_beneficiary_bic": { + "type": [ + "string", + "null" + ], + "description": "BIC/SWIFT code of the beneficiary bank", + "example": "TRWIBEB1XXX" + }, + "sepa_beneficiary_legal_name": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "example": "Hans Müller" + }, + "sepa_beneficiary_address_line_1": { + "type": [ + "string", + "null" + ], + "example": "Friedrichstraße 12" + }, + "sepa_beneficiary_address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Apt 4B" + }, + "sepa_beneficiary_city": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_state_province_region": { + "type": [ + "string", + "null" + ], + "example": "Berlin" + }, + "sepa_beneficiary_postal_code": { + "type": [ + "string", + "null" + ], + "example": "10117" + }, + "sepa_beneficiary_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "DE" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "maxLength": 32, + "example": "536804398" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + } + }, + "required": [ + "type", + "name" + ] + }, + "VirtualAccountOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "va_000000000000" + }, + "banking_partner": { + "type": [ + "string", + "null" + ], + "enum": [ + "jpmorgan", + "citi", + "hsbc", + "cfsb", + "portage" + ], + "example": "jpmorgan" + }, + "kyc_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ], + "example": "approved" + }, + "us": { + "type": "object", + "properties": { + "ach": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "wire": { + "type": "object", + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "rtp": { + "type": [ + "object", + "null" + ], + "properties": { + "routing_number": { + "type": "string", + "example": "123456789" + }, + "account_number": { + "type": "string", + "example": "123456789" + } + }, + "required": [ + "routing_number", + "account_number" + ] + }, + "swift_bic_code": { + "type": [ + "string", + "null" + ], + "example": "TCCLGB3L" + }, + "swift_account_number": { + "type": [ + "string", + "null" + ], + "example": "GB50TCCL04140449730892" + }, + "account_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "Personal checking", + "Business checking" + ], + "default": "Business checking", + "example": "Business checking" + }, + "beneficiary": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string", + "example": "Customer Name" + }, + "address_line_1": { + "type": "string", + "example": "8 The Green, #19364" + }, + "address_line_2": { + "type": "string", + "example": "Dover, DE 19901" + } + }, + "required": [ + "name", + "address_line_1", + "address_line_2" + ] + }, + "receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string", + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": "string", + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + }, + "required": [ + "name", + "address_line_1" + ] + }, + "swift_receiving_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JPMorgan Chase" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + }, + "swift_intermediary_bank": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "example": "JP Morgan Chase NA" + }, + "swift_code_bic": { + "type": [ + "string", + "null" + ], + "example": "CHASUS33" + }, + "routing_number": { + "type": [ + "string", + "null" + ], + "example": "021000021" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "270 Park Ave" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "New York, NY, 10017-2070" + } + } + } + }, + "required": [ + "wire" + ] + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "blockchain_wallet_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "bw_000000000000" + }, + "blockchain_wallet": { + "type": [ + "object", + "null" + ], + "properties": { + "network": { + "type": "string", + "enum": [ + "base", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "arbitrum", + "polygon", + "polygon_amoy", + "ethereum", + "stellar", + "stellar_testnet", + "tron", + "solana", + "solana_devnet" + ], + "example": "polygon" + }, + "address": { + "type": [ + "string", + "null" + ], + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" + } + }, + "required": [ + "network" + ] + }, + "customer_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + } + }, + "required": [ + "id", + "banking_partner", + "kyc_status", + "us", + "token" + ] + }, + "CreateVirtualAccountIn": { + "type": "object", + "properties": { + "banking_partner": { + "type": "string", + "enum": [ + "jpmorgan", + "citi", + "hsbc", + "cfsb", + "portage" + ], + "example": "jpmorgan" + }, + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "blockchain_wallet_id": { + "type": "string", + "minLength": 15, + "maxLength": 15 + }, + "sole_proprietor_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "master_service_agreement", + "salary_slip", + "bank_statement" + ], + "example": "master_service_agreement" + }, + "sole_proprietor_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/document.pdf" + } + }, + "required": [ + "banking_partner", + "token", + "blockchain_wallet_id" + ] + }, + "UpdateVirtualAccountIn": { + "type": "object", + "properties": { + "token": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "blockchain_wallet_id": { + "type": "string", + "minLength": 15, + "maxLength": 15 + } + }, + "required": [ + "token", + "blockchain_wallet_id" + ] + }, + "CreateCustomerIn": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + }, + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "Marshfield" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "02050" + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "format": "ip", + "example": "127.0.0.1" + }, + "latitude": { + "type": [ + "number", + "null" + ], + "minimum": -90, + "maximum": 90, + "description": "Optional geolocation latitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": 37.7749 + }, + "longitude": { + "type": [ + "number", + "null" + ], + "minimum": -180, + "maximum": 180, + "description": "Optional geolocation longitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": -122.4194 + }, + "image_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload one document that serve as proof of address, this needs to be the same physical address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "id_doc_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "alternate_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "formation_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z", + "format": "date-time" + }, + "website": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com" + }, + "owners": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "enum": [ + "beneficial_controlling", + "beneficial_owner", + "controlling_person" + ], + "description": "A beneficial owner is someone who directly or indirectly owns 25% or more of your business. A controlling person is someone with significant responsibility to control, manage or direct your business (typically a CEO, senior executive officer or equivalent).", + "example": "beneficial_owner" + }, + "first_name": { + "type": "string", + "minLength": 1, + "example": "John" + }, + "last_name": { + "type": "string", + "minLength": 1, + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "tax_id": { + "type": "string", + "example": "536804398" + }, + "address_line_1": { + "type": "string", + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": "string", + "example": "Marshfield" + }, + "state_province_region": { + "type": "string", + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": "string", + "example": "02050" + }, + "id_doc_country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": "string", + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": "string", + "format": "uri" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload one document that serve as proof of address, this needs to be the same address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB." + }, + "ownership_percentage": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Ownership percentage of the beneficial owner (0-100)", + "example": 25 + }, + "title": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "description": "Job title of the owner", + "example": "CEO" + }, + "tax_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "SSN", + "ITIN" + ], + "description": "Tax identifier type. Mandatory when country is US; must be SSN or ITIN.", + "example": "SSN" + } + }, + "required": [ + "role", + "first_name", + "last_name", + "date_of_birth", + "tax_id", + "address_line_1", + "city", + "state_province_region", + "country", + "postal_code", + "id_doc_country", + "id_doc_type", + "id_doc_front_file" + ] + } + }, + "incorporation_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload your articles of incorporation below. The articles of incorporation or a certificate of incorporation usually includes information like the company name, business purpose, number of shares offered, value of shares, etc. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "proof_of_ownership_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload your proof of ownership below. This document usually includes information like the shareholders names and percentages. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "source_of_funds_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_income", + "gambling_proceeds", + "gifts", + "government_benefits", + "inheritance", + "investment_loans", + "pension_retirement", + "salary", + "sale_of_assets_real_estate", + "savings", + "esops", + "investment_proceeds", + "someone_else_funds" + ], + "example": "business_income" + }, + "source_of_funds_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "selfie_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "purpose_of_transactions": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_transactions", + "charitable_donations", + "investment_purposes", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_good_and_services", + "receive_payment_for_freelancing", + "receive_salary", + "other" + ], + "example": "business_transactions" + }, + "purpose_of_transactions_explanation": { + "type": [ + "string", + "null" + ], + "example": "I am a business owner and I want to receive payments from my customers" + }, + "account_purpose": { + "type": [ + "string", + "null" + ], + "enum": [ + "charitable_donations", + "ecommerce_retail_payments", + "investment_purposes", + "business_expenses", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_goods_and_services", + "receive_payments_for_goods_and_services", + "tax_optimization", + "third_party_money_transmission", + "payroll", + "treasury_management", + "other" + ], + "example": "treasury_management" + }, + "account_purpose_other": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "description": "Required when account_purpose is \"other\". Max 512 characters.", + "example": "Custom account purpose description" + }, + "business_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "corporation", + "llc", + "partnership", + "sole_proprietorship", + "trust", + "non_profit" + ], + "example": "llc" + }, + "business_description": { + "type": [ + "string", + "null" + ], + "maxLength": 1000, + "example": "Software development company" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "estimated_annual_revenue": { + "type": [ + "string", + "null" + ], + "enum": [ + "0_99999", + "100000_999999", + "1000000_9999999", + "10000000_49999999", + "50000000_249999999", + "250000000_plus" + ], + "example": "1000000_9999999" + }, + "source_of_wealth": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_dividends_or_profits", + "investments", + "asset_sales", + "client_investor_contributions", + "gambling", + "charitable_contributions", + "inheritance", + "affiliate_or_royalty_income" + ], + "example": "affiliate_or_royalty_income" + }, + "publicly_traded": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "occupation": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "Software Engineer" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_company_external_id" + }, + "tos_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "additional_info": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/AdditionalInfoItem" + }, + "description": "Optional extra documents or notes for this customer. `label` is a known category, `value` is either a URL to upload or a free-text description. Any URLs are downloaded and re-hosted on Blindpay storage before being stored.", + "example": [ + { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + }, + { + "label": "FLOW_OF_FUNDS", + "value": "Funds originate from US payroll deposits, forwarded weekly to customer." + } + ] + } + }, + "required": [ + "type", + "kyc_type", + "email", + "country" + ] + }, + "CustomerOut": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "type": { + "type": "string", + "enum": [ + "individual", + "business" + ], + "example": "individual" + }, + "kyc_type": { + "type": "string", + "enum": [ + "light", + "standard", + "enhanced" + ], + "example": "standard" + }, + "kyc_status": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ], + "example": "verifying" + }, + "kyc_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "code": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "resolution_status": { + "type": [ + "string", + "null" + ] + }, + "warning_id": { + "type": [ + "string", + "null" + ] + } + } + }, + "description": "You can find more information here: https://docs.aiprise.com/docs/warnings-and-error-codes", + "example": [ + { + "code": "BIRTH_DATE_MISMATCH", + "message": "Mismatch between supplied birth date and extracted/looked up birth date.", + "resolution_status": "UNRESOLVED", + "warning_id": "38170889-50aa-4271-9eb1-61113ebf408c" + } + ] + }, + "fraud_warnings": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "operation": { + "type": [ + "string", + "null" + ] + }, + "score": { + "type": [ + "number", + "null" + ] + } + } + }, + "example": [ + { + "id": "UC114", + "name": "User never used a Datacenter proxy and this device before", + "operation": "+", + "score": 10 + } + ] + }, + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "Marshfield" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "02050" + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "format": "ip", + "example": "127.0.0.1" + }, + "latitude": { + "type": [ + "number", + "null" + ], + "minimum": -90, + "maximum": 90, + "description": "Optional geolocation latitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": 37.7749 + }, + "longitude": { + "type": [ + "number", + "null" + ], + "minimum": -180, + "maximum": 180, + "description": "Optional geolocation longitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": -122.4194 + }, + "image_url": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same physical address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "id_doc_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "alternate_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "formation_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z", + "format": "date-time" + }, + "website": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com" + }, + "owners": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ub_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "customer_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "role": { + "type": "string", + "enum": [ + "beneficial_controlling", + "beneficial_owner", + "controlling_person" + ], + "description": "A beneficial owner is someone who directly or indirectly owns 25% or more of your business. A controlling person is someone with significant responsibility to control, manage or direct your business (typically a CEO, senior executive officer or equivalent).", + "example": "beneficial_owner" + }, + "first_name": { + "type": "string", + "minLength": 1, + "example": "John" + }, + "last_name": { + "type": "string", + "minLength": 1, + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": "string", + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": "string", + "example": "Marshfield" + }, + "state_province_region": { + "type": "string", + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": "string", + "example": "02050" + }, + "id_doc_country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": "string", + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload one document that serve as proof of address, this needs to be the same address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB." + }, + "ownership_percentage": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Ownership percentage of the beneficial owner (0-100)", + "example": 25 + }, + "title": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "description": "Job title of the owner", + "example": "CEO" + }, + "tax_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "SSN", + "ITIN" + ], + "description": "Tax identifier type. Mandatory when country is US; must be SSN or ITIN.", + "example": "SSN" + } + } + }, + "description": "Customer owners", + "example": [ + { + "id": "ub_000000000000", + "first_name": "John", + "last_name": "Doe", + "address_line_1": "738 Plain St", + "address_line_2": "Building 22", + "city": "Marshfield", + "state_province_region": "MA", + "country": "US", + "postal_code": "02050", + "id_doc_country": "BR", + "id_doc_type": "PASSPORT", + "id_doc_front_file": "https://example.com/image.png", + "id_doc_back_file": "https://example.com/image.png" + } + ] + }, + "incorporation_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your articles of incorporation below. The articles of incorporation or a certificate of incorporation usually includes information like the company name, business purpose, number of shares offered, value of shares, etc. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "proof_of_ownership_doc_file": { + "type": [ + "string", + "null" + ], + "description": "Please upload your proof of ownership below. This document usually includes information like the shareholders names and percentages. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "source_of_funds_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_income", + "gambling_proceeds", + "gifts", + "government_benefits", + "inheritance", + "investment_loans", + "pension_retirement", + "salary", + "sale_of_assets_real_estate", + "savings", + "esops", + "investment_proceeds", + "someone_else_funds" + ], + "example": "business_income" + }, + "source_of_funds_doc_file": { + "type": [ + "string", + "null" + ], + "example": "https://example.com/image.png" + }, + "selfie_file": { + "type": [ + "string", + "null" + ], + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "purpose_of_transactions": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_transactions", + "charitable_donations", + "investment_purposes", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_good_and_services", + "receive_payment_for_freelancing", + "receive_salary", + "other" + ], + "example": "business_transactions" + }, + "purpose_of_transactions_explanation": { + "type": [ + "string", + "null" + ], + "example": "I am a business owner and I want to receive payments from my customers" + }, + "is_fbo": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "account_purpose": { + "type": [ + "string", + "null" + ], + "enum": [ + "charitable_donations", + "ecommerce_retail_payments", + "investment_purposes", + "business_expenses", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_goods_and_services", + "receive_payments_for_goods_and_services", + "tax_optimization", + "third_party_money_transmission", + "payroll", + "treasury_management", + "other" + ], + "example": "treasury_management" + }, + "account_purpose_other": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "description": "Required when account_purpose is \"other\". Max 512 characters.", + "example": "Custom account purpose description" + }, + "business_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "corporation", + "llc", + "partnership", + "sole_proprietorship", + "trust", + "non_profit" + ], + "example": "llc" + }, + "business_description": { + "type": [ + "string", + "null" + ], + "maxLength": 1000, + "example": "Software development company" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "estimated_annual_revenue": { + "type": [ + "string", + "null" + ], + "enum": [ + "0_99999", + "100000_999999", + "1000000_9999999", + "10000000_49999999", + "50000000_249999999", + "250000000_plus" + ], + "example": "1000000_9999999" + }, + "source_of_wealth": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_dividends_or_profits", + "investments", + "asset_sales", + "client_investor_contributions", + "gambling", + "charitable_contributions", + "inheritance", + "affiliate_or_royalty_income" + ], + "example": "affiliate_or_royalty_income" + }, + "publicly_traded": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "occupation": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "Software Engineer" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_company_external_id" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "tos_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "aml_status": { + "type": [ + "string", + "null" + ], + "enum": [ + "clear", + "hit", + "error" + ], + "description": "AML screening status from SEON. null = not yet screened.", + "example": "clear" + }, + "aml_hits": { + "type": [ + "object", + "null" + ], + "properties": { + "has_sanction_match": { + "type": "boolean", + "default": false + }, + "has_pep_match": { + "type": "boolean", + "default": false + }, + "has_watchlist_match": { + "type": "boolean", + "default": false + }, + "has_crimelist_match": { + "type": "boolean", + "default": false + }, + "has_adversemedia_match": { + "type": "boolean", + "default": false + } + }, + "description": "AML screening match details from SEON.", + "example": { + "has_sanction_match": false, + "has_pep_match": false, + "has_watchlist_match": false, + "has_crimelist_match": false, + "has_adversemedia_match": false + } + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "updated_at": { + "example": "2021-01-01T00:00:00Z" + }, + "limit": { + "type": "object", + "properties": { + "per_transaction": { + "type": [ + "number", + "null" + ], + "example": 100000 + }, + "daily": { + "type": [ + "number", + "null" + ], + "example": 200000 + }, + "monthly": { + "type": [ + "number", + "null" + ], + "example": 1000000 + } + }, + "required": [ + "per_transaction", + "daily", + "monthly" + ] + }, + "is_tos_accepted": { + "type": [ + "boolean", + "null" + ] + }, + "additional_info": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/AdditionalInfoItem" + }, + "description": "Optional extra documents or notes for this customer. `label` is a known category, `value` is either a URL to upload or a free-text description. Any URLs are downloaded and re-hosted on Blindpay storage before being stored.", + "example": [ + { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + }, + { + "label": "FLOW_OF_FUNDS", + "value": "Funds originate from US payroll deposits, forwarded weekly to customer." + } + ] + } + }, + "required": [ + "id", + "customer_id", + "type", + "kyc_type", + "kyc_status", + "email", + "country", + "instance_id", + "limit" + ] + }, + "UpdateCustomerIn": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "tax_id": { + "type": [ + "string", + "null" + ], + "example": "536804398" + }, + "address_line_1": { + "type": [ + "string", + "null" + ], + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": [ + "string", + "null" + ], + "example": "Marshfield" + }, + "state_province_region": { + "type": [ + "string", + "null" + ], + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": [ + "string", + "null" + ], + "example": "02050" + }, + "ip_address": { + "type": [ + "string", + "null" + ], + "format": "ip", + "example": "127.0.0.1" + }, + "latitude": { + "type": [ + "number", + "null" + ], + "minimum": -90, + "maximum": 90, + "description": "Optional geolocation latitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": 37.7749 + }, + "longitude": { + "type": [ + "number", + "null" + ], + "minimum": -180, + "maximum": 180, + "description": "Optional geolocation longitude collected from the customer. Forwarded to AiPrise and SEON for fraud analysis.", + "example": -122.4194 + }, + "image_url": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "phone_number": { + "type": [ + "string", + "null" + ], + "example": "+13055555555" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload one document that serve as proof of address, this needs to be the same physical address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "first_name": { + "type": [ + "string", + "null" + ], + "example": "John" + }, + "last_name": { + "type": [ + "string", + "null" + ], + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "id_doc_country": { + "type": [ + "string", + "null" + ], + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "legal_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "alternate_name": { + "type": [ + "string", + "null" + ], + "example": "Company Name Inc." + }, + "formation_date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "example": "1998-01-01T00:00:00Z", + "format": "date-time" + }, + "website": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com" + }, + "owners": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "properties": { + "role": { + "type": "string", + "enum": [ + "beneficial_controlling", + "beneficial_owner", + "controlling_person" + ], + "description": "A beneficial owner is someone who directly or indirectly owns 25% or more of your business. A controlling person is someone with significant responsibility to control, manage or direct your business (typically a CEO, senior executive officer or equivalent).", + "example": "beneficial_owner" + }, + "first_name": { + "type": "string", + "minLength": 1, + "example": "John" + }, + "last_name": { + "type": "string", + "minLength": 1, + "example": "Doe" + }, + "date_of_birth": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string" + } + ], + "example": "1998-01-01T00:00:00Z" + }, + "tax_id": { + "type": "string", + "example": "536804398" + }, + "address_line_1": { + "type": "string", + "example": "738 Plain St" + }, + "address_line_2": { + "type": [ + "string", + "null" + ], + "example": "Building 22" + }, + "city": { + "type": "string", + "example": "Marshfield" + }, + "state_province_region": { + "type": "string", + "example": "MA" + }, + "country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "US" + }, + "postal_code": { + "type": "string", + "example": "02050" + }, + "id_doc_country": { + "type": "string", + "enum": [ + "AF", + "AL", + "DZ", + "AS", + "AD", + "AO", + "AI", + "AQ", + "AG", + "AR", + "AM", + "AW", + "AU", + "AT", + "AZ", + "BS", + "BH", + "BD", + "BB", + "BY", + "BE", + "BZ", + "BJ", + "BM", + "BT", + "BO", + "BQ", + "BA", + "BW", + "BV", + "BR", + "IO", + "BN", + "BG", + "BF", + "BI", + "CV", + "KH", + "CM", + "CA", + "KY", + "CF", + "TD", + "CL", + "CN", + "CX", + "CC", + "CO", + "KM", + "CD", + "CG", + "CK", + "CR", + "HR", + "CU", + "CW", + "CY", + "CZ", + "CI", + "DK", + "DJ", + "DM", + "DO", + "EC", + "EG", + "SV", + "GQ", + "ER", + "EE", + "SZ", + "ET", + "FK", + "FO", + "FJ", + "FI", + "FR", + "GF", + "PF", + "TF", + "GA", + "GM", + "GE", + "DE", + "GH", + "GI", + "GR", + "GL", + "GD", + "GP", + "GU", + "GT", + "GG", + "GN", + "GW", + "GY", + "HT", + "HM", + "VA", + "HN", + "HK", + "HU", + "IS", + "IN", + "ID", + "IR", + "IQ", + "IE", + "IM", + "IL", + "IT", + "JM", + "JP", + "JE", + "JO", + "KZ", + "KE", + "KI", + "KP", + "KR", + "KW", + "KG", + "LA", + "LV", + "LB", + "LS", + "LR", + "LY", + "LI", + "LT", + "LU", + "MO", + "MG", + "MW", + "MY", + "MV", + "ML", + "MT", + "MH", + "MQ", + "MR", + "MU", + "YT", + "MX", + "FM", + "MD", + "MC", + "MN", + "ME", + "MS", + "MA", + "MZ", + "MM", + "NA", + "NR", + "NP", + "NL", + "NC", + "NZ", + "NI", + "NE", + "NG", + "NU", + "NF", + "MP", + "NO", + "OM", + "PK", + "PW", + "PS", + "PA", + "PG", + "PY", + "PE", + "PH", + "PN", + "PL", + "PT", + "PR", + "QA", + "MK", + "RO", + "RU", + "RW", + "RE", + "BL", + "SH", + "KN", + "LC", + "MF", + "PM", + "VC", + "WS", + "SM", + "ST", + "SA", + "SN", + "RS", + "SC", + "SL", + "SG", + "SX", + "SK", + "SI", + "SB", + "SO", + "ZA", + "GS", + "SS", + "ES", + "LK", + "SD", + "SR", + "SJ", + "SE", + "CH", + "SY", + "TW", + "TJ", + "TZ", + "TH", + "TL", + "TG", + "TK", + "TO", + "TT", + "TN", + "TR", + "TM", + "TC", + "TV", + "UG", + "UA", + "AE", + "GB", + "UM", + "US", + "UY", + "UZ", + "VU", + "VE", + "VN", + "VG", + "VI", + "WF", + "EH", + "YE", + "ZM", + "ZW", + "AX" + ], + "example": "BR" + }, + "id_doc_type": { + "type": "string", + "enum": [ + "PASSPORT", + "ID_CARD", + "DRIVERS" + ], + "example": "PASSPORT" + }, + "id_doc_front_file": { + "type": "string", + "format": "uri" + }, + "id_doc_back_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)" + }, + "proof_of_address_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "UTILITY_BILL", + "BANK_STATEMENT", + "RENTAL_AGREEMENT", + "TAX_DOCUMENT", + "GOVERNMENT_CORRESPONDENCE" + ], + "example": "UTILITY_BILL" + }, + "proof_of_address_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload one document that serve as proof of address, this needs to be the same address as the one provided above. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB." + }, + "ownership_percentage": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "maximum": 100, + "description": "Ownership percentage of the beneficial owner (0-100)", + "example": 25 + }, + "title": { + "type": [ + "string", + "null" + ], + "maxLength": 128, + "description": "Job title of the owner", + "example": "CEO" + }, + "tax_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "SSN", + "ITIN" + ], + "description": "Tax identifier type. Mandatory when country is US; must be SSN or ITIN.", + "example": "SSN" + }, + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15 + } + }, + "required": [ + "id" + ] + } + }, + "incorporation_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload your articles of incorporation below. The articles of incorporation or a certificate of incorporation usually includes information like the company name, business purpose, number of shares offered, value of shares, etc. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "proof_of_ownership_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Please upload your proof of ownership below. This document usually includes information like the shareholders names and percentages. Only PDF and image files are accepted (.jpg, .jpeg, .png, .pdf) with a maximum size of 3MB.", + "example": "https://example.com/image.png" + }, + "source_of_funds_doc_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_income", + "gambling_proceeds", + "gifts", + "government_benefits", + "inheritance", + "investment_loans", + "pension_retirement", + "salary", + "sale_of_assets_real_estate", + "savings", + "esops", + "investment_proceeds", + "someone_else_funds" + ], + "example": "business_income" + }, + "source_of_funds_doc_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "example": "https://example.com/image.png" + }, + "selfie_file": { + "type": [ + "string", + "null" + ], + "format": "uri", + "description": "Only image files are accepted (.jpg, .jpeg, .png)", + "example": "https://example.com/image.png" + }, + "purpose_of_transactions": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_transactions", + "charitable_donations", + "investment_purposes", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_good_and_services", + "receive_payment_for_freelancing", + "receive_salary", + "other" + ], + "example": "business_transactions" + }, + "purpose_of_transactions_explanation": { + "type": [ + "string", + "null" + ], + "example": "I am a business owner and I want to receive payments from my customers" + }, + "account_purpose": { + "type": [ + "string", + "null" + ], + "enum": [ + "charitable_donations", + "ecommerce_retail_payments", + "investment_purposes", + "business_expenses", + "payments_to_friends_or_family_abroad", + "personal_or_living_expenses", + "protect_wealth", + "purchase_goods_and_services", + "receive_payments_for_goods_and_services", + "tax_optimization", + "third_party_money_transmission", + "payroll", + "treasury_management", + "other" + ], + "example": "treasury_management" + }, + "account_purpose_other": { + "type": [ + "string", + "null" + ], + "maxLength": 512, + "description": "Required when account_purpose is \"other\". Max 512 characters.", + "example": "Custom account purpose description" + }, + "business_type": { + "type": [ + "string", + "null" + ], + "enum": [ + "corporation", + "llc", + "partnership", + "sole_proprietorship", + "trust", + "non_profit" + ], + "example": "llc" + }, + "business_description": { + "type": [ + "string", + "null" + ], + "maxLength": 1000, + "example": "Software development company" + }, + "business_industry": { + "type": [ + "string", + "null" + ], + "enum": [ + "111998", + "112120", + "113310", + "115114", + "541211", + "541810", + "541430", + "541715", + "541930", + "561422", + "561311", + "561612", + "561740", + "561730", + "236115", + "236220", + "237310", + "238210", + "811111", + "812111", + "812112", + "532111", + "624410", + "541922", + "811210", + "812199", + "611110", + "611310", + "611410", + "611710", + "211120", + "212114", + "221310", + "562111", + "562920", + "213112", + "522110", + "522210", + "522320", + "523150", + "523940", + "523999", + "524113", + "813110", + "813211", + "813219", + "551112", + "721110", + "722511", + "722513", + "561510", + "713110", + "713210", + "712110", + "711110", + "711211", + "621111", + "621210", + "622110", + "623110", + "621511", + "623220", + "541940", + "621399", + "621910", + "541110", + "311421", + "337121", + "322220", + "339920", + "334210", + "339930", + "312130", + "334111", + "334118", + "325412", + "339112", + "336110", + "336390", + "315990", + "313110", + "339910", + "516120", + "513130", + "512250", + "519130", + "711410", + "711510", + "531110", + "531120", + "531130", + "531190", + "531210", + "531311", + "531312", + "531320", + "531390", + "454110", + "445110", + "455110", + "457110", + "449210", + "444110", + "459210", + "459120", + "445320", + "458110", + "458210", + "458310", + "455219", + "424210", + "456110", + "446120", + "541511", + "541512", + "541519", + "518210", + "511210", + "517111", + "517112", + "517410", + "481111", + "483111", + "485210", + "488510", + "484121", + "493110", + "423430", + "423690", + "423110", + "423830", + "423840", + "423510", + "424690", + "424990", + "424410", + "424480", + "423940", + "541611", + "541618", + "541330", + "541990", + "541214", + "561499" + ], + "example": "541511" + }, + "estimated_annual_revenue": { + "type": [ + "string", + "null" + ], + "enum": [ + "0_99999", + "100000_999999", + "1000000_9999999", + "10000000_49999999", + "50000000_249999999", + "250000000_plus" + ], + "example": "1000000_9999999" + }, + "source_of_wealth": { + "type": [ + "string", + "null" + ], + "enum": [ + "business_dividends_or_profits", + "investments", + "asset_sales", + "client_investor_contributions", + "gambling", + "charitable_contributions", + "inheritance", + "affiliate_or_royalty_income" + ], + "example": "affiliate_or_royalty_income" + }, + "publicly_traded": { + "type": [ + "boolean", + "null" + ], + "example": false + }, + "occupation": { + "type": [ + "string", + "null" + ], + "maxLength": 255, + "example": "Software Engineer" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_company_external_id" + }, + "tos_id": { + "type": [ + "string", + "null" + ], + "minLength": 15, + "maxLength": 15, + "example": "to_000000000000" + }, + "additional_info": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/AdditionalInfoItem" + }, + "description": "Optional extra documents or notes for this customer. `label` is a known category, `value` is either a URL to upload or a free-text description. Any URLs are downloaded and re-hosted on Blindpay storage before being stored.", + "example": [ + { + "label": "EIN_LETTER", + "value": "https://example.com/ein.pdf" + }, + { + "label": "FLOW_OF_FUNDS", + "value": "Funds originate from US payroll deposits, forwarded weekly to customer." + } + ] + } + }, + "required": [ + "email", + "country" + ] + }, + "GetCustomerLimitsOut": { + "type": "object", + "properties": { + "limits": { + "type": "object", + "properties": { + "payin": { + "type": "object", + "properties": { + "daily": { + "type": "number" + }, + "monthly": { + "type": "number" + } + }, + "required": [ + "daily", + "monthly" + ] + }, + "payout": { + "type": "object", + "properties": { + "daily": { + "type": "number" + }, + "monthly": { + "type": "number" + } + }, + "required": [ + "daily", + "monthly" + ] + } + }, + "required": [ + "payin", + "payout" + ] + } + }, + "required": [ + "limits" + ], + "example": { + "limits": { + "payin": { + "daily": 500000, + "monthly": 2000000 + }, + "payout": { + "daily": 300000, + "monthly": 1000000 + } + } + } + }, + "RfiField": { + "type": "object", + "properties": { + "key": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "label": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "regex": { + "type": "string", + "maxLength": 512 + }, + "required": { + "type": "boolean" + }, + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ] + } + }, + "multiple": { + "type": "boolean" + }, + "aiprise_document_type": { + "type": "string", + "enum": [ + "ADDRESS_PROOF_DOCUMENT", + "SOURCE_OF_FUNDS_DOCUMENT", + "BANK_STATEMENT_DOCUMENT", + "USER_SELFIE", + "TAX_CERTIFICATE", + "VISA_DOCUMENT", + "OTHER" + ] + } + }, + "required": [ + "key", + "label", + "required" + ] + }, + "RfiSection": { + "type": "object", + "properties": { + "title": { + "type": "string", + "minLength": 1, + "maxLength": 256 + }, + "description": { + "type": "string", + "maxLength": 4096 + }, + "supporting_document": { + "type": "string", + "format": "uri" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RfiField" + }, + "minItems": 1, + "maxItems": 20 + } + }, + "required": [ + "title", + "description", + "fields" + ] + }, + "Rfi": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": "string" + }, + "customer_id": { + "type": "string" + }, + "instance_id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "submitted", + "expired", + "cancelled" + ] + }, + "request": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RfiSection" + }, + "minItems": 1, + "maxItems": 20 + }, + "response": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "maxLength": 4096 + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "maxItems": 20 + } + ] + } + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "submitted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "customer_type": { + "type": "string", + "enum": [ + "individual", + "business" + ] + }, + "customer_aiprise_session_id": { + "type": [ + "string", + "null" + ] + }, + "customer_aiprise_user_profile_id": { + "type": [ + "string", + "null" + ] + }, + "customer_kyc_status": { + "type": "string" + } + }, + "required": [ + "id", + "customer_id", + "instance_id", + "status", + "request", + "response", + "expires_at", + "submitted_at", + "created_at" + ] + }, + "InstanceRfi": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": "string" + }, + "instance_id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "submitted", + "expired", + "cancelled" + ] + }, + "request": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RfiSection" + }, + "minItems": 1, + "maxItems": 20 + }, + "response": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string", + "maxLength": 4096 + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uri" + }, + "maxItems": 20 + } + ] + } + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "submitted_at": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "instance_id", + "status", + "request", + "response", + "expires_at", + "submitted_at", + "created_at" + ] + }, + "RecurringItem": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "rc_000000000000" + }, + "instance_id": { + "type": "string", + "example": "in_000000000000" + }, + "description": { + "type": "string", + "example": "Premium Support" + }, + "amount": { + "type": "integer", + "description": "Amount in cents for fixed billing", + "example": 5000 + }, + "frequency_months": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Billing frequency in months (1=monthly, 3=quarterly, etc)", + "example": 1 + }, + "first_invoice_sequence": { + "type": "integer", + "exclusiveMinimum": 0, + "description": "Invoice sequence number when this item first becomes due", + "example": 1 + }, + "billing_scheme": { + "type": "string", + "enum": [ + "fixed", + "metered" + ], + "example": "fixed" + }, + "metric_id": { + "type": [ + "string", + "null" + ], + "example": "approved_individual_customers" + }, + "per_unit_amount": { + "type": [ + "integer", + "null" + ], + "description": "Override default rate in cents for metered billing", + "example": 20 + }, + "product_id": { + "type": [ + "string", + "null" + ], + "example": "pr_000000000000" + }, + "product_name": { + "type": [ + "string", + "null" + ], + "description": "Product name when product_id is set (from stripe product catalog)", + "example": "Swift Addon" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "updated_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "instance_id", + "description", + "amount", + "frequency_months", + "first_invoice_sequence", + "billing_scheme", + "metric_id", + "per_unit_amount", + "product_id" + ] + }, + "CreateRecurringItemSchemaIn": { + "type": "object", + "properties": { + "description": { + "type": "string", + "minLength": 1, + "example": "Swift Addon" + }, + "amount": { + "type": "integer", + "minimum": 0, + "description": "Amount in cents", + "example": 5000 + }, + "frequency_months": { + "type": "integer", + "exclusiveMinimum": 0, + "example": 1 + }, + "first_invoice_sequence": { + "type": "integer", + "exclusiveMinimum": 0, + "example": 1 + }, + "product_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "description", + "amount", + "frequency_months", + "first_invoice_sequence" + ] + }, + "UpdateRecurringItemSchemaIn": { + "type": "object", + "properties": { + "description": { + "type": "string", + "minLength": 1 + }, + "amount": { + "type": "integer", + "minimum": 0 + }, + "frequency_months": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "first_invoice_sequence": { + "type": "integer", + "exclusiveMinimum": 0 + }, + "product_id": { + "type": [ + "string", + "null" + ] + } + } + }, + "CreateComplaintIn": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "minLength": 1 + }, + "last_name": { + "type": "string", + "minLength": 1 + }, + "email": { + "type": "string", + "format": "email" + }, + "complaint_type": { + "type": "string", + "minLength": 1 + }, + "description": { + "type": "string", + "minLength": 20, + "maxLength": 5000 + } + }, + "required": [ + "first_name", + "last_name", + "email", + "complaint_type", + "description" + ] + }, + "FeedbackActor": { + "type": [ + "object", + "null" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "email" + ] + }, + "FeedbackWithActorOut": { + "allOf": [ + { + "$ref": "#/components/schemas/FeedbackOut" + }, + { + "type": "object", + "properties": { + "actor": { + "$ref": "#/components/schemas/FeedbackActor" + } + }, + "required": [ + "actor" + ] + } + ] + }, + "CreateRfiBody": { + "type": "object", + "properties": { + "created_by_email": { + "type": "string", + "format": "email" + }, + "request": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RfiSection" + }, + "minItems": 1, + "maxItems": 20 + }, + "keep_customer_approved": { + "type": "boolean", + "default": false, + "description": "When true, sets the customer to approved_rfi (keeps full access while the RFI is open) instead of compliance_request (blocked).", + "example": false + } + }, + "required": [ + "created_by_email", + "request" + ] + }, + "KycDecisionBody": { + "type": "object", + "properties": { + "decision": { + "type": "string", + "enum": [ + "approved", + "rejected" + ] + }, + "reviewed_by": { + "type": "string", + "format": "email" + }, + "reason": { + "type": "string", + "maxLength": 2048 + } + }, + "required": [ + "decision", + "reviewed_by" + ] + }, + "UpdateDynamicRateOtcIn": { + "type": "object", + "properties": { + "dynamic_rate_otc": { + "type": "integer", + "minimum": 0, + "description": "Dynamic OTC rate markup in basis points (e.g. 5 = 0.05%)", + "example": 5 + } + }, + "required": [ + "dynamic_rate_otc" + ] + }, + "LedgerOperation": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "payin", + "payout" + ] + }, + "id": { + "type": "string" + }, + "instance_id": { + "type": [ + "string", + "null" + ] + }, + "status": { + "type": [ + "string", + "null" + ] + }, + "provider": { + "type": [ + "string", + "null" + ] + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "sender_amount": { + "type": [ + "string", + "null" + ] + }, + "receiver_amount": { + "type": [ + "string", + "null" + ] + }, + "network": { + "type": [ + "string", + "null" + ] + }, + "counterparty_address": { + "type": [ + "string", + "null" + ] + }, + "tx_hashes": { + "type": "array", + "items": { + "type": "string" + } + }, + "provider_transaction_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "external_id": { + "type": [ + "string", + "null" + ] + }, + "bank_external_id": { + "type": [ + "string", + "null" + ] + }, + "memo_code": { + "type": [ + "string", + "null" + ] + }, + "recipient_tax_id": { + "type": [ + "string", + "null" + ] + }, + "veem_customer_id": { + "type": [ + "string", + "null" + ] + }, + "is_otc": { + "type": "boolean" + }, + "created_at": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "kind", + "id", + "instance_id", + "status", + "provider", + "currency", + "sender_amount", + "receiver_amount", + "network", + "counterparty_address", + "tx_hashes", + "provider_transaction_ids", + "external_id", + "bank_external_id", + "memo_code", + "recipient_tax_id", + "veem_customer_id", + "is_otc", + "created_at", + "updated_at" + ] + }, + "MonitoredWallet": { + "type": "object", + "properties": { + "network": { + "type": "string" + }, + "address": { + "type": "string" + }, + "label": { + "type": "string", + "description": "treasury: for the shared treasury wallet, instance: for a `wallet` row, instance::offramp for an `offramp_wallet` row.", + "example": "instance:inst_abc123" + }, + "source": { + "type": "string", + "enum": [ + "treasury", + "wallet", + "offramp_wallet" + ] + }, + "instance_id": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "network", + "address", + "label", + "source", + "instance_id" + ] + }, + "CreateInstanceRfiBody": { + "type": "object", + "properties": { + "created_by_email": { + "type": "string", + "format": "email" + }, + "request": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RfiSection" + }, + "minItems": 1, + "maxItems": 20 + } + }, + "required": [ + "created_by_email", + "request" + ] + } + }, + "parameters": {} + }, + "paths": { + "/v1/instances/{id}": { + "put": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Update Instance", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Update instance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInstanceIn" + } + } + } + }, + "responses": { + "200": { + "description": "Instance updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Delete Instance", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Instance deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `AUTH_FORBIDDEN`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{id}/members": { + "get": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Retrieve Instance Members", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Retrieve instance members", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "us_000000000000" + }, + "email": { + "type": "string", + "format": "email", + "example": "email@example.com" + }, + "first_name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "example": "Harry" + }, + "middle_name": { + "type": [ + "string", + "null" + ], + "minLength": 1, + "maxLength": 100, + "example": "James" + }, + "last_name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "example": "Potter" + }, + "image_url": { + "type": "string", + "format": "uri", + "example": "https://example.com/image.png" + }, + "created_at": { + "example": "2021-01-01T00:00:00Z" + }, + "has_passkey": { + "type": [ + "boolean", + "null" + ], + "example": true + }, + "role": { + "type": "string", + "enum": [ + "owner", + "admin", + "finance", + "checker", + "operations", + "developer", + "viewer" + ], + "example": "admin" + } + }, + "required": [ + "id", + "email", + "first_name", + "last_name", + "image_url", + "role" + ] + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{id}/members/{user_id}": { + "delete": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Delete Member from Instance", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "user_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Member deleted from instance successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "put": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Update Instance Member Role", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "user_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Update instance member role", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateInstanceMemberIn" + } + } + } + }, + "responses": { + "200": { + "description": "Member role updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{id}/ownership": { + "post": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Migrate Instance Ownership", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Transfer instance ownership to another current member", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MigrateInstanceOwnershipIn" + } + } + } + }, + "responses": { + "200": { + "description": "Ownership transferred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/rfi": { + "get": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Get Open RFI for Instance", + "description": "Returns the open (pending) RFI for this instance, or null if the instance has no pending RFI.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Open instance RFI, or null if none", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InstanceRfi" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `COMPLIANCE_RFI_INVALID`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "COMPLIANCE_RFI_INVALID": { + "summary": "COMPLIANCE_RFI_INVALID", + "value": { + "success": false, + "code": "COMPLIANCE_RFI_INVALID", + "message": "rfi_request_corrupt", + "description": "The information request could not be processed. Check the submitted fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "post": { + "x-sdk": true, + "tags": [ + "Instances" + ], + "summary": "Submit Instance RFI Response", + "description": "Submit a flat response object for the open instance RFI. Standalone: submitting does not change any instance or onboarding status. Returns `{ success: false, reason }` when no pending RFI exists, callers should refetch the RFI state instead of retrying.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": {} + } + } + } + }, + "responses": { + "200": { + "description": "RFI submitted (success: true) or rejected because no pending RFI exists (success: false)", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + } + }, + "required": [ + "success" + ] + }, + { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + false + ] + }, + "reason": { + "type": "string", + "enum": [ + "no_pending_rfi", + "already_resolved" + ] + } + }, + "required": [ + "success", + "reason" + ] + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `COMPLIANCE_RFI_INVALID`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "COMPLIANCE_RFI_INVALID": { + "summary": "COMPLIANCE_RFI_INVALID", + "value": { + "success": false, + "code": "COMPLIANCE_RFI_INVALID", + "message": "rfi_request_corrupt", + "description": "The information request could not be processed. Check the submitted fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/e/instances/{instance_id}/tos": { + "post": { + "x-sdk": true, + "tags": [ + "Terms Of Service" + ], + "summary": "Initiate Terms of Service", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "requestBody": { + "description": "Initiate a new terms of service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitiateTosIn" + } + } + } + }, + "responses": { + "200": { + "description": "Initiate terms of service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitiateTosOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/limit-increase": { + "post": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Request Limit Increase", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Request new limit increase", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerLimitIncreaseIn" + } + } + } + }, + "responses": { + "200": { + "description": "Create customer limit increase", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerLimitIncreaseOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `CUSTOMERS_KYC_NOT_APPROVED`, `FILES_TOO_LARGE`, `FILES_TYPE_NOT_ALLOWED`, `FILES_UNREADABLE`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TOO_LARGE": { + "summary": "FILES_TOO_LARGE", + "value": { + "success": false, + "code": "FILES_TOO_LARGE", + "message": "file_size_exceeded", + "description": "The file is too large. Upload a smaller file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TYPE_NOT_ALLOWED": { + "summary": "FILES_TYPE_NOT_ALLOWED", + "value": { + "success": false, + "code": "FILES_TYPE_NOT_ALLOWED", + "message": "file_type_not_allowed", + "description": "This file type is not allowed. Upload a supported file type.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `CUSTOMERS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Retrieve Limit Increase Requests", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List customer limit increase requests", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GetCustomerLimitIncreaseOut" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers": { + "post": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Create Customer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new customer", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCustomerIn" + } + } + } + }, + "responses": { + "200": { + "description": "Create customer", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "customer_id": { + "type": "string" + } + }, + "required": [ + "id", + "customer_id" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `CUSTOMERS_ALREADY_APPROVED`, `CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE`, `CUSTOMERS_ENHANCED_KYC_REQUIRED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `FILES_TOO_LARGE`, `FILES_TYPE_NOT_ALLOWED`, `FILES_UNREADABLE`, `TOS_ALREADY_ACCEPTED`, `TOS_NOT_ACCEPTED`, `TOS_NOT_FOUND`, `VALIDATION_FAILED`, `VALIDATION_MISSING_REQUIRED_FIELDS`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_ALREADY_APPROVED": { + "summary": "CUSTOMERS_ALREADY_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_ALREADY_APPROVED", + "message": "customer_already_approved", + "description": "This customer is already approved.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE": { + "summary": "CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE", + "value": { + "success": false, + "code": "CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE", + "message": "business_enhanced_not_available", + "description": "Enhanced verification is not available for business customers. Use standard verification (kyc_type: standard) for businesses.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ENHANCED_KYC_REQUIRED": { + "summary": "CUSTOMERS_ENHANCED_KYC_REQUIRED", + "value": { + "success": false, + "code": "CUSTOMERS_ENHANCED_KYC_REQUIRED", + "message": "only_enhanced_kyc_allowed_for_high_risk_countries", + "description": "Individuals from high-risk countries must use enhanced verification (kyc_type: enhanced); standard verification is not available for them. See https://www.blindpay.com/docs/kb/supported-countries for country tiers.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TOO_LARGE": { + "summary": "FILES_TOO_LARGE", + "value": { + "success": false, + "code": "FILES_TOO_LARGE", + "message": "file_size_exceeded", + "description": "The file is too large. Upload a smaller file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TYPE_NOT_ALLOWED": { + "summary": "FILES_TYPE_NOT_ALLOWED", + "value": { + "success": false, + "code": "FILES_TYPE_NOT_ALLOWED", + "message": "file_type_not_allowed", + "description": "This file type is not allowed. Upload a supported file type.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TOS_ALREADY_ACCEPTED": { + "summary": "TOS_ALREADY_ACCEPTED", + "value": { + "success": false, + "code": "TOS_ALREADY_ACCEPTED", + "message": "tos_id_already_accepted", + "description": "These terms of service were already accepted.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TOS_NOT_ACCEPTED": { + "summary": "TOS_NOT_ACCEPTED", + "value": { + "success": false, + "code": "TOS_NOT_ACCEPTED", + "message": "please_accept_terms_of_service", + "description": "The terms of service must be accepted before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TOS_NOT_FOUND": { + "summary": "TOS_NOT_FOUND", + "value": { + "success": false, + "code": "TOS_NOT_FOUND", + "message": "tos_not_found", + "description": "The requested terms of service record was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_MISSING_REQUIRED_FIELDS": { + "summary": "VALIDATION_MISSING_REQUIRED_FIELDS", + "value": { + "success": false, + "code": "VALIDATION_MISSING_REQUIRED_FIELDS", + "message": "missing_required_fields", + "description": "Required fields are missing. Provide the missing fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Retrieve Customers", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "enum": [ + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to return", + "example": "50" + }, + "required": false, + "name": "limit", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "0", + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to skip", + "example": "0" + }, + "required": false, + "name": "offset", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. starting_after is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "starting_after", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. ending_before is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "ending_before", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "full_name", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "customer_name", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated", + "pending_review", + "awaiting_contract", + "compliance_request", + "approved_rfi" + ] + }, + "required": false, + "name": "status", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "customer_id", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "bank_account_id", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "country", + "in": "query" + } + ], + "responses": { + "200": { + "description": "List customers with pagination", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerOut" + } + }, + "pagination": { + "$ref": "#/components/schemas/PaginationMetadata" + } + }, + "required": [ + "data", + "pagination" + ] + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerOut" + } + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Retrieve Customer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get customer", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `CUSTOMERS_NOT_FOUND`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `DATA_INTEGRITY_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "DATA_INTEGRITY_ERROR": { + "summary": "DATA_INTEGRITY_ERROR", + "value": { + "success": false, + "code": "DATA_INTEGRITY_ERROR", + "message": "data_integrity_error", + "description": "This record could not be loaded because it contains invalid stored data. Contact support with the ID below.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "put": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Update Customer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Update a customer", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCustomerIn" + } + } + } + }, + "responses": { + "200": { + "description": "Customer updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `CUSTOMERS_NOT_FOUND`, `FILES_TOO_LARGE`, `FILES_TYPE_NOT_ALLOWED`, `FILES_UNREADABLE`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TOO_LARGE": { + "summary": "FILES_TOO_LARGE", + "value": { + "success": false, + "code": "FILES_TOO_LARGE", + "message": "file_size_exceeded", + "description": "The file is too large. Upload a smaller file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TYPE_NOT_ALLOWED": { + "summary": "FILES_TYPE_NOT_ALLOWED", + "value": { + "success": false, + "code": "FILES_TYPE_NOT_ALLOWED", + "message": "file_type_not_allowed", + "description": "This file type is not allowed. Upload a supported file type.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Delete Customer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Customer deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/limits/customers/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Retrieve Customer Limits", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get customer limits", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCustomerLimitsOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `CUSTOMERS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/rfi": { + "get": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Get Open RFI for Customer", + "description": "Returns the open (pending) RFI for this customer, or null if the customer has no pending RFI.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Open RFI, or null if none", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Rfi" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "post": { + "x-sdk": true, + "tags": [ + "Customers" + ], + "summary": "Submit RFI Response", + "description": "Submit a flat response object for the open RFI. On success flips kyc_status back to verifying. Returns `{ success: false, reason }` when no pending RFI exists, callers should refetch the RFI state instead of retrying.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": {} + } + } + } + }, + "responses": { + "200": { + "description": "RFI submitted (success: true) or rejected because no pending RFI exists (success: false)", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + } + }, + "required": [ + "success" + ] + }, + { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + false + ] + }, + "reason": { + "type": "string", + "enum": [ + "no_pending_rfi", + "already_resolved" + ] + } + }, + "required": [ + "success", + "reason" + ] + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `COMPLIANCE_RFI_INVALID`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "COMPLIANCE_RFI_INVALID": { + "summary": "COMPLIANCE_RFI_INVALID", + "value": { + "success": false, + "code": "COMPLIANCE_RFI_INVALID", + "message": "rfi_request_corrupt", + "description": "The information request could not be processed. Check the submitted fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/bank-accounts": { + "post": { + "x-sdk": true, + "tags": [ + "Bank Accounts" + ], + "summary": "Add Bank Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new bank account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBankAccountIn" + } + } + } + }, + "responses": { + "200": { + "description": "Add bank account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankAccountOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INVALID_BANK_CODE`, `BANK_ACCOUNTS_INVALID_ROUTING`, `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED`, `BANK_ACCOUNTS_RTP_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `FILES_UNREADABLE`, `VALIDATION_FAILED`, `VALIDATION_INVALID_REQUEST`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INVALID_BANK_CODE": { + "summary": "BANK_ACCOUNTS_INVALID_BANK_CODE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INVALID_BANK_CODE", + "message": "bank_accounts_invalid_bank_code", + "description": "The bank code provided is not valid for this payment rail. The message lists where to fetch the valid codes.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_INVALID_ROUTING": { + "summary": "BANK_ACCOUNTS_INVALID_ROUTING", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INVALID_ROUTING", + "message": "The routing number must be a valid 9-digit ABA routing number.", + "description": "The routing number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED": { + "summary": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "message": "unsupported_banking_partner", + "description": "This banking option is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_RTP_NOT_SUPPORTED": { + "summary": "BANK_ACCOUNTS_RTP_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_RTP_NOT_SUPPORTED", + "message": "The provided routing number does not support RTP transactions.", + "description": "The provided routing number does not support instant payments.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_INVALID_REQUEST": { + "summary": "VALIDATION_INVALID_REQUEST", + "value": { + "success": false, + "code": "VALIDATION_INVALID_REQUEST", + "message": "invalid_body", + "description": "The request is not valid for this operation. Check the parameters and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Bank Accounts" + ], + "summary": "Retrieve Bank Accounts", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "enum": [ + "verifying", + "approved", + "rejected", + "deprecated" + ] + }, + "required": false, + "name": "status", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ] + }, + "required": false, + "name": "type", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "name", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "bank_account_id", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "country", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Get bank accounts", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BankAccountOut" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/bank-accounts/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Bank Accounts" + ], + "summary": "Retrieve Bank Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get bank account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankAccountOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Bank Accounts" + ], + "summary": "Remove Bank Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Delete bank account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/virtual-accounts": { + "post": { + "x-sdk": true, + "tags": [ + "Virtual Accounts" + ], + "summary": "Create Virtual Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new virtual account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateVirtualAccountIn" + } + } + } + }, + "responses": { + "200": { + "description": "Create virtual account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VirtualAccountOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_ENHANCED_KYC_REQUIRED`, `CUSTOMERS_ID_DOCUMENT_INVALID`, `CUSTOMERS_KYC_NOT_APPROVED`, `FILES_UNREADABLE`, `VALIDATION_FAILED`, `VALIDATION_MISSING_REQUIRED_FIELDS`, `VIRTUAL_ACCOUNTS_DISABLED`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED": { + "summary": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "message": "unsupported_banking_partner", + "description": "This banking option is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ENHANCED_KYC_REQUIRED": { + "summary": "CUSTOMERS_ENHANCED_KYC_REQUIRED", + "value": { + "success": false, + "code": "CUSTOMERS_ENHANCED_KYC_REQUIRED", + "message": "only_enhanced_kyc_allowed_for_high_risk_countries", + "description": "Individuals from high-risk countries must use enhanced verification (kyc_type: enhanced); standard verification is not available for them. See https://www.blindpay.com/docs/kb/supported-countries for country tiers.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ID_DOCUMENT_INVALID": { + "summary": "CUSTOMERS_ID_DOCUMENT_INVALID", + "value": { + "success": false, + "code": "CUSTOMERS_ID_DOCUMENT_INVALID", + "message": "id_doc_is_not_valid_passport_or_national_id", + "description": "The identity document is not an accepted passport or national ID. Provide a valid passport or national ID for this customer (a driver license is not accepted for high-risk countries).", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_MISSING_REQUIRED_FIELDS": { + "summary": "VALIDATION_MISSING_REQUIRED_FIELDS", + "value": { + "success": false, + "code": "VALIDATION_MISSING_REQUIRED_FIELDS", + "message": "missing_required_fields", + "description": "Required fields are missing. Provide the missing fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DISABLED": { + "summary": "VIRTUAL_ACCOUNTS_DISABLED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DISABLED", + "message": "virtual_accounts_not_enabled", + "description": "Virtual accounts are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED": { + "summary": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "message": "us_state_not_supported", + "description": "Virtual accounts are not available for this country or region.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `CUSTOMERS_NOT_FOUND`, `INSTANCES_NOT_FOUND`, `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INSTANCES_NOT_FOUND": { + "summary": "INSTANCES_NOT_FOUND", + "value": { + "success": false, + "code": "INSTANCES_NOT_FOUND", + "message": "instance_not_found", + "description": "The requested instance was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Virtual Accounts" + ], + "summary": "Retrieve Virtual Accounts", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get virtual accounts", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VirtualAccountOut" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/virtual-accounts/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Virtual Accounts" + ], + "summary": "Retrieve Virtual Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get virtual account", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/VirtualAccountOut" + }, + { + "type": [ + "object", + "null" + ] + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `DATA_INTEGRITY_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "DATA_INTEGRITY_ERROR": { + "summary": "DATA_INTEGRITY_ERROR", + "value": { + "success": false, + "code": "DATA_INTEGRITY_ERROR", + "message": "data_integrity_error", + "description": "This record could not be loaded because it contains invalid stored data. Contact support with the ID below.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "put": { + "x-sdk": true, + "tags": [ + "Virtual Accounts" + ], + "summary": "Update Virtual Account", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Update a virtual account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateVirtualAccountIn" + } + } + } + }, + "responses": { + "200": { + "description": "Update virtual account", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/blockchain-wallets/sign-message": { + "get": { + "x-sdk": true, + "tags": [ + "Blockchain Wallets" + ], + "summary": "Retrieve Blockchain Wallet Message", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get blockchain wallet sign message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockchainWalletMessageOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/blockchain-wallets": { + "post": { + "x-sdk": true, + "tags": [ + "Blockchain Wallets" + ], + "summary": "Add Blockchain Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new blockchain wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBlockchainWalletIn" + } + } + } + }, + "responses": { + "200": { + "description": "Add blockchain wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockchainWalletOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `VALIDATION_FAILED`, `WEBHOOKS_SIGNATURE_INVALID`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "WEBHOOKS_SIGNATURE_INVALID": { + "summary": "WEBHOOKS_SIGNATURE_INVALID", + "value": { + "success": false, + "code": "WEBHOOKS_SIGNATURE_INVALID", + "message": "invalid_signature", + "description": "The webhook signature is missing or invalid.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Blockchain Wallets" + ], + "summary": "Retrieve Blockchain Wallets", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get blockchain wallets", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BlockchainWalletOut" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/blockchain-wallets/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Blockchain Wallets" + ], + "summary": "Retrieve Blockchain Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get blockchain wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockchainWalletOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `DATA_INTEGRITY_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "DATA_INTEGRITY_ERROR": { + "summary": "DATA_INTEGRITY_ERROR", + "value": { + "success": false, + "code": "DATA_INTEGRITY_ERROR", + "message": "data_integrity_error", + "description": "This record could not be loaded because it contains invalid stored data. Contact support with the ID below.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Blockchain Wallets" + ], + "summary": "Remove Blockchain Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Delete blockchain wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/bank-accounts/{bank_account_id}/offramp-wallets": { + "post": { + "x-sdk": true, + "tags": [ + "Offramp Wallets" + ], + "summary": "Create Offramp Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "required": true, + "name": "bank_account_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new offramp wallet", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_external_id" + }, + "network": { + "type": "string", + "enum": [ + "tron", + "solana", + "solana_devnet", + "arbitrum", + "base", + "ethereum", + "polygon", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "polygon_amoy" + ], + "example": "tron" + } + }, + "required": [ + "network" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Create offramp wallet", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + }, + "external_id": { + "type": [ + "string", + "null" + ], + "example": "your_external_id" + }, + "circle_wallet_id": { + "type": [ + "string", + "null" + ], + "example": "01234567-abcd-efgh-ijkl-012345678901" + }, + "network": { + "type": "string", + "enum": [ + "tron", + "solana", + "solana_devnet", + "arbitrum", + "base", + "ethereum", + "polygon", + "sepolia", + "arbitrum_sepolia", + "base_sepolia", + "polygon_amoy" + ], + "example": "tron" + }, + "address": { + "type": "string", + "example": "TALJN9zTTEL9TVBb4WuTt6wLvPqJZr3hvb" + } + }, + "required": [ + "id", + "network", + "address" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Offramp Wallets" + ], + "summary": "Get Offramp Wallets", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "required": true, + "name": "bank_account_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get offramp wallets", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OfframpWallet" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/bank-accounts/{bank_account_id}/offramp-wallets/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Offramp Wallets" + ], + "summary": "Get Offramp Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ba_000000000000" + }, + "required": true, + "name": "bank_account_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "ow_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get offramp wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OfframpWallet" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/quotes": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts Quotes" + ], + "summary": "Create Quote", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new quote", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuoteIn" + } + } + } + }, + "responses": { + "200": { + "description": "Quote creation details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuoteOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BANK_ACCOUNTS_NOT_APPROVED`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_KYC_NOT_APPROVED`, `FEES_PARTNER_FEE_EXCEEDED`, `FILES_UNREADABLE`, `LIMITS_AMOUNT_OUT_OF_RANGE`, `LIMITS_VOLUME_EXCEEDED`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `QUOTES_RATE_UNAVAILABLE`, `TOS_NOT_ACCEPTED`, `VALIDATION_FAILED`, `VIRTUAL_ACCOUNTS_NOT_APPROVED`, `VIRTUAL_ACCOUNTS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_NOT_APPROVED": { + "summary": "BANK_ACCOUNTS_NOT_APPROVED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_NOT_APPROVED", + "message": "bank_account_not_approved", + "description": "This bank account is not approved yet.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FEES_PARTNER_FEE_EXCEEDED": { + "summary": "FEES_PARTNER_FEE_EXCEEDED", + "value": { + "success": false, + "code": "FEES_PARTNER_FEE_EXCEEDED", + "message": "partner_fee_exceeded", + "description": "The partner fee exceeds the allowed maximum for this transaction.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "LIMITS_AMOUNT_OUT_OF_RANGE": { + "summary": "LIMITS_AMOUNT_OUT_OF_RANGE", + "value": { + "success": false, + "code": "LIMITS_AMOUNT_OUT_OF_RANGE", + "message": "limits_amount_out_of_range", + "description": "The amount is outside the allowed range. The message includes the allowed range.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "LIMITS_VOLUME_EXCEEDED": { + "summary": "LIMITS_VOLUME_EXCEEDED", + "value": { + "success": false, + "code": "LIMITS_VOLUME_EXCEEDED", + "message": "limits_volume_exceeded", + "description": "You exceeded your transaction volume limit. The message includes the remaining amount available.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TOS_NOT_ACCEPTED": { + "summary": "TOS_NOT_ACCEPTED", + "value": { + "success": false, + "code": "TOS_NOT_ACCEPTED", + "message": "please_accept_terms_of_service", + "description": "The terms of service must be accepted before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_APPROVED": { + "summary": "VIRTUAL_ACCOUNTS_NOT_APPROVED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_APPROVED", + "message": "virtual_account_not_approved", + "description": "This virtual account is not approved yet.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `BANK_ACCOUNTS_NOT_FOUND`, `CUSTOMERS_NOT_FOUND`, `FEES_NOT_FOUND`, `INSTANCES_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_NOT_FOUND": { + "summary": "BANK_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_NOT_FOUND", + "message": "bank_account_not_found", + "description": "The requested bank account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FEES_NOT_FOUND": { + "summary": "FEES_NOT_FOUND", + "value": { + "success": false, + "code": "FEES_NOT_FOUND", + "message": "partner_fee_not_found", + "description": "The requested fee configuration was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INSTANCES_NOT_FOUND": { + "summary": "INSTANCES_NOT_FOUND", + "value": { + "success": false, + "code": "INSTANCES_NOT_FOUND", + "message": "instance_not_found", + "description": "The requested instance was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/quotes/fx": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts Quotes" + ], + "summary": "Get FX Rate", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Check FX rate", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB" + ], + "example": "USDC" + }, + "to": { + "type": "string", + "enum": [ + "BRL", + "USD", + "MXN", + "COP", + "ARS", + "EUR" + ], + "example": "BRL" + }, + "request_amount": { + "type": "integer", + "minimum": 500, + "description": "1000 represents 10.00, 2050 represents 20.50", + "example": 1000 + }, + "currency_type": { + "type": "string", + "enum": [ + "sender", + "receiver" + ], + "description": "", + "example": "sender" + } + }, + "required": [ + "from", + "to", + "request_amount", + "currency_type" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Check FX rate response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.85 BRL (commercial quotation - (blindpay taxes))", + "example": 485 + }, + "result_amount": { + "type": "number", + "minimum": 1 + }, + "instance_flat_fee": { + "type": [ + "number", + "null" + ], + "description": "0.5 USDC", + "example": 50 + }, + "instance_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 10000 + } + }, + "required": [ + "commercial_quotation", + "blindpay_quotation", + "result_amount", + "instance_percentage_fee" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `QUOTES_RATE_UNAVAILABLE`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Retrieve Payout", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List payouts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `PAYOUTS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "PAYOUTS_NOT_FOUND": { + "summary": "PAYOUTS_NOT_FOUND", + "value": { + "success": false, + "code": "PAYOUTS_NOT_FOUND", + "message": "payout_not_found", + "description": "The requested payout was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/e/payouts/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Retrieve Payout Track", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List payouts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `PAYOUTS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "PAYOUTS_NOT_FOUND": { + "summary": "PAYOUTS_NOT_FOUND", + "value": { + "success": false, + "code": "PAYOUTS_NOT_FOUND", + "message": "payout_not_found", + "description": "The requested payout was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts": { + "get": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Retrieve Payouts", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "enum": [ + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to return", + "example": "50" + }, + "required": false, + "name": "limit", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "0", + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to skip", + "example": "0" + }, + "required": false, + "name": "offset", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. starting_after is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "starting_after", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. ending_before is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "ending_before", + "in": "query" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": false, + "name": "customer_id", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "processing", + "failed", + "refunded", + "completed", + "on_hold" + ] + }, + "required": false, + "name": "status", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "customer_name", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "bank_account_id", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "country", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ] + }, + "required": false, + "name": "payment_method", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "network", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "token", + "in": "query" + } + ], + "responses": { + "200": { + "description": "List payouts with pagination and filtering", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayoutOut" + } + }, + "pagination": { + "$ref": "#/components/schemas/PaginationMetadata" + } + }, + "required": [ + "data", + "pagination" + ] + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayoutOut" + } + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/stellar/authorize": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Authorize Token Stellar", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnStellarAuthorizeIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payout started with success", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transaction_hash": { + "type": "string" + } + }, + "required": [ + "transaction_hash" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `QUOTES_INVALID_STATE`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_INVALID_STATE": { + "summary": "QUOTES_INVALID_STATE", + "value": { + "success": false, + "code": "QUOTES_INVALID_STATE", + "message": "quote_invalid_state", + "description": "This quote cannot be authorized in its current state. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/stellar": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Create Payout on Stellar", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Start payout on stellar blockchain", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnStellarIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payout started with success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnEvmOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BLOCKCHAIN_TX_FAILED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `CUSTOMERS_ONBOARDING_INCOMPLETE`, `FILES_UNREADABLE`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `QUOTES_ALREADY_USED`, `QUOTES_EXPIRED`, `VALIDATION_FAILED`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_NOT_FOUND`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_TX_FAILED": { + "summary": "BLOCKCHAIN_TX_FAILED", + "value": { + "success": false, + "code": "BLOCKCHAIN_TX_FAILED", + "message": "transaction_failed", + "description": "The blockchain transaction failed. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ONBOARDING_INCOMPLETE": { + "summary": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "value": { + "success": false, + "code": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "message": "onboarding_incomplete", + "description": "Onboarding is not complete yet. Finish the remaining steps before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_ALREADY_USED": { + "summary": "QUOTES_ALREADY_USED", + "value": { + "success": false, + "code": "QUOTES_ALREADY_USED", + "message": "quote_already_used", + "description": "This quote was already used. Request a new quote.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/solana": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Create Payout on Solana", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Start payout on solana blockchain", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnSolanaIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payout started with success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnEvmOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `CUSTOMERS_ONBOARDING_INCOMPLETE`, `FILES_UNREADABLE`, `QUOTES_ALREADY_USED`, `QUOTES_EXPIRED`, `VALIDATION_FAILED`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ONBOARDING_INCOMPLETE": { + "summary": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "value": { + "success": false, + "code": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "message": "onboarding_incomplete", + "description": "Onboarding is not complete yet. Finish the remaining steps before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_ALREADY_USED": { + "summary": "QUOTES_ALREADY_USED", + "value": { + "success": false, + "code": "QUOTES_ALREADY_USED", + "message": "quote_already_used", + "description": "This quote was already used. Request a new quote.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/evm": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Create Payout on EVM Chains", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Start payout on evm blockchain", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnEvmIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payout started with success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutOnEvmOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `CUSTOMERS_ONBOARDING_INCOMPLETE`, `FILES_UNREADABLE`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `QUOTES_ALREADY_USED`, `QUOTES_EXPIRED`, `VALIDATION_FAILED`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_NOT_FOUND`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_ONBOARDING_INCOMPLETE": { + "summary": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "value": { + "success": false, + "code": "CUSTOMERS_ONBOARDING_INCOMPLETE", + "message": "onboarding_incomplete", + "description": "Onboarding is not complete yet. Finish the remaining steps before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_ALREADY_USED": { + "summary": "QUOTES_ALREADY_USED", + "value": { + "success": false, + "code": "QUOTES_ALREADY_USED", + "message": "quote_already_used", + "description": "This quote was already used. Request a new quote.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payouts/{id}/documents": { + "post": { + "x-sdk": true, + "tags": [ + "Payouts" + ], + "summary": "Submit Payout Documents", + "description": "Submit compliance documents for SWIFT payouts requiring review. Includes optional payment description.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Document details and optional payment description", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubmitPayoutDocumentsIn" + } + } + } + }, + "responses": { + "200": { + "description": "Documents submitted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `FILES_UNREADABLE`, `PAYOUTS_DOCUMENTS_NOT_ACCEPTED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_DOCUMENTS_NOT_ACCEPTED": { + "summary": "PAYOUTS_DOCUMENTS_NOT_ACCEPTED", + "value": { + "success": false, + "code": "PAYOUTS_DOCUMENTS_NOT_ACCEPTED", + "message": "document_upload_only_for_swift_payouts", + "description": "Document upload is only available for international wire payouts.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `PAYOUTS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "PAYOUTS_NOT_FOUND": { + "summary": "PAYOUTS_NOT_FOUND", + "value": { + "success": false, + "code": "PAYOUTS_NOT_FOUND", + "message": "payout_not_found", + "description": "The requested payout was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payin-quotes": { + "post": { + "x-sdk": true, + "tags": [ + "Payin Quotes" + ], + "summary": "Create Payin Quote", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new quote", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePayinQuoteIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payin Quote creation details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePayinQuoteOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_KYC_NOT_APPROVED`, `CUSTOMERS_NOT_FOUND`, `FEES_PARTNER_FEE_EXCEEDED`, `LIMITS_AMOUNT_OUT_OF_RANGE`, `LIMITS_VOLUME_EXCEEDED`, `PAYINS_METHOD_NOT_SUPPORTED`, `PAYINS_TAX_ID_REQUIRED`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `QUOTES_OTC_NOT_SUPPORTED`, `TOS_NOT_ACCEPTED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FEES_PARTNER_FEE_EXCEEDED": { + "summary": "FEES_PARTNER_FEE_EXCEEDED", + "value": { + "success": false, + "code": "FEES_PARTNER_FEE_EXCEEDED", + "message": "partner_fee_exceeded", + "description": "The partner fee exceeds the allowed maximum for this transaction.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "LIMITS_AMOUNT_OUT_OF_RANGE": { + "summary": "LIMITS_AMOUNT_OUT_OF_RANGE", + "value": { + "success": false, + "code": "LIMITS_AMOUNT_OUT_OF_RANGE", + "message": "limits_amount_out_of_range", + "description": "The amount is outside the allowed range. The message includes the allowed range.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "LIMITS_VOLUME_EXCEEDED": { + "summary": "LIMITS_VOLUME_EXCEEDED", + "value": { + "success": false, + "code": "LIMITS_VOLUME_EXCEEDED", + "message": "limits_volume_exceeded", + "description": "You exceeded your transaction volume limit. The message includes the remaining amount available.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYINS_METHOD_NOT_SUPPORTED": { + "summary": "PAYINS_METHOD_NOT_SUPPORTED", + "value": { + "success": false, + "code": "PAYINS_METHOD_NOT_SUPPORTED", + "message": "ted_payin_not_supported", + "description": "This payment method is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYINS_TAX_ID_REQUIRED": { + "summary": "PAYINS_TAX_ID_REQUIRED", + "value": { + "success": false, + "code": "PAYINS_TAX_ID_REQUIRED", + "message": "tax_id_required", + "description": "A tax ID is required for this payment method. Provide the tax ID and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_OTC_NOT_SUPPORTED": { + "summary": "QUOTES_OTC_NOT_SUPPORTED", + "value": { + "success": false, + "code": "QUOTES_OTC_NOT_SUPPORTED", + "message": "otc_only_supported_for_brl", + "description": "This OTC configuration is not supported. OTC requires BRL with USDT, and either the sender amount with fees not covered, or the receiver amount with fees covered.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TOS_NOT_ACCEPTED": { + "summary": "TOS_NOT_ACCEPTED", + "value": { + "success": false, + "code": "TOS_NOT_ACCEPTED", + "message": "please_accept_terms_of_service", + "description": "The terms of service must be accepted before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `FEES_NOT_FOUND`, `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FEES_NOT_FOUND": { + "summary": "FEES_NOT_FOUND", + "value": { + "success": false, + "code": "FEES_NOT_FOUND", + "message": "partner_fee_not_found", + "description": "The requested fee configuration was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`, `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payin-quotes/fx": { + "post": { + "x-sdk": true, + "tags": [ + "Payin Quotes" + ], + "summary": "Get FX Rate", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Check FX rate", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB", + "BRL", + "USD", + "MXN", + "COP", + "ARS", + "EUR" + ], + "example": "BRL" + }, + "to": { + "type": "string", + "enum": [ + "USDC", + "USDT", + "USDB", + "BRL", + "USD", + "MXN", + "COP", + "ARS", + "EUR" + ], + "example": "USDC" + }, + "request_amount": { + "type": "integer", + "minimum": 500, + "description": "1000 represents 10.00, 2050 represents 20.50", + "example": 1000 + }, + "currency_type": { + "type": "string", + "enum": [ + "sender", + "receiver" + ], + "description": "", + "example": "sender" + } + }, + "required": [ + "from", + "to", + "request_amount", + "currency_type" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Check FX rate response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "commercial_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 4.95 BRL", + "example": 495 + }, + "blindpay_quotation": { + "type": [ + "number", + "null" + ], + "description": "1 USD = 5.05 BRL (commercial quotation + (blindpay taxes))", + "example": 505 + }, + "result_amount": { + "type": "number", + "minimum": 1 + }, + "instance_flat_fee": { + "type": [ + "number", + "null" + ], + "description": "0.5 USDC", + "example": 50 + }, + "instance_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 10000 + } + }, + "required": [ + "commercial_quotation", + "blindpay_quotation", + "result_amount", + "instance_flat_fee", + "instance_percentage_fee" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `QUOTES_RATE_UNAVAILABLE`, `VALIDATION_FAILED`, `VALIDATION_INVALID_REQUEST`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_INVALID_REQUEST": { + "summary": "VALIDATION_INVALID_REQUEST", + "value": { + "success": false, + "code": "VALIDATION_INVALID_REQUEST", + "message": "invalid_body", + "description": "The request is not valid for this operation. Check the parameters and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`, `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payins/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Payins" + ], + "summary": "Retrieve Payin", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List payins", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `PAYINS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "PAYINS_NOT_FOUND": { + "summary": "PAYINS_NOT_FOUND", + "value": { + "success": false, + "code": "PAYINS_NOT_FOUND", + "message": "payin_not_found", + "description": "The requested payin was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/e/payins/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Payins" + ], + "summary": "Retrieve Payin Track", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pi_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List payins", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `PAYINS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "PAYINS_NOT_FOUND": { + "summary": "PAYINS_NOT_FOUND", + "value": { + "success": false, + "code": "PAYINS_NOT_FOUND", + "message": "payin_not_found", + "description": "The requested payin was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payins": { + "get": { + "x-sdk": true, + "tags": [ + "Payins" + ], + "summary": "Retrieve Payins", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "enum": [ + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to return", + "example": "50" + }, + "required": false, + "name": "limit", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "0", + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to skip", + "example": "0" + }, + "required": false, + "name": "offset", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. starting_after is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "starting_after", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. ending_before is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "ending_before", + "in": "query" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "re_000000000000" + }, + "required": false, + "name": "customer_id", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "processing", + "on_hold", + "failed", + "refunded", + "completed" + ] + }, + "required": false, + "name": "status", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "customer_name", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "bank_account_id", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "country", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "ach", + "wire", + "pix", + "ted", + "spei", + "transfers", + "pse", + "international_swift", + "rtp" + ] + }, + "required": false, + "name": "payment_method", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "network", + "in": "query" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "token", + "in": "query" + } + ], + "responses": { + "200": { + "description": "List payins with pagination", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayinOut" + } + }, + "pagination": { + "$ref": "#/components/schemas/PaginationMetadata" + } + }, + "required": [ + "data", + "pagination" + ] + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayinOut" + } + } + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/payins/evm": { + "post": { + "x-sdk": true, + "tags": [ + "Payins" + ], + "summary": "Create Payin", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Start payin", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePayinIn" + } + } + } + }, + "responses": { + "200": { + "description": "Payin started with success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePayinOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `CUSTOMERS_NOT_FOUND`, `FILES_UNREADABLE`, `PAYINS_METHOD_NOT_SUPPORTED`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `PAYOUTS_INSUFFICIENT_BALANCE`, `QUOTES_ALREADY_USED`, `QUOTES_EXPIRED`, `QUOTES_NOT_FOUND`, `QUOTES_RATE_UNAVAILABLE`, `VALIDATION_FAILED`, `VALIDATION_MISSING_REQUIRED_FIELDS`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_NOT_FOUND`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`, `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED": { + "summary": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "message": "unsupported_banking_partner", + "description": "This banking option is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_NOT_FOUND": { + "summary": "CUSTOMERS_NOT_FOUND", + "value": { + "success": false, + "code": "CUSTOMERS_NOT_FOUND", + "message": "customer_not_found", + "description": "The requested customer was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYINS_METHOD_NOT_SUPPORTED": { + "summary": "PAYINS_METHOD_NOT_SUPPORTED", + "value": { + "success": false, + "code": "PAYINS_METHOD_NOT_SUPPORTED", + "message": "ted_payin_not_supported", + "description": "This payment method is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_INSUFFICIENT_BALANCE": { + "summary": "PAYOUTS_INSUFFICIENT_BALANCE", + "value": { + "success": false, + "code": "PAYOUTS_INSUFFICIENT_BALANCE", + "message": "not_enough_balance", + "description": "There is not enough balance to complete this payout. Fund your balance and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_ALREADY_USED": { + "summary": "QUOTES_ALREADY_USED", + "value": { + "success": false, + "code": "QUOTES_ALREADY_USED", + "message": "quote_already_used", + "description": "This quote was already used. Request a new quote.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_NOT_FOUND": { + "summary": "QUOTES_NOT_FOUND", + "value": { + "success": false, + "code": "QUOTES_NOT_FOUND", + "message": "quote_not_found", + "description": "The requested quote was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_MISSING_REQUIRED_FIELDS": { + "summary": "VALIDATION_MISSING_REQUIRED_FIELDS", + "value": { + "success": false, + "code": "VALIDATION_MISSING_REQUIRED_FIELDS", + "message": "missing_required_fields", + "description": "Required fields are missing. Provide the missing fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED": { + "summary": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "message": "us_state_not_supported", + "description": "Virtual accounts are not available for this country or region.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `QUOTES_RATE_UNAVAILABLE`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/wallets": { + "post": { + "x-sdk": true, + "tags": [ + "Wallets" + ], + "summary": "Create Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWalletIn" + } + } + } + }, + "responses": { + "200": { + "description": "Wallet created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_KYC_NOT_APPROVED`, `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`, `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED": { + "summary": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "message": "us_state_not_supported", + "description": "Virtual accounts are not available for this country or region.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Wallets" + ], + "summary": "Retrieve Wallets", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get wallets", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletOut" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/wallets/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Wallets" + ], + "summary": "Retrieve Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Wallets" + ], + "summary": "Remove Wallet", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Delete wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/customers/{customer_id}/wallets/{id}/balance": { + "get": { + "x-sdk": true, + "tags": [ + "Wallets" + ], + "summary": "Retrieve Wallet Balance", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Customer ID", + "example": "re_000000000000" + }, + "required": true, + "name": "customer_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "bk_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get wallet balance", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletBalanceOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `WALLETS_BALANCE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_BALANCE_UNAVAILABLE": { + "summary": "WALLETS_BALANCE_UNAVAILABLE", + "value": { + "success": false, + "code": "WALLETS_BALANCE_UNAVAILABLE", + "message": "balance_temporarily_unavailable", + "description": "The wallet balance is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/transfer-quotes": { + "post": { + "x-sdk": true, + "tags": [ + "Transfer Quotes" + ], + "summary": "Create Transfer Quote", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new quote", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferQuoteIn" + } + } + } + }, + "responses": { + "200": { + "description": "Transfer Quote creation details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferQuoteOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_KYC_NOT_APPROVED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_KYC_NOT_APPROVED": { + "summary": "CUSTOMERS_KYC_NOT_APPROVED", + "value": { + "success": false, + "code": "CUSTOMERS_KYC_NOT_APPROVED", + "message": "kyc_not_approved", + "description": "This customer has not completed verification yet. Complete the verification before continuing.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/transfers/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Transfers" + ], + "summary": "Retrieve Transfer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List transfers", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/e/transfers/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Transfers" + ], + "summary": "Retrieve Transfer Track", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "pa_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "List transfers", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransferOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/transfers": { + "get": { + "x-sdk": true, + "tags": [ + "Transfers" + ], + "summary": "Retrieve Transfers", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "enum": [ + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to return", + "example": "50" + }, + "required": false, + "name": "limit", + "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "0", + "10", + "50", + "100", + "200", + "500", + "1000" + ], + "description": "Number of items to skip", + "example": "0" + }, + "required": false, + "name": "offset", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. starting_after is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "starting_after", + "in": "query" + }, + { + "schema": { + "type": "string", + "description": "A cursor for use in pagination. ending_before is an object ID that defines your place in the list.", + "example": "pi_123" + }, + "required": false, + "name": "ending_before", + "in": "query" + } + ], + "responses": { + "200": { + "description": "List transfers", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransferOut" + } + }, + "pagination": { + "$ref": "#/components/schemas/PaginationMetadata" + } + }, + "required": [ + "data", + "pagination" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "post": { + "x-sdk": true, + "tags": [ + "Transfers" + ], + "summary": "Create Transfer", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Start transfer", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferIn" + } + } + } + }, + "responses": { + "200": { + "description": "Transfer started with success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `BANK_ACCOUNTS_INCOMPLETE`, `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED`, `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `CUSTOMERS_COUNTRY_NOT_SUPPORTED`, `CUSTOMERS_INVALID_PHONE`, `CUSTOMERS_INVALID_TAX_ID`, `FILES_UNREADABLE`, `PAYOUTS_AMOUNT_BELOW_MINIMUM`, `PAYOUTS_INSUFFICIENT_BALANCE`, `QUOTES_EXPIRED`, `QUOTES_RATE_UNAVAILABLE`, `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`, `VALIDATION_MISSING_REQUIRED_FIELDS`, `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED`, `VIRTUAL_ACCOUNTS_NOT_FOUND`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`, `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BANK_ACCOUNTS_INCOMPLETE": { + "summary": "BANK_ACCOUNTS_INCOMPLETE", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_INCOMPLETE", + "message": "sepa_bank_account_incomplete", + "description": "The bank account details are incomplete for this payment method. Provide the missing fields.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED": { + "summary": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED", + "message": "unsupported_banking_partner", + "description": "This banking option is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_COUNTRY_NOT_SUPPORTED": { + "summary": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "value": { + "success": false, + "code": "CUSTOMERS_COUNTRY_NOT_SUPPORTED", + "message": "country_not_supported", + "description": "This country is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_PHONE": { + "summary": "CUSTOMERS_INVALID_PHONE", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_PHONE", + "message": "invalid_phone_number", + "description": "The phone number provided is not valid. Check the number and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "CUSTOMERS_INVALID_TAX_ID": { + "summary": "CUSTOMERS_INVALID_TAX_ID", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_TAX_ID", + "message": "invalid_cpf_or_rg_tax_id", + "description": "The tax ID provided is not valid. Check the value and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_AMOUNT_BELOW_MINIMUM": { + "summary": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "value": { + "success": false, + "code": "PAYOUTS_AMOUNT_BELOW_MINIMUM", + "message": "swift_minimum_is_100_usd", + "description": "The amount is below the minimum for this payment rail.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "PAYOUTS_INSUFFICIENT_BALANCE": { + "summary": "PAYOUTS_INSUFFICIENT_BALANCE", + "value": { + "success": false, + "code": "PAYOUTS_INSUFFICIENT_BALANCE", + "message": "not_enough_balance", + "description": "There is not enough balance to complete this payout. Fund your balance and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "TRANSFERS_NOT_ENABLED": { + "summary": "TRANSFERS_NOT_ENABLED", + "value": { + "success": false, + "code": "TRANSFERS_NOT_ENABLED", + "message": "wallets_and_transfers_not_enabled", + "description": "Wallets and transfers are not enabled for this account. Contact support to enable them.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_MISSING_REQUIRED_FIELDS": { + "summary": "VALIDATION_MISSING_REQUIRED_FIELDS", + "value": { + "success": false, + "code": "VALIDATION_MISSING_REQUIRED_FIELDS", + "message": "missing_required_fields", + "description": "Required fields are missing. Provide the missing fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED": { + "summary": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED", + "message": "id_doc_front_file_required", + "description": "Additional documents are required to create this virtual account. Upload the requested documents.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_NOT_FOUND": { + "summary": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_NOT_FOUND", + "message": "virtual_account_not_found", + "description": "The requested virtual account was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED": { + "summary": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED", + "message": "us_state_not_supported", + "description": "Virtual accounts are not available for this country or region.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "CUSTOMERS_INVALID_DATA": { + "summary": "CUSTOMERS_INVALID_DATA", + "value": { + "success": false, + "code": "CUSTOMERS_INVALID_DATA", + "message": "invalid_customer_data", + "description": "The customer data was rejected by the banking provider. Check the highlighted fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`, `QUOTES_RATE_UNAVAILABLE`, `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "502": { + "description": "Possible error codes: `VIRTUAL_ACCOUNTS_PROVISION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VIRTUAL_ACCOUNTS_PROVISION_FAILED": { + "summary": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "value": { + "success": false, + "code": "VIRTUAL_ACCOUNTS_PROVISION_FAILED", + "message": "virtual_account_provision_failed", + "description": "We could not create the virtual account. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `QUOTES_RATE_UNAVAILABLE`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_RATE_UNAVAILABLE": { + "summary": "QUOTES_RATE_UNAVAILABLE", + "value": { + "success": false, + "code": "QUOTES_RATE_UNAVAILABLE", + "message": "fx_rate_unavailable", + "description": "An exchange rate is temporarily unavailable. Try again shortly.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/webhook-endpoints": { + "post": { + "x-sdk": true, + "tags": [ + "Webhook Endpoints" + ], + "summary": "Register Webhook", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new webhook endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEndpointIn" + } + } + } + }, + "responses": { + "200": { + "description": "Create webhook endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookEndpointOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`, `WEBHOOKS_LIMIT_REACHED`, `WEBHOOKS_URL_INVALID`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "WEBHOOKS_LIMIT_REACHED": { + "summary": "WEBHOOKS_LIMIT_REACHED", + "value": { + "success": false, + "code": "WEBHOOKS_LIMIT_REACHED", + "message": "webhook_endpoint_limit_reached", + "description": "You reached the maximum number of webhook endpoints.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "WEBHOOKS_URL_INVALID": { + "summary": "WEBHOOKS_URL_INVALID", + "value": { + "success": false, + "code": "WEBHOOKS_URL_INVALID", + "message": "webhook_url_invalid", + "description": "The webhook URL is not valid. Use a reachable HTTPS URL.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Webhook Endpoints" + ], + "summary": "Retrieve Webhooks", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get webhook endpoints", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookEndpoint" + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/webhook-endpoints/{id}": { + "delete": { + "x-sdk": true, + "tags": [ + "Webhook Endpoints" + ], + "summary": "Remove Webhook", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "we_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Delete webhook endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/webhook-endpoints/{id}/secret": { + "get": { + "x-sdk": true, + "tags": [ + "Webhook Endpoints" + ], + "summary": "Retrieve Webhook Secret", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "we_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get webhook endpoint secret", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "key": { + "type": "string", + "example": "whsec_000000000000" + } + }, + "required": [ + "key" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/webhook-endpoints/portal-access": { + "get": { + "x-sdk": true, + "tags": [ + "Webhook Endpoints" + ], + "summary": "Retrieve Webhook Portal Access", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get webhook portal access url", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PortalAccessOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/billing/fees": { + "get": { + "x-sdk": true, + "tags": [ + "Fees" + ], + "summary": "Get Instance Fees", + "description": "Get all fees for an instance, sorted by payment method (fiat first, then blockchain)", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "Instance id", + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Instance fees retrieved and sorted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFeesOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "User not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + } + }, + "404": { + "description": "Instance not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ] + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/partner-fees": { + "post": { + "x-sdk": true, + "tags": [ + "Partner Fees" + ], + "summary": "Add Partner Fee", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "description": "Create a new blockchain wallet", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Display Name" + }, + "payout_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payout_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + }, + "payin_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payin_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + }, + "virtual_account_set": { + "type": [ + "boolean", + "null" + ], + "default": false, + "example": false + } + }, + "required": [ + "name", + "payout_percentage_fee", + "payout_flat_fee", + "payin_percentage_fee", + "payin_flat_fee" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Add blockchain wallet", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "name": { + "type": "string", + "example": "Display Name" + }, + "payout_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payout_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + }, + "payin_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payin_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + } + }, + "required": [ + "id", + "instance_id", + "name", + "payout_percentage_fee", + "payout_flat_fee", + "payin_percentage_fee", + "payin_flat_fee" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "get": { + "x-sdk": true, + "tags": [ + "Partner Fees" + ], + "summary": "Retrieve Partner Fees", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get blockchain wallets", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "name": { + "type": "string", + "example": "Display Name" + }, + "payout_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payout_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + }, + "payin_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payin_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + } + }, + "required": [ + "id", + "instance_id", + "name", + "payout_percentage_fee", + "payout_flat_fee", + "payin_percentage_fee", + "payin_flat_fee" + ] + } + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/partner-fees/{id}": { + "get": { + "x-sdk": true, + "tags": [ + "Partner Fees" + ], + "summary": "Retrieve Partner Fee", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Get blockchain wallets", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "instance_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "name": { + "type": "string", + "example": "Display Name" + }, + "payout_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payout_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + }, + "payin_percentage_fee": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "payin_flat_fee": { + "type": "number", + "minimum": 0, + "maximum": 100000 + } + }, + "required": [ + "id", + "instance_id", + "name", + "payout_percentage_fee", + "payout_flat_fee", + "payin_percentage_fee", + "payin_flat_fee" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + }, + "delete": { + "x-sdk": true, + "tags": [ + "Partner Fees" + ], + "summary": "Remove Partner Fee", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "fe_000000000000" + }, + "required": true, + "name": "id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Delete blockchain wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/upload": { + "post": { + "x-sdk": true, + "tags": [ + "Upload" + ], + "summary": "Upload File", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": false, + "name": "instance_id", + "in": "query" + } + ], + "requestBody": { + "description": "Upload file to instance", + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadIn" + } + } + } + }, + "responses": { + "200": { + "description": "File uploaded successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `FILES_TOO_LARGE`, `FILES_TYPE_NOT_ALLOWED`, `FILES_UNREADABLE`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_TOO_LARGE": { + "summary": "FILES_TOO_LARGE", + "value": { + "success": false, + "code": "FILES_TOO_LARGE", + "message": "file_size_exceeded", + "description": "The file is too large. Upload a smaller file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TYPE_NOT_ALLOWED": { + "summary": "FILES_TYPE_NOT_ALLOWED", + "value": { + "success": false, + "code": "FILES_TYPE_NOT_ALLOWED", + "message": "file_type_not_allowed", + "description": "This file type is not allowed. Upload a supported file type.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `FILES_UNREADABLE`, `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_UNREADABLE": { + "summary": "FILES_UNREADABLE", + "value": { + "success": false, + "code": "FILES_UNREADABLE", + "message": "file_download_failed", + "description": "We could not read the uploaded file. Check the file and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/upload/analyze": { + "post": { + "x-sdk": true, + "tags": [ + "Upload" + ], + "summary": "Analyze Document", + "parameters": [ + { + "schema": { + "type": "string", + "description": "Instance ID. When provided, the request must be authenticated with an API key scoped to this instance. When omitted, a dashboard (Clerk) session is required." + }, + "required": false, + "name": "instance_id", + "in": "query" + } + ], + "requestBody": { + "description": "Document to read and analyze with AI", + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadAnalyzeIn" + } + } + } + }, + "responses": { + "200": { + "description": "Document analyzed successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadAnalyzeOut" + } + } + } + }, + "400": { + "description": "Possible error codes: `FILES_EMPTY`, `FILES_TOO_LARGE`, `FILES_TYPE_NOT_ALLOWED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_EMPTY": { + "summary": "FILES_EMPTY", + "value": { + "success": false, + "code": "FILES_EMPTY", + "message": "file_empty", + "description": "The uploaded file is empty. Upload a valid file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TOO_LARGE": { + "summary": "FILES_TOO_LARGE", + "value": { + "success": false, + "code": "FILES_TOO_LARGE", + "message": "file_size_exceeded", + "description": "The file is too large. Upload a smaller file.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "FILES_TYPE_NOT_ALLOWED": { + "summary": "FILES_TYPE_NOT_ALLOWED", + "value": { + "success": false, + "code": "FILES_TYPE_NOT_ALLOWED", + "message": "file_type_not_allowed", + "description": "This file type is not allowed. Upload a supported file type.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "422": { + "description": "Possible error codes: `FILES_ANALYSIS_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_ANALYSIS_FAILED": { + "summary": "FILES_ANALYSIS_FAILED", + "value": { + "success": false, + "code": "FILES_ANALYSIS_FAILED", + "message": "analysis_failed", + "description": "The document could not be analyzed. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "503": { + "description": "Possible error codes: `FILES_ANALYSIS_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "FILES_ANALYSIS_FAILED": { + "summary": "FILES_ANALYSIS_FAILED", + "value": { + "success": false, + "code": "FILES_ANALYSIS_FAILED", + "message": "analysis_failed", + "description": "The document could not be analyzed. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/available/bank-details": { + "get": { + "x-sdk": true, + "tags": [ + "Available" + ], + "summary": "Bank Details", + "security": [], + "parameters": [ + { + "schema": { + "type": "string", + "enum": [ + "wire", + "ach", + "pix", + "pix_safe", + "ted", + "spei_bitso", + "transfers_bitso", + "ach_cop_bitso", + "international_swift", + "rtp", + "sepa" + ] + }, + "required": true, + "name": "rail", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Retrieve bank details by rail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AvailableBankDetails" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/available/rails": { + "get": { + "x-sdk": true, + "tags": [ + "Available" + ], + "summary": "Rails", + "security": [], + "responses": { + "200": { + "description": "Retrieve available rails", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AvailableRails" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/available/naics": { + "get": { + "x-sdk": true, + "tags": [ + "Available" + ], + "summary": "NAICS list", + "security": [], + "responses": { + "200": { + "description": "Retrieve NAICS (business industry) list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AvailableNaicsList" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/available/swift/{swift}": { + "get": { + "x-sdk": true, + "tags": [ + "Available" + ], + "summary": "Swift code bank details", + "parameters": [ + { + "schema": { + "anyOf": [ + { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Z0-9]+$" + }, + { + "type": "string", + "minLength": 11, + "maxLength": 11, + "pattern": "^[A-Z0-9]+$" + } + ], + "example": "BOFAUS3NLMA" + }, + "required": true, + "name": "swift", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Swift code bank details", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SwiftCodeResponse" + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/mint-usdb-solana": { + "post": { + "x-sdk": true, + "tags": [ + "Solana" + ], + "summary": "Mint USDB on Solana", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "amount": { + "type": "string" + } + }, + "required": [ + "address", + "amount" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Mint USDB on Solana", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "signature": { + "type": "string" + }, + "error": { + "type": "string" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_TX_FAILED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_TX_FAILED": { + "summary": "BLOCKCHAIN_TX_FAILED", + "value": { + "success": false, + "code": "BLOCKCHAIN_TX_FAILED", + "message": "transaction_failed", + "description": "The blockchain transaction failed. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/prepare-delegate-solana": { + "post": { + "x-sdk": true, + "tags": [ + "Solana" + ], + "summary": "Prepare Solana Delegate", + "description": "Prepares a delegation transaction for Solana token transfers. You can either provide a `quote_id` (recommended) to automatically use the correct token amount and address from the quote, or manually provide `owner_address`, `token_address`, and `amount`.", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "owner_address": { + "type": "string", + "description": "The Solana wallet address that owns the tokens", + "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + }, + "quote_id": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "description": "The quote ID. When provided, the API will automatically use the sender_amount and token_address from the quote. This is the recommended approach.", + "example": "qu_000000000000" + }, + "token_address": { + "type": "string", + "description": "The SPL token mint address. Required if quote_id is not provided.", + "example": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + }, + "amount": { + "type": "string", + "description": "The token amount to delegate in USDC/USDT units (e.g., \"10.5\" for 10.5 USDC). Required if quote_id is not provided. Note: This should be the TOKEN amount, not the local currency amount.", + "example": "10.5" + } + }, + "required": [ + "owner_address" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Prepare delegation transaction", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transaction": { + "type": "string" + }, + "debug": {} + }, + "required": [ + "success" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_NETWORK_NOT_SUPPORTED`, `QUOTES_EXPIRED`, `VALIDATION_FAILED`, `VALIDATION_MISSING_REQUIRED_FIELDS`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_NETWORK_NOT_SUPPORTED": { + "summary": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "value": { + "success": false, + "code": "BLOCKCHAIN_NETWORK_NOT_SUPPORTED", + "message": "network_not_supported_on_dev_instance", + "description": "This network or token combination is not supported for this operation.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "QUOTES_EXPIRED": { + "summary": "QUOTES_EXPIRED", + "value": { + "success": false, + "code": "QUOTES_EXPIRED", + "message": "quote_expired", + "description": "This quote has expired. Request a new quote and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_MISSING_REQUIRED_FIELDS": { + "summary": "VALIDATION_MISSING_REQUIRED_FIELDS", + "value": { + "success": false, + "code": "VALIDATION_MISSING_REQUIRED_FIELDS", + "message": "missing_required_fields", + "description": "Required fields are missing. Provide the missing fields and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "404": { + "description": "Possible error codes: `QUOTES_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "QUOTES_NOT_FOUND": { + "summary": "QUOTES_NOT_FOUND", + "value": { + "success": false, + "code": "QUOTES_NOT_FOUND", + "message": "quote_not_found", + "description": "The requested quote was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/create-asset-trustline": { + "post": { + "x-sdk": true, + "tags": [ + "Stellar" + ], + "summary": "Create Asset Trustline", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string" + } + }, + "required": [ + "address" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Create asset trustline", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "xdr": { + "type": "string" + } + }, + "required": [ + "xdr" + ] + } + } + } + }, + "400": { + "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + }, + "/v1/instances/{instance_id}/mint-usdb-stellar": { + "post": { + "x-sdk": true, + "tags": [ + "Stellar" + ], + "summary": "Mint USDB on Stellar", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 15, + "maxLength": 15, + "example": "in_000000000000" + }, + "required": true, + "name": "instance_id", + "in": "path" + }, + { + "schema": { + "type": "string", + "maxLength": 255, + "description": "Optional key to safely retry this request without performing the action twice. Retrying with the same key and an identical body replays the original response; reusing a key with a different body returns an error. Keys are kept for 24 hours.", + "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + }, + "required": false, + "name": "Idempotency-Key", + "in": "header" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "signedXdr": { + "type": "string" + } + }, + "required": [ + "address", + "amount" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Mint USDB", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Success" + } + } + } + }, + "400": { + "description": "Possible error codes: `BLOCKCHAIN_TX_FAILED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "BLOCKCHAIN_TX_FAILED": { + "summary": "BLOCKCHAIN_TX_FAILED", + "value": { + "success": false, + "code": "BLOCKCHAIN_TX_FAILED", + "message": "transaction_failed", + "description": "The blockchain transaction failed. Try again, and contact support if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + }, + "VALIDATION_FAILED": { + "summary": "VALIDATION_FAILED", + "value": { + "success": false, + "code": "VALIDATION_FAILED", + "message": "validation_failed", + "description": "The request contains invalid fields. Check the errors list for details.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "401": { + "description": "Possible error codes: `AUTH_UNAUTHORIZED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_UNAUTHORIZED": { + "summary": "AUTH_UNAUTHORIZED", + "value": { + "success": false, + "code": "AUTH_UNAUTHORIZED", + "message": "unauthorized", + "description": "Authentication failed. Check your API key or session and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "403": { + "description": "Possible error codes: `AUTH_FORBIDDEN`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_FORBIDDEN": { + "summary": "AUTH_FORBIDDEN", + "value": { + "success": false, + "code": "AUTH_FORBIDDEN", + "message": "user_not_allowed", + "description": "You do not have permission to perform this action.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "429": { + "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "AUTH_RATE_LIMITED": { + "summary": "AUTH_RATE_LIMITED", + "value": { + "success": false, + "code": "AUTH_RATE_LIMITED", + "message": "api_key_rate_limit_exceeded", + "description": "Too many requests. Wait a moment and try again.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, + "500": { + "description": "Possible error codes: `INTERNAL_ERROR`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "INTERNAL_ERROR": { + "summary": "INTERNAL_ERROR", + "value": { + "success": false, + "code": "INTERNAL_ERROR", + "message": "internal_error", + "description": "Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + } + } + } + } + }, + "webhooks": { + "bankAccount.new": { + "post": { + "requestBody": { + "description": "Add bank account from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankAccountWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Bank account created" + } + } + } + }, + "blockchainWallet.new": { + "post": { + "requestBody": { + "description": "Add blockchain wallet from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockchainWalletWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Blockchain wallet created" + } + } + } + }, + "customer.new": { + "post": { + "requestBody": { + "description": "Create customer from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerNewWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Customer created" + } + } + } + }, + "customer.delete": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerDeleteWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Customer deleted" + } + } + } + }, + "customer.update": { + "post": { + "requestBody": { + "description": "Update customer from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerUpdateWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Customer updated" + } + } + } + }, + "limitIncrease.new": { + "post": { + "requestBody": { + "description": "Create limit increase from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LimitIncreaseNewWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Limit increase requested" + } + } + } + }, + "limitIncrease.update": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LimitIncreaseUpdateWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Limit increase updated" + } + } + } + }, + "payin.new": { + "post": { + "requestBody": { + "description": "Create payin from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinNewWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payin created" + } + } + } + }, + "payin.complete": { + "post": { + "requestBody": { + "description": "Update payin from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinCompleteWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payin completed" + } + } + } + }, + "payin.partnerFee": { + "post": { + "requestBody": { + "description": "Update payin from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinPartnerFeeWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payin partner fee" + } + } + } + }, + "payin.update": { + "post": { + "requestBody": { + "description": "Update payin from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayinUpdateWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payin updated" + } + } + } + }, + "payout.new": { + "post": { + "requestBody": { + "description": "Create payout from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutNewWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payout created" + } + } + } + }, + "payout.complete": { + "post": { + "requestBody": { + "description": "Update payout from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutCompleteWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payout completed" + } + } + } + }, + "payout.partnerFee": { + "post": { + "requestBody": { + "description": "Update payout partner fee from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutPartnerFeeWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payout partner fee" + } + } + } + }, + "payout.update": { + "post": { + "requestBody": { + "description": "Update payout from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutUpdateWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Payout updated" + } + } + } + }, + "tos.accept": { + "post": { + "requestBody": { + "description": "Accept terms of service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TosAcceptWebhookOut" + } + } + } + }, + "responses": { + "200": { + "description": "Terms of service accepted" + } + } + } + }, + "transfer.new": { + "post": { + "requestBody": { + "description": "Create transfer from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferOut" + } + } + } + }, + "responses": { + "200": { + "description": "Transfer created" + } + } + } + }, + "transfer.complete": { + "post": { + "requestBody": { + "description": "Update transfer from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferOut" + } + } + } + }, + "responses": { + "200": { + "description": "Transfer completed" + } + } + } + }, + "transfer.update": { + "post": { + "requestBody": { + "description": "Update transfer from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTransferOut" + } + } + } + }, + "responses": { + "200": { + "description": "Transfer updated" + } + } + } + }, + "virtualAccount.new": { + "post": { + "requestBody": { + "description": "Virtual account created from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VirtualAccountOut" + } + } + } + }, + "responses": { + "200": { + "description": "Virtual account created" + } + } + } + }, + "virtualAccount.complete": { + "post": { + "requestBody": { + "description": "Virtual account activated/complete from blindpay", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VirtualAccountOut" + } + } + } + }, + "responses": { + "200": { + "description": "Virtual account complete" + } + } + } + }, + "wallet.inbound": { + "post": { + "requestBody": { + "description": "Wallet inbound", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletInboundSchemaOut" + } + } + } + }, + "responses": { + "200": { + "description": "Wallet inbound" + } + } + } + }, + "wallet.new": { + "post": { + "requestBody": { + "description": "Create a wallet for a customer", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletOut" + } + } + } + }, + "responses": { + "200": { + "description": "Wallet created" + } + } + } + } + } +} diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index bd87e92..119754e 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -16,7 +16,18 @@ jobs: tests: uses: ./.github/workflows/tests.yaml needs: lint - snyk: + contract-check: + name: Contract check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + coverage: none + - name: Verify SDK wire keys against the spec snapshot + run: php scripts/contract-check.php + snyk: uses: ./.github/workflows/snyk.yaml needs: [lint, tests] secrets: inherit \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index cb422eb..dcb5b3f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,17 +25,13 @@ blindpay-php/ Customers/ # Complex resource with sub-resource Customers.php # Resource class + inline types CustomersWrapper.php # Wrapper delegating to Customers + exposing BankAccounts - Receivers/ # Deprecated alias of Customers, kept for backward compatibility until v3.0.0 - Receivers.php # Resource class + inline types - ReceiversWrapper.php # Wrapper delegating to Receivers + exposing BankAccounts Wallets/ # Aggregation wrapper (no base methods, only sub-resources) WalletsWrapper.php # Groups BlockchainWallets, OfframpWallets, CustodialWallets BlockchainWallets.php OfframpWallets.php Instances/ Instances.php - InstancesWrapper.php # Groups Instances + ApiKeys + Webhooks + TermsOfService - ApiKeys/ApiKeys.php + InstancesWrapper.php # Groups Instances + Webhooks + TermsOfService BankAccounts/BankAccounts.php CustodialWallets/CustodialWallets.php Fees/Fees.php @@ -75,7 +71,6 @@ blindpay-php/ Available/AvailableTest.php Payins/PayinsTest.php Payins/PayinQuotesTest.php - Receivers/ReceiversTest.php # No Customers test file yet; Receivers is exercised until callers migrate Wallets/BlockchainWalletsTest.php Wallets/OfframpWalletsTest.php ... (one test file per resource) @@ -442,7 +437,7 @@ Create a new file in `src/Types/`. Use `readonly class` with `fromArray()` and o Sub-resources are used when a resource has logically grouped child endpoints. There are two wrapper patterns: -### Pattern A: Delegation wrapper (Payins, Customers, Receivers) +### Pattern A: Delegation wrapper (Payins, Customers) The wrapper delegates the base resource's methods AND exposes sub-resources as public properties. diff --git a/composer.json b/composer.json index 52f97ab..e5f6a26 100644 --- a/composer.json +++ b/composer.json @@ -46,6 +46,7 @@ "test": "pest", "test:coverage": "pest --coverage", "lint:check": "pint --test", - "lint:fix": "pint" + "lint:fix": "pint", + "contract-check": "php scripts/contract-check.php" } } diff --git a/scripts/contract-check.php b/scripts/contract-check.php new file mode 100644 index 0000000..024e3bb --- /dev/null +++ b/scripts/contract-check.php @@ -0,0 +1,312 @@ + ...` inside a toArray() method, must + * exist as a property name somewhere in the snapshot -- unless allow-listed in + * .api-sync/contract-allowlist.json. + * + * Direction B (mixed): + * - Hard fail: every webhook topic in the snapshot's `webhooks` map must have a + * matching case value in BlindPay\SDK\Resources\Webhooks\WebhookEvents. + * - Warning only: spec properties that no fromArray()/toArray() in the SDK reads + * or writes at all (informational, does not fail CI). + * + * Usage: php scripts/contract-check.php + * No Composer dependencies -- uses only the Tokenizer/JSON extensions PHP ships with. + */ + +declare(strict_types=1); + +$root = dirname(__DIR__); +$specPath = $root.'/.api-sync/spec-snapshot.json'; +$allowlistPath = $root.'/.api-sync/contract-allowlist.json'; + +function fail(string $message): never +{ + fwrite(STDERR, "\n[contract-check] FAIL: {$message}\n"); + exit(1); +} + +if (! is_file($specPath)) { + fail("spec snapshot not found at {$specPath}"); +} + +if (! is_file($allowlistPath)) { + fail("allow-list not found at {$allowlistPath}"); +} + +$spec = json_decode(file_get_contents($specPath), true, 512, JSON_THROW_ON_ERROR); +$allowlistRaw = json_decode(file_get_contents($allowlistPath), true, 512, JSON_THROW_ON_ERROR); + +$allowlist = []; +foreach ($allowlistRaw['entries'] ?? [] as $entry) { + foreach (['schema', 'field', 'reason', 'owner'] as $required) { + if (empty($entry[$required])) { + fail("allow-list entry missing required key '{$required}': ".json_encode($entry)); + } + } + $allowlist[$entry['schema'].'.'.$entry['field']] = $entry; +} + +/** + * Recursively collect every key that appears as an OpenAPI "properties" map key, + * anywhere in the document. + */ +function collectSpecProperties(mixed $node, array &$out): void +{ + if (is_array($node)) { + if (isset($node['properties']) && is_array($node['properties'])) { + foreach ($node['properties'] as $key => $_) { + $out[$key] = true; + } + } + foreach ($node as $value) { + collectSpecProperties($value, $out); + } + } +} + +$specProperties = []; +collectSpecProperties($spec, $specProperties); + +$webhookTopics = array_keys($spec['webhooks'] ?? []); +if (empty($webhookTopics)) { + fail('spec snapshot has no `webhooks` map -- refusing to run a check that could silently pass'); +} + +/** + * Tokenize a PHP file and extract: + * - declaredKeys: [[class, field, kind]] where kind is 'read' (fromArray) or 'write' (toArray) + * - webhookEnumValues: string[] of case values, only populated when scanning Webhooks.php + */ +function scanFile(string $path): array +{ + $source = file_get_contents($path); + $tokens = token_get_all($source); + + // Drop whitespace/comments so adjacency checks ('x' immediately followed by =>) are simple. + $tokens = array_values(array_filter($tokens, function ($t) { + if (! is_array($t)) { + return true; + } + + return ! in_array($t[0], [T_WHITESPACE, T_COMMENT, T_DOC_COMMENT], true); + })); + + $braceDepth = 0; + $classStack = []; // [[depth, name]] + $functionStack = []; // [[depth, name]] + $pendingClassName = null; + $pendingFunctionName = null; + $inEnumCaseList = false; + + $declaredKeys = []; + $webhookEnumValues = []; + + $count = count($tokens); + for ($i = 0; $i < $count; $i++) { + $t = $tokens[$i]; + $id = is_array($t) ? $t[0] : $t; + $text = is_array($t) ? $t[1] : $t; + + if (is_array($t) && in_array($id, [T_CLASS, T_ENUM, T_INTERFACE, T_TRAIT], true)) { + // Next T_STRING token is the declared name. + for ($j = $i + 1; $j < $count; $j++) { + $nt = $tokens[$j]; + if (is_array($nt) && $nt[0] === T_STRING) { + $pendingClassName = $nt[1]; + + break; + } + if (! is_array($nt) && $nt === '{') { + break; + } + } + } + + if (is_array($t) && $id === T_FUNCTION) { + for ($j = $i + 1; $j < $count; $j++) { + $nt = $tokens[$j]; + if (is_array($nt) && $nt[0] === T_STRING) { + $pendingFunctionName = $nt[1]; + + break; + } + if (! is_array($nt) && $nt === '{') { + break; + } + } + } + + $currentClass = end($classStack)[1] ?? null; + $currentFunction = end($functionStack)[1] ?? null; + + if (! is_array($t) && $text === '{') { + $braceDepth++; + if ($pendingClassName !== null) { + $classStack[] = [$braceDepth, $pendingClassName]; + $pendingClassName = null; + } elseif ($pendingFunctionName !== null) { + $functionStack[] = [$braceDepth, $pendingFunctionName]; + $pendingFunctionName = null; + } + + continue; + } + + if (! is_array($t) && $text === '}') { + if (! empty($functionStack) && end($functionStack)[0] === $braceDepth) { + array_pop($functionStack); + } elseif (! empty($classStack) && end($classStack)[0] === $braceDepth) { + array_pop($classStack); + } + $braceDepth--; + + continue; + } + + // WebhookEvents enum cases: `case NAME = 'value';` at the top of the enum body. + if ($currentClass === 'WebhookEvents' && is_array($t) && $id === T_CASE) { + for ($j = $i + 1; $j < $count && $tokens[$j] !== ';'; $j++) { + $nt = $tokens[$j]; + if (is_array($nt) && $nt[0] === T_CONSTANT_ENCAPSED_STRING) { + $webhookEnumValues[] = trim($nt[1], "'\""); + + break; + } + } + + continue; + } + + if ($currentFunction === 'fromArray' && $currentClass !== null) { + if (is_array($t) && $id === T_VARIABLE + && isset($tokens[$i + 1], $tokens[$i + 2], $tokens[$i + 3]) + && $tokens[$i + 1] === '[' + && is_array($tokens[$i + 2]) && $tokens[$i + 2][0] === T_CONSTANT_ENCAPSED_STRING + && $tokens[$i + 3] === ']' + ) { + $key = trim($tokens[$i + 2][1], "'\""); + $declaredKeys[] = [$currentClass, $key, 'read']; + } + } + + if ($currentFunction === 'toArray' && $currentClass !== null) { + if (is_array($t) && $id === T_CONSTANT_ENCAPSED_STRING + && isset($tokens[$i + 1]) + && is_array($tokens[$i + 1]) && $tokens[$i + 1][0] === T_DOUBLE_ARROW + ) { + $key = trim($text, "'\""); + $declaredKeys[] = [$currentClass, $key, 'write']; + } + } + } + + return [$declaredKeys, $webhookEnumValues]; +} + +function phpFilesUnder(string $dir): array +{ + $files = []; + $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS)); + foreach ($it as $file) { + if ($file->getExtension() === 'php') { + $files[] = $file->getPathname(); + } + } + sort($files); + + return $files; +} + +$scanDirs = [$root.'/src/Resources', $root.'/src/Types']; +$allDeclaredKeys = []; +$webhookEnumValues = []; + +foreach ($scanDirs as $dir) { + if (! is_dir($dir)) { + continue; + } + foreach (phpFilesUnder($dir) as $file) { + [$keys, $enumValues] = scanFile($file); + foreach ($keys as $k) { + $allDeclaredKeys[] = $k; + } + foreach ($enumValues as $v) { + $webhookEnumValues[] = $v; + } + } +} + +// ---- Direction A: every declared wire key must exist in the spec, or be allow-listed ---- +$hardFailures = []; +$seen = []; +foreach ($allDeclaredKeys as [$class, $field, $kind]) { + $dedupeKey = "{$class}.{$field}"; + if (isset($seen[$dedupeKey])) { + continue; + } + $seen[$dedupeKey] = true; + + if (isset($specProperties[$field])) { + continue; + } + + if (isset($allowlist[$dedupeKey])) { + continue; + } + + $hardFailures[] = "{$class}.{$field} ({$kind}) -- not found anywhere in the spec snapshot and not allow-listed"; +} + +// ---- Direction B (hard): every spec webhook topic must be modeled by WebhookEvents ---- +$webhookEnumValueSet = array_flip($webhookEnumValues); +$missingWebhookEvents = []; +foreach ($webhookTopics as $topic) { + if (! isset($webhookEnumValueSet[$topic])) { + $missingWebhookEvents[] = $topic; + } +} + +// ---- Direction B (soft): spec properties the SDK never reads or writes at all ---- +$declaredFieldSet = []; +foreach ($allDeclaredKeys as [, $field]) { + $declaredFieldSet[$field] = true; +} +$unmodeledSpecFields = array_values(array_diff(array_keys($specProperties), array_keys($declaredFieldSet))); +sort($unmodeledSpecFields); + +// ---- Report ---- +$ok = true; + +if (! empty($hardFailures)) { + $ok = false; + fwrite(STDERR, "\n[contract-check] Direction A FAILED -- SDK declares wire keys the spec snapshot does not have:\n"); + foreach ($hardFailures as $line) { + fwrite(STDERR, " - {$line}\n"); + } + fwrite(STDERR, "\nFix the SDK to match the spec, or add a reasoned, owned entry to .api-sync/contract-allowlist.json\nif this is a genuine pre-existing divergence unrelated to the change you're making.\n"); +} + +if (! empty($missingWebhookEvents)) { + $ok = false; + fwrite(STDERR, "\n[contract-check] Direction B FAILED -- webhook topics in the spec with no matching WebhookEvents case:\n"); + foreach ($missingWebhookEvents as $topic) { + fwrite(STDERR, " - {$topic}\n"); + } +} + +if (! empty($unmodeledSpecFields)) { + fwrite(STDOUT, "\n[contract-check] warning: ".count($unmodeledSpecFields)." spec properties are not read or written anywhere in the SDK (informational, not a failure).\n"); +} + +if ($ok) { + fwrite(STDOUT, "\n[contract-check] OK -- ".count($seen).' declared wire keys checked, '.count($webhookTopics)." webhook topics checked.\n"); + exit(0); +} + +exit(1); diff --git a/src/BlindPay.php b/src/BlindPay.php index f5d9f14..41b8c8c 100644 --- a/src/BlindPay.php +++ b/src/BlindPay.php @@ -6,7 +6,6 @@ use BlindPay\SDK\Internal\ApiClientInterface; use BlindPay\SDK\Internal\BlindPayException; -use BlindPay\SDK\Resources\ApiKeys\ApiKeys; use BlindPay\SDK\Resources\Available\Available; use BlindPay\SDK\Resources\BankAccounts\BankAccounts; use BlindPay\SDK\Resources\CustodialWallets\CustodialWallets; @@ -22,8 +21,6 @@ use BlindPay\SDK\Resources\Payins\Quotes as PayinQuotes; use BlindPay\SDK\Resources\Payouts\Payouts; use BlindPay\SDK\Resources\Quotes\Quotes; -use BlindPay\SDK\Resources\Receivers\Receivers; -use BlindPay\SDK\Resources\Receivers\ReceiversWrapper; use BlindPay\SDK\Resources\TermsOfService\TermsOfService; use BlindPay\SDK\Resources\Transfers\Transfers; use BlindPay\SDK\Resources\Upload\Upload; @@ -42,7 +39,7 @@ class BlindPay implements ApiClientInterface { private const BASE_URL = 'https://api.blindpay.com/v1/'; - private const VERSION = '2.5.0'; + private const VERSION = '3.0.0'; private Client $httpClient; @@ -66,12 +63,6 @@ class BlindPay implements ApiClientInterface public readonly CustomersWrapper $customers; - /** - * @deprecated 2.4.0 Use $customers instead. Will be removed in v3.0.0. - * See https://www.blindpay.com/changelog/2026-06-04-customers-rename - */ - public readonly ReceiversWrapper $receivers; - public readonly WalletsWrapper $wallets; public readonly Transfers $transfers; @@ -118,21 +109,18 @@ public function __construct( $this->initializeInstances(); $this->initializePayins(); $this->initializeCustomers(); - $this->initializeReceivers(); $this->initializeWallets(); } private function initializeInstances(): void { $instancesResource = new Instances($this->instanceId, $this); - $apiKeysResource = new ApiKeys($this->instanceId, $this); $webhooksResource = new Webhooks($this->instanceId, $this); $termsOfServiceResource = new TermsOfService($this->instanceId, $this); $this->instances = new InstancesWrapper( $instancesResource, - $apiKeysResource, $webhooksResource, $termsOfServiceResource ); @@ -154,14 +142,6 @@ private function initializeCustomers(): void $this->customers = new CustomersWrapper($customersResource, $bankAccountsResource); } - private function initializeReceivers(): void - { - $receiversResource = new Receivers($this->instanceId, $this); - $bankAccountsResource = new BankAccounts($this->instanceId, $this); - - $this->receivers = new ReceiversWrapper($receiversResource, $bankAccountsResource); - } - private function initializeWallets(): void { $blockchainResource = new BlockchainWallets($this->instanceId, $this); diff --git a/src/Resources/ApiKeys/ApiKeys.php b/src/Resources/ApiKeys/ApiKeys.php deleted file mode 100644 index b5f073c..0000000 --- a/src/Resources/ApiKeys/ApiKeys.php +++ /dev/null @@ -1,215 +0,0 @@ - $this->id, - 'name' => $this->name, - 'permission' => $this->permission->value, - 'token' => $this->token, - 'ip_whitelist' => $this->ipWhitelist, - 'unkey_id' => $this->unkeyId, - 'last_used_at' => $this->lastUsedAt?->format(DateTimeInterface::ATOM), - 'instance_id' => $this->instanceId, - 'created_at' => $this->createdAt->format(DateTimeInterface::ATOM), - 'updated_at' => $this->updatedAt->format(DateTimeInterface::ATOM), - ]; - } -} - -readonly class CreateApiKeyInput -{ - /* - * @param string[] $ipWhitelist - */ - public function __construct( - public string $name, - public Permission $permission = Permission::FULL_ACCESS, - public array $ipWhitelist = [] - ) { - if (empty($this->name)) { - throw BlindPayException::validation('API key name cannot be empty'); - } - - foreach ($this->ipWhitelist as $ip) { - if (! filter_var($ip, FILTER_VALIDATE_IP)) { - throw BlindPayException::validation("Invalid IP address: {$ip}"); - } - } - } - - public function toArray(): array - { - $data = [ - 'name' => $this->name, - 'permission' => $this->permission->value, - ]; - - if (! empty($this->ipWhitelist)) { - $data['ip_whitelist'] = $this->ipWhitelist; - } - - return $data; - } -} - -readonly class CreateApiKeyResponse -{ - public function __construct( - public string $id, - public string $token - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - token: $data['token'] - ); - } - - public function toArray(): array - { - return [ - 'id' => $this->id, - 'token' => $this->token, - ]; - } -} - -class ApiKeys -{ - public function __construct( - private readonly string $instanceId, - private readonly ApiClientInterface $client - ) {} - - /* - * List all API keys - * - * @return BlindPayApiResponse - */ - public function list(): BlindPayApiResponse - { - $response = $this->client->get("instances/{$this->instanceId}/api-keys"); - - if ($response->isSuccess() && is_array($response->data)) { - $apiKeys = array_map( - fn (array $item) => ApiKey::fromArray($item), - $response->data - ); - - return BlindPayApiResponse::success($apiKeys); - } - - return $response; - } - - /* - * Create a new API key - * - * @param CreateApiKeyInput $input - * @return BlindPayApiResponse - */ - public function create(CreateApiKeyInput $input): BlindPayApiResponse - { - $response = $this->client->post( - "instances/{$this->instanceId}/api-keys", - $input->toArray() - ); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - CreateApiKeyResponse::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Get an API key by ID - * - * @param string $id - * @return BlindPayApiResponse - */ - public function get(string $id): BlindPayApiResponse - { - if (empty($id)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('ID cannot be empty') - ); - } - - $response = $this->client->get("instances/{$this->instanceId}/api-keys/{$id}"); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - ApiKey::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Delete an API key - * - * @param string $id - * @return BlindPayApiResponse - */ - public function delete(string $id): BlindPayApiResponse - { - if (empty($id)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('ID cannot be empty') - ); - } - - return $this->client->delete("instances/{$this->instanceId}/api-keys/{$id}"); - } -} diff --git a/src/Resources/Customers/Customers.php b/src/Resources/Customers/Customers.php index 955cd4a..82472d5 100644 --- a/src/Resources/Customers/Customers.php +++ b/src/Resources/Customers/Customers.php @@ -155,7 +155,7 @@ public static function fromArray(array $data): self ownershipPercentage: isset($data['ownership_percentage']) ? (int) $data['ownership_percentage'] : null, title: $data['title'] ?? null, taxType: isset($data['tax_type']) ? OwnerTaxType::from($data['tax_type']) : null, - customerId: $data['customer_id'] ?? $data['receiver_id'] ?? null + customerId: $data['customer_id'] ?? null ); } diff --git a/src/Resources/Instances/Instances.php b/src/Resources/Instances/Instances.php index 199fcf2..7091f81 100644 --- a/src/Resources/Instances/Instances.php +++ b/src/Resources/Instances/Instances.php @@ -65,7 +65,7 @@ public function toArray(): array { public function __construct( public string $name, - public ?string $receiverInviteRedirectUrl = null, + public ?string $customerInviteRedirectUrl = null, public ?bool $emailNotifications = null, public ?bool $requirePasskey = null ) {} @@ -76,8 +76,8 @@ public function toArray(): array 'name' => $this->name, ]; - if ($this->receiverInviteRedirectUrl !== null) { - $data['receiver_invite_redirect_url'] = $this->receiverInviteRedirectUrl; + if ($this->customerInviteRedirectUrl !== null) { + $data['customer_invite_redirect_url'] = $this->customerInviteRedirectUrl; } if ($this->emailNotifications !== null) { diff --git a/src/Resources/Instances/InstancesWrapper.php b/src/Resources/Instances/InstancesWrapper.php index a0daa5a..67e7d34 100644 --- a/src/Resources/Instances/InstancesWrapper.php +++ b/src/Resources/Instances/InstancesWrapper.php @@ -4,7 +4,6 @@ namespace BlindPay\SDK\Resources\Instances; -use BlindPay\SDK\Resources\ApiKeys\ApiKeys; use BlindPay\SDK\Resources\TermsOfService\TermsOfService; use BlindPay\SDK\Resources\Webhooks\Webhooks; use BlindPay\SDK\Types\BlindPayApiResponse; @@ -13,7 +12,6 @@ { public function __construct( private Instances $base, - public ApiKeys $apiKeys, public Webhooks $webhookEndpoints, public TermsOfService $tos ) {} diff --git a/src/Resources/Payins/Payins.php b/src/Resources/Payins/Payins.php index a8b5878..cd56294 100644 --- a/src/Resources/Payins/Payins.php +++ b/src/Resources/Payins/Payins.php @@ -191,7 +191,7 @@ public function toArray(): array readonly class Payin { public function __construct( - public string $receiverId, + public string $customerId, public string $id, public TransactionStatus $status, public string $payinQuoteId, @@ -237,7 +237,7 @@ public function __construct( public static function fromArray(array $data): self { return new self( - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], id: $data['id'], status: TransactionStatus::from($data['status']), payinQuoteId: $data['payin_quote_id'], @@ -286,7 +286,6 @@ public static function fromArray(array $data): self { public function __construct( public ?TransactionStatus $status = null, - public ?string $receiverId = null, public ?string $customerId = null, ?int $limit = null, ?int $offset = null, @@ -304,10 +303,6 @@ public function toArray(): array $params['status'] = $this->status->value; } - if ($this->receiverId !== null) { - $params['receiver_id'] = $this->receiverId; - } - if ($this->customerId !== null) { $params['customer_id'] = $this->customerId; } @@ -371,7 +366,7 @@ public function toQueryString(): string public function __construct( public string $id, public TransactionStatus $status, - public string $receiverId, + public string $customerId, public float $receiverAmount, public BankDetails $BankDetails, public ?string $pixCode = null, @@ -388,7 +383,7 @@ public static function fromArray(array $data): self return new self( id: $data['id'], status: TransactionStatus::from($data['status']), - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], receiverAmount: (float) $data['receiver_amount'], BankDetails: BankDetails::fromArray($data['blindpay_bank_details']), pixCode: $data['pix_code'] ?? null, diff --git a/src/Resources/Payouts/Payouts.php b/src/Resources/Payouts/Payouts.php index e90cae9..75bb982 100644 --- a/src/Resources/Payouts/Payouts.php +++ b/src/Resources/Payouts/Payouts.php @@ -40,7 +40,7 @@ enum ArgentinaTransferType: string readonly class Payout { public function __construct( - public string $receiverId, + public string $customerId, public string $id, public TransactionStatus $status, public string $senderWalletAddress, @@ -67,7 +67,7 @@ public function __construct( public float $commercialQuotation, public float $blindpayQuotation, public float $totalFeeAmount, - public float $receiverLocalAmount, + public float $customerLocalAmount, public Currency $currency, public string $transactionDocumentFile, public TransactionDocumentType $transactionDocumentType, @@ -115,7 +115,7 @@ public function __construct( public static function fromArray(array $data): self { return new self( - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], id: $data['id'], status: TransactionStatus::from($data['status']), senderWalletAddress: $data['sender_wallet_address'], @@ -142,7 +142,7 @@ public static function fromArray(array $data): self commercialQuotation: (float) $data['commercial_quotation'], blindpayQuotation: (float) $data['blindpay_quotation'], totalFeeAmount: (float) $data['total_fee_amount'], - receiverLocalAmount: (float) $data['receiver_local_amount'], + customerLocalAmount: (float) $data['customer_local_amount'], currency: Currency::from($data['currency']), transactionDocumentFile: $data['transaction_document_file'], transactionDocumentType: TransactionDocumentType::from($data['transaction_document_type']), @@ -192,7 +192,6 @@ public static function fromArray(array $data): self readonly class ListPayoutsInput extends PaginationParams { public function __construct( - public ?string $receiverId = null, public ?string $customerId = null, ?int $limit = null, ?int $offset = null, @@ -206,10 +205,6 @@ public function toArray(): array { $params = parent::toArray(); - if ($this->receiverId !== null) { - $params['receiver_id'] = $this->receiverId; - } - if ($this->customerId !== null) { $params['customer_id'] = $this->customerId; } @@ -327,7 +322,7 @@ public function __construct( public string $id, public TransactionStatus $status, public string $senderWalletAddress, - public string $receiverId, + public string $customerId, public ?TrackingComplete $trackingComplete = null, public ?TrackingPayment $trackingPayment = null, public ?TrackingTransaction $trackingTransaction = null, @@ -341,7 +336,7 @@ public static function fromArray(array $data): self id: $data['id'], status: TransactionStatus::from($data['status']), senderWalletAddress: $data['sender_wallet_address'], - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], trackingComplete: isset($data['tracking_complete']) ? TrackingComplete::fromArray($data['tracking_complete']) : null, trackingPayment: isset($data['tracking_payment']) ? TrackingPayment::fromArray($data['tracking_payment']) : null, trackingTransaction: isset($data['tracking_transaction']) ? TrackingTransaction::fromArray($data['tracking_transaction']) : null, @@ -373,7 +368,7 @@ public function __construct( public string $id, public TransactionStatus $status, public string $senderWalletAddress, - public string $receiverId, + public string $customerId, public ?TrackingComplete $trackingComplete = null, public ?TrackingPayment $trackingPayment = null, public ?TrackingTransaction $trackingTransaction = null, @@ -387,7 +382,7 @@ public static function fromArray(array $data): self id: $data['id'], status: TransactionStatus::from($data['status']), senderWalletAddress: $data['sender_wallet_address'], - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], trackingComplete: isset($data['tracking_complete']) ? TrackingComplete::fromArray($data['tracking_complete']) : null, trackingPayment: isset($data['tracking_payment']) ? TrackingPayment::fromArray($data['tracking_payment']) : null, trackingTransaction: isset($data['tracking_transaction']) ? TrackingTransaction::fromArray($data['tracking_transaction']) : null, @@ -419,7 +414,7 @@ public function __construct( public string $id, public TransactionStatus $status, public string $senderWalletAddress, - public string $receiverId, + public string $customerId, public ?TrackingComplete $trackingComplete = null, public ?TrackingPayment $trackingPayment = null, public ?TrackingTransaction $trackingTransaction = null, @@ -433,7 +428,7 @@ public static function fromArray(array $data): self id: $data['id'], status: TransactionStatus::from($data['status']), senderWalletAddress: $data['sender_wallet_address'], - receiverId: $data['receiver_id'], + customerId: $data['customer_id'], trackingComplete: isset($data['tracking_complete']) ? TrackingComplete::fromArray($data['tracking_complete']) : null, trackingPayment: isset($data['tracking_payment']) ? TrackingPayment::fromArray($data['tracking_payment']) : null, trackingTransaction: isset($data['tracking_transaction']) ? TrackingTransaction::fromArray($data['tracking_transaction']) : null, diff --git a/src/Resources/Quotes/Quotes.php b/src/Resources/Quotes/Quotes.php index ac8a7d1..94032fb 100644 --- a/src/Resources/Quotes/Quotes.php +++ b/src/Resources/Quotes/Quotes.php @@ -121,7 +121,7 @@ public function __construct( public float $partnerFeeAmount, public float $flatFee, public QuoteContract $contract, - public float $receiverLocalAmount, + public float $customerLocalAmount, public string $description ) {} @@ -137,7 +137,7 @@ public static function fromArray(array $data): self partnerFeeAmount: (float) $data['partner_fee_amount'], flatFee: (float) $data['flat_fee'], contract: QuoteContract::fromArray($data['contract']), - receiverLocalAmount: (float) $data['receiver_local_amount'], + customerLocalAmount: (float) $data['customer_local_amount'], description: $data['description'] ); } @@ -154,7 +154,7 @@ public function toArray(): array 'partner_fee_amount' => $this->partnerFeeAmount, 'flat_fee' => $this->flatFee, 'contract' => $this->contract->toArray(), - 'receiver_local_amount' => $this->receiverLocalAmount, + 'customer_local_amount' => $this->customerLocalAmount, 'description' => $this->description, ]; } diff --git a/src/Resources/Receivers/Receivers.php b/src/Resources/Receivers/Receivers.php deleted file mode 100644 index 8939a42..0000000 --- a/src/Resources/Receivers/Receivers.php +++ /dev/null @@ -1,1594 +0,0 @@ - $this->id, - 'role' => $this->role->value, - 'first_name' => $this->firstName, - 'last_name' => $this->lastName, - 'date_of_birth' => $this->dateOfBirth, - 'tax_id' => $this->taxId, - 'address_line_1' => $this->addressLine1, - 'address_line_2' => $this->addressLine2, - 'city' => $this->city, - 'state_province_region' => $this->stateProvinceRegion, - 'country' => $this->country->value, - 'postal_code' => $this->postalCode, - 'id_doc_country' => $this->idDocCountry->value, - 'id_doc_type' => $this->idDocType->value, - 'id_doc_front_file' => $this->idDocFrontFile, - 'id_doc_back_file' => $this->idDocBackFile, - 'proof_of_address_doc_type' => $this->proofOfAddressDocType->value, - 'proof_of_address_doc_file' => $this->proofOfAddressDocFile, - ]; - - if ($this->ownershipPercentage !== null) { - $data['ownership_percentage'] = $this->ownershipPercentage; - } - - if ($this->title !== null) { - $data['title'] = $this->title; - } - - if ($this->taxType !== null) { - $data['tax_type'] = $this->taxType->value; - } - - return $data; - } -} - -readonly class KycWarning -{ - public function __construct( - public ?string $code, - public ?string $message, - public ?string $resolutionStatus, - public ?string $warningId - ) {} - - public static function fromArray(array $data): self - { - return new self( - code: $data['code'] ?? null, - message: $data['message'] ?? null, - resolutionStatus: $data['resolution_status'] ?? null, - warningId: $data['warning_id'] ?? null - ); - } -} - -readonly class FraudWarning -{ - public function __construct( - public ?string $id, - public ?string $name, - public ?string $operation, - public ?float $score - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'] ?? null, - name: $data['name'] ?? null, - operation: $data['operation'] ?? null, - score: isset($data['score']) ? (float) $data['score'] : null - ); - } -} - -readonly class AmlHits -{ - public function __construct( - public bool $hasSanctionMatch, - public bool $hasPepMatch, - public bool $hasWatchlistMatch, - public bool $hasCrimelistMatch, - public bool $hasAdversemediaMatch - ) {} - - public static function fromArray(array $data): self - { - return new self( - hasSanctionMatch: $data['has_sanction_match'] ?? false, - hasPepMatch: $data['has_pep_match'] ?? false, - hasWatchlistMatch: $data['has_watchlist_match'] ?? false, - hasCrimelistMatch: $data['has_crimelist_match'] ?? false, - hasAdversemediaMatch: $data['has_adversemedia_match'] ?? false - ); - } -} - -readonly class Limit -{ - public function __construct( - public float $perTransaction, - public float $daily, - public float $monthly - ) {} - - public static function fromArray(array $data): self - { - return new self( - perTransaction: (float) $data['per_transaction'], - daily: (float) $data['daily'], - monthly: (float) $data['monthly'] - ); - } -} - -abstract readonly class BaseReceiver -{ - /** - * @param KycWarning[]|null $kycWarnings - * @param FraudWarning[]|null $fraudWarnings - */ - public function __construct( - public string $id, - public AccountClass $type, - public KycType $kycType, - public string $kycStatus, - public ?array $kycWarnings, - public string $email, - public string $taxId, - public string $addressLine1, - public ?string $addressLine2, - public string $city, - public string $stateProvinceRegion, - public Country $country, - public string $postalCode, - public ?string $ipAddress, - public ?string $imageUrl, - public ?string $phoneNumber, - public ProofOfAddressDocType $proofOfAddressDocType, - public string $proofOfAddressDocFile, - public string $instanceId, - public ?string $tosId, - public DateTimeImmutable $createdAt, - public DateTimeImmutable $updatedAt, - public Limit $limit, - public ?array $fraudWarnings = null, - public ?bool $isFbo = null, - public ?AccountPurpose $accountPurpose = null, - public ?string $accountPurposeOther = null, - public ?AmlStatus $amlStatus = null, - public ?AmlHits $amlHits = null, - public ?bool $isTosAccepted = null - ) {} -} - -readonly class IndividualWithStandardKYC extends BaseReceiver -{ - public function __construct( - string $id, - string $kycStatus, - ?array $kycWarnings, - string $email, - string $taxId, - string $addressLine1, - ?string $addressLine2, - string $city, - string $stateProvinceRegion, - Country $country, - string $postalCode, - ?string $ipAddress, - ?string $imageUrl, - ?string $phoneNumber, - ProofOfAddressDocType $proofOfAddressDocType, - string $proofOfAddressDocFile, - string $instanceId, - ?string $tosId, - DateTimeImmutable $createdAt, - DateTimeImmutable $updatedAt, - Limit $limit, - public string $firstName, - public string $lastName, - public string $dateOfBirth, - public Country $idDocCountry, - public IdentificationDocument $idDocType, - public string $idDocFrontFile, - public string $idDocBackFile, - public ?string $aipriseValidationKey, - ?array $fraudWarnings = null, - ?bool $isFbo = null, - ?AccountPurpose $accountPurpose = null, - ?string $accountPurposeOther = null, - ?AmlStatus $amlStatus = null, - ?AmlHits $amlHits = null, - ?bool $isTosAccepted = null, - public ?string $externalId = null, - public ?string $selfieFile = null, - public ?string $occupation = null - ) { - parent::__construct( - $id, - AccountClass::INDIVIDUAL, - KycType::STANDARD, - $kycStatus, - $kycWarnings, - $email, - $taxId, - $addressLine1, - $addressLine2, - $city, - $stateProvinceRegion, - $country, - $postalCode, - $ipAddress, - $imageUrl, - $phoneNumber, - $proofOfAddressDocType, - $proofOfAddressDocFile, - $instanceId, - $tosId, - $createdAt, - $updatedAt, - $limit, - $fraudWarnings, - $isFbo, - $accountPurpose, - $accountPurposeOther, - $amlStatus, - $amlHits, - $isTosAccepted - ); - } - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - kycStatus: $data['kyc_status'], - kycWarnings: isset($data['kyc_warnings']) ? array_map( - fn ($w) => KycWarning::fromArray($w), - $data['kyc_warnings'] - ) : null, - email: $data['email'], - taxId: $data['tax_id'], - addressLine1: $data['address_line_1'], - addressLine2: $data['address_line_2'] ?? null, - city: $data['city'], - stateProvinceRegion: $data['state_province_region'], - country: Country::from($data['country']), - postalCode: $data['postal_code'], - ipAddress: $data['ip_address'] ?? null, - imageUrl: $data['image_url'] ?? null, - phoneNumber: $data['phone_number'] ?? null, - proofOfAddressDocType: ProofOfAddressDocType::from($data['proof_of_address_doc_type']), - proofOfAddressDocFile: $data['proof_of_address_doc_file'], - instanceId: $data['instance_id'], - tosId: $data['tos_id'] ?? null, - createdAt: new DateTimeImmutable($data['created_at']), - updatedAt: new DateTimeImmutable($data['updated_at']), - limit: Limit::fromArray($data['limit']), - firstName: $data['first_name'], - lastName: $data['last_name'], - dateOfBirth: $data['date_of_birth'], - idDocCountry: Country::from($data['id_doc_country']), - idDocType: IdentificationDocument::from($data['id_doc_type']), - idDocFrontFile: $data['id_doc_front_file'], - idDocBackFile: $data['id_doc_back_file'], - aipriseValidationKey: $data['aiprise_validation_key'] ?? null, - fraudWarnings: isset($data['fraud_warnings']) ? array_map( - fn ($w) => FraudWarning::fromArray($w), - $data['fraud_warnings'] - ) : null, - isFbo: $data['is_fbo'] ?? null, - accountPurpose: isset($data['account_purpose']) ? AccountPurpose::from($data['account_purpose']) : null, - accountPurposeOther: $data['account_purpose_other'] ?? null, - amlStatus: isset($data['aml_status']) ? AmlStatus::from($data['aml_status']) : null, - amlHits: isset($data['aml_hits']) ? AmlHits::fromArray($data['aml_hits']) : null, - isTosAccepted: $data['is_tos_accepted'] ?? null, - externalId: $data['external_id'] ?? null, - selfieFile: $data['selfie_file'] ?? null, - occupation: $data['occupation'] ?? null - ); - } -} - -readonly class IndividualWithEnhancedKYC extends BaseReceiver -{ - public function __construct( - string $id, - string $kycStatus, - ?array $kycWarnings, - string $email, - string $taxId, - string $addressLine1, - ?string $addressLine2, - string $city, - string $stateProvinceRegion, - Country $country, - string $postalCode, - ?string $ipAddress, - ?string $imageUrl, - ?string $phoneNumber, - ProofOfAddressDocType $proofOfAddressDocType, - string $proofOfAddressDocFile, - string $instanceId, - ?string $tosId, - DateTimeImmutable $createdAt, - DateTimeImmutable $updatedAt, - Limit $limit, - public string $firstName, - public string $lastName, - public string $dateOfBirth, - public Country $idDocCountry, - public IdentificationDocument $idDocType, - public string $idDocFrontFile, - public ?string $idDocBackFile, - public ?string $aipriseValidationKey, - public string $sourceOfFundsDocType, - public string $sourceOfFundsDocFile, - public string $individualHoldingDocFrontFile, - public PurposeOfTransactions $purposeOfTransactions, - public ?string $purposeOfTransactionsExplanation, - ?array $fraudWarnings = null, - ?bool $isFbo = null, - ?AccountPurpose $accountPurpose = null, - ?string $accountPurposeOther = null, - ?AmlStatus $amlStatus = null, - ?AmlHits $amlHits = null, - ?bool $isTosAccepted = null, - public ?string $externalId = null, - public ?string $selfieFile = null, - public ?string $occupation = null - ) { - parent::__construct( - $id, - AccountClass::INDIVIDUAL, - KycType::ENHANCED, - $kycStatus, - $kycWarnings, - $email, - $taxId, - $addressLine1, - $addressLine2, - $city, - $stateProvinceRegion, - $country, - $postalCode, - $ipAddress, - $imageUrl, - $phoneNumber, - $proofOfAddressDocType, - $proofOfAddressDocFile, - $instanceId, - $tosId, - $createdAt, - $updatedAt, - $limit, - $fraudWarnings, - $isFbo, - $accountPurpose, - $accountPurposeOther, - $amlStatus, - $amlHits, - $isTosAccepted - ); - } - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - kycStatus: $data['kyc_status'], - kycWarnings: isset($data['kyc_warnings']) ? array_map( - fn ($w) => KycWarning::fromArray($w), - $data['kyc_warnings'] - ) : null, - email: $data['email'], - taxId: $data['tax_id'], - addressLine1: $data['address_line_1'], - addressLine2: $data['address_line_2'] ?? null, - city: $data['city'], - stateProvinceRegion: $data['state_province_region'], - country: Country::from($data['country']), - postalCode: $data['postal_code'], - ipAddress: $data['ip_address'] ?? null, - imageUrl: $data['image_url'] ?? null, - phoneNumber: $data['phone_number'] ?? null, - proofOfAddressDocType: ProofOfAddressDocType::from($data['proof_of_address_doc_type']), - proofOfAddressDocFile: $data['proof_of_address_doc_file'], - instanceId: $data['instance_id'], - tosId: $data['tos_id'] ?? null, - createdAt: new DateTimeImmutable($data['created_at']), - updatedAt: new DateTimeImmutable($data['updated_at']), - limit: Limit::fromArray($data['limit']), - firstName: $data['first_name'], - lastName: $data['last_name'], - dateOfBirth: $data['date_of_birth'], - idDocCountry: Country::from($data['id_doc_country']), - idDocType: IdentificationDocument::from($data['id_doc_type']), - idDocFrontFile: $data['id_doc_front_file'], - idDocBackFile: $data['id_doc_back_file'] ?? null, - aipriseValidationKey: $data['aiprise_validation_key'] ?? null, - sourceOfFundsDocType: $data['source_of_funds_doc_type'], - sourceOfFundsDocFile: $data['source_of_funds_doc_file'], - individualHoldingDocFrontFile: $data['individual_holding_doc_front_file'], - purposeOfTransactions: PurposeOfTransactions::from($data['purpose_of_transactions']), - purposeOfTransactionsExplanation: $data['purpose_of_transactions_explanation'] ?? null, - fraudWarnings: isset($data['fraud_warnings']) ? array_map( - fn ($w) => FraudWarning::fromArray($w), - $data['fraud_warnings'] - ) : null, - isFbo: $data['is_fbo'] ?? null, - accountPurpose: isset($data['account_purpose']) ? AccountPurpose::from($data['account_purpose']) : null, - accountPurposeOther: $data['account_purpose_other'] ?? null, - amlStatus: isset($data['aml_status']) ? AmlStatus::from($data['aml_status']) : null, - amlHits: isset($data['aml_hits']) ? AmlHits::fromArray($data['aml_hits']) : null, - isTosAccepted: $data['is_tos_accepted'] ?? null, - externalId: $data['external_id'] ?? null, - selfieFile: $data['selfie_file'] ?? null, - occupation: $data['occupation'] ?? null - ); - } -} - -readonly class BusinessWithStandardKYB extends BaseReceiver -{ - /** - * @param Owner[] $owners - */ - public function __construct( - string $id, - string $kycStatus, - ?array $kycWarnings, - string $email, - string $taxId, - string $addressLine1, - ?string $addressLine2, - string $city, - string $stateProvinceRegion, - Country $country, - string $postalCode, - ?string $ipAddress, - ?string $imageUrl, - ?string $phoneNumber, - ProofOfAddressDocType $proofOfAddressDocType, - string $proofOfAddressDocFile, - string $instanceId, - ?string $tosId, - DateTimeImmutable $createdAt, - DateTimeImmutable $updatedAt, - Limit $limit, - public string $legalName, - public ?string $alternateName, - public string $formationDate, - public ?string $website, - public array $owners, - public string $incorporationDocFile, - public string $proofOfOwnershipDocFile, - public ?string $externalId, - public ?string $aipriseValidationKey, - ?array $fraudWarnings = null, - ?bool $isFbo = null, - ?AccountPurpose $accountPurpose = null, - ?string $accountPurposeOther = null, - ?AmlStatus $amlStatus = null, - ?AmlHits $amlHits = null, - ?bool $isTosAccepted = null, - public ?BusinessType $businessType = null, - public ?string $businessDescription = null, - public ?BusinessIndustry $businessIndustry = null, - public ?EstimatedAnnualRevenue $estimatedAnnualRevenue = null, - public ?SourceOfWealth $sourceOfWealth = null, - public ?bool $publiclyTraded = null - ) { - parent::__construct( - $id, - AccountClass::BUSINESS, - KycType::STANDARD, - $kycStatus, - $kycWarnings, - $email, - $taxId, - $addressLine1, - $addressLine2, - $city, - $stateProvinceRegion, - $country, - $postalCode, - $ipAddress, - $imageUrl, - $phoneNumber, - $proofOfAddressDocType, - $proofOfAddressDocFile, - $instanceId, - $tosId, - $createdAt, - $updatedAt, - $limit, - $fraudWarnings, - $isFbo, - $accountPurpose, - $accountPurposeOther, - $amlStatus, - $amlHits, - $isTosAccepted - ); - } - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - kycStatus: $data['kyc_status'], - kycWarnings: isset($data['kyc_warnings']) ? array_map( - fn ($w) => KycWarning::fromArray($w), - $data['kyc_warnings'] - ) : null, - email: $data['email'], - taxId: $data['tax_id'], - addressLine1: $data['address_line_1'], - addressLine2: $data['address_line_2'] ?? null, - city: $data['city'], - stateProvinceRegion: $data['state_province_region'], - country: Country::from($data['country']), - postalCode: $data['postal_code'], - ipAddress: $data['ip_address'] ?? null, - imageUrl: $data['image_url'] ?? null, - phoneNumber: $data['phone_number'] ?? null, - proofOfAddressDocType: ProofOfAddressDocType::from($data['proof_of_address_doc_type']), - proofOfAddressDocFile: $data['proof_of_address_doc_file'], - instanceId: $data['instance_id'], - tosId: $data['tos_id'] ?? null, - createdAt: new DateTimeImmutable($data['created_at']), - updatedAt: new DateTimeImmutable($data['updated_at']), - limit: Limit::fromArray($data['limit']), - legalName: $data['legal_name'], - alternateName: $data['alternate_name'] ?? null, - formationDate: $data['formation_date'], - website: $data['website'] ?? null, - owners: array_map(fn ($o) => Owner::fromArray($o), $data['owners']), - incorporationDocFile: $data['incorporation_doc_file'], - proofOfOwnershipDocFile: $data['proof_of_ownership_doc_file'], - externalId: $data['external_id'] ?? null, - aipriseValidationKey: $data['aiprise_validation_key'] ?? null, - fraudWarnings: isset($data['fraud_warnings']) ? array_map( - fn ($w) => FraudWarning::fromArray($w), - $data['fraud_warnings'] - ) : null, - isFbo: $data['is_fbo'] ?? null, - accountPurpose: isset($data['account_purpose']) ? AccountPurpose::from($data['account_purpose']) : null, - accountPurposeOther: $data['account_purpose_other'] ?? null, - amlStatus: isset($data['aml_status']) ? AmlStatus::from($data['aml_status']) : null, - amlHits: isset($data['aml_hits']) ? AmlHits::fromArray($data['aml_hits']) : null, - isTosAccepted: $data['is_tos_accepted'] ?? null, - businessType: isset($data['business_type']) ? BusinessType::from($data['business_type']) : null, - businessDescription: $data['business_description'] ?? null, - businessIndustry: isset($data['business_industry']) ? BusinessIndustry::from($data['business_industry']) : null, - estimatedAnnualRevenue: isset($data['estimated_annual_revenue']) ? EstimatedAnnualRevenue::from($data['estimated_annual_revenue']) : null, - sourceOfWealth: isset($data['source_of_wealth']) ? SourceOfWealth::from($data['source_of_wealth']) : null, - publiclyTraded: $data['publicly_traded'] ?? null - ); - } -} - -readonly class CreateIndividualWithStandardKYCInput -{ - public function __construct( - public string $addressLine1, - public string $city, - public Country $country, - public string $dateOfBirth, - public string $email, - public string $firstName, - public ?string $phoneNumber, - public Country $idDocCountry, - public string $idDocFrontFile, - public IdentificationDocument $idDocType, - public ?string $idDocBackFile, - public string $lastName, - public string $postalCode, - public string $proofOfAddressDocFile, - public ProofOfAddressDocType $proofOfAddressDocType, - public string $stateProvinceRegion, - public string $taxId, - public string $tosId, - public ?string $addressLine2 = null, - public ?string $externalId = null, - public ?AccountPurpose $accountPurpose = null, - public ?string $accountPurposeOther = null, - public ?string $selfieFile = null, - public ?string $occupation = null, - public ?string $ipAddress = null, - public ?string $imageUrl = null - ) {} - - public function toArray(): array - { - $data = [ - 'kyc_type' => 'standard', - 'type' => 'individual', - 'address_line_1' => $this->addressLine1, - 'city' => $this->city, - 'country' => $this->country->value, - 'date_of_birth' => $this->dateOfBirth, - 'email' => $this->email, - 'first_name' => $this->firstName, - 'phone_number' => $this->phoneNumber, - 'id_doc_country' => $this->idDocCountry->value, - 'id_doc_front_file' => $this->idDocFrontFile, - 'id_doc_type' => $this->idDocType->value, - 'id_doc_back_file' => $this->idDocBackFile, - 'last_name' => $this->lastName, - 'postal_code' => $this->postalCode, - 'proof_of_address_doc_file' => $this->proofOfAddressDocFile, - 'proof_of_address_doc_type' => $this->proofOfAddressDocType->value, - 'state_province_region' => $this->stateProvinceRegion, - 'tax_id' => $this->taxId, - 'tos_id' => $this->tosId, - ]; - - if ($this->addressLine2 !== null) { - $data['address_line_2'] = $this->addressLine2; - } - - if ($this->externalId !== null) { - $data['external_id'] = $this->externalId; - } - - if ($this->accountPurpose !== null) { - $data['account_purpose'] = $this->accountPurpose->value; - } - - if ($this->accountPurposeOther !== null) { - $data['account_purpose_other'] = $this->accountPurposeOther; - } - - if ($this->selfieFile !== null) { - $data['selfie_file'] = $this->selfieFile; - } - - if ($this->occupation !== null) { - $data['occupation'] = $this->occupation; - } - - if ($this->ipAddress !== null) { - $data['ip_address'] = $this->ipAddress; - } - - if ($this->imageUrl !== null) { - $data['image_url'] = $this->imageUrl; - } - - return $data; - } -} - -readonly class CreateIndividualWithEnhancedKYCInput -{ - public function __construct( - public string $addressLine1, - public string $city, - public Country $country, - public string $dateOfBirth, - public string $email, - public string $firstName, - public Country $idDocCountry, - public string $idDocFrontFile, - public IdentificationDocument $idDocType, - public ?string $idDocBackFile, - public string $individualHoldingDocFrontFile, - public string $lastName, - public string $postalCode, - public ?string $phoneNumber, - public string $proofOfAddressDocFile, - public ProofOfAddressDocType $proofOfAddressDocType, - public PurposeOfTransactions $purposeOfTransactions, - public string $sourceOfFundsDocFile, - public SourceOfFundsDocType $sourceOfFundsDocType, - public ?string $purposeOfTransactionsExplanation, - public string $stateProvinceRegion, - public string $taxId, - public string $tosId, - public ?string $addressLine2 = null, - public ?string $externalId = null, - public ?AccountPurpose $accountPurpose = null, - public ?string $accountPurposeOther = null, - public ?string $selfieFile = null, - public ?string $occupation = null, - public ?string $ipAddress = null, - public ?string $imageUrl = null - ) {} - - public function toArray(): array - { - $data = [ - 'kyc_type' => 'enhanced', - 'type' => 'individual', - 'address_line_1' => $this->addressLine1, - 'city' => $this->city, - 'country' => $this->country->value, - 'date_of_birth' => $this->dateOfBirth, - 'email' => $this->email, - 'first_name' => $this->firstName, - 'id_doc_country' => $this->idDocCountry->value, - 'id_doc_front_file' => $this->idDocFrontFile, - 'id_doc_type' => $this->idDocType->value, - 'id_doc_back_file' => $this->idDocBackFile, - 'individual_holding_doc_front_file' => $this->individualHoldingDocFrontFile, - 'last_name' => $this->lastName, - 'postal_code' => $this->postalCode, - 'phone_number' => $this->phoneNumber, - 'proof_of_address_doc_file' => $this->proofOfAddressDocFile, - 'proof_of_address_doc_type' => $this->proofOfAddressDocType->value, - 'purpose_of_transactions' => $this->purposeOfTransactions->value, - 'source_of_funds_doc_file' => $this->sourceOfFundsDocFile, - 'source_of_funds_doc_type' => $this->sourceOfFundsDocType->value, - 'purpose_of_transactions_explanation' => $this->purposeOfTransactionsExplanation, - 'state_province_region' => $this->stateProvinceRegion, - 'tax_id' => $this->taxId, - 'tos_id' => $this->tosId, - ]; - - if ($this->addressLine2 !== null) { - $data['address_line_2'] = $this->addressLine2; - } - - if ($this->externalId !== null) { - $data['external_id'] = $this->externalId; - } - - if ($this->accountPurpose !== null) { - $data['account_purpose'] = $this->accountPurpose->value; - } - - if ($this->accountPurposeOther !== null) { - $data['account_purpose_other'] = $this->accountPurposeOther; - } - - if ($this->selfieFile !== null) { - $data['selfie_file'] = $this->selfieFile; - } - - if ($this->occupation !== null) { - $data['occupation'] = $this->occupation; - } - - if ($this->ipAddress !== null) { - $data['ip_address'] = $this->ipAddress; - } - - if ($this->imageUrl !== null) { - $data['image_url'] = $this->imageUrl; - } - - return $data; - } -} - -readonly class CreateBusinessWithStandardKYBInput -{ - public function __construct( - public string $addressLine1, - public string $city, - public Country $country, - public string $email, - public string $formationDate, - public string $incorporationDocFile, - public string $legalName, - public array $owners, - public string $postalCode, - public string $proofOfAddressDocFile, - public ProofOfAddressDocType $proofOfAddressDocType, - public string $proofOfOwnershipDocFile, - public string $stateProvinceRegion, - public string $taxId, - public string $tosId, - public ?string $website, - public ?string $addressLine2 = null, - public ?string $alternateName = null, - public ?string $externalId = null, - public ?AccountPurpose $accountPurpose = null, - public ?string $accountPurposeOther = null, - public ?BusinessType $businessType = null, - public ?string $businessDescription = null, - public ?BusinessIndustry $businessIndustry = null, - public ?EstimatedAnnualRevenue $estimatedAnnualRevenue = null, - public ?SourceOfWealth $sourceOfWealth = null, - public ?bool $publiclyTraded = null, - public ?string $ipAddress = null, - public ?string $imageUrl = null, - public ?string $phoneNumber = null - ) {} - - public function toArray(): array - { - $data = [ - 'kyc_type' => 'standard', - 'type' => 'business', - 'address_line_1' => $this->addressLine1, - 'city' => $this->city, - 'country' => $this->country->value, - 'email' => $this->email, - 'formation_date' => $this->formationDate, - 'incorporation_doc_file' => $this->incorporationDocFile, - 'legal_name' => $this->legalName, - 'owners' => array_map(fn ($o) => $o->toArray(), $this->owners), - 'postal_code' => $this->postalCode, - 'proof_of_address_doc_file' => $this->proofOfAddressDocFile, - 'proof_of_address_doc_type' => $this->proofOfAddressDocType->value, - 'proof_of_ownership_doc_file' => $this->proofOfOwnershipDocFile, - 'state_province_region' => $this->stateProvinceRegion, - 'tax_id' => $this->taxId, - 'tos_id' => $this->tosId, - 'website' => $this->website, - ]; - - if ($this->addressLine2 !== null) { - $data['address_line_2'] = $this->addressLine2; - } - - if ($this->alternateName !== null) { - $data['alternate_name'] = $this->alternateName; - } - - if ($this->externalId !== null) { - $data['external_id'] = $this->externalId; - } - - if ($this->accountPurpose !== null) { - $data['account_purpose'] = $this->accountPurpose->value; - } - - if ($this->accountPurposeOther !== null) { - $data['account_purpose_other'] = $this->accountPurposeOther; - } - - if ($this->businessType !== null) { - $data['business_type'] = $this->businessType->value; - } - - if ($this->businessDescription !== null) { - $data['business_description'] = $this->businessDescription; - } - - if ($this->businessIndustry !== null) { - $data['business_industry'] = $this->businessIndustry->value; - } - - if ($this->estimatedAnnualRevenue !== null) { - $data['estimated_annual_revenue'] = $this->estimatedAnnualRevenue->value; - } - - if ($this->sourceOfWealth !== null) { - $data['source_of_wealth'] = $this->sourceOfWealth->value; - } - - if ($this->publiclyTraded !== null) { - $data['publicly_traded'] = $this->publiclyTraded; - } - - if ($this->ipAddress !== null) { - $data['ip_address'] = $this->ipAddress; - } - - if ($this->imageUrl !== null) { - $data['image_url'] = $this->imageUrl; - } - - if ($this->phoneNumber !== null) { - $data['phone_number'] = $this->phoneNumber; - } - - return $data; - } -} - -readonly class CreateReceiverResponse -{ - public function __construct( - public string $id - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'] - ); - } -} - -readonly class UpdateReceiverInput -{ - public function __construct( - public string $receiverId, - public ?string $email = null, - public ?string $taxId = null, - public ?string $addressLine1 = null, - public ?string $addressLine2 = null, - public ?string $city = null, - public ?string $stateProvinceRegion = null, - public ?Country $country = null, - public ?string $postalCode = null, - public ?string $ipAddress = null, - public ?string $imageUrl = null, - public ?string $phoneNumber = null, - public ?ProofOfAddressDocType $proofOfAddressDocType = null, - public ?string $proofOfAddressDocFile = null, - public ?string $firstName = null, - public ?string $lastName = null, - public ?string $dateOfBirth = null, - public ?Country $idDocCountry = null, - public ?IdentificationDocument $idDocType = null, - public ?string $idDocFrontFile = null, - public ?string $idDocBackFile = null, - public ?string $legalName = null, - public ?string $alternateName = null, - public ?string $formationDate = null, - public ?string $website = null, - public ?array $owners = null, - public ?string $incorporationDocFile = null, - public ?string $proofOfOwnershipDocFile = null, - public ?SourceOfFundsDocType $sourceOfFundsDocType = null, - public ?string $sourceOfFundsDocFile = null, - public ?string $individualHoldingDocFrontFile = null, - public ?PurposeOfTransactions $purposeOfTransactions = null, - public ?string $purposeOfTransactionsExplanation = null, - public ?string $externalId = null, - public ?string $tosId = null, - public ?AccountPurpose $accountPurpose = null, - public ?string $accountPurposeOther = null, - public ?BusinessType $businessType = null, - public ?string $businessDescription = null, - public ?BusinessIndustry $businessIndustry = null, - public ?EstimatedAnnualRevenue $estimatedAnnualRevenue = null, - public ?SourceOfWealth $sourceOfWealth = null, - public ?bool $publiclyTraded = null, - public ?string $selfieFile = null, - public ?string $occupation = null - ) {} - - public function toArray(): array - { - return array_filter([ - 'email' => $this->email, - 'tax_id' => $this->taxId, - 'address_line_1' => $this->addressLine1, - 'address_line_2' => $this->addressLine2, - 'city' => $this->city, - 'state_province_region' => $this->stateProvinceRegion, - 'country' => $this->country?->value, - 'postal_code' => $this->postalCode, - 'ip_address' => $this->ipAddress, - 'image_url' => $this->imageUrl, - 'phone_number' => $this->phoneNumber, - 'proof_of_address_doc_type' => $this->proofOfAddressDocType?->value, - 'proof_of_address_doc_file' => $this->proofOfAddressDocFile, - 'first_name' => $this->firstName, - 'last_name' => $this->lastName, - 'date_of_birth' => $this->dateOfBirth, - 'id_doc_country' => $this->idDocCountry?->value, - 'id_doc_type' => $this->idDocType?->value, - 'id_doc_front_file' => $this->idDocFrontFile, - 'id_doc_back_file' => $this->idDocBackFile, - 'legal_name' => $this->legalName, - 'alternate_name' => $this->alternateName, - 'formation_date' => $this->formationDate, - 'website' => $this->website, - 'owners' => $this->owners, - 'incorporation_doc_file' => $this->incorporationDocFile, - 'proof_of_ownership_doc_file' => $this->proofOfOwnershipDocFile, - 'source_of_funds_doc_type' => $this->sourceOfFundsDocType?->value, - 'source_of_funds_doc_file' => $this->sourceOfFundsDocFile, - 'individual_holding_doc_front_file' => $this->individualHoldingDocFrontFile, - 'purpose_of_transactions' => $this->purposeOfTransactions?->value, - 'purpose_of_transactions_explanation' => $this->purposeOfTransactionsExplanation, - 'external_id' => $this->externalId, - 'tos_id' => $this->tosId, - 'account_purpose' => $this->accountPurpose?->value, - 'account_purpose_other' => $this->accountPurposeOther, - 'business_type' => $this->businessType?->value, - 'business_description' => $this->businessDescription, - 'business_industry' => $this->businessIndustry?->value, - 'estimated_annual_revenue' => $this->estimatedAnnualRevenue?->value, - 'source_of_wealth' => $this->sourceOfWealth?->value, - 'publicly_traded' => $this->publiclyTraded, - 'selfie_file' => $this->selfieFile, - 'occupation' => $this->occupation, - ], fn ($value) => $value !== null); - } -} - -/* - * Get receiver limits response - */ -readonly class GetReceiverLimitsResponse -{ - public function __construct( - public array $limits - ) {} - - public static function fromArray(array $data): self - { - return new self( - limits: $data['limits'] - ); - } -} - -readonly class LimitIncreaseRequest -{ - public function __construct( - public string $id, - public string $receiverId, - public LimitIncreaseRequestStatus $status, - public float $daily, - public float $monthly, - public float $perTransaction, - public string $supportingDocumentFile, - public LimitIncreaseRequestSupportingDocumentType $supportingDocumentType, - public DateTimeImmutable $createdAt, - public DateTimeImmutable $updatedAt, - public ?int $approvedPerTransaction = null, - public ?int $approvedDaily = null, - public ?int $approvedMonthly = null - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - receiverId: $data['receiver_id'], - status: LimitIncreaseRequestStatus::from($data['status']), - daily: (float) $data['daily'], - monthly: (float) $data['monthly'], - perTransaction: (float) $data['per_transaction'], - supportingDocumentFile: $data['supporting_document_file'], - supportingDocumentType: LimitIncreaseRequestSupportingDocumentType::from($data['supporting_document_type']), - createdAt: new DateTimeImmutable($data['created_at']), - updatedAt: new DateTimeImmutable($data['updated_at']), - approvedPerTransaction: isset($data['approved_per_transaction']) ? (int) $data['approved_per_transaction'] : null, - approvedDaily: isset($data['approved_daily']) ? (int) $data['approved_daily'] : null, - approvedMonthly: isset($data['approved_monthly']) ? (int) $data['approved_monthly'] : null - ); - } -} - -readonly class RequestLimitIncreaseInput -{ - public function __construct( - public string $receiverId, - public float $daily, - public float $monthly, - public float $perTransaction, - public string $supportingDocumentFile, - public LimitIncreaseRequestSupportingDocumentType $supportingDocumentType - ) {} - - public function toArray(): array - { - return [ - 'daily' => $this->daily, - 'monthly' => $this->monthly, - 'per_transaction' => $this->perTransaction, - 'supporting_document_file' => $this->supportingDocumentFile, - 'supporting_document_type' => $this->supportingDocumentType->value, - ]; - } -} - -readonly class RequestLimitIncreaseResponse -{ - public function __construct( - public string $id - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'] - ); - } -} - -readonly class ListReceiversInput extends PaginationParams -{ - public function __construct( - public ?string $fullName = null, - public ?string $receiverName = null, - public ?string $status = null, - public ?string $receiverId = null, - public ?string $bankAccountId = null, - public ?string $country = null, - ?int $limit = null, - ?int $offset = null, - ?string $startingAfter = null, - ?string $endingBefore = null - ) { - parent::__construct($limit, $offset, $startingAfter, $endingBefore); - } - - public function toArray(): array - { - $params = parent::toArray(); - - if ($this->fullName !== null) { - $params['full_name'] = $this->fullName; - } - - if ($this->receiverName !== null) { - $params['receiver_name'] = $this->receiverName; - } - - if ($this->status !== null) { - $params['status'] = $this->status; - } - - if ($this->receiverId !== null) { - $params['receiver_id'] = $this->receiverId; - } - - if ($this->bankAccountId !== null) { - $params['bank_account_id'] = $this->bankAccountId; - } - - if ($this->country !== null) { - $params['country'] = $this->country; - } - - return $params; - } -} - -readonly class ListReceiversResponse -{ - public function __construct( - public array $data, - public PaginationMetadata $pagination - ) {} - - public static function fromArray(array $data): self - { - return new self( - data: $data['data'], - pagination: PaginationMetadata::fromArray($data['pagination']) - ); - } -} - -class Receivers -{ - public function __construct( - private readonly string $instanceId, - private readonly ApiClientInterface $client - ) {} - - /** - * Maps API data to the appropriate receiver class - * - * @throws \InvalidArgumentException - */ - private function mapReceiver(array $data): IndividualWithStandardKYC|IndividualWithEnhancedKYC|BusinessWithStandardKYB - { - $type = $data['type'] ?? null; - $kycType = $data['kyc_type'] ?? null; - - return match (true) { - $type === 'individual' && $kycType === 'standard' => IndividualWithStandardKYC::fromArray($data), - $type === 'individual' && $kycType === 'enhanced' => IndividualWithEnhancedKYC::fromArray($data), - $type === 'business' && $kycType === 'standard' => BusinessWithStandardKYB::fromArray($data), - default => throw new \InvalidArgumentException("Unknown receiver type: {$type}/{$kycType}") - }; - } - - /* - * List all receivers - * - * @return BlindPayApiResponse> - */ - public function list(?ListReceiversInput $params = null): BlindPayApiResponse - { - $queryString = $params?->toQueryString() ?? ''; - $response = $this->client->get("instances/{$this->instanceId}/receivers{$queryString}"); - - if ($response->isSuccess() && is_array($response->data)) { - try { - if (isset($response->data['data']) && isset($response->data['pagination'])) { - $receivers = array_map( - fn (array $item) => $this->mapReceiver($item), - $response->data['data'] - ); - - return BlindPayApiResponse::success( - new ListReceiversResponse( - data: $receivers, - pagination: PaginationMetadata::fromArray($response->data['pagination']) - ) - ); - } - - $receivers = array_map( - fn (array $item) => $this->mapReceiver($item), - $response->data - ); - - return BlindPayApiResponse::success($receivers); - } catch (\InvalidArgumentException $e) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse($e->getMessage()) - ); - } - } - - return $response; - } - - /* - * Create individual with standard KYC - * - * @param CreateIndividualWithStandardKYCInput $data - * @return BlindPayApiResponse - */ - public function createIndividualWithStandardKYC(CreateIndividualWithStandardKYCInput $data): BlindPayApiResponse - { - $response = $this->client->post( - "instances/{$this->instanceId}/receivers", - $data->toArray() - ); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - CreateReceiverResponse::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Create individual with enhanced KYC - * - * @param CreateIndividualWithEnhancedKYCInput $data - * @return BlindPayApiResponse - */ - public function createIndividualWithEnhancedKYC(CreateIndividualWithEnhancedKYCInput $data): BlindPayApiResponse - { - $response = $this->client->post( - "instances/{$this->instanceId}/receivers", - $data->toArray() - ); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - CreateReceiverResponse::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Create business with standard KYB - * - * @param CreateBusinessWithStandardKYBInput $data - * @return BlindPayApiResponse - */ - public function createBusinessWithStandardKYB(CreateBusinessWithStandardKYBInput $data): BlindPayApiResponse - { - $response = $this->client->post( - "instances/{$this->instanceId}/receivers", - $data->toArray() - ); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - CreateReceiverResponse::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Get a receiver by ID - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function get(string $receiverId): BlindPayApiResponse - { - if (empty($receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - $response = $this->client->get("instances/{$this->instanceId}/receivers/{$receiverId}"); - - if ($response->isSuccess() && is_array($response->data)) { - try { - return BlindPayApiResponse::success( - $this->mapReceiver($response->data) - ); - } catch (\InvalidArgumentException $e) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse($e->getMessage()) - ); - } - } - - return $response; - } - - /* - * Update a receiver - * - * @param UpdateReceiverInput $input - * @return BlindPayApiResponse - */ - public function update(UpdateReceiverInput $input): BlindPayApiResponse - { - if (empty($input->receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - return $this->client->put( - "instances/{$this->instanceId}/receivers/{$input->receiverId}", - $input->toArray() - ); - } - - /* - * Delete a receiver - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function delete(string $receiverId): BlindPayApiResponse - { - if (empty($receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - return $this->client->delete("instances/{$this->instanceId}/receivers/{$receiverId}"); - } - - /* - * Get receiver limits - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function getLimits(string $receiverId): BlindPayApiResponse - { - if (empty($receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - $response = $this->client->get("instances/{$this->instanceId}/limits/receivers/{$receiverId}"); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - GetReceiverLimitsResponse::fromArray($response->data) - ); - } - - return $response; - } - - /* - * Get limit increase requests - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function getLimitIncreaseRequests(string $receiverId): BlindPayApiResponse - { - if (empty($receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - $response = $this->client->get("instances/{$this->instanceId}/receivers/{$receiverId}/limit-increase"); - - if ($response->isSuccess() && is_array($response->data)) { - $requests = array_map( - fn (array $item) => LimitIncreaseRequest::fromArray($item), - $response->data - ); - - return BlindPayApiResponse::success($requests); - } - - return $response; - } - - /* - * Request limit increase - * - * @param RequestLimitIncreaseInput $input - * @return BlindPayApiResponse - */ - public function requestLimitIncrease(RequestLimitIncreaseInput $input): BlindPayApiResponse - { - if (empty($input->receiverId)) { - return BlindPayApiResponse::error( - new \BlindPay\SDK\Types\ErrorResponse('Receiver ID cannot be empty') - ); - } - - $response = $this->client->post( - "instances/{$this->instanceId}/receivers/{$input->receiverId}/limit-increase", - $input->toArray() - ); - - if ($response->isSuccess() && is_array($response->data)) { - return BlindPayApiResponse::success( - RequestLimitIncreaseResponse::fromArray($response->data) - ); - } - - return $response; - } -} diff --git a/src/Resources/Receivers/ReceiversWrapper.php b/src/Resources/Receivers/ReceiversWrapper.php deleted file mode 100644 index 4013a60..0000000 --- a/src/Resources/Receivers/ReceiversWrapper.php +++ /dev/null @@ -1,125 +0,0 @@ -> - */ - public function list(?ListReceiversInput $params = null): BlindPayApiResponse - { - return $this->base->list($params); - } - - /* - * Create individual with standard KYC - * - * @param CreateIndividualWithStandardKYCInput $data - * @return BlindPayApiResponse - */ - public function createIndividualWithStandardKYC(CreateIndividualWithStandardKYCInput $data): BlindPayApiResponse - { - return $this->base->createIndividualWithStandardKYC($data); - } - - /* - * Create individual with enhanced KYC - * - * @param CreateIndividualWithEnhancedKYCInput $data - * @return BlindPayApiResponse - */ - public function createIndividualWithEnhancedKYC(CreateIndividualWithEnhancedKYCInput $data): BlindPayApiResponse - { - return $this->base->createIndividualWithEnhancedKYC($data); - } - - /* - * Create business with standard KYB - * - * @param CreateBusinessWithStandardKYBInput $data - * @return BlindPayApiResponse - */ - public function createBusinessWithStandardKYB(CreateBusinessWithStandardKYBInput $data): BlindPayApiResponse - { - return $this->base->createBusinessWithStandardKYB($data); - } - - /* - * Get a receiver by ID - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function get(string $receiverId): BlindPayApiResponse - { - return $this->base->get($receiverId); - } - - /* - * Update a receiver - * - * @param UpdateReceiverInput $input - * @return BlindPayApiResponse - */ - public function update(UpdateReceiverInput $input): BlindPayApiResponse - { - return $this->base->update($input); - } - - /* - * Delete a receiver - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function delete(string $receiverId): BlindPayApiResponse - { - return $this->base->delete($receiverId); - } - - /* - * Get receiver limits - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function getLimits(string $receiverId): BlindPayApiResponse - { - return $this->base->getLimits($receiverId); - } - - /* - * Get limit increase requests - * - * @param string $receiverId - * @return BlindPayApiResponse - */ - public function getLimitIncreaseRequests(string $receiverId): BlindPayApiResponse - { - return $this->base->getLimitIncreaseRequests($receiverId); - } - - /* - * Request limit increase - * - * @param RequestLimitIncreaseInput $input - * @return BlindPayApiResponse - */ - public function requestLimitIncrease(RequestLimitIncreaseInput $input): BlindPayApiResponse - { - return $this->base->requestLimitIncrease($input); - } -} diff --git a/src/Resources/TermsOfService/TermsOfService.php b/src/Resources/TermsOfService/TermsOfService.php index 62b8c16..5afe407 100644 --- a/src/Resources/TermsOfService/TermsOfService.php +++ b/src/Resources/TermsOfService/TermsOfService.php @@ -11,7 +11,7 @@ { public function __construct( public string $idempotencyKey, - public ?string $receiverId = null, + public ?string $customerId = null, public ?string $redirectUrl = null ) {} @@ -21,8 +21,8 @@ public function toArray(): array 'idempotency_key' => $this->idempotencyKey, ]; - if ($this->receiverId !== null) { - $data['receiver_id'] = $this->receiverId; + if ($this->customerId !== null) { + $data['customer_id'] = $this->customerId; } if ($this->redirectUrl !== null) { diff --git a/src/Resources/Transfers/Transfers.php b/src/Resources/Transfers/Transfers.php index 0c34e93..70bd2d4 100644 --- a/src/Resources/Transfers/Transfers.php +++ b/src/Resources/Transfers/Transfers.php @@ -106,9 +106,9 @@ public function toArray(): array public function __construct( public string $walletId, public StablecoinToken $senderToken, - public string $receiverWalletAddress, - public StablecoinToken $receiverToken, - public Network $receiverNetwork, + public string $customerWalletAddress, + public StablecoinToken $customerToken, + public Network $customerNetwork, public int $requestAmount, public CurrencyType $amountReference, public ?bool $coverFees = null, @@ -120,9 +120,9 @@ public function toArray(): array $data = [ 'wallet_id' => $this->walletId, 'sender_token' => $this->senderToken->value, - 'receiver_wallet_address' => $this->receiverWalletAddress, - 'receiver_token' => $this->receiverToken->value, - 'receiver_network' => $this->receiverNetwork->value, + 'customer_wallet_address' => $this->customerWalletAddress, + 'customer_token' => $this->customerToken->value, + 'customer_network' => $this->customerNetwork->value, 'request_amount' => $this->requestAmount, 'amount_reference' => $this->amountReference->value, ]; @@ -192,10 +192,10 @@ public function __construct( public StablecoinToken $senderToken, public float $senderAmount, public float $receiverAmount, - public StablecoinToken $receiverToken, - public Network $receiverNetwork, - public string $receiverWalletAddress, - public string $receiverId, + public StablecoinToken $customerToken, + public Network $customerNetwork, + public string $customerWalletAddress, + public string $customerId, public string $address, public Network $network, public TransferTrackingTransactionMonitoring $trackingTransactionMonitoring, @@ -224,10 +224,10 @@ public static function fromArray(array $data): self senderToken: StablecoinToken::from($data['sender_token']), senderAmount: (float) $data['sender_amount'], receiverAmount: (float) $data['receiver_amount'], - receiverToken: StablecoinToken::from($data['receiver_token']), - receiverNetwork: Network::from($data['receiver_network']), - receiverWalletAddress: $data['receiver_wallet_address'], - receiverId: $data['receiver_id'], + customerToken: StablecoinToken::from($data['customer_token']), + customerNetwork: Network::from($data['customer_network']), + customerWalletAddress: $data['customer_wallet_address'], + customerId: $data['customer_id'], address: $data['address'], network: Network::from($data['network']), trackingTransactionMonitoring: TransferTrackingTransactionMonitoring::fromArray($data['tracking_transaction_monitoring']), diff --git a/src/Resources/Webhooks/Webhooks.php b/src/Resources/Webhooks/Webhooks.php index 9d9a1a2..54973cf 100644 --- a/src/Resources/Webhooks/Webhooks.php +++ b/src/Resources/Webhooks/Webhooks.php @@ -10,23 +10,6 @@ enum WebhookEvents: string { - /** - * @deprecated 2.5.0 Use CUSTOMER_NEW instead. Will be removed in v3.0.0. - * See https://www.blindpay.com/changelog/2026-06-04-customers-rename - */ - case RECEIVER_NEW = 'receiver.new'; - - /** - * @deprecated 2.5.0 Use CUSTOMER_UPDATE instead. Will be removed in v3.0.0. - * See https://www.blindpay.com/changelog/2026-06-04-customers-rename - */ - case RECEIVER_UPDATE = 'receiver.update'; - - /** - * @deprecated 2.5.0 Use CUSTOMER_DELETE instead. Will be removed in v3.0.0. - * See https://www.blindpay.com/changelog/2026-06-04-customers-rename - */ - case RECEIVER_DELETE = 'receiver.delete'; case CUSTOMER_NEW = 'customer.new'; case CUSTOMER_UPDATE = 'customer.update'; case CUSTOMER_DELETE = 'customer.delete'; @@ -40,7 +23,16 @@ enum WebhookEvents: string case PAYIN_UPDATE = 'payin.update'; case PAYIN_COMPLETE = 'payin.complete'; case PAYIN_PARTNER_FEE = 'payin.partnerFee'; - case TOS_ACCEPTED = 'tos.accepted'; + case TOS_ACCEPTED = 'tos.accept'; + case LIMIT_INCREASE_NEW = 'limitIncrease.new'; + case LIMIT_INCREASE_UPDATE = 'limitIncrease.update'; + case TRANSFER_NEW = 'transfer.new'; + case TRANSFER_COMPLETE = 'transfer.complete'; + case TRANSFER_UPDATE = 'transfer.update'; + case VIRTUAL_ACCOUNT_NEW = 'virtualAccount.new'; + case VIRTUAL_ACCOUNT_COMPLETE = 'virtualAccount.complete'; + case WALLET_INBOUND = 'wallet.inbound'; + case WALLET_NEW = 'wallet.new'; } readonly class WebhookEndpoint @@ -155,32 +147,6 @@ public static function fromArray(array $data): self } } -readonly class ReceiverDeleteWebhookOut -{ - public function __construct( - public string $id, - public string $event, - public string $receiverId, - public string $instanceId, - public DateTimeImmutable $timestamp, - public string $type, - public array $data - ) {} - - public static function fromArray(array $data): self - { - return new self( - id: $data['id'], - event: $data['event'], - receiverId: $data['receiver_id'], - instanceId: $data['instance_id'], - timestamp: new DateTimeImmutable($data['timestamp']), - type: $data['type'], - data: $data['data'] - ); - } -} - class Webhooks { public function __construct( diff --git a/src/Types/ReceiverStatus.php b/src/Types/ReceiverStatus.php deleted file mode 100644 index c159d25..0000000 --- a/src/Types/ReceiverStatus.php +++ /dev/null @@ -1,16 +0,0 @@ -mockHandler = new MockHandler; - $handlerStack = HandlerStack::create($this->mockHandler); - $httpClient = new Client(['handler' => $handlerStack]); - - $this->blindpay = new BlindPay( - apiKey: 'test-key', - instanceId: 'in_000000000000' - ); - - $this->injectHttpClient($httpClient); - } - - private function injectHttpClient(Client $client): void - { - $reflection = new ReflectionClass($this->blindpay); - $property = $reflection->getProperty('httpClient'); - $property->setAccessible(true); - $property->setValue($this->blindpay, $client); - } - - private function mockResponse(array $body, int $status = 200): void - { - $this->mockHandler->append( - new Response( - $status, - ['Content-Type' => 'application/json'], - json_encode($body) - ) - ); - } - - #[Test] - public function it_creates_an_api_key(): void - { - $this->mockResponse([ - 'id' => 'ap_000000000000', - 'token' => 'token', - ]); - - $input = new CreateApiKeyInput( - name: 'test', - permission: Permission::FULL_ACCESS - ); - - $response = $this->blindpay->instances->apiKeys->create($input); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('ap_000000000000', $response->data->id); - $this->assertEquals('token', $response->data->token); - } - - #[Test] - public function it_gets_an_api_key(): void - { - $this->mockResponse([ - 'id' => 'ap_000000000000', - 'token' => 'token', - 'name' => 'test', - 'permission' => 'full_access', - 'ip_whitelist' => ['127.0.0.1'], - 'unkey_id' => 'key_123456789', - 'last_used_at' => '2024-01-01T00:00:00.000Z', - 'instance_id' => 'in_000000000000', - 'created_at' => '2021-01-01', - 'updated_at' => '2021-01-01', - ]); - - $response = $this->blindpay->instances->apiKeys->get('ap_000000000000'); - - $this->assertTrue($response->isSuccess()); - $this->assertEquals('ap_000000000000', $response->data->id); - $this->assertEquals('test', $response->data->name); - $this->assertEquals(Permission::FULL_ACCESS, $response->data->permission); - $this->assertCount(1, $response->data->ipWhitelist); - $this->assertEquals('127.0.0.1', $response->data->ipWhitelist[0]); - } - - #[Test] - public function it_lists_api_keys(): void - { - $this->mockResponse([ - [ - 'id' => 'ap_000000000000', - 'token' => 'token', - 'name' => 'test', - 'permission' => 'full_access', - 'ip_whitelist' => ['127.0.0.1'], - 'unkey_id' => 'key_123456789', - 'last_used_at' => '2024-01-01T00:00:00.000Z', - 'instance_id' => 'in_000000000000', - 'created_at' => '2021-01-01', - 'updated_at' => '2021-01-01', - ], - ]); - - $response = $this->blindpay->instances->apiKeys->list(); - - $this->assertTrue($response->isSuccess()); - $this->assertIsArray($response->data); - $this->assertCount(1, $response->data); - $this->assertEquals('ap_000000000000', $response->data[0]->id); - } - - #[Test] - public function it_deletes_an_api_key(): void - { - $this->mockResponse(['data' => null]); - - $response = $this->blindpay->instances->apiKeys->delete('ap_000000000000'); - - $this->assertTrue($response->isSuccess()); - $this->assertIsArray($response->data); - $this->assertArrayHasKey('data', $response->data); - $this->assertNull($response->data['data']); - } -} diff --git a/tests/Resources/BankAccounts/BankAccountsTest.php b/tests/Resources/BankAccounts/BankAccountsTest.php index c17ac90..dd1627f 100644 --- a/tests/Resources/BankAccounts/BankAccountsTest.php +++ b/tests/Resources/BankAccounts/BankAccountsTest.php @@ -88,7 +88,7 @@ public function it_creates_a_pix_bank_account(): void pixKey: '14947677768' ); - $response = $this->blindpay->receivers->bankAccounts->createPix($input); + $response = $this->blindpay->customers->bankAccounts->createPix($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -121,7 +121,7 @@ public function it_creates_an_argentina_transfers_bank_account(): void transfersType: ArgentinaTransfers::CVU ); - $response = $this->blindpay->receivers->bankAccounts->createArgentinaTransfers($input); + $response = $this->blindpay->customers->bankAccounts->createArgentinaTransfers($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -158,7 +158,7 @@ public function it_creates_a_spei_bank_account(): void speiProtocol: SpeiProtocol::SPEI ); - $response = $this->blindpay->receivers->bankAccounts->createSpei($input); + $response = $this->blindpay->customers->bankAccounts->createSpei($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -203,7 +203,7 @@ public function it_creates_a_colombia_ach_bank_account(): void achCopBankAccount: '12345678' ); - $response = $this->blindpay->receivers->bankAccounts->createColombiaAch($input); + $response = $this->blindpay->customers->bankAccounts->createColombiaAch($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -266,7 +266,7 @@ public function it_creates_an_ach_bank_account(): void postalCode: '10001' ); - $response = $this->blindpay->receivers->bankAccounts->createAch($input); + $response = $this->blindpay->customers->bankAccounts->createAch($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -323,7 +323,7 @@ public function it_creates_a_wire_bank_account(): void recipientRelationship: RecipientRelationship::FIRST_PARTY ); - $response = $this->blindpay->receivers->bankAccounts->createWire($input); + $response = $this->blindpay->customers->bankAccounts->createWire($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -407,7 +407,7 @@ public function it_creates_an_international_swift_bank_account(): void recipientRelationship: RecipientRelationship::FIRST_PARTY ); - $response = $this->blindpay->receivers->bankAccounts->createInternationalSwift($input); + $response = $this->blindpay->customers->bankAccounts->createInternationalSwift($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -474,7 +474,7 @@ public function it_creates_an_rtp_bank_account(): void recipientRelationship: RecipientRelationship::FIRST_PARTY ); - $response = $this->blindpay->receivers->bankAccounts->createRtp($input); + $response = $this->blindpay->customers->bankAccounts->createRtp($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -517,7 +517,7 @@ public function it_gets_a_bank_account(): void id: 'ba_000000000000' ); - $response = $this->blindpay->receivers->bankAccounts->get($input); + $response = $this->blindpay->customers->bankAccounts->get($input); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -600,7 +600,7 @@ public function it_lists_bank_accounts(): void $this->mockResponse($mockedBankAccounts); - $response = $this->blindpay->receivers->bankAccounts->list('re_000000000000'); + $response = $this->blindpay->customers->bankAccounts->list('re_000000000000'); $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); @@ -627,7 +627,7 @@ public function it_deletes_a_bank_account(): void id: 'ba_000000000000' ); - $response = $this->blindpay->receivers->bankAccounts->delete($input); + $response = $this->blindpay->customers->bankAccounts->delete($input); $this->assertTrue($response->isSuccess()); $this->assertIsArray($response->data); diff --git a/tests/Resources/Payins/PayinsTest.php b/tests/Resources/Payins/PayinsTest.php index db5e6a1..3dfdd3a 100644 --- a/tests/Resources/Payins/PayinsTest.php +++ b/tests/Resources/Payins/PayinsTest.php @@ -59,7 +59,7 @@ private function mockResponse(array $body, int $status = 200): void private function getPayinMockData(): array { return [ - 'receiver_id' => 're_000000000000', + 'customer_id' => 're_000000000000', 'id' => 're_000000000000', 'pix_code' => '00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/bcf07f6c4110454e9fd6f120bab13e835204000053039865802BR5915Blind Pay, Inc.6010Vila Velha62070503***6304BCAB', 'memo_code' => '8K45GHBNT6BQ6462', @@ -159,7 +159,7 @@ public function it_lists_payins(): void $this->assertIsArray($response->data->data); $this->assertCount(1, $response->data->data); $this->assertEquals('re_000000000000', $response->data->data[0]->id); - $this->assertEquals('re_000000000000', $response->data->data[0]->receiverId); + $this->assertEquals('re_000000000000', $response->data->data[0]->customerId); } #[Test] @@ -174,7 +174,7 @@ public function it_gets_a_payin(): void $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); $this->assertEquals('re_000000000000', $response->data->id); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertEquals('pq_000000000000', $response->data->payinQuoteId); $this->assertEquals(TransactionStatus::PROCESSING, $response->data->status); $this->assertEquals('processing', $response->data->trackingTransaction->step); @@ -305,7 +305,7 @@ public function it_creates_an_evm_payin(): void 'address_line_2' => 'San Francisco, CA 94129', ], ], - 'receiver_id' => 're_000000000000', + 'customer_id' => 're_000000000000', 'receiver_amount' => 1010, ]; @@ -317,7 +317,7 @@ public function it_creates_an_evm_payin(): void $this->assertNull($response->error); $this->assertEquals('pi_000000000000', $response->data->id); $this->assertEquals(TransactionStatus::PROCESSING, $response->data->status); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertEquals(1010.0, $response->data->receiverAmount); } } diff --git a/tests/Resources/Payouts/PayoutsTest.php b/tests/Resources/Payouts/PayoutsTest.php index f8131a8..0d55a8a 100644 --- a/tests/Resources/Payouts/PayoutsTest.php +++ b/tests/Resources/Payouts/PayoutsTest.php @@ -58,7 +58,7 @@ private function mockResponse(array $body, int $status = 200): void private function getPayoutMockData(): array { return [ - 'receiver_id' => 're_000000000000', + 'customer_id' => 're_000000000000', 'id' => 'pa_000000000000', 'status' => 'processing', 'sender_wallet_address' => '0x123...890', @@ -112,7 +112,7 @@ private function getPayoutMockData(): array 'commercial_quotation' => 495, 'blindpay_quotation' => 485, 'total_fee_amount' => 1.5, - 'receiver_local_amount' => 1000, + 'customer_local_amount' => 1000, 'currency' => 'BRL', 'transaction_document_file' => 'https://example.com/image.png', 'transaction_document_type' => 'invoice', @@ -167,7 +167,7 @@ public function it_lists_payouts(): void $this->assertIsArray($response->data->data); $this->assertCount(1, $response->data->data); $this->assertEquals('pa_000000000000', $response->data->data[0]->id); - $this->assertEquals('re_000000000000', $response->data->data[0]->receiverId); + $this->assertEquals('re_000000000000', $response->data->data[0]->customerId); $this->assertEquals('0x123...890', $response->data->data[0]->senderWalletAddress); } @@ -183,7 +183,7 @@ public function it_gets_a_payout(): void $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); $this->assertEquals('pa_000000000000', $response->data->id); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertEquals('processing', $response->data->status->value); $this->assertEquals('0x123...890', $response->data->senderWalletAddress); $this->assertEquals('AAA...Zey8y0A', $response->data->signedTransaction); @@ -218,7 +218,7 @@ public function it_exports_payouts(): void $this->assertIsArray($response->data); $this->assertCount(1, $response->data); $this->assertEquals('pa_000000000000', $response->data[0]->id); - $this->assertEquals('re_000000000000', $response->data[0]->receiverId); + $this->assertEquals('re_000000000000', $response->data[0]->customerId); $this->assertEquals('processing', $response->data[0]->status->value); $this->assertEquals('0x123...890', $response->data[0]->senderWalletAddress); } @@ -235,7 +235,7 @@ public function it_gets_payout_tracking_information(): void $this->assertTrue($response->isSuccess()); $this->assertNull($response->error); $this->assertEquals('pa_000000000000', $response->data->id); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertEquals('processing', $response->data->status->value); $this->assertEquals('processing', $response->data->trackingTransaction->step); $this->assertEquals('failed', $response->data->trackingTransaction->status); @@ -308,7 +308,7 @@ public function it_creates_a_stellar_payout(): void 'estimated_time_of_arrival' => '1_business_day', 'completed_at' => '2011-10-05T14:48:00.000Z', ], - 'receiver_id' => 're_000000000000', + 'customer_id' => 're_000000000000', ]; $this->mockResponse($mockedStellarPayout); @@ -325,7 +325,7 @@ public function it_creates_a_stellar_payout(): void $this->assertEquals('pa_000000000000', $response->data->id); $this->assertEquals('processing', $response->data->status->value); $this->assertEquals('0x123...890', $response->data->senderWalletAddress); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertNotNull($response->data->trackingComplete); $this->assertNotNull($response->data->trackingPayment); $this->assertNotNull($response->data->trackingTransaction); @@ -372,7 +372,7 @@ public function it_creates_an_evm_payout(): void 'estimated_time_of_arrival' => '1_business_day', 'completed_at' => '2011-10-05T14:48:00.000Z', ], - 'receiver_id' => 're_000000000000', + 'customer_id' => 're_000000000000', ]; $this->mockResponse($mockedEvmPayout); @@ -389,7 +389,7 @@ public function it_creates_an_evm_payout(): void $this->assertEquals('pa_000000000000', $response->data->id); $this->assertEquals('processing', $response->data->status->value); $this->assertEquals('0x123...890', $response->data->senderWalletAddress); - $this->assertEquals('re_000000000000', $response->data->receiverId); + $this->assertEquals('re_000000000000', $response->data->customerId); $this->assertNotNull($response->data->trackingComplete); $this->assertNotNull($response->data->trackingPayment); $this->assertNotNull($response->data->trackingTransaction); diff --git a/tests/Resources/Quotes/QuotesTest.php b/tests/Resources/Quotes/QuotesTest.php index 56620c4..c709c21 100644 --- a/tests/Resources/Quotes/QuotesTest.php +++ b/tests/Resources/Quotes/QuotesTest.php @@ -82,7 +82,7 @@ public function it_creates_a_quote(): void 'chainId' => 1, ], ], - 'receiver_local_amount' => 1000, + 'customer_local_amount' => 1000, 'description' => 'Memo code or description, only works with USD and BRL', ]; @@ -114,7 +114,7 @@ public function it_creates_a_quote(): void $this->assertEquals(1010.0, $response->data->senderAmount); $this->assertEquals(150.0, $response->data->partnerFeeAmount); $this->assertEquals(50.0, $response->data->flatFee); - $this->assertEquals(1000.0, $response->data->receiverLocalAmount); + $this->assertEquals(1000.0, $response->data->customerLocalAmount); $this->assertEquals('Memo code or description, only works with USD and BRL', $response->data->description); // Assert contract details diff --git a/tests/Resources/Receivers/ReceiversTest.php b/tests/Resources/Receivers/ReceiversTest.php deleted file mode 100644 index 4f9f848..0000000 --- a/tests/Resources/Receivers/ReceiversTest.php +++ /dev/null @@ -1,618 +0,0 @@ -mockHandler = new MockHandler; - $handlerStack = HandlerStack::create($this->mockHandler); - $httpClient = new Client(['handler' => $handlerStack]); - - $this->blindpay = new BlindPay( - apiKey: 'test-key', - instanceId: 'in_000000000000' - ); - - $this->injectHttpClient($httpClient); - } - - private function injectHttpClient(Client $client): void - { - $reflection = new ReflectionClass($this->blindpay); - $property = $reflection->getProperty('httpClient'); - $property->setAccessible(true); - $property->setValue($this->blindpay, $client); - } - - private function mockResponse(array $body, int $status = 200): void - { - $this->mockHandler->append( - new Response( - $status, - ['Content-Type' => 'application/json'], - json_encode($body) - ) - ); - } - - #[Test] - public function it_lists_receivers(): void - { - $mockedReceivers = [ - [ - 'id' => 're_Euw7HN4OdxPn', - 'type' => 'individual', - 'kyc_type' => 'standard', - 'kyc_status' => 'verifying', - 'kyc_warnings' => [ - [ - 'code' => null, - 'message' => null, - 'resolution_status' => null, - 'warning_id' => null, - ], - ], - 'email' => 'bernardo@gmail.com', - 'tax_id' => '12345678900', - 'address_line_1' => 'Av. Paulista, 1000', - 'address_line_2' => 'Apto 101', - 'city' => 'São Paulo', - 'state_province_region' => 'SP', - 'country' => 'BR', - 'postal_code' => '01310-100', - 'ip_address' => '127.0.0.1', - 'image_url' => 'https://example.com/image.png', - 'phone_number' => '+5511987654321', - 'proof_of_address_doc_type' => 'UTILITY_BILL', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - 'first_name' => 'Bernardo', - 'last_name' => 'Simonassi', - 'date_of_birth' => '1998-02-02T00:00:00.000Z', - 'id_doc_country' => 'BR', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => 'https://example.com/image.png', - 'aiprise_validation_key' => '', - 'instance_id' => 'in_000000000000', - 'tos_id' => 'to_3ZZhllJkvo5Z', - 'created_at' => '2021-01-01T00:00:00.000Z', - 'updated_at' => '2021-01-01T00:00:00.000Z', - 'limit' => [ - 'per_transaction' => 100000, - 'daily' => 200000, - 'monthly' => 1000000, - ], - ], - [ - 'id' => 're_YuaMcI2B8zbQ', - 'type' => 'individual', - 'kyc_type' => 'enhanced', - 'kyc_status' => 'approved', - 'kyc_warnings' => null, - 'email' => 'alice.johnson@example.com', - 'tax_id' => '98765432100', - 'address_line_1' => '123 Main St', - 'address_line_2' => null, - 'city' => 'New York', - 'state_province_region' => 'NY', - 'country' => 'US', - 'postal_code' => '10001', - 'ip_address' => '192.168.1.1', - 'image_url' => null, - 'phone_number' => '+15555555555', - 'proof_of_address_doc_type' => 'BANK_STATEMENT', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - 'first_name' => 'Alice', - 'last_name' => 'Johnson', - 'date_of_birth' => '1990-05-10T00:00:00.000Z', - 'id_doc_country' => 'US', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => null, - 'aiprise_validation_key' => 'enhanced-key', - 'instance_id' => 'in_000000000001', - 'source_of_funds_doc_type' => 'salary', - 'source_of_funds_doc_file' => 'https://example.com/image.png', - 'individual_holding_doc_front_file' => 'https://example.com/image.png', - 'purpose_of_transactions' => 'investment_purposes', - 'purpose_of_transactions_explanation' => 'Investing in stocks', - 'tos_id' => 'to_nppX66ntvtHs', - 'created_at' => '2022-02-02T00:00:00.000Z', - 'updated_at' => '2022-02-02T00:00:00.000Z', - 'limit' => [ - 'per_transaction' => 50000, - 'daily' => 100000, - 'monthly' => 500000, - ], - ], - [ - 'id' => 're_IOxAUL24LG7P', - 'type' => 'business', - 'kyc_type' => 'standard', - 'kyc_status' => 'pending', - 'kyc_warnings' => null, - 'email' => 'business@example.com', - 'tax_id' => '20096178000195', - 'address_line_1' => '1 King St W', - 'address_line_2' => 'Suite 100', - 'city' => 'Toronto', - 'state_province_region' => 'ON', - 'country' => 'CA', - 'postal_code' => 'M5H 1A1', - 'ip_address' => null, - 'image_url' => null, - 'phone_number' => '+14165555555', - 'proof_of_address_doc_type' => 'UTILITY_BILL', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - 'legal_name' => 'Business Corp', - 'alternate_name' => 'BizCo', - 'formation_date' => '2010-01-01T00:00:00.000Z', - 'website' => 'https://businesscorp.com', - 'owners' => [ - [ - 'role' => 'beneficial_owner', - 'first_name' => 'Carlos', - 'last_name' => 'Silva', - 'date_of_birth' => '1995-05-15T00:00:00.000Z', - 'tax_id' => '12345678901', - 'address_line_1' => 'Rua Augusta, 1500', - 'address_line_2' => null, - 'city' => 'São Paulo', - 'state_province_region' => 'SP', - 'country' => 'BR', - 'postal_code' => '01304-001', - 'id_doc_country' => 'BR', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => 'https://example.com/image.png', - 'proof_of_address_doc_type' => 'UTILITY_BILL', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - 'id' => 'ub_000000000000', - 'instance_id' => 'in_000000000000', - 'receiver_id' => 're_IOxAUL24LG7P', - ], - ], - 'incorporation_doc_file' => 'https://example.com/image.png', - 'proof_of_ownership_doc_file' => 'https://example.com/image.png', - 'external_id' => null, - 'instance_id' => 'in_000000000002', - 'tos_id' => 'to_nppX66ntvtHs', - 'aiprise_validation_key' => '', - 'created_at' => '2015-03-15T00:00:00.000Z', - 'updated_at' => '2015-03-15T00:00:00.000Z', - 'limit' => [ - 'per_transaction' => 200000, - 'daily' => 400000, - 'monthly' => 2000000, - ], - ], - ]; - - $this->mockResponse($mockedReceivers); - - $response = $this->blindpay->receivers->list(); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertIsArray($response->data); - $this->assertCount(3, $response->data); - $this->assertEquals('re_Euw7HN4OdxPn', $response->data[0]->id); - $this->assertEquals('re_YuaMcI2B8zbQ', $response->data[1]->id); - $this->assertEquals('re_IOxAUL24LG7P', $response->data[2]->id); - } - - #[Test] - public function it_creates_an_individual_receiver_with_standard_kyc(): void - { - $mockedReceiver = [ - 'id' => 're_Euw7HN4OdxPn', - ]; - - $this->mockResponse($mockedReceiver); - - $input = new CreateIndividualWithStandardKYCInput( - addressLine1: 'Av. Paulista, 1000', - city: 'São Paulo', - country: Country::BR, - dateOfBirth: '1998-02-02T00:00:00.000Z', - email: 'bernardo.simonassi@gmail.com', - firstName: 'Bernardo', - idDocBackFile: 'https://example.com/image.png', - idDocCountry: Country::BR, - idDocFrontFile: 'https://example.com/image.png', - idDocType: IdentificationDocument::PASSPORT, - lastName: 'Simonassi', - phoneNumber: '+5511987654321', - postalCode: '01310-100', - proofOfAddressDocFile: 'https://example.com/image.png', - proofOfAddressDocType: ProofOfAddressDocType::UTILITY_BILL, - stateProvinceRegion: 'SP', - taxId: '12345678900', - tosId: 'to_tPiz4bM2nh5K', - addressLine2: 'Apto 101' - ); - - $response = $this->blindpay->receivers->createIndividualWithStandardKYC($input); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('re_Euw7HN4OdxPn', $response->data->id); - } - - #[Test] - public function it_creates_an_individual_receiver_with_enhanced_kyc(): void - { - $mockedReceiver = [ - 'id' => 're_YuaMcI2B8zbQ', - ]; - - $this->mockResponse($mockedReceiver); - - $input = new CreateIndividualWithEnhancedKYCInput( - addressLine1: 'Av. Paulista, 1000', - city: 'São Paulo', - country: Country::BR, - dateOfBirth: '1998-02-02T00:00:00.000Z', - email: 'bernardo.simonassi@gmail.com', - firstName: 'Bernardo', - idDocBackFile: 'https://example.com/image.png', - idDocCountry: Country::BR, - idDocFrontFile: 'https://example.com/image.png', - idDocType: IdentificationDocument::PASSPORT, - individualHoldingDocFrontFile: 'https://example.com/image.png', - lastName: 'Simonassi', - phoneNumber: '+5511987654321', - postalCode: '01310-100', - proofOfAddressDocFile: 'https://example.com/image.png', - proofOfAddressDocType: ProofOfAddressDocType::UTILITY_BILL, - purposeOfTransactions: PurposeOfTransactions::PERSONAL_OR_LIVING_EXPENSES, - purposeOfTransactionsExplanation: 'I am receiving salary payments from my employer', - sourceOfFundsDocFile: 'https://example.com/image.png', - sourceOfFundsDocType: SourceOfFundsDocType::SAVINGS, - stateProvinceRegion: 'SP', - taxId: '12345678900', - tosId: 'to_3ZZhllJkvo5Z', - addressLine2: 'Apto 101' - ); - - $response = $this->blindpay->receivers->createIndividualWithEnhancedKYC($input); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('re_YuaMcI2B8zbQ', $response->data->id); - } - - #[Test] - public function it_creates_a_business_receiver_with_standard_kyb(): void - { - $mockedReceiver = [ - 'id' => 're_IOxAUL24LG7P', - ]; - - $this->mockResponse($mockedReceiver); - - $owner = new class - { - public function toArray(): array - { - return [ - 'role' => 'beneficial_owner', - 'first_name' => 'Carlos', - 'last_name' => 'Silva', - 'date_of_birth' => '1995-05-15T00:00:00.000Z', - 'tax_id' => '12345678901', - 'address_line_1' => 'Rua Augusta, 1500', - 'address_line_2' => null, - 'city' => 'São Paulo', - 'state_province_region' => 'SP', - 'country' => 'BR', - 'postal_code' => '01304-001', - 'id_doc_country' => 'BR', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => 'https://example.com/image.png', - 'proof_of_address_doc_type' => 'UTILITY_BILL', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - ]; - } - }; - - $input = new CreateBusinessWithStandardKYBInput( - addressLine1: 'Av. Brigadeiro Faria Lima, 400', - city: 'São Paulo', - country: Country::BR, - email: 'contato@empresa.com.br', - formationDate: '2010-05-20T00:00:00.000Z', - incorporationDocFile: 'https://example.com/image.png', - legalName: 'Empresa Exemplo Ltda', - owners: [$owner], - postalCode: '04538-132', - proofOfAddressDocFile: 'https://example.com/image.png', - proofOfAddressDocType: ProofOfAddressDocType::UTILITY_BILL, - proofOfOwnershipDocFile: 'https://example.com/image.png', - stateProvinceRegion: 'SP', - taxId: '20096178000195', - tosId: 'to_nppX66ntvtHs', - addressLine2: 'Sala 1201', - alternateName: 'Exemplo', - website: 'https://site.com/' - ); - - $response = $this->blindpay->receivers->createBusinessWithStandardKYB($input); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('re_IOxAUL24LG7P', $response->data->id); - } - - #[Test] - public function it_gets_a_receiver(): void - { - $mockedReceiver = [ - 'id' => 're_YuaMcI2B8zbQ', - 'type' => 'individual', - 'kyc_type' => 'enhanced', - 'kyc_status' => 'verifying', - 'kyc_warnings' => [ - [ - 'code' => null, - 'message' => null, - 'resolution_status' => null, - 'warning_id' => null, - ], - ], - 'email' => 'bernardo.simonassi@gmail.com', - 'tax_id' => '12345678900', - 'address_line_1' => 'Av. Paulista, 1000', - 'address_line_2' => 'Apto 101', - 'city' => 'São Paulo', - 'state_province_region' => 'SP', - 'country' => 'BR', - 'postal_code' => '01310-100', - 'ip_address' => '127.0.0.1', - 'image_url' => 'https://example.com/image.png', - 'phone_number' => '+5511987654321', - 'proof_of_address_doc_type' => 'UTILITY_BILL', - 'proof_of_address_doc_file' => 'https://example.com/image.png', - 'first_name' => 'Bernardo', - 'last_name' => 'Simonassi', - 'date_of_birth' => '1998-02-02T00:00:00.000Z', - 'id_doc_country' => 'BR', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => 'https://example.com/image.png', - 'aiprise_validation_key' => '', - 'source_of_funds_doc_type' => 'savings', - 'source_of_funds_doc_file' => 'https://example.com/image.png', - 'individual_holding_doc_front_file' => 'https://example.com/image.png', - 'purpose_of_transactions' => 'personal_or_living_expenses', - 'purpose_of_transactions_explanation' => 'I am receiving salary payments from my employer', - 'instance_id' => 'in_000000000000', - 'tos_id' => 'to_3ZZhllJkvo5Z', - 'created_at' => '2021-01-01T00:00:00.000Z', - 'updated_at' => '2021-01-01T00:00:00.000Z', - 'limit' => [ - 'per_transaction' => 100000, - 'daily' => 200000, - 'monthly' => 1000000, - ], - ]; - - $this->mockResponse($mockedReceiver); - - $response = $this->blindpay->receivers->get('re_YuaMcI2B8zbQ'); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('re_YuaMcI2B8zbQ', $response->data->id); - $this->assertEquals('bernardo.simonassi@gmail.com', $response->data->email); - $this->assertEquals('Bernardo', $response->data->firstName); - $this->assertEquals('Simonassi', $response->data->lastName); - } - - #[Test] - public function it_updates_a_receiver(): void - { - $this->mockResponse(['data' => null]); - - $input = new UpdateReceiverInput( - receiverId: 're_YuaMcI2B8zbQ', - email: 'bernardo.simonassi@gmail.com', - taxId: '12345678900', - addressLine1: 'Av. Paulista, 1000', - addressLine2: 'Apto 101', - city: 'São Paulo', - stateProvinceRegion: 'SP', - country: Country::BR, - postalCode: '01310-100', - ipAddress: '127.0.0.1', - imageUrl: 'https://example.com/image.png', - phoneNumber: '+5511987654321', - proofOfAddressDocType: ProofOfAddressDocType::UTILITY_BILL, - proofOfAddressDocFile: 'https://example.com/image.png', - firstName: 'Bernardo', - lastName: 'Simonassi', - dateOfBirth: '1998-02-02T00:00:00.000Z', - idDocCountry: Country::BR, - idDocType: IdentificationDocument::PASSPORT, - idDocFrontFile: 'https://example.com/image.png', - idDocBackFile: 'https://example.com/image.png', - alternateName: 'Exemplo', - formationDate: '2010-05-20T00:00:00.000Z', - website: 'https://site.com', - owners: [[ - 'id' => 'ub_000000000000', - 'first_name' => 'Carlos', - 'last_name' => 'Silva', - 'role' => 'beneficial_owner', - 'date_of_birth' => '1995-05-15T00:00:00.000Z', - 'tax_id' => '12345678901', - 'address_line_1' => 'Rua Augusta, 1500', - 'address_line_2' => null, - 'city' => 'São Paulo', - 'state_province_region' => 'SP', - 'country' => 'BR', - 'postal_code' => '01304-001', - 'id_doc_country' => 'BR', - 'id_doc_type' => 'PASSPORT', - 'id_doc_front_file' => 'https://example.com/image.png', - 'id_doc_back_file' => 'https://example.com/image.png', - ]], - incorporationDocFile: 'https://example.com/image.png', - proofOfOwnershipDocFile: 'https://example.com/image.png', - sourceOfFundsDocType: SourceOfFundsDocType::SAVINGS, - sourceOfFundsDocFile: 'https://example.com/image.png', - individualHoldingDocFrontFile: 'https://example.com/image.png', - purposeOfTransactions: PurposeOfTransactions::PERSONAL_OR_LIVING_EXPENSES, - purposeOfTransactionsExplanation: 'I am receiving salary payments from my employer', - externalId: 'some-external-id', - tosId: 'to_3ZZhllJkvo5Z' - ); - - $response = $this->blindpay->receivers->update($input); - - $this->assertTrue($response->isSuccess()); - $this->assertIsArray($response->data); - $this->assertArrayHasKey('data', $response->data); - $this->assertNull($response->data['data']); - } - - #[Test] - public function it_deletes_a_receiver(): void - { - $this->mockResponse(['data' => null]); - - $response = $this->blindpay->receivers->delete('re_YuaMcI2B8zbQ'); - - $this->assertTrue($response->isSuccess()); - $this->assertIsArray($response->data); - $this->assertArrayHasKey('data', $response->data); - $this->assertNull($response->data['data']); - } - - #[Test] - public function it_gets_receiver_limits(): void - { - $mockedReceiverLimits = [ - 'limits' => [ - 'payin' => [ - 'daily' => 10000, - 'monthly' => 50000, - ], - 'payout' => [ - 'daily' => 20000, - 'monthly' => 100000, - ], - ], - ]; - - $this->mockResponse($mockedReceiverLimits); - - $response = $this->blindpay->receivers->getLimits('re_YuaMcI2B8zbQ'); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertIsObject($response->data); - $this->assertObjectHasProperty('limits', $response->data); - $this->assertEquals(10000.0, $response->data->limits['payin']['daily']); - $this->assertEquals(50000.0, $response->data->limits['payin']['monthly']); - $this->assertEquals(20000.0, $response->data->limits['payout']['daily']); - $this->assertEquals(100000.0, $response->data->limits['payout']['monthly']); - } - - #[Test] - public function it_gets_limit_increase_requests_for_a_receiver(): void - { - $mockedLimitIncreaseRequests = [ - [ - 'id' => 'rl_000000000000', - 'receiver_id' => 're_YuaMcI2B8zbQ', - 'status' => 'in_review', - 'daily' => 50000, - 'monthly' => 250000, - 'per_transaction' => 25000, - 'supporting_document_file' => 'https://example.com/bank-statement.pdf', - 'supporting_document_type' => 'individual_bank_statement', - 'created_at' => '2025-01-15T10:30:00.000Z', - 'updated_at' => '2025-01-15T10:30:00.000Z', - ], - [ - 'id' => 'rl_000000000000', - 'receiver_id' => 're_YuaMcI2B8zbQ', - 'status' => 'approved', - 'daily' => 30000, - 'monthly' => 150000, - 'per_transaction' => 15000, - 'supporting_document_file' => 'https://example.com/proof-of-income.pdf', - 'supporting_document_type' => 'individual_proof_of_income', - 'created_at' => '2024-12-10T14:20:00.000Z', - 'updated_at' => '2024-12-12T09:45:00.000Z', - ], - ]; - - $this->mockResponse($mockedLimitIncreaseRequests); - - $response = $this->blindpay->receivers->getLimitIncreaseRequests('re_YuaMcI2B8zbQ'); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertIsArray($response->data); - $this->assertCount(2, $response->data); - $this->assertEquals('rl_000000000000', $response->data[0]->id); - $this->assertEquals('in_review', $response->data[0]->status->value); - $this->assertEquals('approved', $response->data[1]->status->value); - } - - #[Test] - public function it_requests_a_limit_increase_for_a_receiver(): void - { - $mockedResponse = [ - 'id' => 'rl_000000000000', - ]; - - $this->mockResponse($mockedResponse); - - $input = new RequestLimitIncreaseInput( - receiverId: 're_YuaMcI2B8zbQ', - daily: 100000, - monthly: 500000, - perTransaction: 50000, - supportingDocumentFile: 'https://example.com/tax-return.pdf', - supportingDocumentType: LimitIncreaseRequestSupportingDocumentType::INDIVIDUAL_TAX_RETURN - ); - - $response = $this->blindpay->receivers->requestLimitIncrease($input); - - $this->assertTrue($response->isSuccess()); - $this->assertNull($response->error); - $this->assertEquals('rl_000000000000', $response->data->id); - } -} diff --git a/tests/Resources/TermsOfService/TermsOfServiceTest.php b/tests/Resources/TermsOfService/TermsOfServiceTest.php index ff57337..307aaf8 100644 --- a/tests/Resources/TermsOfService/TermsOfServiceTest.php +++ b/tests/Resources/TermsOfService/TermsOfServiceTest.php @@ -64,7 +64,7 @@ public function it_initiates_terms_of_service_with_all_parameters(): void $input = new InitiateInput( idempotencyKey: '123e4567-e89b-12d3-a456-426614174000', - receiverId: null, + customerId: null, redirectUrl: null ); diff --git a/tests/Resources/Transfers/TransfersTest.php b/tests/Resources/Transfers/TransfersTest.php index dba56fa..a92ccfd 100644 --- a/tests/Resources/Transfers/TransfersTest.php +++ b/tests/Resources/Transfers/TransfersTest.php @@ -68,10 +68,10 @@ private function mockTransferData(array $overrides = []): array 'sender_token' => 'USDC', 'sender_amount' => 100.00, 'receiver_amount' => 98.50, - 'receiver_token' => 'USDT', - 'receiver_network' => 'base', - 'receiver_wallet_address' => '0xabc123', - 'receiver_id' => 'rc_000000000000', + 'customer_token' => 'USDT', + 'customer_network' => 'base', + 'customer_wallet_address' => '0xabc123', + 'customer_id' => 'rc_000000000000', 'address' => '0xabc123', 'network' => 'base', 'tracking_transaction_monitoring' => ['step' => 'pending', 'completed_at' => null], @@ -103,9 +103,9 @@ public function it_creates_a_transfer_quote(): void $input = new CreateTransferQuoteInput( walletId: 'wl_000000000000', senderToken: StablecoinToken::USDC, - receiverWalletAddress: '0xabc123', - receiverToken: StablecoinToken::USDT, - receiverNetwork: Network::BASE, + customerWalletAddress: '0xabc123', + customerToken: StablecoinToken::USDT, + customerNetwork: Network::BASE, requestAmount: 100, amountReference: CurrencyType::SENDER ); @@ -143,9 +143,9 @@ public function it_creates_a_transfer_quote_with_optional_fields(): void $input = new CreateTransferQuoteInput( walletId: 'wl_000000000000', senderToken: StablecoinToken::USDC, - receiverWalletAddress: '0xabc123', - receiverToken: StablecoinToken::USDT, - receiverNetwork: Network::BASE, + customerWalletAddress: '0xabc123', + customerToken: StablecoinToken::USDT, + customerNetwork: Network::BASE, requestAmount: 100, amountReference: CurrencyType::SENDER, coverFees: true, @@ -180,9 +180,9 @@ public function it_creates_a_transfer(): void $this->assertEquals('USDC', $response->data->senderToken->value); $this->assertEquals(100.00, $response->data->senderAmount); $this->assertEquals(98.50, $response->data->receiverAmount); - $this->assertEquals('USDT', $response->data->receiverToken->value); - $this->assertEquals('base', $response->data->receiverNetwork->value); - $this->assertEquals('0xabc123', $response->data->receiverWalletAddress); + $this->assertEquals('USDT', $response->data->customerToken->value); + $this->assertEquals('base', $response->data->customerNetwork->value); + $this->assertEquals('0xabc123', $response->data->customerWalletAddress); } #[Test] @@ -198,7 +198,7 @@ public function it_gets_a_transfer(): void $this->assertNull($response->error); $this->assertEquals('tr_000000000000', $response->data->id); $this->assertEquals('completed', $response->data->status->value); - $this->assertEquals('rc_000000000000', $response->data->receiverId); + $this->assertEquals('rc_000000000000', $response->data->customerId); $this->assertEquals('base', $response->data->network->value); } diff --git a/tests/Resources/Webhooks/WebhooksTest.php b/tests/Resources/Webhooks/WebhooksTest.php index 1e1e7f5..edcb574 100644 --- a/tests/Resources/Webhooks/WebhooksTest.php +++ b/tests/Resources/Webhooks/WebhooksTest.php @@ -65,7 +65,7 @@ public function it_creates_a_webhook_endpoint(): void $input = new CreateWebhookEndpointInput( url: 'https://example.com/webhook', - events: [WebhookEvents::RECEIVER_NEW] + events: [WebhookEvents::CUSTOMER_NEW] ); $response = $this->blindpay->instances->webhookEndpoints->create($input); @@ -103,7 +103,7 @@ public function it_lists_webhook_endpoints(): void [ 'id' => 'we_000000000000', 'url' => 'https://example.com/webhook', - 'events' => ['receiver.new'], + 'events' => ['customer.new'], 'last_event_at' => '2024-01-01T00:00:00.000Z', 'instance_id' => 'in_000000000000', 'created_at' => '2021-01-01T00:00:00Z', @@ -122,7 +122,7 @@ public function it_lists_webhook_endpoints(): void $this->assertEquals('we_000000000000', $response->data[0]->id); $this->assertEquals('https://example.com/webhook', $response->data[0]->url); $this->assertCount(1, $response->data[0]->events); - $this->assertEquals(WebhookEvents::RECEIVER_NEW, $response->data[0]->events[0]); + $this->assertEquals(WebhookEvents::CUSTOMER_NEW, $response->data[0]->events[0]); $this->assertEquals('2024-01-01T00:00:00.000Z', $response->data[0]->lastEventAt); $this->assertEquals('in_000000000000', $response->data[0]->instanceId); } From 273b39af07e2c3d581a26ac01eef71f3d65d58ec Mon Sep 17 00:00:00 2001 From: Eric Viana Date: Mon, 3 Aug 2026 16:33:30 -0300 Subject: [PATCH 2/3] chore: refresh spec snapshot to post-sunset main; allow-list pre-existing divergences Claude-Session: https://claude.ai/code/session_01F1stiNzuNtJXoXtiW9ZCbs --- .api-sync/contract-allowlist.json | 6 + .api-sync/spec-snapshot.json | 175 +++++++++++++++++++++++++++++- 2 files changed, 177 insertions(+), 4 deletions(-) diff --git a/.api-sync/contract-allowlist.json b/.api-sync/contract-allowlist.json index a962769..306c8ec 100644 --- a/.api-sync/contract-allowlist.json +++ b/.api-sync/contract-allowlist.json @@ -150,6 +150,12 @@ "field": "stellar_wallet_address", "reason": "Pre-existing: same partner-fees schema gap as PartnerFee.stellar_wallet_address. Predates wave 2.", "owner": "eric@blindpay.com" + }, + { + "schema": "BankAccountResponse", + "field": "iban", + "reason": "Absent from the public spec snapshot; only appeared alongside internal-only surface in the unfiltered spec. Pre-existing SDK field, unrelated to the customers rename; needs its own investigation.", + "owner": "eric@blindpay.com" } ] } diff --git a/.api-sync/spec-snapshot.json b/.api-sync/spec-snapshot.json index c7ae4a9..2557f54 100644 --- a/.api-sync/spec-snapshot.json +++ b/.api-sync/spec-snapshot.json @@ -70,7 +70,7 @@ }, { "name": "Errors", - "description": "## Error responses\n\nEvery error response uses this envelope:\n\n```json\n{\n \"success\": false,\n \"code\": \"QUOTES_EXPIRED\",\n \"message\": \"quote_expired\",\n \"description\": \"This quote has expired. Request a new quote and try again.\",\n \"errors\": [],\n \"trace_id\": \"0af7651916cd43dd8448eb211c80319c\"\n}\n```\n\n- `code` is a stable identifier, safe to build programmatic handling on.\n- `message` is a legacy machine string kept for backward compatibility. Prefer `code`.\n- `description` is human-readable text, safe to show to end users.\n- `trace_id` identifies the request. Include it when contacting support.\n\nRetry semantics per code: `retryable` means the same request can be retried as is, `terminal` means do not retry, and `actionable` means the request succeeds only after you fix something (for example funding a balance or correcting bank details).\n\nThe Status column shows the HTTP status a code typically responds with; the per-endpoint error tabs list the exact status each endpoint returns.\n\n### Error codes\n\n| Code | Status | Retry | Description |\n| --- | --- | --- | --- |\n| `AUTH_EMAIL_ALREADY_REGISTERED` | 409 | terminal | This email address is already registered. |\n| `AUTH_FORBIDDEN` | 403 | terminal | You do not have permission to perform this action. |\n| `AUTH_IP_BLOCKED` | 403 | terminal | Requests from this IP address are not allowed for this API key. |\n| `AUTH_RATE_LIMITED` | 429 | retryable | Too many requests. Wait a moment and try again. |\n| `AUTH_SERVICE_UNAVAILABLE` | 503 | retryable | The authentication service is temporarily unavailable. Try again shortly. |\n| `AUTH_TOKEN_INVALID` | 401 | actionable | This link or token is invalid or has expired. Request a new one. |\n| `AUTH_UNAUTHORIZED` | 401 | actionable | Authentication failed. Check your API key or session and try again. |\n| `BANK_ACCOUNTS_INCOMPLETE` | 400 | actionable | The bank account details are incomplete for this payment method. Provide the missing fields. |\n| `BANK_ACCOUNTS_INVALID_BANK_CODE` | 400 | actionable | The bank code provided is not valid for this payment rail. The message lists where to fetch the valid codes. |\n| `BANK_ACCOUNTS_INVALID_ROUTING` | 400 | actionable | The routing number provided is not valid. Check the number and try again. |\n| `BANK_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This bank account is not approved yet. |\n| `BANK_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested bank account was not found. |\n| `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED` | 400 | terminal | This banking option is not supported for this operation. |\n| `BANK_ACCOUNTS_RTP_NOT_SUPPORTED` | 400 | terminal | The provided routing number does not support instant payments. |\n| `BILLING_INVOICE_NOT_FOUND` | 404 | actionable | The requested invoice was not found. |\n| `BILLING_INVOICE_NOT_PAYABLE` | 409 | terminal | This invoice cannot be paid or collected in its current state. |\n| `BILLING_NOT_AVAILABLE` | 403 | terminal | Billing is not available for development instances. |\n| `BLOCKCHAIN_CALL_FAILED` | 400 | retryable | The blockchain call could not be completed. Check the transaction details and try again. |\n| `BLOCKCHAIN_NETWORK_NOT_SUPPORTED` | 400 | terminal | This network or token combination is not supported for this operation. |\n| `BLOCKCHAIN_TX_FAILED` | 502 | retryable | The blockchain transaction failed. Try again, and contact support if the problem persists. |\n| `COMPLIANCE_RFI_IN_PROGRESS` | 409 | actionable | An information request is already in progress. Resolve it before continuing. |\n| `COMPLIANCE_RFI_INVALID` | 400 | actionable | The information request could not be processed. Check the submitted fields. |\n| `CUSTOMERS_ALREADY_APPROVED` | 409 | terminal | This customer is already approved. |\n| `CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE` | 400 | terminal | Enhanced verification is not available for business customers. Use standard verification (kyc_type: standard) for businesses. |\n| `CUSTOMERS_COUNTRY_NOT_SUPPORTED` | 400 | terminal | This country is not supported for this operation. |\n| `CUSTOMERS_ENHANCED_KYC_REQUIRED` | 400 | actionable | Individuals from high-risk countries must use enhanced verification (kyc_type: enhanced); standard verification is not available for them. See https://www.blindpay.com/docs/kb/supported-countries for country tiers. |\n| `CUSTOMERS_ID_DOCUMENT_INVALID` | 400 | actionable | The identity document is not an accepted passport or national ID. Provide a valid passport or national ID for this customer (a driver license is not accepted for high-risk countries). |\n| `CUSTOMERS_INVALID_DATA` | 422 | actionable | The customer data was rejected by the banking provider. Check the highlighted fields and try again. |\n| `CUSTOMERS_INVALID_PHONE` | 400 | actionable | The phone number provided is not valid. Check the number and try again. |\n| `CUSTOMERS_INVALID_TAX_ID` | 400 | actionable | The tax ID provided is not valid. Check the value and try again. |\n| `CUSTOMERS_KYC_NOT_APPROVED` | 403 | actionable | This customer has not completed verification yet. Complete the verification before continuing. |\n| `CUSTOMERS_NOT_FOUND` | 404 | actionable | The requested customer was not found. |\n| `CUSTOMERS_ONBOARDING_INCOMPLETE` | 400 | actionable | Onboarding is not complete yet. Finish the remaining steps before continuing. |\n| `DATA_INTEGRITY_ERROR` | 422 | terminal | This record could not be loaded because it contains invalid stored data. Contact support with the ID below. |\n| `FEES_NOT_FOUND` | 404 | actionable | The requested fee configuration was not found. |\n| `FEES_PARTNER_FEE_EXCEEDED` | 400 | actionable | The partner fee exceeds the allowed maximum for this transaction. |\n| `FILES_ANALYSIS_FAILED` | 502 | retryable | The document could not be analyzed. Try again, and contact support if the problem persists. |\n| `FILES_EMPTY` | 400 | actionable | The uploaded file is empty. Upload a valid file. |\n| `FILES_TOO_LARGE` | 400 | actionable | The file is too large. Upload a smaller file. |\n| `FILES_TYPE_NOT_ALLOWED` | 400 | actionable | This file type is not allowed. Upload a supported file type. |\n| `FILES_UNREADABLE` | 400 | actionable | We could not read the uploaded file. Check the file and try again. |\n| `INSTANCES_BLOCKED` | 403 | terminal | This account is blocked. Contact support for assistance. |\n| `INSTANCES_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of instances allowed for your account. |\n| `INSTANCES_NOT_FOUND` | 404 | actionable | The requested instance was not found. |\n| `INTERNAL_ERROR` | 500 | retryable | Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists. |\n| `LIMITS_AMOUNT_OUT_OF_RANGE` | 400 | actionable | The amount is outside the allowed range. The message includes the allowed range. |\n| `LIMITS_VOLUME_EXCEEDED` | 400 | actionable | You exceeded your transaction volume limit. The message includes the remaining amount available. |\n| `PAYINS_ALREADY_TERMINAL` | 409 | terminal | This payin already reached a final status and cannot be changed. |\n| `PAYINS_METHOD_NOT_SUPPORTED` | 400 | terminal | This payment method is not supported for this operation. |\n| `PAYINS_NOT_FOUND` | 404 | actionable | The requested payin was not found. |\n| `PAYINS_TAX_ID_REQUIRED` | 400 | actionable | A tax ID is required for this payment method. Provide the tax ID and try again. |\n| `PAYOUTS_ALLOWANCE_NOT_CONFIRMED` | 400 | retryable | The token approval for this payout has not been confirmed on-chain yet, or the approved amount is lower than the payout amount. Wait for the approval transaction to confirm and execute the quote again. |\n| `PAYOUTS_AMOUNT_BELOW_MINIMUM` | 400 | actionable | The amount is below the minimum for this payment rail. |\n| `PAYOUTS_DOCUMENTS_NOT_ACCEPTED` | 400 | terminal | Document upload is only available for international wire payouts. |\n| `PAYOUTS_INSUFFICIENT_BALANCE` | 400 | actionable | There is not enough balance to complete this payout. Fund your balance and try again. |\n| `PAYOUTS_NOT_FOUND` | 404 | actionable | The requested payout was not found. |\n| `QUOTES_ALREADY_USED` | 409 | actionable | This quote was already used. Request a new quote. |\n| `QUOTES_EXPIRED` | 400 | actionable | This quote has expired. Request a new quote and try again. |\n| `QUOTES_INSUFFICIENT_LIQUIDITY` | 400 | actionable | There is not enough market liquidity to fill this amount right now. Try a smaller amount or try again later. |\n| `QUOTES_INVALID_STATE` | 400 | actionable | This quote cannot be authorized in its current state. Request a new quote and try again. |\n| `QUOTES_NOT_FOUND` | 404 | actionable | The requested quote was not found. |\n| `QUOTES_OTC_NOT_SUPPORTED` | 400 | actionable | This OTC configuration is not supported. OTC requires BRL with USDT, and either the sender amount with fees not covered, or the receiver amount with fees covered. |\n| `QUOTES_RATE_UNAVAILABLE` | 502 | retryable | An exchange rate is temporarily unavailable. Try again shortly. |\n| `TOS_ALREADY_ACCEPTED` | 409 | terminal | These terms of service were already accepted. |\n| `TOS_NOT_ACCEPTED` | 400 | actionable | The terms of service must be accepted before continuing. |\n| `TOS_NOT_FOUND` | 404 | actionable | The requested terms of service record was not found. |\n| `TRANSFERS_NOT_ENABLED` | 403 | terminal | Wallets and transfers are not enabled for this account. Contact support to enable them. |\n| `VALIDATION_FAILED` | 400 | actionable | The request contains invalid fields. Check the errors list for details. |\n| `VALIDATION_INVALID_REQUEST` | 400 | actionable | The request is not valid for this operation. Check the parameters and try again. |\n| `VALIDATION_MISSING_BODY` | 400 | actionable | The request body is missing or malformed. Send valid JSON with the Content-Type: application/json header. |\n| `VALIDATION_MISSING_REQUIRED_FIELDS` | 400 | actionable | Required fields are missing. Provide the missing fields and try again. |\n| `VIRTUAL_ACCOUNTS_DISABLED` | 403 | terminal | Virtual accounts are not enabled for this account. Contact support to enable them. |\n| `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED` | 400 | actionable | Additional documents are required to create this virtual account. Upload the requested documents. |\n| `VIRTUAL_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This virtual account is not approved yet. |\n| `VIRTUAL_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested virtual account was not found. |\n| `VIRTUAL_ACCOUNTS_PROVISION_FAILED` | 502 | retryable | We could not create the virtual account. Try again, and contact support if the problem persists. |\n| `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED` | 400 | terminal | Virtual accounts are not available for this country or region. |\n| `WALLETS_BALANCE_UNAVAILABLE` | 503 | retryable | The wallet balance is temporarily unavailable. Try again shortly. |\n| `WALLETS_NOT_FOUND` | 404 | actionable | The requested wallet was not found. |\n| `WEBHOOKS_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of webhook endpoints. |\n| `WEBHOOKS_SIGNATURE_INVALID` | 401 | terminal | The webhook signature is missing or invalid. |\n| `WEBHOOKS_URL_INVALID` | 400 | actionable | The webhook URL is not valid. Use a reachable HTTPS URL. |\n" + "description": "## Error responses\n\nEvery error response uses this envelope:\n\n```json\n{\n \"success\": false,\n \"code\": \"QUOTES_EXPIRED\",\n \"message\": \"quote_expired\",\n \"description\": \"This quote has expired. Request a new quote and try again.\",\n \"errors\": [],\n \"trace_id\": \"0af7651916cd43dd8448eb211c80319c\"\n}\n```\n\n- `code` is a stable identifier, safe to build programmatic handling on.\n- `message` is a legacy machine string kept for backward compatibility. Prefer `code`.\n- `description` is human-readable text, safe to show to end users.\n- `trace_id` identifies the request. Include it when contacting support.\n\nRetry semantics per code: `retryable` means the same request can be retried as is, `terminal` means do not retry, and `actionable` means the request succeeds only after you fix something (for example funding a balance or correcting bank details).\n\nThe Status column shows the HTTP status a code typically responds with; the per-endpoint error tabs list the exact status each endpoint returns.\n\n### Error codes\n\n| Code | Status | Retry | Description |\n| --- | --- | --- | --- |\n| `AUTH_EMAIL_ALREADY_REGISTERED` | 409 | terminal | This email address is already registered. |\n| `AUTH_FORBIDDEN` | 403 | terminal | You do not have permission to perform this action. |\n| `AUTH_IP_BLOCKED` | 403 | terminal | Requests from this IP address are not allowed for this API key. |\n| `AUTH_RATE_LIMITED` | 429 | retryable | Too many requests. Wait a moment and try again. |\n| `AUTH_SERVICE_UNAVAILABLE` | 503 | retryable | The authentication service is temporarily unavailable. Try again shortly. |\n| `AUTH_TOKEN_INVALID` | 401 | actionable | This link or token is invalid or has expired. Request a new one. |\n| `AUTH_UNAUTHORIZED` | 401 | actionable | Authentication failed. Check your API key or session and try again. |\n| `BANK_ACCOUNTS_INCOMPLETE` | 400 | actionable | The bank account details are incomplete for this payment method. Provide the missing fields. |\n| `BANK_ACCOUNTS_INVALID_BANK_CODE` | 400 | actionable | The bank code provided is not valid for this payment rail. The message lists where to fetch the valid codes. |\n| `BANK_ACCOUNTS_INVALID_ROUTING` | 400 | actionable | The routing number provided is not valid. Check the number and try again. |\n| `BANK_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This bank account is not approved yet. |\n| `BANK_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested bank account was not found. |\n| `BANK_ACCOUNTS_PARTNER_NOT_SUPPORTED` | 400 | terminal | This banking option is not supported for this operation. |\n| `BANK_ACCOUNTS_RTP_NOT_SUPPORTED` | 400 | terminal | The provided routing number does not support instant payments. |\n| `BILLING_INVOICE_NOT_FOUND` | 404 | actionable | The requested invoice was not found. |\n| `BILLING_INVOICE_NOT_PAYABLE` | 409 | terminal | This invoice cannot be paid or collected in its current state. |\n| `BILLING_NOT_AVAILABLE` | 403 | terminal | Billing is not available for development instances. |\n| `BLOCKCHAIN_CALL_FAILED` | 400 | retryable | The blockchain call could not be completed. Check the transaction details and try again. |\n| `BLOCKCHAIN_NETWORK_NOT_SUPPORTED` | 400 | terminal | This network or token combination is not supported for this operation. |\n| `BLOCKCHAIN_TOKEN_NOT_SUPPORTED` | 400 | actionable | This token is not supported for this instance type. Development instances settle in USDB; production instances settle in USDC or USDT. |\n| `BLOCKCHAIN_TX_FAILED` | 502 | retryable | The blockchain transaction failed. Try again, and contact support if the problem persists. |\n| `COMPLIANCE_RFI_IN_PROGRESS` | 409 | actionable | An information request is already in progress. Resolve it before continuing. |\n| `COMPLIANCE_RFI_INVALID` | 400 | actionable | The information request could not be processed. Check the submitted fields. |\n| `CUSTOMERS_ALREADY_APPROVED` | 409 | terminal | This customer is already approved. |\n| `CUSTOMERS_BUSINESS_ENHANCED_NOT_AVAILABLE` | 400 | terminal | Enhanced verification is not available for business customers. Use standard verification (kyc_type: standard) for businesses. |\n| `CUSTOMERS_COUNTRY_NOT_SUPPORTED` | 400 | terminal | This country is not supported for this operation. |\n| `CUSTOMERS_ENHANCED_KYC_REQUIRED` | 400 | actionable | Individuals from high-risk countries must use enhanced verification (kyc_type: enhanced); standard verification is not available for them. See https://www.blindpay.com/docs/kb/supported-countries for country tiers. |\n| `CUSTOMERS_ID_DOCUMENT_INVALID` | 400 | actionable | The identity document is not an accepted passport or national ID. Provide a valid passport or national ID for this customer (a driver license is not accepted for high-risk countries). |\n| `CUSTOMERS_INVALID_DATA` | 422 | actionable | The customer data was rejected by the banking provider. Check the highlighted fields and try again. |\n| `CUSTOMERS_INVALID_PHONE` | 400 | actionable | The phone number provided is not valid. Check the number and try again. |\n| `CUSTOMERS_INVALID_TAX_ID` | 400 | actionable | The tax ID provided is not valid. Check the value and try again. |\n| `CUSTOMERS_KYC_NOT_APPROVED` | 403 | actionable | This customer has not completed verification yet. Complete the verification before continuing. |\n| `CUSTOMERS_NOT_FOUND` | 404 | actionable | The requested customer was not found. |\n| `CUSTOMERS_ONBOARDING_INCOMPLETE` | 400 | actionable | Onboarding is not complete yet. Finish the remaining steps before continuing. |\n| `DATA_INTEGRITY_ERROR` | 422 | terminal | This record could not be loaded because it contains invalid stored data. Contact support with the ID below. |\n| `FEES_NOT_FOUND` | 404 | actionable | The requested fee configuration was not found. |\n| `FEES_PARTNER_FEE_EXCEEDED` | 400 | actionable | The partner fee exceeds the allowed maximum for this transaction. |\n| `FILES_ANALYSIS_FAILED` | 502 | retryable | The document could not be analyzed. Try again, and contact support if the problem persists. |\n| `FILES_EMPTY` | 400 | actionable | The uploaded file is empty. Upload a valid file. |\n| `FILES_TOO_LARGE` | 400 | actionable | The file is too large. Upload a smaller file. |\n| `FILES_TYPE_NOT_ALLOWED` | 400 | actionable | This file type is not allowed. Upload a supported file type. |\n| `FILES_UNREADABLE` | 400 | actionable | We could not read the uploaded file. Check the file and try again. |\n| `INSTANCES_BLOCKED` | 403 | terminal | This account is blocked. Contact support for assistance. |\n| `INSTANCES_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of instances allowed for your account. |\n| `INSTANCES_NOT_FOUND` | 404 | actionable | The requested instance was not found. |\n| `INTERNAL_ERROR` | 500 | retryable | Something went wrong on our side. Try again, and contact support with the trace ID if the problem persists. |\n| `LIMITS_AMOUNT_OUT_OF_RANGE` | 400 | actionable | The amount is outside the allowed range. The message includes the allowed range. |\n| `LIMITS_VOLUME_EXCEEDED` | 400 | actionable | You exceeded your transaction volume limit. The message includes the remaining amount available. |\n| `PAYINS_ALREADY_TERMINAL` | 409 | terminal | This payin already reached a final status and cannot be changed. |\n| `PAYINS_METHOD_NOT_SUPPORTED` | 400 | terminal | This payment method is not supported for this operation. |\n| `PAYINS_NOT_FOUND` | 404 | actionable | The requested payin was not found. |\n| `PAYINS_TAX_ID_REQUIRED` | 400 | actionable | A tax ID is required for this payment method. Provide the tax ID and try again. |\n| `PAYOUTS_ALLOWANCE_NOT_CONFIRMED` | 400 | retryable | The token approval for this payout has not been confirmed on-chain yet, or the approved amount is lower than the payout amount. Wait for the approval transaction to confirm and execute the quote again. |\n| `PAYOUTS_AMOUNT_BELOW_MINIMUM` | 400 | actionable | The amount is below the minimum for this payment rail. |\n| `PAYOUTS_DOCUMENTS_NOT_ACCEPTED` | 400 | terminal | Document upload is only available for international wire payouts. |\n| `PAYOUTS_INSUFFICIENT_BALANCE` | 400 | actionable | There is not enough balance to complete this payout. Fund your balance and try again. |\n| `PAYOUTS_NOT_FOUND` | 404 | actionable | The requested payout was not found. |\n| `QUOTES_ALREADY_USED` | 409 | actionable | This quote was already used. Request a new quote. |\n| `QUOTES_EXPIRED` | 400 | actionable | This quote has expired. Request a new quote and try again. |\n| `QUOTES_INSUFFICIENT_LIQUIDITY` | 400 | actionable | There is not enough market liquidity to fill this amount right now. Try a smaller amount or try again later. |\n| `QUOTES_INVALID_STATE` | 400 | actionable | This quote cannot be authorized in its current state. Request a new quote and try again. |\n| `QUOTES_NOT_FOUND` | 404 | actionable | The requested quote was not found. |\n| `QUOTES_OTC_NOT_SUPPORTED` | 400 | actionable | This OTC configuration is not supported. OTC requires BRL with USDT, and either the sender amount with fees not covered, or the receiver amount with fees covered. |\n| `QUOTES_RATE_UNAVAILABLE` | 502 | retryable | An exchange rate is temporarily unavailable. Try again shortly. |\n| `TOS_ALREADY_ACCEPTED` | 409 | terminal | These terms of service were already accepted. |\n| `TOS_NOT_ACCEPTED` | 400 | actionable | The terms of service must be accepted before continuing. |\n| `TOS_NOT_FOUND` | 404 | actionable | The requested terms of service record was not found. |\n| `TRANSFERS_NOT_ENABLED` | 403 | terminal | Wallets and transfers are not enabled for this account. Contact support to enable them. |\n| `VALIDATION_FAILED` | 400 | actionable | The request contains invalid fields. Check the errors list for details. |\n| `VALIDATION_INVALID_REQUEST` | 400 | actionable | The request is not valid for this operation. Check the parameters and try again. |\n| `VALIDATION_MISSING_BODY` | 400 | actionable | The request body is missing or malformed. Send valid JSON with the Content-Type: application/json header. |\n| `VALIDATION_MISSING_REQUIRED_FIELDS` | 400 | actionable | Required fields are missing. Provide the missing fields and try again. |\n| `VIRTUAL_ACCOUNTS_DISABLED` | 403 | terminal | Virtual accounts are not enabled for this account. Contact support to enable them. |\n| `VIRTUAL_ACCOUNTS_DOCUMENTS_REQUIRED` | 400 | actionable | Additional documents are required to create this virtual account. Upload the requested documents. |\n| `VIRTUAL_ACCOUNTS_NOT_APPROVED` | 403 | actionable | This virtual account is not approved yet. |\n| `VIRTUAL_ACCOUNTS_NOT_FOUND` | 404 | actionable | The requested virtual account was not found. |\n| `VIRTUAL_ACCOUNTS_PROVISION_FAILED` | 502 | retryable | We could not create the virtual account. Try again, and contact support if the problem persists. |\n| `VIRTUAL_ACCOUNTS_REGION_NOT_SUPPORTED` | 400 | terminal | Virtual accounts are not available for this country or region. |\n| `WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT` | 400 | terminal | This wallet is attached to a virtual account and cannot be deleted. Delete the virtual account first. |\n| `WALLETS_BALANCE_UNAVAILABLE` | 503 | retryable | The wallet balance is temporarily unavailable. Try again shortly. |\n| `WALLETS_NOT_FOUND` | 404 | actionable | The requested wallet was not found. |\n| `WEBHOOKS_LIMIT_REACHED` | 400 | terminal | You reached the maximum number of webhook endpoints. |\n| `WEBHOOKS_SIGNATURE_INVALID` | 401 | terminal | The webhook signature is missing or invalid. |\n| `WEBHOOKS_URL_INVALID` | 400 | actionable | The webhook URL is not valid. Use a reachable HTTPS URL. |\n" } ], "security": [ @@ -6480,6 +6480,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -7036,6 +7045,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -7592,6 +7610,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -8148,6 +8175,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -13563,6 +13599,14 @@ "minLength": 15, "maxLength": 15, "example": "pf_000000000000" + }, + "refund_wallet_address": { + "type": [ + "string", + "null" + ], + "description": "Optional wallet address to receive the refund if this payout fails or is refunded. Must be a valid address on the quote network. When omitted, refunds are sent back to the sender wallet address.", + "example": "0xDD6a3aD0949396e57C7738ba8FC1A46A5a1C372C" } }, "required": [ @@ -13812,6 +13856,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -15482,6 +15535,15 @@ "description": "Fed Input Message Accountability Data (IMAD). Domestic Fedwire payments only; null on ACH and SWIFT.", "example": "20260526MMQFMP2M008120" }, + "provider_reference": { + "type": [ + "string", + "null" + ], + "maxLength": 120, + "description": "Provider (JPMorgan/Zenus) payment reference captured from the ACCOUNT.ACCOUNT booking webhook (Zenus contractSource.sourceRef). Present for some ACH/wire payouts; a bank-side reference, not the formal ACH network trace number.", + "example": "2084734238TC" + }, "provider_clearing_system": { "type": [ "string", @@ -35072,6 +35134,18 @@ "null" ] }, + "funding_end_to_end_id": { + "type": [ + "string", + "null" + ] + }, + "payer_tax_id": { + "type": [ + "string", + "null" + ] + }, "is_otc": { "type": "boolean" }, @@ -35106,6 +35180,8 @@ "memo_code", "recipient_tax_id", "veem_customer_id", + "funding_end_to_end_id", + "payer_tax_id", "is_otc", "created_at", "updated_at" @@ -41688,7 +41764,7 @@ } }, "400": { - "description": "Possible error codes: `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "description": "Possible error codes: `VALIDATION_FAILED`, `WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT`. See the Error responses section for retry semantics.", "content": { "application/json": { "schema": { @@ -41705,6 +41781,17 @@ "errors": [], "trace_id": "0af7651916cd43dd8448eb211c80319c" } + }, + "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT": { + "summary": "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT", + "value": { + "success": false, + "code": "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT", + "message": "wallet_attached_to_virtual_account", + "description": "This wallet is attached to a virtual account and cannot be deleted. Delete the virtual account first.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } } } } @@ -46029,6 +46116,29 @@ } } }, + "404": { + "description": "Possible error codes: `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, "429": { "description": "Possible error codes: `AUTH_RATE_LIMITED`. See the Error responses section for retry semantics.", "content": { @@ -47124,6 +47234,29 @@ } } }, + "404": { + "description": "Possible error codes: `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, "422": { "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", "content": { @@ -47921,7 +48054,7 @@ } }, "400": { - "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`. See the Error responses section for retry semantics.", + "description": "Possible error codes: `TRANSFERS_NOT_ENABLED`, `VALIDATION_FAILED`, `WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT`. See the Error responses section for retry semantics.", "content": { "application/json": { "schema": { @@ -47949,6 +48082,17 @@ "errors": [], "trace_id": "0af7651916cd43dd8448eb211c80319c" } + }, + "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT": { + "summary": "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT", + "value": { + "success": false, + "code": "WALLETS_ATTACHED_TO_VIRTUAL_ACCOUNT", + "message": "wallet_attached_to_virtual_account", + "description": "This wallet is attached to a virtual account and cannot be deleted. Delete the virtual account first.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } } } } @@ -49305,6 +49449,29 @@ } } }, + "404": { + "description": "Possible error codes: `WALLETS_NOT_FOUND`. See the Error responses section for retry semantics.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "WALLETS_NOT_FOUND": { + "summary": "WALLETS_NOT_FOUND", + "value": { + "success": false, + "code": "WALLETS_NOT_FOUND", + "message": "wallet_not_found", + "description": "The requested wallet was not found.", + "errors": [], + "trace_id": "0af7651916cd43dd8448eb211c80319c" + } + } + } + } + } + }, "422": { "description": "Possible error codes: `CUSTOMERS_INVALID_DATA`. See the Error responses section for retry semantics.", "content": { @@ -53601,4 +53768,4 @@ } } } -} +} \ No newline at end of file From 7ece49cc4ee353ea4c27a7569c74b635cf037f57 Mon Sep 17 00:00:00 2001 From: Eric Viana Date: Mon, 3 Aug 2026 16:38:17 -0300 Subject: [PATCH 3/3] chore(deps): bump guzzle 7.10.0 -> 7.15.2 (snyk highs) Claude-Session: https://claude.ai/code/session_01F1stiNzuNtJXoXtiW9ZCbs --- composer.lock | 166 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 130 insertions(+), 36 deletions(-) diff --git a/composer.lock b/composer.lock index b54e9ab..7a5e119 100644 --- a/composer.lock +++ b/composer.lock @@ -8,25 +8,26 @@ "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.10.0", + "version": "7.15.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + "reference": "744101956d78b7c1384d0cbf379db13e859167bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/744101956d78b7c1384d0cbf379db13e859167bf", + "reference": "744101956d78b7c1384d0cbf379db13e859167bf", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.3", - "guzzlehttp/psr7": "^2.8", + "guzzlehttp/promises": "^2.5.1", + "guzzlehttp/psr7": "^2.13", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-client-implementation": "1.0" @@ -34,9 +35,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.7", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -114,7 +116,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + "source": "https://github.com/guzzle/guzzle/tree/7.15.2" }, "funding": [ { @@ -130,28 +132,29 @@ "type": "tidelift" } ], - "time": "2025-08-23T22:36:01+00:00" + "time": "2026-07-26T23:23:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.3.0", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "481557b130ef3790cf82b713667b43030dc9c957" + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", - "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "url": "https://api.github.com/repos/guzzle/promises/zipball/9ad1e4fc607446a055b95870c7f668e93b5cff29", + "reference": "9ad1e4fc607446a055b95870c7f668e93b5cff29", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "type": "library", "extra": { @@ -197,7 +200,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.3.0" + "source": "https://github.com/guzzle/promises/tree/2.5.1" }, "funding": [ { @@ -213,27 +216,29 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:34:08+00:00" + "time": "2026-07-08T15:48:39+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.8.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "21dc724a0583619cd1652f673303492272778051" + "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", - "reference": "21dc724a0583619cd1652f673303492272778051", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dad89620b7a6edb60c15858442eb2e408b45d8f4", + "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-factory-implementation": "1.0", @@ -241,8 +246,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -313,7 +319,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.8.0" + "source": "https://github.com/guzzle/psr7/tree/2.13.0" }, "funding": [ { @@ -329,7 +335,7 @@ "type": "tidelift" } ], - "time": "2025-08-23T21:21:41+00:00" + "time": "2026-07-16T22:23:49+00:00" }, { "name": "psr/http-client", @@ -537,16 +543,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { @@ -559,7 +565,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -584,7 +590,91 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" }, "funding": [ { @@ -595,12 +685,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-04-10T16:19:22+00:00" } ], "packages-dev": [ @@ -4525,5 +4619,5 @@ "ext-json": "*" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" }