From e2d120531b5595274eaf31540891302036aed7a4 Mon Sep 17 00:00:00 2001 From: Eric Viana Date: Mon, 27 Jul 2026 19:45:27 -0300 Subject: [PATCH] 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/allowlist.json | 188 + .api-sync/check_contract.py | 248 + .api-sync/spec-snapshot.json | 53604 ++++++++++++++++ .github/workflows/contract-check.yaml | 19 + .github/workflows/main.yaml | 9 +- pyproject.toml | 2 + src/blindpay/__init__.py | 2 - src/blindpay/client.py | 72 - src/blindpay/resources/__init__.py | 4 - src/blindpay/resources/api_keys/__init__.py | 21 - src/blindpay/resources/api_keys/api_keys.py | 82 - src/blindpay/resources/customers/customers.py | 3 - src/blindpay/resources/instances/instances.py | 2 +- src/blindpay/resources/payins/payins.py | 7 +- src/blindpay/resources/payouts/payouts.py | 11 +- src/blindpay/resources/quotes/quotes.py | 2 +- src/blindpay/resources/receivers/__init__.py | 104 - src/blindpay/resources/receivers/receivers.py | 859 - .../terms_of_service/terms_of_service.py | 2 +- src/blindpay/resources/transfers/transfers.py | 14 +- src/blindpay/resources/webhooks/webhooks.py | 9 - src/blindpay/types.py | 5 - tests/resources/test_api_keys.py | 188 - tests/resources/test_bank_accounts.py | 44 +- tests/resources/test_payins.py | 18 +- tests/resources/test_payouts.py | 40 +- tests/resources/test_quotes.py | 4 +- tests/resources/test_receivers.py | 1102 - tests/resources/test_terms_of_service.py | 8 +- tests/resources/test_transfers.py | 72 +- tests/resources/test_webhooks.py | 12 +- tests/test_client.py | 8 +- uv.lock | 2 +- 33 files changed, 54190 insertions(+), 2577 deletions(-) create mode 100644 .api-sync/allowlist.json create mode 100644 .api-sync/check_contract.py create mode 100644 .api-sync/spec-snapshot.json create mode 100644 .github/workflows/contract-check.yaml delete mode 100644 src/blindpay/resources/api_keys/__init__.py delete mode 100644 src/blindpay/resources/api_keys/api_keys.py delete mode 100644 src/blindpay/resources/receivers/__init__.py delete mode 100644 src/blindpay/resources/receivers/receivers.py delete mode 100644 tests/resources/test_api_keys.py delete mode 100644 tests/resources/test_receivers.py diff --git a/.api-sync/allowlist.json b/.api-sync/allowlist.json new file mode 100644 index 0000000..0917f66 --- /dev/null +++ b/.api-sync/allowlist.json @@ -0,0 +1,188 @@ +[ + { + "schema": "GetBankAccountResponse", + "field": "account_holder_name", + "reason": "bank_accounts.get() models an older bank-account shape; the current spec returns rail-specific fields instead (e.g. swift_account_holder_name). Pre-existing, unrelated to the customers rename. Needs its own bank-accounts sync PR.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetBankAccountResponse", + "field": "is_primary", + "reason": "Same pre-existing bank_accounts.get() divergence as account_holder_name above; the spec's BankAccountOut has no is_primary property.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetBankAccountResponse", + "field": "swift_code", + "reason": "Same pre-existing bank_accounts.get() divergence; the spec uses swift_code_bic, not swift_code.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payin", + "field": "billing_fee", + "reason": "Pre-existing: the spec's PayinOut only has billing_fee_amount, not billing_fee. Payin already separately declares billing_fee_amount. Unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPayinTrackResponse", + "field": "billing_fee", + "reason": "Same pre-existing divergence as Payin.billing_fee above; get_track() mirrors Payin's shape.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payin", + "field": "tracking_partner_fee", + "reason": "Pre-existing: PayinOut in the spec has no tracking_partner_fee sub-object. Unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPayinTrackResponse", + "field": "tracking_partner_fee", + "reason": "Same pre-existing divergence as Payin.tracking_partner_fee.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateEvmPayinResponse", + "field": "tracking_partner_fee", + "reason": "Same pre-existing divergence as Payin.tracking_partner_fee.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Transfer", + "field": "tracking_partner_fee", + "reason": "Pre-existing: TransferOut in the spec has no tracking_partner_fee sub-object. Unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "Payout", + "field": "tracking_partner_fee", + "reason": "Pre-existing: PayoutOut in the spec has no tracking_partner_fee sub-object. Unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateStellarPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Same pre-existing divergence as Payout.tracking_partner_fee.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateEvmPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Same pre-existing divergence as Payout.tracking_partner_fee.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateSolanaPayoutResponse", + "field": "tracking_partner_fee", + "reason": "Same pre-existing divergence as Payout.tracking_partner_fee.", + "owner": "eric@blindpay.com" + }, + { + "schema": "PartnerFee", + "field": "evm_wallet_address", + "reason": "partner_fees CRUD isn't modeled in the public spec at all (only the payin/payout partner-fee webhook payloads are). Pre-existing, unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeInput", + "field": "evm_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeResponse", + "field": "evm_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPartnerFeeResponse", + "field": "evm_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "PartnerFee", + "field": "stellar_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address; partner_fees CRUD isn't in the public spec.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeInput", + "field": "stellar_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePartnerFeeResponse", + "field": "stellar_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPartnerFeeResponse", + "field": "stellar_wallet_address", + "reason": "Same pre-existing divergence as PartnerFee.evm_wallet_address.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetFxRateInput", + "field": "from_currency", + "reason": "'from' is a reserved keyword in Python; the client remaps from_currency back to 'from' before sending. Pre-existing, unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "GetPayinFxRateInput", + "field": "from_currency", + "reason": "Same reserved-keyword remap as GetFxRateInput.from_currency.", + "owner": "eric@blindpay.com" + }, + { + "schema": "IndividualWithEnhancedKYC", + "field": "individual_holding_doc_front_file", + "reason": "Pre-existing: the spec's CustomerOut has no individual_holding_doc_front_file property for enhanced-KYC individuals. Unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreateIndividualWithEnhancedKYCInput", + "field": "individual_holding_doc_front_file", + "reason": "Same pre-existing divergence as IndividualWithEnhancedKYC.individual_holding_doc_front_file.", + "owner": "eric@blindpay.com" + }, + { + "schema": "UpdateCustomerInput", + "field": "individual_holding_doc_front_file", + "reason": "Same pre-existing divergence as IndividualWithEnhancedKYC.individual_holding_doc_front_file.", + "owner": "eric@blindpay.com" + }, + { + "schema": "UpdateInstanceMemberRoleInput", + "field": "member_id", + "reason": "Dead code: update_member_role() takes member_id/role as separate function arguments, never as this TypedDict. Pre-existing, unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CreatePayinInput", + "field": "receiver_address", + "reason": "Dead code: CreatePayinInput is never passed to any client method (create_evm() takes a bare payin_quote_id). Pre-existing, unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CustodialWalletBalance", + "field": "usdb", + "reason": "Pre-existing: the spec's WalletBalanceOut uses uppercase USDB/USDC/USDT. Case-only divergence, unrelated to the customers rename.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CustodialWalletBalance", + "field": "usdc", + "reason": "Same pre-existing case divergence as CustodialWalletBalance.usdb.", + "owner": "eric@blindpay.com" + }, + { + "schema": "CustodialWalletBalance", + "field": "usdt", + "reason": "Same pre-existing case divergence as CustodialWalletBalance.usdb.", + "owner": "eric@blindpay.com" + } +] diff --git a/.api-sync/check_contract.py b/.api-sync/check_contract.py new file mode 100644 index 0000000..2509d78 --- /dev/null +++ b/.api-sync/check_contract.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +"""Wire-contract check: compares SDK-declared field/enum names against the API spec snapshot. + +Run locally with: + python3 .api-sync/check_contract.py + +No third-party dependencies. Two checks: + +Direction A (hard failure): every TypedDict field name declared anywhere under src/blindpay +must exist as a property name somewhere in the spec snapshot, unless the (ClassName, field) +pair is listed in allowlist.json. + +Direction B (webhook events, hard failure): every event name in the spec's webhook event +enum must be present in the SDK's WebhookEvents literal. Fields in the spec the SDK simply +doesn't model are reported as a warning only (this direction is not exhaustive for other +enums -- webhook events is the one explicitly mapped). +""" + +from __future__ import annotations + +import ast +import json +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +SNAPSHOT_PATH = Path(__file__).resolve().parent / "spec-snapshot.json" +ALLOWLIST_PATH = Path(__file__).resolve().parent / "allowlist.json" +SRC_ROOT = ROOT / "src" / "blindpay" +WEBHOOKS_FILE = SRC_ROOT / "resources" / "webhooks" / "webhooks.py" +WEBHOOKS_LITERAL_NAME = "WebhookEvents" + +REQUIRED_ALLOWLIST_KEYS = {"schema", "field", "reason", "owner"} + + +def load_snapshot() -> dict: + with SNAPSHOT_PATH.open() as f: + return json.load(f) + + +def load_allowlist() -> list[dict]: + if not ALLOWLIST_PATH.exists(): + return [] + with ALLOWLIST_PATH.open() as f: + entries = json.load(f) + if not isinstance(entries, list): + raise SystemExit(f"{ALLOWLIST_PATH}: expected a JSON array of entries") + for i, entry in enumerate(entries): + if not isinstance(entry, dict): + raise SystemExit(f"{ALLOWLIST_PATH}[{i}]: entry must be an object") + missing = REQUIRED_ALLOWLIST_KEYS - entry.keys() + if missing: + raise SystemExit(f"{ALLOWLIST_PATH}[{i}]: missing required key(s) {sorted(missing)}") + extra = entry.keys() - REQUIRED_ALLOWLIST_KEYS + if extra: + raise SystemExit(f"{ALLOWLIST_PATH}[{i}]: unexpected key(s) {sorted(extra)}") + for key in REQUIRED_ALLOWLIST_KEYS: + if not isinstance(entry[key], str) or not entry[key].strip(): + raise SystemExit(f"{ALLOWLIST_PATH}[{i}].{key}: must be a non-empty string") + return entries + + +def collect_known_property_names(spec: dict) -> set[str]: + """Every key that appears as an object schema's property name, anywhere in the + document (components.schemas AND inline path request/response schemas).""" + names: set[str] = set() + + def walk(node: object) -> None: + if isinstance(node, dict): + props = node.get("properties") + if isinstance(props, dict): + names.update(props.keys()) + for value in node.values(): + walk(value) + elif isinstance(node, list): + for item in node: + walk(item) + + walk(spec) + return names + + +def collect_param_names(spec: dict) -> set[str]: + """Every query/path parameter name declared on any operation.""" + names: set[str] = set() + for path_item in spec.get("paths", {}).values(): + if not isinstance(path_item, dict): + continue + for op in path_item.values(): + if not isinstance(op, dict): + continue + for param in op.get("parameters", []): + if isinstance(param, dict) and isinstance(param.get("name"), str): + names.add(param["name"]) + return names + + +def find_typeddict_fields(src_root: Path) -> dict[tuple[str, str], set[str]]: + """Maps (relative_file, class_name) -> set of declared field names, for every + class that is (transitively) a TypedDict subclass.""" + py_files = sorted(src_root.rglob("*.py")) + trees: dict[Path, ast.Module] = {} + for f in py_files: + try: + trees[f] = ast.parse(f.read_text(), filename=str(f)) + except SyntaxError as e: + raise SystemExit(f"{f}: failed to parse: {e}") from e + + known_typeddict_classes = {"TypedDict"} + # Fixed-point: a class based on a class we already know is a TypedDict is also one. + for _ in range(5): + changed = False + for tree in trees.values(): + for node in ast.walk(tree): + if not isinstance(node, ast.ClassDef): + continue + base_names = [b.id for b in node.bases if isinstance(b, ast.Name)] + base_names += [b.attr for b in node.bases if isinstance(b, ast.Attribute)] + if node.name in known_typeddict_classes: + continue + if any(b in known_typeddict_classes for b in base_names): + known_typeddict_classes.add(node.name) + changed = True + if not changed: + break + + results: dict[tuple[str, str], set[str]] = {} + for f, tree in trees.items(): + rel = str(f.relative_to(src_root)) + for node in ast.walk(tree): + if isinstance(node, ast.ClassDef) and node.name in known_typeddict_classes: + fields = set() + for item in node.body: + if isinstance(item, ast.AnnAssign) and isinstance(item.target, ast.Name): + fields.add(item.target.id) + if fields: + results[(rel, node.name)] = fields + return results + + +def find_literal_string_values(file_path: Path, literal_name: str) -> set[str]: + tree = ast.parse(file_path.read_text(), filename=str(file_path)) + for node in ast.walk(tree): + if isinstance(node, ast.Assign) and any(isinstance(t, ast.Name) and t.id == literal_name for t in node.targets): + values = set() + for const in ast.walk(node.value): + if isinstance(const, ast.Constant) and isinstance(const.value, str): + values.add(const.value) + return values + raise SystemExit(f"{file_path}: could not find `{literal_name} = Literal[...]`") + + +def find_spec_webhook_events(spec: dict) -> set[str]: + schemas = spec.get("components", {}).get("schemas", {}) + for name in ("WebhookEndpointIn", "WebhookEndpoint", "WebhookEndpointOut"): + schema = schemas.get(name) + if not schema: + continue + events = schema.get("properties", {}).get("events") + if not events: + continue + enum = events.get("items", {}).get("enum") + if enum: + return set(enum) + raise SystemExit("could not locate the webhook events enum in the spec snapshot") + + +def main() -> int: + spec = load_snapshot() + allowlist = load_allowlist() + allowset = {(e["schema"], e["field"]) for e in allowlist} + + known = collect_known_property_names(spec) | collect_param_names(spec) + typeddict_fields = find_typeddict_fields(SRC_ROOT) + + failures: list[str] = [] + for (rel_file, class_name), fields in typeddict_fields.items(): + for field in sorted(fields): + if field in known: + continue + if (class_name, field) in allowset: + continue + failures.append(f" {rel_file}:{class_name}.{field}") + + unused_allowlist = sorted(allowset - {(c, f) for (_, c), fields in typeddict_fields.items() for f in fields}) + + sdk_events = find_literal_string_values(WEBHOOKS_FILE, WEBHOOKS_LITERAL_NAME) + spec_events = find_spec_webhook_events(spec) + missing_events = sorted(spec_events - sdk_events) + + ok = True + + print( + f"Checked {sum(len(f) for f in typeddict_fields.values())} declared TypedDict fields " + f"across {len(typeddict_fields)} classes against {len(known)} known wire keys." + ) + + if failures: + ok = False + print( + f"\nDirection A -- FAILED: {len(failures)} field(s) declared by the SDK do not " + f"exist anywhere in the spec snapshot:" + ) + print("\n".join(failures)) + print( + "\nEach must be renamed to match the wire, or added to .api-sync/allowlist.json " + "with a reason and owner if it is a genuine, pre-existing divergence unrelated " + "to the change you're making." + ) + + if missing_events: + ok = False + print( + f"\nDirection B (webhook events) -- FAILED: the spec defines event(s) the SDK's " + f"WebhookEvents literal is missing: {missing_events}" + ) + + extra_sdk_events = sorted(sdk_events - spec_events) + if extra_sdk_events: + print( + f"\nNote: SDK's WebhookEvents literal has event(s) not present in the spec's enum " + f"(likely deprecated events that stopped firing): {extra_sdk_events}" + ) + + if unused_allowlist: + print( + f"\nWarning: allowlist.json has {len(unused_allowlist)} entrie(s) that don't match " + f"any current SDK field -- consider pruning: {unused_allowlist}" + ) + + sdk_declared_fields = {f for fields in typeddict_fields.values() for f in fields} + schema_only_known = collect_known_property_names(spec) + unmodeled = schema_only_known - sdk_declared_fields + if unmodeled: + print( + f"\nDirection B (fields) -- warning only: {len(unmodeled)} spec property name(s) " + f"are not declared by any SDK TypedDict. Not a failure; the SDK is allowed to " + f"model a subset of the API." + ) + + if ok: + print("\nDirection A and B: PASSED.") + + return 0 if ok else 1 + + +if __name__ == "__main__": + sys.exit(main()) 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/contract-check.yaml b/.github/workflows/contract-check.yaml new file mode 100644 index 0000000..5e3a7ee --- /dev/null +++ b/.github/workflows/contract-check.yaml @@ -0,0 +1,19 @@ +name: Contract Check + +on: + workflow_call: + +jobs: + contract: + name: Run wire-contract check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Check SDK fields and enums against the API spec snapshot + run: python3 .api-sync/check_contract.py diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index f60854b..3b61edd 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -15,17 +15,22 @@ jobs: lint: name: Lint uses: ./.github/workflows/lint.yaml - + typecheck: name: Type Check needs: lint uses: ./.github/workflows/typecheck.yaml - + tests: name: Tests needs: [lint, typecheck] uses: ./.github/workflows/tests.yaml + contract-check: + name: Contract Check + needs: [lint, typecheck] + uses: ./.github/workflows/contract-check.yaml + snyk: name: Snyk needs: [lint, typecheck, tests] diff --git a/pyproject.toml b/pyproject.toml index 7f7614a..ae6b079 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,6 +84,7 @@ known-first-party = ["blindpay"] [tool.ruff.lint.per-file-ignores] "examples/*.py" = ["T201"] +".api-sync/*.py" = ["T201"] [tool.mypy] pretty = true @@ -103,6 +104,7 @@ disallow_incomplete_defs = true disallow_untyped_decorators = true exclude = [ "^examples/", + "^\\.api-sync/", ] [[tool.mypy.overrides]] diff --git a/src/blindpay/__init__.py b/src/blindpay/__init__.py index ca54f7e..029d275 100644 --- a/src/blindpay/__init__.py +++ b/src/blindpay/__init__.py @@ -30,7 +30,6 @@ TrackingTransaction, TransactionDocumentType, TransactionStatus, - WebhookEvent, ) __all__ = [ @@ -53,7 +52,6 @@ "StablecoinToken", "TransactionDocumentType", "TransactionStatus", - "WebhookEvent", "BlindpayApiResponse", "BlindpayErrorResponse", "BlindpaySuccessResponse", diff --git a/src/blindpay/client.py b/src/blindpay/client.py index 581fceb..8322fc7 100644 --- a/src/blindpay/client.py +++ b/src/blindpay/client.py @@ -1,7 +1,6 @@ import base64 import hashlib import hmac -import warnings from functools import cached_property from typing import TYPE_CHECKING, Any, Dict, Literal, Mapping, Optional, TypeVar @@ -11,7 +10,6 @@ from .types import BlindpayApiResponse if TYPE_CHECKING: - from blindpay.resources.api_keys.api_keys import ApiKeysResource, ApiKeysResourceSync from blindpay.resources.available.available import AvailableResource, AvailableResourceSync from blindpay.resources.bank_accounts.bank_accounts import BankAccountsResource, BankAccountsResourceSync from blindpay.resources.custodial_wallets.custodial_wallets import ( @@ -28,7 +26,6 @@ from blindpay.resources.payins.quotes import PayinQuotesResource, PayinQuotesResourceSync from blindpay.resources.payouts.payouts import PayoutsResource, PayoutsResourceSync from blindpay.resources.quotes.quotes import QuotesResource, QuotesResourceSync - from blindpay.resources.receivers.receivers import ReceiversResource, ReceiversResourceSync from blindpay.resources.terms_of_service.terms_of_service import ( TermsOfServiceResource, TermsOfServiceResourceSync, @@ -45,11 +42,6 @@ __version__ = "2.3.0" -_RECEIVERS_DEPRECATION_MESSAGE = ( - "Use 'customers' instead. 'receivers' is deprecated and will be removed in " - "v3.0.0. See https://www.blindpay.com/changelog/2026-06-04-customers-rename" -) - T = TypeVar("T") @@ -169,12 +161,6 @@ def _base(self) -> "InstancesResource": return create_instances_resource(self._instance_id, self._api) - @cached_property - def api_keys(self) -> "ApiKeysResource": - from blindpay.resources.api_keys.api_keys import create_api_keys_resource - - return create_api_keys_resource(self._instance_id, self._api) - @cached_property def webhook_endpoints(self) -> "WebhookEndpointsResource": from blindpay.resources.webhooks.webhooks import create_webhook_endpoints_resource @@ -233,27 +219,6 @@ def __getattr__(self, name: str) -> Any: return getattr(self._base, name) -class _ReceiversNamespace: - def __init__(self, instance_id: str, api_client: ApiClientImpl) -> None: - self._instance_id = instance_id - self._api = api_client - - @cached_property - def _base(self) -> "ReceiversResource": - from blindpay.resources.receivers.receivers import create_receivers_resource - - return create_receivers_resource(self._instance_id, self._api) - - @cached_property - def bank_accounts(self) -> "BankAccountsResource": - from blindpay.resources.bank_accounts.bank_accounts import create_bank_accounts_resource - - return create_bank_accounts_resource(self._instance_id, self._api) - - def __getattr__(self, name: str) -> Any: - return getattr(self._base, name) - - class _WalletsNamespace: def __init__(self, instance_id: str, api_client: ApiClientImpl) -> None: self._instance_id = instance_id @@ -345,11 +310,6 @@ def payouts(self) -> "PayoutsResource": def customers(self) -> _CustomersNamespace: return _CustomersNamespace(self._instance_id, self._api) - @cached_property - def receivers(self) -> _ReceiversNamespace: - warnings.warn(_RECEIVERS_DEPRECATION_MESSAGE, DeprecationWarning, stacklevel=2) - return _ReceiversNamespace(self._instance_id, self._api) - @cached_property def virtual_accounts(self) -> "VirtualAccountsResource": from blindpay.resources.virtual_accounts import create_virtual_accounts_resource @@ -437,12 +397,6 @@ def _base(self) -> "InstancesResourceSync": return create_instances_resource_sync(self._instance_id, self._api) - @cached_property - def api_keys(self) -> "ApiKeysResourceSync": - from blindpay.resources.api_keys.api_keys import create_api_keys_resource_sync - - return create_api_keys_resource_sync(self._instance_id, self._api) - @cached_property def webhook_endpoints(self) -> "WebhookEndpointsResourceSync": from blindpay.resources.webhooks.webhooks import create_webhook_endpoints_resource_sync @@ -501,27 +455,6 @@ def __getattr__(self, name: str) -> Any: return getattr(self._base, name) -class _ReceiversNamespaceSync: - def __init__(self, instance_id: str, api_client: ApiClientImplSync) -> None: - self._instance_id = instance_id - self._api = api_client - - @cached_property - def _base(self) -> "ReceiversResourceSync": - from blindpay.resources.receivers.receivers import create_receivers_resource_sync - - return create_receivers_resource_sync(self._instance_id, self._api) - - @cached_property - def bank_accounts(self) -> "BankAccountsResourceSync": - from blindpay.resources.bank_accounts.bank_accounts import create_bank_accounts_resource_sync - - return create_bank_accounts_resource_sync(self._instance_id, self._api) - - def __getattr__(self, name: str) -> Any: - return getattr(self._base, name) - - class _WalletsNamespaceSync: def __init__(self, instance_id: str, api_client: ApiClientImplSync) -> None: self._instance_id = instance_id @@ -613,11 +546,6 @@ def payouts(self) -> "PayoutsResourceSync": def customers(self) -> _CustomersNamespaceSync: return _CustomersNamespaceSync(self._instance_id, self._api) - @cached_property - def receivers(self) -> _ReceiversNamespaceSync: - warnings.warn(_RECEIVERS_DEPRECATION_MESSAGE, DeprecationWarning, stacklevel=2) - return _ReceiversNamespaceSync(self._instance_id, self._api) - @cached_property def virtual_accounts(self) -> "VirtualAccountsResourceSync": from blindpay.resources.virtual_accounts import create_virtual_accounts_resource_sync diff --git a/src/blindpay/resources/__init__.py b/src/blindpay/resources/__init__.py index 120006c..62b0fac 100644 --- a/src/blindpay/resources/__init__.py +++ b/src/blindpay/resources/__init__.py @@ -1,4 +1,3 @@ -from .api_keys import create_api_keys_resource from .available import create_available_resource from .bank_accounts import create_bank_accounts_resource from .custodial_wallets import create_custodial_wallets_resource @@ -11,7 +10,6 @@ from .payins import create_payin_quotes_resource, create_payins_resource from .payouts import create_payouts_resource from .quotes import create_quotes_resource -from .receivers import create_receivers_resource from .terms_of_service import create_terms_of_service_resource, create_terms_of_service_resource_sync from .transfers import create_transfers_resource from .upload import create_upload_resource @@ -20,7 +18,6 @@ from .webhooks import create_webhook_endpoints_resource __all__ = [ - "create_api_keys_resource", "create_available_resource", "create_bank_accounts_resource", "create_customers_resource", @@ -34,7 +31,6 @@ "create_payin_quotes_resource", "create_payouts_resource", "create_quotes_resource", - "create_receivers_resource", "create_terms_of_service_resource", "create_terms_of_service_resource_sync", "create_transfers_resource", diff --git a/src/blindpay/resources/api_keys/__init__.py b/src/blindpay/resources/api_keys/__init__.py deleted file mode 100644 index f265df2..0000000 --- a/src/blindpay/resources/api_keys/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from .api_keys import ( - ApiKeysResource, - ApiKeysResourceSync, - CreateApiKeyInput, - CreateApiKeyResponse, - GetApiKeyResponse, - ListApiKeysResponse, - create_api_keys_resource, - create_api_keys_resource_sync, -) - -__all__ = [ - "create_api_keys_resource", - "create_api_keys_resource_sync", - "ApiKeysResource", - "ApiKeysResourceSync", - "CreateApiKeyInput", - "CreateApiKeyResponse", - "GetApiKeyResponse", - "ListApiKeysResponse", -] diff --git a/src/blindpay/resources/api_keys/api_keys.py b/src/blindpay/resources/api_keys/api_keys.py deleted file mode 100644 index cfb8eed..0000000 --- a/src/blindpay/resources/api_keys/api_keys.py +++ /dev/null @@ -1,82 +0,0 @@ -from typing import List, Optional - -from typing_extensions import Literal, TypedDict - -from ..._internal.api_client import InternalApiClient, InternalApiClientSync -from ...types import BlindpayApiResponse - -Permission = Literal["full_access"] - - -class ApiKey(TypedDict): - id: str - name: str - permission: Permission - token: str - ip_whitelist: Optional[List[str]] - unkey_id: str - last_used_at: Optional[str] - instance_id: str - created_at: str - updated_at: str - - -ListApiKeysResponse = List[ApiKey] - - -class CreateApiKeyInput(TypedDict): - name: str - permission: Literal["full_access"] - ip_whitelist: Optional[List[str]] - - -class CreateApiKeyResponse(TypedDict): - id: str - token: str - - -GetApiKeyResponse = ApiKey - - -class ApiKeysResource: - def __init__(self, instance_id: str, client: InternalApiClient): - self._instance_id = instance_id - self._client = client - - async def list(self) -> BlindpayApiResponse[ListApiKeysResponse]: - return await self._client.get(f"/instances/{self._instance_id}/api-keys") - - async def create(self, data: CreateApiKeyInput) -> BlindpayApiResponse[CreateApiKeyResponse]: - return await self._client.post(f"/instances/{self._instance_id}/api-keys", data) - - async def get(self, id: str) -> BlindpayApiResponse[GetApiKeyResponse]: - return await self._client.get(f"/instances/{self._instance_id}/api-keys/{id}") - - async def delete(self, id: str) -> BlindpayApiResponse[None]: - return await self._client.delete(f"/instances/{self._instance_id}/api-keys/{id}") - - -class ApiKeysResourceSync: - def __init__(self, instance_id: str, client: InternalApiClientSync): - self._instance_id = instance_id - self._client = client - - def list(self) -> BlindpayApiResponse[ListApiKeysResponse]: - return self._client.get(f"/instances/{self._instance_id}/api-keys") - - def create(self, data: CreateApiKeyInput) -> BlindpayApiResponse[CreateApiKeyResponse]: - return self._client.post(f"/instances/{self._instance_id}/api-keys", data) - - def get(self, id: str) -> BlindpayApiResponse[GetApiKeyResponse]: - return self._client.get(f"/instances/{self._instance_id}/api-keys/{id}") - - def delete(self, id: str) -> BlindpayApiResponse[None]: - return self._client.delete(f"/instances/{self._instance_id}/api-keys/{id}") - - -def create_api_keys_resource(instance_id: str, client: InternalApiClient) -> ApiKeysResource: - return ApiKeysResource(instance_id, client) - - -def create_api_keys_resource_sync(instance_id: str, client: InternalApiClientSync) -> ApiKeysResourceSync: - return ApiKeysResourceSync(instance_id, client) diff --git a/src/blindpay/resources/customers/customers.py b/src/blindpay/resources/customers/customers.py index 92caea4..7456877 100644 --- a/src/blindpay/resources/customers/customers.py +++ b/src/blindpay/resources/customers/customers.py @@ -302,9 +302,6 @@ class TransactionLimit(TypedDict): class Owner(TypedDict): id: str instance_id: str - # Not yet added by the response middleware for nested owners; both keys are - # optional until the API sends customer_id here directly (post-#1799). - receiver_id: NotRequired[str] customer_id: NotRequired[str] role: OwnerRole first_name: str diff --git a/src/blindpay/resources/instances/instances.py b/src/blindpay/resources/instances/instances.py index 538cc56..0b464e5 100644 --- a/src/blindpay/resources/instances/instances.py +++ b/src/blindpay/resources/instances/instances.py @@ -24,7 +24,7 @@ class InstanceMember(TypedDict): class UpdateInstanceInput(TypedDict, total=False): name: str - receiver_invite_redirect_url: Optional[str] + customer_invite_redirect_url: Optional[str] email_notifications: bool require_passkey: bool diff --git a/src/blindpay/resources/payins/payins.py b/src/blindpay/resources/payins/payins.py index df9cffe..4324c60 100644 --- a/src/blindpay/resources/payins/payins.py +++ b/src/blindpay/resources/payins/payins.py @@ -57,7 +57,7 @@ class BankDetails(TypedDict): class Payin(TypedDict): - receiver_id: str + customer_id: str id: str pix_code: Optional[str] memo_code: Optional[str] @@ -102,7 +102,6 @@ class Payin(TypedDict): class ListPayinsInput(PaginationParams): status: Optional[TransactionStatus] - receiver_id: Optional[str] customer_id: Optional[str] @@ -136,7 +135,7 @@ class GetPayinTrackingTransaction(TypedDict): class GetPayinTrackResponse(TypedDict): - receiver_id: str + customer_id: str id: str pix_code: str memo_code: str @@ -193,7 +192,7 @@ class CreateEvmPayinResponse(TypedDict): tracking_transaction: Optional[TrackingTransaction] tracking_partner_fee: Optional[TrackingPartnerFee] blindpay_bank_details: BankDetails - receiver_id: str + customer_id: str receiver_amount: float diff --git a/src/blindpay/resources/payouts/payouts.py b/src/blindpay/resources/payouts/payouts.py index a234660..a3be429 100644 --- a/src/blindpay/resources/payouts/payouts.py +++ b/src/blindpay/resources/payouts/payouts.py @@ -29,7 +29,7 @@ class Payout(TypedDict): - receiver_id: str + customer_id: str id: str status: TransactionStatus sender_wallet_address: str @@ -56,7 +56,7 @@ class Payout(TypedDict): commercial_quotation: float blindpay_quotation: float total_fee_amount: float - receiver_local_amount: float + customer_local_amount: float currency: Currency # Excluding "USDT" | "USDB" transaction_document_file: str transaction_document_type: TransactionDocumentType @@ -102,7 +102,6 @@ class Payout(TypedDict): class ListPayoutsInput(PaginationParams, total=False): - receiver_id: str customer_id: str @@ -143,7 +142,7 @@ class CreateStellarPayoutResponse(TypedDict): tracking_transaction: Optional[TrackingTransaction] tracking_partner_fee: Optional[TrackingPartnerFee] tracking_liquidity: Optional[TrackingLiquidity] - receiver_id: str + customer_id: str class CreateEvmPayoutInput(TypedDict): @@ -160,7 +159,7 @@ class CreateEvmPayoutResponse(TypedDict): tracking_transaction: Optional[TrackingTransaction] tracking_partner_fee: Optional[TrackingPartnerFee] tracking_liquidity: Optional[TrackingLiquidity] - receiver_id: str + customer_id: str class CreateSolanaPayoutInput(TypedDict): @@ -177,7 +176,7 @@ class CreateSolanaPayoutResponse(TypedDict): tracking_transaction: Optional[TrackingTransaction] tracking_partner_fee: Optional[TrackingPartnerFee] tracking_liquidity: Optional[TrackingLiquidity] - receiver_id: str + customer_id: str class SubmitPayoutDocumentsInput(TypedDict): diff --git a/src/blindpay/resources/quotes/quotes.py b/src/blindpay/resources/quotes/quotes.py index b1f362e..f4ea7ca 100644 --- a/src/blindpay/resources/quotes/quotes.py +++ b/src/blindpay/resources/quotes/quotes.py @@ -51,7 +51,7 @@ class CreateQuoteResponse(TypedDict): partner_fee_amount: float flat_fee: float contract: Contract - receiver_local_amount: float + customer_local_amount: float description: str diff --git a/src/blindpay/resources/receivers/__init__.py b/src/blindpay/resources/receivers/__init__.py deleted file mode 100644 index b297bdf..0000000 --- a/src/blindpay/resources/receivers/__init__.py +++ /dev/null @@ -1,104 +0,0 @@ -from .receivers import ( - AccountPurpose, - AmlHits, - AmlStatus, - BusinessIndustry, - BusinessType, - BusinessWithStandardKYB, - CreateBusinessWithStandardKYBInput, - CreateBusinessWithStandardKYBResponse, - CreateIndividualWithEnhancedKYCInput, - CreateIndividualWithEnhancedKYCResponse, - CreateIndividualWithStandardKYCInput, - CreateIndividualWithStandardKYCResponse, - EnhancedKycType, - EstimatedAnnualRevenue, - FraudWarning, - GetLimitIncreaseRequestsResponse, - GetReceiverLimitsResponse, - GetReceiverResponse, - IdentificationDocument, - IndividualType, - IndividualWithEnhancedKYC, - IndividualWithStandardKYC, - KycType, - KycWarning, - LimitIncreaseRequest, - LimitIncreaseRequestStatus, - LimitIncreaseRequestSupportingDocumentType, - ListReceiversInput, - ListReceiversPaginatedResponse, - ListReceiversResponse, - Owner, - OwnerRole, - OwnerUpdate, - ProofOfAddressDocType, - PurposeOfTransactions, - ReceiverBusinessType, - ReceiversResource, - ReceiversResourceSync, - ReceiverStatus, - RequestLimitIncreaseInput, - RequestLimitIncreaseResponse, - SoleProprietorDocType, - SourceOfFundsDocType, - SourceOfWealth, - TaxType, - TransactionLimit, - UpdateReceiverInput, - create_receivers_resource, - create_receivers_resource_sync, -) - -__all__ = [ - "create_receivers_resource", - "create_receivers_resource_sync", - "ReceiversResource", - "ReceiversResourceSync", - "IndividualWithStandardKYC", - "IndividualWithEnhancedKYC", - "BusinessWithStandardKYB", - "CreateIndividualWithStandardKYCInput", - "CreateIndividualWithEnhancedKYCInput", - "CreateBusinessWithStandardKYBInput", - "UpdateReceiverInput", - "GetReceiverLimitsResponse", - "KycType", - "BusinessType", - "IndividualType", - "EnhancedKycType", - "ProofOfAddressDocType", - "PurposeOfTransactions", - "SourceOfFundsDocType", - "IdentificationDocument", - "OwnerRole", - "KycWarning", - "TransactionLimit", - "Owner", - "CreateBusinessWithStandardKYBResponse", - "CreateIndividualWithEnhancedKYCResponse", - "CreateIndividualWithStandardKYCResponse", - "ListReceiversResponse", - "GetReceiverResponse", - "OwnerUpdate", - "UpdateReceiverInput", - "LimitIncreaseRequest", - "LimitIncreaseRequestStatus", - "LimitIncreaseRequestSupportingDocumentType", - "GetLimitIncreaseRequestsResponse", - "RequestLimitIncreaseInput", - "RequestLimitIncreaseResponse", - "ReceiverStatus", - "AccountPurpose", - "ReceiverBusinessType", - "BusinessIndustry", - "EstimatedAnnualRevenue", - "SoleProprietorDocType", - "SourceOfWealth", - "TaxType", - "AmlStatus", - "FraudWarning", - "AmlHits", - "ListReceiversInput", - "ListReceiversPaginatedResponse", -] diff --git a/src/blindpay/resources/receivers/receivers.py b/src/blindpay/resources/receivers/receivers.py deleted file mode 100644 index 77c420e..0000000 --- a/src/blindpay/resources/receivers/receivers.py +++ /dev/null @@ -1,859 +0,0 @@ -from typing import List, Optional, Union -from urllib.parse import urlencode - -from typing_extensions import Literal, TypedDict - -from ..._internal.api_client import InternalApiClient, InternalApiClientSync -from ...types import ( - BlindpayApiResponse, - Country, - PaginationMetadata, - PaginationParams, -) - -IndividualType = Literal["individual"] -BusinessType = Literal["business"] -StandardKycType = Literal["standard"] -EnhancedKycType = Literal["enhanced"] -KycType = Literal["light", "standard", "enhanced"] -KycStatus = Literal["awaiting_contract", "compliance_request"] - -ProofOfAddressDocType = Literal[ - "UTILITY_BILL", "BANK_STATEMENT", "RENTAL_AGREEMENT", "TAX_DOCUMENT", "GOVERNMENT_CORRESPONDENCE" -] - -PurposeOfTransactions = Literal[ - "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", -] - -SourceOfFundsDocType = Literal[ - "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", -] - -SoleProprietorDocType = Literal["bank_statement", "master_service_agreement", "salary_slip"] - -IdentificationDocument = Literal["PASSPORT", "ID_CARD", "DRIVERS"] - -OwnerRole = Literal["beneficial_controlling", "beneficial_owner", "controlling_person"] - -LimitIncreaseRequestStatus = Literal["in_review", "approved", "rejected"] - -LimitIncreaseRequestSupportingDocumentType = Literal[ - "individual_bank_statement", - "individual_tax_return", - "individual_proof_of_income", - "business_bank_statement", - "business_financial_statements", - "business_tax_return", -] - -ReceiverStatus = Literal["verifying", "approved", "rejected", "deprecated", "pending_review"] - -AccountPurpose = Literal[ - "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", -] - -ReceiverBusinessType = Literal["corporation", "llc", "partnership", "sole_proprietorship", "trust", "non_profit"] - -BusinessIndustry = Literal[ - "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", - "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", - "dapp", - "exchange", - "gambling", - "gaming", - "infra", - "marketplace", - "neo_bank", - "other", - "saas", - "social", - "wallet", -] - -EstimatedAnnualRevenue = Literal[ - "0_99999", - "100000_999999", - "1000000_9999999", - "10000000_49999999", - "50000000_249999999", - "2500000000_plus", -] - -SourceOfWealth = Literal[ - "business_dividends_or_profits", - "investments", - "asset_sales", - "client_investor_contributions", - "gambling", - "charitable_contributions", - "inheritance", - "affiliate_or_royalty_income", -] - -TaxType = Literal["SSN", "ITIN"] - -AmlStatus = Literal["clear", "hit", "error"] - - -class FraudWarning(TypedDict): - id: Optional[str] - name: Optional[str] - operation: Optional[str] - score: Optional[float] - - -class AmlHits(TypedDict): - has_sanction_match: bool - has_pep_match: bool - has_watchlist_match: bool - has_crimelist_match: bool - has_adversemedia_match: bool - - -class KycWarning(TypedDict): - code: Optional[str] - message: Optional[str] - resolution_status: Optional[str] - warning_id: Optional[str] - - -class TransactionLimit(TypedDict): - per_transaction: float - daily: float - monthly: float - - -class Owner(TypedDict): - id: str - instance_id: str - receiver_id: str - role: OwnerRole - first_name: str - last_name: str - date_of_birth: str - tax_id: str - address_line_1: str - address_line_2: Optional[str] - city: str - state_province_region: str - country: Country - postal_code: str - id_doc_country: Country - id_doc_type: IdentificationDocument - id_doc_front_file: str - id_doc_back_file: Optional[str] - proof_of_address_doc_type: ProofOfAddressDocType - proof_of_address_doc_file: str - ownership_percentage: Optional[int] - title: Optional[str] - tax_type: Optional[TaxType] - - -class IndividualWithStandardKYC(TypedDict): - id: str - type: IndividualType - kyc_type: StandardKycType - kyc_status: KycStatus - kyc_warnings: Optional[List[KycWarning]] - email: str - tax_id: str - address_line_1: str - address_line_2: Optional[str] - city: str - state_province_region: str - country: Country - postal_code: str - ip_address: Optional[str] - image_url: Optional[str] - phone_number: str - proof_of_address_doc_type: ProofOfAddressDocType - proof_of_address_doc_file: str - first_name: str - last_name: str - date_of_birth: str - id_doc_country: Country - id_doc_type: IdentificationDocument - id_doc_front_file: str - id_doc_back_file: str - aiprise_validation_key: str - instance_id: str - tos_id: Optional[str] - created_at: str - updated_at: str - limit: TransactionLimit - fraud_warnings: Optional[List[FraudWarning]] - selfie_file: Optional[str] - is_fbo: Optional[bool] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - business_type: Optional[ReceiverBusinessType] - business_description: Optional[str] - business_industry: Optional[BusinessIndustry] - estimated_annual_revenue: Optional[EstimatedAnnualRevenue] - source_of_wealth: Optional[SourceOfWealth] - publicly_traded: Optional[bool] - occupation: Optional[str] - external_id: Optional[str] - aml_status: Optional[AmlStatus] - aml_hits: Optional[AmlHits] - is_tos_accepted: Optional[bool] - - -class IndividualWithEnhancedKYC(TypedDict): - id: str - type: IndividualType - kyc_type: EnhancedKycType - kyc_status: KycStatus - kyc_warnings: Optional[List[KycWarning]] - email: str - tax_id: str - address_line_1: str - address_line_2: Optional[str] - city: str - state_province_region: str - country: Country - postal_code: str - ip_address: Optional[str] - image_url: Optional[str] - phone_number: Optional[str] - proof_of_address_doc_type: ProofOfAddressDocType - proof_of_address_doc_file: str - first_name: str - last_name: str - date_of_birth: str - id_doc_country: Country - id_doc_type: IdentificationDocument - id_doc_front_file: str - id_doc_back_file: Optional[str] - aiprise_validation_key: str - instance_id: str - source_of_funds_doc_type: str - source_of_funds_doc_file: str - individual_holding_doc_front_file: str - purpose_of_transactions: PurposeOfTransactions - purpose_of_transactions_explanation: Optional[str] - tos_id: Optional[str] - created_at: str - updated_at: str - limit: TransactionLimit - fraud_warnings: Optional[List[FraudWarning]] - selfie_file: Optional[str] - is_fbo: Optional[bool] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - business_type: Optional[ReceiverBusinessType] - business_description: Optional[str] - business_industry: Optional[BusinessIndustry] - estimated_annual_revenue: Optional[EstimatedAnnualRevenue] - source_of_wealth: Optional[SourceOfWealth] - publicly_traded: Optional[bool] - occupation: Optional[str] - external_id: Optional[str] - aml_status: Optional[AmlStatus] - aml_hits: Optional[AmlHits] - is_tos_accepted: Optional[bool] - - -class BusinessWithStandardKYB(TypedDict): - id: str - type: BusinessType - kyc_type: StandardKycType - kyc_status: KycStatus - kyc_warnings: Optional[List[KycWarning]] - email: str - tax_id: str - address_line_1: str - address_line_2: Optional[str] - city: str - state_province_region: str - country: Country - postal_code: str - ip_address: Optional[str] - image_url: Optional[str] - phone_number: Optional[str] - proof_of_address_doc_type: ProofOfAddressDocType - proof_of_address_doc_file: str - legal_name: str - alternate_name: Optional[str] - formation_date: str - website: Optional[str] - owners: List[Owner] - incorporation_doc_file: str - proof_of_ownership_doc_file: str - external_id: Optional[str] - instance_id: str - tos_id: Optional[str] - aiprise_validation_key: str - created_at: str - updated_at: str - limit: TransactionLimit - fraud_warnings: Optional[List[FraudWarning]] - selfie_file: Optional[str] - is_fbo: Optional[bool] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - business_type: Optional[ReceiverBusinessType] - business_description: Optional[str] - business_industry: Optional[BusinessIndustry] - estimated_annual_revenue: Optional[EstimatedAnnualRevenue] - source_of_wealth: Optional[SourceOfWealth] - publicly_traded: Optional[bool] - occupation: Optional[str] - aml_status: Optional[AmlStatus] - aml_hits: Optional[AmlHits] - is_tos_accepted: Optional[bool] - - -class CreateIndividualWithStandardKYCInput(TypedDict): - external_id: Optional[str] - address_line_1: str - address_line_2: Optional[str] - city: str - country: Country - date_of_birth: str - email: str - first_name: str - phone_number: Optional[str] - id_doc_country: Country - id_doc_front_file: str - id_doc_type: IdentificationDocument - id_doc_back_file: Optional[str] - last_name: str - postal_code: str - proof_of_address_doc_file: str - proof_of_address_doc_type: ProofOfAddressDocType - state_province_region: str - tax_id: str - tos_id: str - ip_address: Optional[str] - image_url: Optional[str] - selfie_file: Optional[str] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - occupation: Optional[str] - - -class CreateIndividualWithStandardKYCResponse(TypedDict): - id: str - - -class CreateIndividualWithEnhancedKYCInput(TypedDict): - external_id: Optional[str] - address_line_1: str - address_line_2: Optional[str] - city: str - country: Country - date_of_birth: str - email: str - first_name: str - id_doc_country: Country - id_doc_front_file: str - id_doc_type: IdentificationDocument - id_doc_back_file: Optional[str] - individual_holding_doc_front_file: str - last_name: str - postal_code: str - phone_number: Optional[str] - proof_of_address_doc_file: str - proof_of_address_doc_type: ProofOfAddressDocType - purpose_of_transactions: PurposeOfTransactions - source_of_funds_doc_file: str - source_of_funds_doc_type: SourceOfFundsDocType - purpose_of_transactions_explanation: Optional[str] - state_province_region: str - tax_id: str - tos_id: str - ip_address: Optional[str] - image_url: Optional[str] - selfie_file: Optional[str] - is_fbo: Optional[bool] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - occupation: Optional[str] - - -class CreateIndividualWithEnhancedKYCResponse(TypedDict): - id: str - - -class CreateBusinessWithStandardKYBInput(TypedDict): - external_id: Optional[str] - address_line_1: str - address_line_2: Optional[str] - alternate_name: str - city: str - country: Country - email: str - formation_date: str - incorporation_doc_file: str - legal_name: str - owners: List[Owner] - postal_code: str - proof_of_address_doc_file: str - proof_of_address_doc_type: ProofOfAddressDocType - proof_of_ownership_doc_file: str - state_province_region: str - tax_id: str - tos_id: str - website: Optional[str] - ip_address: Optional[str] - image_url: Optional[str] - phone_number: Optional[str] - selfie_file: Optional[str] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - business_type: Optional[ReceiverBusinessType] - business_description: Optional[str] - business_industry: Optional[BusinessIndustry] - estimated_annual_revenue: Optional[EstimatedAnnualRevenue] - source_of_wealth: Optional[SourceOfWealth] - publicly_traded: Optional[bool] - occupation: Optional[str] - - -class CreateBusinessWithStandardKYBResponse(TypedDict): - id: str - - -ListReceiversResponse = List[Union[IndividualWithStandardKYC, IndividualWithEnhancedKYC, BusinessWithStandardKYB]] - - -class ListReceiversPaginatedResponse(TypedDict): - data: List[Union[IndividualWithStandardKYC, IndividualWithEnhancedKYC, BusinessWithStandardKYB]] - pagination: PaginationMetadata - - -class ListReceiversInput(PaginationParams, total=False): - full_name: str - receiver_name: str - status: ReceiverStatus - receiver_id: str - bank_account_id: str - country: str - - -GetReceiverResponse = Union[IndividualWithStandardKYC, IndividualWithEnhancedKYC, BusinessWithStandardKYB] - - -class OwnerUpdate(TypedDict): - id: str - first_name: str - last_name: str - role: OwnerRole - date_of_birth: str - tax_id: str - address_line_1: str - address_line_2: Optional[str] - city: str - state_province_region: str - country: Country - postal_code: str - id_doc_country: Country - id_doc_type: IdentificationDocument - id_doc_front_file: str - id_doc_back_file: Optional[str] - ownership_percentage: Optional[int] - title: Optional[str] - tax_type: Optional[TaxType] - proof_of_address_doc_type: Optional[ProofOfAddressDocType] - proof_of_address_doc_file: Optional[str] - - -class UpdateReceiverInput(TypedDict): - receiver_id: str - email: Optional[str] - tax_id: Optional[str] - address_line_1: Optional[str] - address_line_2: Optional[str] - city: Optional[str] - state_province_region: Optional[str] - country: Optional[Country] - postal_code: Optional[str] - ip_address: Optional[str] - image_url: Optional[str] - phone_number: Optional[str] - proof_of_address_doc_type: Optional[ProofOfAddressDocType] - proof_of_address_doc_file: Optional[str] - first_name: Optional[str] - last_name: Optional[str] - date_of_birth: Optional[str] - id_doc_country: Optional[Country] - id_doc_type: Optional[IdentificationDocument] - id_doc_front_file: Optional[str] - id_doc_back_file: Optional[str] - legal_name: Optional[str] - alternate_name: Optional[str] - formation_date: Optional[str] - website: Optional[str] - owners: Optional[List[OwnerUpdate]] - incorporation_doc_file: Optional[str] - proof_of_ownership_doc_file: Optional[str] - source_of_funds_doc_type: Optional[SourceOfFundsDocType] - source_of_funds_doc_file: Optional[str] - individual_holding_doc_front_file: Optional[str] - purpose_of_transactions: Optional[PurposeOfTransactions] - purpose_of_transactions_explanation: Optional[str] - external_id: Optional[str] - tos_id: Optional[str] - selfie_file: Optional[str] - account_purpose: Optional[AccountPurpose] - account_purpose_other: Optional[str] - business_type: Optional[ReceiverBusinessType] - business_description: Optional[str] - business_industry: Optional[BusinessIndustry] - estimated_annual_revenue: Optional[EstimatedAnnualRevenue] - source_of_wealth: Optional[SourceOfWealth] - publicly_traded: Optional[bool] - occupation: Optional[str] - - -class PayinLimit(TypedDict): - daily: float - monthly: float - - -class PayoutLimit(TypedDict): - daily: float - monthly: float - - -class Limits(TypedDict): - payin: PayinLimit - payout: PayoutLimit - - -class GetReceiverLimitsResponse(TypedDict): - limits: Limits - - -class LimitIncreaseRequest(TypedDict): - id: str - receiver_id: str - status: LimitIncreaseRequestStatus - daily: float - monthly: float - per_transaction: float - supporting_document_file: str - supporting_document_type: LimitIncreaseRequestSupportingDocumentType - created_at: str - updated_at: str - - -GetLimitIncreaseRequestsResponse = List[LimitIncreaseRequest] - - -class RequestLimitIncreaseInput(TypedDict): - receiver_id: str - daily: float - monthly: float - per_transaction: float - supporting_document_file: str - supporting_document_type: LimitIncreaseRequestSupportingDocumentType - - -class RequestLimitIncreaseResponse(TypedDict): - id: str - - -class ReceiversResource: - def __init__(self, instance_id: str, client: InternalApiClient): - self._instance_id = instance_id - self._client = client - - async def list( - self, params: Optional[ListReceiversInput] = None - ) -> BlindpayApiResponse[Union[ListReceiversResponse, ListReceiversPaginatedResponse]]: - query_string = "" - if params: - filtered_params = {k: v for k, v in params.items() if v is not None} - if filtered_params: - query_string = f"?{urlencode(filtered_params)}" - return await self._client.get(f"/instances/{self._instance_id}/receivers{query_string}") - - async def create_individual_with_standard_kyc( - self, data: CreateIndividualWithStandardKYCInput - ) -> BlindpayApiResponse[CreateIndividualWithStandardKYCResponse]: - payload = {"kyc_type": "standard", "type": "individual", **data} - return await self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - async def create_individual_with_enhanced_kyc( - self, data: CreateIndividualWithEnhancedKYCInput - ) -> BlindpayApiResponse[CreateIndividualWithEnhancedKYCResponse]: - payload = {"kyc_type": "enhanced", "type": "individual", **data} - return await self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - async def create_business_with_standard_kyb( - self, data: CreateBusinessWithStandardKYBInput - ) -> BlindpayApiResponse[CreateBusinessWithStandardKYBResponse]: - payload = {"kyc_type": "standard", "type": "business", **data} - return await self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - async def get(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverResponse]: - return await self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}") - - async def update(self, data: UpdateReceiverInput) -> BlindpayApiResponse[None]: - receiver_id = data["receiver_id"] - payload = {k: v for k, v in data.items() if k != "receiver_id"} - return await self._client.put(f"/instances/{self._instance_id}/receivers/{receiver_id}", payload) - - async def delete(self, receiver_id: str) -> BlindpayApiResponse[None]: - return await self._client.delete(f"/instances/{self._instance_id}/receivers/{receiver_id}") - - async def get_limits(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverLimitsResponse]: - return await self._client.get(f"/instances/{self._instance_id}/limits/receivers/{receiver_id}") - - async def get_limit_increase_requests( - self, receiver_id: str - ) -> BlindpayApiResponse[GetLimitIncreaseRequestsResponse]: - return await self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase") - - async def request_limit_increase( - self, data: RequestLimitIncreaseInput - ) -> BlindpayApiResponse[RequestLimitIncreaseResponse]: - receiver_id = data["receiver_id"] - payload = {k: v for k, v in data.items() if k != "receiver_id"} - return await self._client.post( - f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase", payload - ) - - -class ReceiversResourceSync: - def __init__(self, instance_id: str, client: InternalApiClientSync): - self._instance_id = instance_id - self._client = client - - def list( - self, params: Optional[ListReceiversInput] = None - ) -> BlindpayApiResponse[Union[ListReceiversResponse, ListReceiversPaginatedResponse]]: - query_string = "" - if params: - filtered_params = {k: v for k, v in params.items() if v is not None} - if filtered_params: - query_string = f"?{urlencode(filtered_params)}" - return self._client.get(f"/instances/{self._instance_id}/receivers{query_string}") - - def create_individual_with_standard_kyc( - self, data: CreateIndividualWithStandardKYCInput - ) -> BlindpayApiResponse[CreateIndividualWithStandardKYCResponse]: - payload = {"kyc_type": "standard", "type": "individual", **data} - return self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - def create_individual_with_enhanced_kyc( - self, data: CreateIndividualWithEnhancedKYCInput - ) -> BlindpayApiResponse[CreateIndividualWithEnhancedKYCResponse]: - payload = {"kyc_type": "enhanced", "type": "individual", **data} - return self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - def create_business_with_standard_kyb( - self, data: CreateBusinessWithStandardKYBInput - ) -> BlindpayApiResponse[CreateBusinessWithStandardKYBResponse]: - payload = {"kyc_type": "standard", "type": "business", **data} - return self._client.post(f"/instances/{self._instance_id}/receivers", payload) - - def get(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverResponse]: - return self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}") - - def update(self, data: UpdateReceiverInput) -> BlindpayApiResponse[None]: - receiver_id = data["receiver_id"] - payload = {k: v for k, v in data.items() if k != "receiver_id"} - return self._client.put(f"/instances/{self._instance_id}/receivers/{receiver_id}", payload) - - def delete(self, receiver_id: str) -> BlindpayApiResponse[None]: - return self._client.delete(f"/instances/{self._instance_id}/receivers/{receiver_id}") - - def get_limits(self, receiver_id: str) -> BlindpayApiResponse[GetReceiverLimitsResponse]: - return self._client.get(f"/instances/{self._instance_id}/limits/receivers/{receiver_id}") - - def get_limit_increase_requests(self, receiver_id: str) -> BlindpayApiResponse[GetLimitIncreaseRequestsResponse]: - return self._client.get(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase") - - def request_limit_increase( - self, data: RequestLimitIncreaseInput - ) -> BlindpayApiResponse[RequestLimitIncreaseResponse]: - receiver_id = data["receiver_id"] - payload = {k: v for k, v in data.items() if k != "receiver_id"} - return self._client.post(f"/instances/{self._instance_id}/receivers/{receiver_id}/limit-increase", payload) - - -def create_receivers_resource(instance_id: str, client: InternalApiClient) -> ReceiversResource: - return ReceiversResource(instance_id, client) - - -def create_receivers_resource_sync(instance_id: str, client: InternalApiClientSync) -> ReceiversResourceSync: - return ReceiversResourceSync(instance_id, client) diff --git a/src/blindpay/resources/terms_of_service/terms_of_service.py b/src/blindpay/resources/terms_of_service/terms_of_service.py index 47057d8..03ff027 100644 --- a/src/blindpay/resources/terms_of_service/terms_of_service.py +++ b/src/blindpay/resources/terms_of_service/terms_of_service.py @@ -6,7 +6,7 @@ class InitiateInput(TypedDict): idempotency_key: str - receiver_id: Optional[str] + customer_id: Optional[str] redirect_url: Optional[str] diff --git a/src/blindpay/resources/transfers/transfers.py b/src/blindpay/resources/transfers/transfers.py index 9216b24..34e2237 100644 --- a/src/blindpay/resources/transfers/transfers.py +++ b/src/blindpay/resources/transfers/transfers.py @@ -24,9 +24,9 @@ class TransferTrackingStep(TypedDict): class CreateTransferQuoteInput(TypedDict, total=False): wallet_id: str sender_token: StablecoinToken - receiver_wallet_address: str - receiver_token: StablecoinToken - receiver_network: Network + customer_wallet_address: str + customer_token: StablecoinToken + customer_network: Network request_amount: int amount_reference: AmountReference cover_fees: Optional[bool] @@ -57,10 +57,10 @@ class Transfer(TypedDict): sender_token: StablecoinToken sender_amount: float receiver_amount: float - receiver_token: StablecoinToken - receiver_network: Network - receiver_wallet_address: str - receiver_id: str + customer_token: StablecoinToken + customer_network: Network + customer_wallet_address: str + customer_id: str address: str network: str tracking_transaction_monitoring: TransferTrackingStep diff --git a/src/blindpay/resources/webhooks/webhooks.py b/src/blindpay/resources/webhooks/webhooks.py index b937f74..861c9ff 100644 --- a/src/blindpay/resources/webhooks/webhooks.py +++ b/src/blindpay/resources/webhooks/webhooks.py @@ -6,15 +6,6 @@ from ...types import BlindpayApiResponse WebhookEvents = Literal[ - # deprecated: use "customer.new" instead. See - # https://www.blindpay.com/changelog/2026-06-04-customers-rename - "receiver.new", - # deprecated: use "customer.update" instead. See - # https://www.blindpay.com/changelog/2026-06-04-customers-rename - "receiver.update", - # deprecated: use "customer.delete" instead. See - # https://www.blindpay.com/changelog/2026-06-04-customers-rename - "receiver.delete", "customer.new", "customer.update", "customer.delete", diff --git a/src/blindpay/types.py b/src/blindpay/types.py index 5e1dff3..0dfcb40 100644 --- a/src/blindpay/types.py +++ b/src/blindpay/types.py @@ -407,8 +407,3 @@ class TrackingPartnerFee(TypedDict): ApprovalRate = Literal["high", "low", "medium"] ManualExecutionStatus = Literal["failed"] - -# Deprecated: use WebhookEvents from blindpay.resources.webhooks, which lists every -# event. Kept exported so this stays an additive release; scheduled for removal in the -# next major. -WebhookEvent = Literal["receiver.delete"] diff --git a/tests/resources/test_api_keys.py b/tests/resources/test_api_keys.py deleted file mode 100644 index 56865f3..0000000 --- a/tests/resources/test_api_keys.py +++ /dev/null @@ -1,188 +0,0 @@ -from unittest.mock import patch - -import pytest - -from blindpay import BlindPay, BlindPaySync - - -class TestApiKeys: - @pytest.fixture(autouse=True) - def setup(self): - self.blindpay = BlindPay(api_key="test-key", instance_id="in_000000000000") - - @pytest.mark.asyncio - async def test_create_api_key(self): - mocked_api_key = { - "id": "ap_000000000000", - "token": "token", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_key, "error": None} - - response = await self.blindpay.instances.api_keys.create( - { - "name": "test", - "permission": "full_access", - "ip_whitelist": [], - } - ) - - assert response["error"] is None - assert response["data"] == mocked_api_key - mock_request.assert_called_once_with( - "POST", - "/instances/in_000000000000/api-keys", - {"name": "test", "permission": "full_access", "ip_whitelist": []}, - ) - - @pytest.mark.asyncio - async def test_get_api_key(self): - mocked_api_key = { - "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", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_key, "error": None} - - response = await self.blindpay.instances.api_keys.get("ap_000000000000") - - assert response["error"] is None - assert response["data"] == mocked_api_key - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/api-keys/ap_000000000000") - - @pytest.mark.asyncio - async def test_list_api_keys(self): - mocked_api_keys = [ - { - "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", - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_keys, "error": None} - - response = await self.blindpay.instances.api_keys.list() - - assert response["error"] is None - assert response["data"] == mocked_api_keys - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/api-keys") - - @pytest.mark.asyncio - async def test_delete_api_key(self): - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = await self.blindpay.instances.api_keys.delete("ap_000000000000") - - assert response["error"] is None - assert response["data"] == {"data": None} - mock_request.assert_called_once_with("DELETE", "/instances/in_000000000000/api-keys/ap_000000000000", None) - - -class TestApiKeysSync: - @pytest.fixture(autouse=True) - def setup(self): - self.blindpay = BlindPaySync(api_key="test-key", instance_id="in_000000000000") - - def test_create_api_key(self): - mocked_api_key = { - "id": "ap_000000000000", - "token": "token", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_key, "error": None} - - response = self.blindpay.instances.api_keys.create( - { - "name": "test", - "permission": "full_access", - "ip_whitelist": [], - } - ) - - assert response["error"] is None - assert response["data"] == mocked_api_key - mock_request.assert_called_once_with( - "POST", - "/instances/in_000000000000/api-keys", - {"name": "test", "permission": "full_access", "ip_whitelist": []}, - ) - - def test_get_api_key(self): - mocked_api_key = { - "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", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_key, "error": None} - - response = self.blindpay.instances.api_keys.get("ap_000000000000") - - assert response["error"] is None - assert response["data"] == mocked_api_key - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/api-keys/ap_000000000000") - - def test_list_api_keys(self): - mocked_api_keys = [ - { - "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", - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_api_keys, "error": None} - - response = self.blindpay.instances.api_keys.list() - - assert response["error"] is None - assert response["data"] == mocked_api_keys - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/api-keys") - - def test_delete_api_key(self): - """Test deleting an API key.""" - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = self.blindpay.instances.api_keys.delete("ap_000000000000") - - assert response["error"] is None - assert response["data"] == {"data": None} - mock_request.assert_called_once_with("DELETE", "/instances/in_000000000000/api-keys/ap_000000000000", None) diff --git a/tests/resources/test_bank_accounts.py b/tests/resources/test_bank_accounts.py index 25420e5..2378c80 100644 --- a/tests/resources/test_bank_accounts.py +++ b/tests/resources/test_bank_accounts.py @@ -23,7 +23,7 @@ async def test_create_pix_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_pix_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_pix( + response = await self.blindpay.customers.bank_accounts.create_pix( { "customer_id": "re_000000000000", "name": "PIX Account", @@ -49,7 +49,7 @@ async def test_create_argentina_transfers_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_argentina_transfers_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_argentina_transfers( + response = await self.blindpay.customers.bank_accounts.create_argentina_transfers( { "customer_id": "re_000000000000", "name": "Argentina Transfers Account", @@ -78,7 +78,7 @@ async def test_create_spei_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_spei_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_spei( + response = await self.blindpay.customers.bank_accounts.create_spei( { "customer_id": "re_000000000000", "name": "SPEI Account", @@ -112,7 +112,7 @@ async def test_create_colombia_ach_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_colombia_ach_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_colombia_ach( + response = await self.blindpay.customers.bank_accounts.create_colombia_ach( { "customer_id": "re_000000000000", "name": "Colombia ACH Account", @@ -160,7 +160,7 @@ async def test_create_ach_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_ach_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_ach( + response = await self.blindpay.customers.bank_accounts.create_ach( { "customer_id": "re_000000000000", "name": "ACH Account", @@ -196,7 +196,7 @@ async def test_create_wire_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_wire_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_wire( + response = await self.blindpay.customers.bank_accounts.create_wire( { "customer_id": "re_000000000000", "name": "Wire Account", @@ -254,7 +254,7 @@ async def test_create_international_swift_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_international_swift_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_international_swift( + response = await self.blindpay.customers.bank_accounts.create_international_swift( { "customer_id": "re_000000000000", "name": "International Swift Account", @@ -307,7 +307,7 @@ async def test_create_rtp_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_rtp_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.create_rtp( + response = await self.blindpay.customers.bank_accounts.create_rtp( { "customer_id": "re_000000000000", "name": "John Doe RTP", @@ -346,7 +346,7 @@ async def test_get_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_bank_account, "error": None} - response = await self.blindpay.receivers.bank_accounts.get("re_000000000000", "ba_000000000000") + response = await self.blindpay.customers.bank_accounts.get("re_000000000000", "ba_000000000000") assert response["error"] is None assert response["data"] == mocked_bank_account @@ -424,7 +424,7 @@ async def test_list_bank_accounts(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_bank_accounts, "error": None} - response = await self.blindpay.receivers.bank_accounts.list("re_000000000000") + response = await self.blindpay.customers.bank_accounts.list("re_000000000000") assert response["error"] is None assert response["data"] == mocked_bank_accounts @@ -434,7 +434,7 @@ async def test_delete_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": {"data": None}, "error": None} - response = await self.blindpay.receivers.bank_accounts.delete("re_000000000000", "ba_000000000000") + response = await self.blindpay.customers.bank_accounts.delete("re_000000000000", "ba_000000000000") assert response["error"] is None assert response["data"] == {"data": None} @@ -457,7 +457,7 @@ def test_create_pix_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_pix_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_pix( + response = self.blindpay.customers.bank_accounts.create_pix( { "customer_id": "re_000000000000", "name": "PIX Account", @@ -482,7 +482,7 @@ def test_create_argentina_transfers_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_argentina_transfers_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_argentina_transfers( + response = self.blindpay.customers.bank_accounts.create_argentina_transfers( { "customer_id": "re_000000000000", "name": "Argentina Transfers Account", @@ -510,7 +510,7 @@ def test_create_spei_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_spei_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_spei( + response = self.blindpay.customers.bank_accounts.create_spei( { "customer_id": "re_000000000000", "name": "SPEI Account", @@ -543,7 +543,7 @@ def test_create_colombia_ach_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_colombia_ach_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_colombia_ach( + response = self.blindpay.customers.bank_accounts.create_colombia_ach( { "customer_id": "re_000000000000", "name": "Colombia ACH Account", @@ -590,7 +590,7 @@ def test_create_ach_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_ach_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_ach( + response = self.blindpay.customers.bank_accounts.create_ach( { "customer_id": "re_000000000000", "name": "ACH Account", @@ -625,7 +625,7 @@ def test_create_wire_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_wire_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_wire( + response = self.blindpay.customers.bank_accounts.create_wire( { "customer_id": "re_000000000000", "name": "Wire Account", @@ -682,7 +682,7 @@ def test_create_international_swift_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_international_swift_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_international_swift( + response = self.blindpay.customers.bank_accounts.create_international_swift( { "customer_id": "re_000000000000", "name": "International Swift Account", @@ -734,7 +734,7 @@ def test_create_rtp_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_rtp_account, "error": None} - response = self.blindpay.receivers.bank_accounts.create_rtp( + response = self.blindpay.customers.bank_accounts.create_rtp( { "customer_id": "re_000000000000", "name": "John Doe RTP", @@ -772,7 +772,7 @@ def test_get_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_bank_account, "error": None} - response = self.blindpay.receivers.bank_accounts.get("re_000000000000", "ba_000000000000") + response = self.blindpay.customers.bank_accounts.get("re_000000000000", "ba_000000000000") assert response["error"] is None assert response["data"] == mocked_bank_account @@ -849,7 +849,7 @@ def test_list_bank_accounts(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": mocked_bank_accounts, "error": None} - response = self.blindpay.receivers.bank_accounts.list("re_000000000000") + response = self.blindpay.customers.bank_accounts.list("re_000000000000") assert response["error"] is None assert response["data"] == mocked_bank_accounts @@ -858,7 +858,7 @@ def test_delete_bank_account(self): with patch.object(self.blindpay._api, "_request") as mock_request: mock_request.return_value = {"data": {"data": None}, "error": None} - response = self.blindpay.receivers.bank_accounts.delete("re_000000000000", "ba_000000000000") + response = self.blindpay.customers.bank_accounts.delete("re_000000000000", "ba_000000000000") assert response["error"] is None assert response["data"] == {"data": None} diff --git a/tests/resources/test_payins.py b/tests/resources/test_payins.py index ad4df57..e19aa35 100644 --- a/tests/resources/test_payins.py +++ b/tests/resources/test_payins.py @@ -15,7 +15,7 @@ async def test_list_payins(self): mocked_payins = { "data": [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -121,7 +121,7 @@ async def test_list_payins(self): @pytest.mark.asyncio async def test_get_payin(self): mocked_payin = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -221,7 +221,7 @@ async def test_get_payin(self): async def test_export_payins(self): mocked_export_payins = [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -387,7 +387,7 @@ async def test_create_evm_payin(self): "address_line_2": "San Francisco, CA 94129", }, }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "receiver_amount": 1010, } @@ -412,7 +412,7 @@ def test_list_payins(self): mocked_payins = { "data": [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -517,7 +517,7 @@ def test_list_payins(self): def test_get_payin(self): mocked_payin = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -615,7 +615,7 @@ def test_get_payin(self): def test_get_payin_track(self): mocked_payin_track = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -717,7 +717,7 @@ def test_get_payin_track(self): def test_export_payins(self): mocked_export_payins = [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "re_000000000000", "pix_code": ( "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/" @@ -882,7 +882,7 @@ def test_create_evm_payin(self): "address_line_2": "San Francisco, CA 94129", }, }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "receiver_amount": 1010, } diff --git a/tests/resources/test_payouts.py b/tests/resources/test_payouts.py index a39bcd2..2848990 100644 --- a/tests/resources/test_payouts.py +++ b/tests/resources/test_payouts.py @@ -15,7 +15,7 @@ async def test_list_payouts(self): mocked_payouts = { "data": [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -69,7 +69,7 @@ async def test_list_payouts(self): "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", @@ -126,7 +126,7 @@ async def test_list_payouts(self): @pytest.mark.asyncio async def test_get_payout(self): mocked_payout = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -180,7 +180,7 @@ async def test_get_payout(self): "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", @@ -231,7 +231,7 @@ async def test_get_payout(self): async def test_export_payouts(self): mocked_export_payouts = [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -285,7 +285,7 @@ async def test_export_payouts(self): "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", @@ -336,7 +336,7 @@ async def test_export_payouts(self): @pytest.mark.asyncio async def test_get_payout_track(self): mocked_payout_track = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -390,7 +390,7 @@ async def test_get_payout_track(self): "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", @@ -502,7 +502,7 @@ async def test_create_stellar_payout(self): "estimated_time_of_arrival": "1_business_day", "completed_at": "2011-10-05T14:48:00.000Z", }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", } with patch.object(self.blindpay._api, "_request") as mock_request: @@ -566,7 +566,7 @@ async def test_create_evm_payout(self): "estimated_time_of_arrival": "1_business_day", "completed_at": "2011-10-05T14:48:00.000Z", }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", } with patch.object(self.blindpay._api, "_request") as mock_request: @@ -600,7 +600,7 @@ def test_list_payouts(self): mocked_payouts = { "data": [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -654,7 +654,7 @@ def test_list_payouts(self): "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", @@ -710,7 +710,7 @@ def test_list_payouts(self): def test_get_payout(self): mocked_payout = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -764,7 +764,7 @@ def test_get_payout(self): "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", @@ -814,7 +814,7 @@ def test_get_payout(self): def test_export_payouts(self): mocked_export_payouts = [ { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -868,7 +868,7 @@ def test_export_payouts(self): "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", @@ -918,7 +918,7 @@ def test_export_payouts(self): def test_get_payout_track(self): mocked_payout_track = { - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", "id": "pa_000000000000", "status": "processing", "sender_wallet_address": "0x123...890", @@ -972,7 +972,7 @@ def test_get_payout_track(self): "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", @@ -1082,7 +1082,7 @@ def test_create_stellar_payout(self): "estimated_time_of_arrival": "1_business_day", "completed_at": "2011-10-05T14:48:00.000Z", }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", } with patch.object(self.blindpay._api, "_request") as mock_request: @@ -1145,7 +1145,7 @@ def test_create_evm_payout(self): "estimated_time_of_arrival": "1_business_day", "completed_at": "2011-10-05T14:48:00.000Z", }, - "receiver_id": "re_000000000000", + "customer_id": "re_000000000000", } with patch.object(self.blindpay._api, "_request") as mock_request: diff --git a/tests/resources/test_quotes.py b/tests/resources/test_quotes.py index 9e8ed63..6ddaf7e 100644 --- a/tests/resources/test_quotes.py +++ b/tests/resources/test_quotes.py @@ -33,7 +33,7 @@ async def test_create_quote(self): "chainId": 1, }, }, - "receiver_local_amount": 1000, + "customer_local_amount": 1000, "description": "Memo code or description, only works with USD and BRL", } @@ -138,7 +138,7 @@ def test_create_quote(self): "chainId": 1, }, }, - "receiver_local_amount": 1000, + "customer_local_amount": 1000, "description": "Memo code or description, only works with USD and BRL", } diff --git a/tests/resources/test_receivers.py b/tests/resources/test_receivers.py deleted file mode 100644 index 175dda4..0000000 --- a/tests/resources/test_receivers.py +++ /dev/null @@ -1,1102 +0,0 @@ -from unittest.mock import patch - -import pytest - -from blindpay import BlindPay, BlindPaySync - - -class TestReceivers: - @pytest.fixture(autouse=True) - def setup(self): - self.blindpay = BlindPay(api_key="test-key", instance_id="in_000000000000") - - @pytest.mark.asyncio - async def test_list_receivers(self): - mocked_receivers = [ - { - "id": "re_Euw7HN4OdxPn", - "type": "individual", - "kyc_type": "standard", - "kyc_status": "verifying", - "kyc_warnings": [ - { - "code": None, - "message": None, - "resolution_status": None, - "warning_id": None, - }, - ], - "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": None, - "email": "alice.johnson@example.com", - "tax_id": "98765432100", - "address_line_1": "123 Main St", - "address_line_2": None, - "city": "New York", - "state_province_region": "NY", - "country": "US", - "postal_code": "10001", - "ip_address": "192.168.1.1", - "image_url": None, - "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": None, - "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": None, - "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": None, - "image_url": None, - "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": None, - "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": None, - "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, - }, - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receivers, "error": None} - - response = await self.blindpay.receivers.list() - - assert response["error"] is None - assert response["data"] == mocked_receivers - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers") - - @pytest.mark.asyncio - async def test_list_receivers_with_params(self): - mocked_data = { - "data": [{"id": "re_Euw7HN4OdxPn"}], - "pagination": {"has_more": False, "next_page": None, "prev_page": None}, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_data, "error": None} - - response = await self.blindpay.receivers.list({"status": "approved", "limit": "10"}) - - assert response["error"] is None - assert response["data"] == mocked_data - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers?status=approved&limit=10") - - @pytest.mark.asyncio - async def test_create_individual_with_standard_kyc(self): - mocked_receiver = { - "id": "re_Euw7HN4OdxPn", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = await self.blindpay.receivers.create_individual_with_standard_kyc( - { - "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", - "phone_number": "+5511987654321", - "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", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "tos_id": "to_tPiz4bM2nh5K", - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_Euw7HN4OdxPn"} - - @pytest.mark.asyncio - async def test_create_individual_with_enhanced_kyc(self): - mocked_receiver = { - "id": "re_YuaMcI2B8zbQ", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = await self.blindpay.receivers.create_individual_with_enhanced_kyc( - { - "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", - "first_name": "Bernardo", - "last_name": "Simonassi", - "phone_number": "+5511987654321", - "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", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "individual_holding_doc_front_file": "https://example.com/image.png", - "purpose_of_transactions": "personal_or_living_expenses", - "source_of_funds_doc_type": "savings", - "purpose_of_transactions_explanation": "I am receiving salary payments from my employer", - "source_of_funds_doc_file": "https://example.com/image.png", - "tos_id": "to_3ZZhllJkvo5Z", - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_YuaMcI2B8zbQ"} - - @pytest.mark.asyncio - async def test_create_business_with_standard_kyb(self): - mocked_receiver = { - "id": "re_IOxAUL24LG7P", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = await self.blindpay.receivers.create_business_with_standard_kyb( - { - "email": "contato@empresa.com.br", - "tax_id": "20096178000195", - "address_line_1": "Av. Brigadeiro Faria Lima, 400", - "address_line_2": "Sala 1201", - "city": "São Paulo", - "state_province_region": "SP", - "country": "BR", - "postal_code": "04538-132", - "legal_name": "Empresa Exemplo Ltda", - "alternate_name": "Exemplo", - "formation_date": "2010-05-20T00:00:00.000Z", - "incorporation_doc_file": "https://example.com/image.png", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "proof_of_ownership_doc_file": "https://example.com/image.png", - "tos_id": "to_nppX66ntvtHs", - "website": "https://site.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": None, - "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", - }, - ], - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_IOxAUL24LG7P"} - - @pytest.mark.asyncio - async def test_get_receiver(self): - mocked_receiver = { - "id": "re_YuaMcI2B8zbQ", - "type": "individual", - "kyc_type": "enhanced", - "kyc_status": "verifying", - "kyc_warnings": [ - { - "code": None, - "message": None, - "resolution_status": None, - "warning_id": None, - }, - ], - "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, - }, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = await self.blindpay.receivers.get("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_receiver - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ") - - @pytest.mark.asyncio - async def test_update_receiver(self): - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = await self.blindpay.receivers.update( - { - "receiver_id": "re_YuaMcI2B8zbQ", - "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", - "alternate_name": "Exemplo", - "formation_date": "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": None, - "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", - }, - ], - "incorporation_doc_file": "https://example.com/image.png", - "proof_of_ownership_doc_file": "https://example.com/image.png", - "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", - "external_id": "some-external-id", - "tos_id": "to_3ZZhllJkvo5Z", - } - ) - - assert response["error"] is None - assert response["data"] == {"data": None} - - @pytest.mark.asyncio - async def test_delete_receiver(self): - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = await self.blindpay.receivers.delete("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == {"data": None} - mock_request.assert_called_once_with("DELETE", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ", None) - - @pytest.mark.asyncio - async def test_get_receiver_limits(self): - mocked_receiver_limits = { - "limits": { - "payin": { - "daily": 10000, - "monthly": 50000, - }, - "payout": { - "daily": 20000, - "monthly": 100000, - }, - }, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver_limits, "error": None} - - response = await self.blindpay.receivers.get_limits("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_receiver_limits - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/limits/receivers/re_YuaMcI2B8zbQ") - - @pytest.mark.asyncio - async def test_get_limit_increase_requests(self): - mocked_limit_increase_requests = [ - { - "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", - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_limit_increase_requests, "error": None} - - response = await self.blindpay.receivers.get_limit_increase_requests("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_limit_increase_requests - mock_request.assert_called_once_with( - "GET", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ/limit-increase" - ) - - @pytest.mark.asyncio - async def test_request_limit_increase(self): - mocked_response = { - "id": "rl_000000000000", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_response, "error": None} - - response = await self.blindpay.receivers.request_limit_increase( - { - "receiver_id": "re_YuaMcI2B8zbQ", - "daily": 100000, - "monthly": 500000, - "per_transaction": 50000, - "supporting_document_file": "https://example.com/tax-return.pdf", - "supporting_document_type": "individual_tax_return", - } - ) - - assert response["error"] is None - assert response["data"] == mocked_response - mock_request.assert_called_once_with( - "POST", - "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ/limit-increase", - { - "daily": 100000, - "monthly": 500000, - "per_transaction": 50000, - "supporting_document_file": "https://example.com/tax-return.pdf", - "supporting_document_type": "individual_tax_return", - }, - ) - - -class TestReceiversSync: - @pytest.fixture(autouse=True) - def setup(self): - self.blindpay = BlindPaySync(api_key="test-key", instance_id="in_000000000000") - - def test_list_receivers(self): - mocked_receivers = [ - { - "id": "re_Euw7HN4OdxPn", - "type": "individual", - "kyc_type": "standard", - "kyc_status": "verifying", - "kyc_warnings": [ - { - "code": None, - "message": None, - "resolution_status": None, - "warning_id": None, - }, - ], - "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": None, - "email": "alice.johnson@example.com", - "tax_id": "98765432100", - "address_line_1": "123 Main St", - "address_line_2": None, - "city": "New York", - "state_province_region": "NY", - "country": "US", - "postal_code": "10001", - "ip_address": "192.168.1.1", - "image_url": None, - "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": None, - "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": None, - "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": None, - "image_url": None, - "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": None, - "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": None, - "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, - }, - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receivers, "error": None} - - response = self.blindpay.receivers.list() - - assert response["error"] is None - assert response["data"] == mocked_receivers - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers") - - def test_list_receivers_with_params(self): - mocked_data = { - "data": [{"id": "re_Euw7HN4OdxPn"}], - "pagination": {"has_more": False, "next_page": None, "prev_page": None}, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_data, "error": None} - - response = self.blindpay.receivers.list({"status": "approved", "limit": "10"}) - - assert response["error"] is None - assert response["data"] == mocked_data - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers?status=approved&limit=10") - - def test_create_individual_with_standard_kyc(self): - mocked_receiver = { - "id": "re_Euw7HN4OdxPn", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = self.blindpay.receivers.create_individual_with_standard_kyc( - { - "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", - "phone_number": "+5511987654321", - "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", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "tos_id": "to_tPiz4bM2nh5K", - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_Euw7HN4OdxPn"} - - def test_create_individual_with_enhanced_kyc(self): - mocked_receiver = { - "id": "re_YuaMcI2B8zbQ", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = self.blindpay.receivers.create_individual_with_enhanced_kyc( - { - "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", - "first_name": "Bernardo", - "last_name": "Simonassi", - "phone_number": "+5511987654321", - "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", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "individual_holding_doc_front_file": "https://example.com/image.png", - "purpose_of_transactions": "personal_or_living_expenses", - "source_of_funds_doc_type": "savings", - "purpose_of_transactions_explanation": "I am receiving salary payments from my employer", - "source_of_funds_doc_file": "https://example.com/image.png", - "tos_id": "to_3ZZhllJkvo5Z", - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_YuaMcI2B8zbQ"} - - def test_create_business_with_standard_kyb(self): - mocked_receiver = { - "id": "re_IOxAUL24LG7P", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = self.blindpay.receivers.create_business_with_standard_kyb( - { - "email": "contato@empresa.com.br", - "tax_id": "20096178000195", - "address_line_1": "Av. Brigadeiro Faria Lima, 400", - "address_line_2": "Sala 1201", - "city": "São Paulo", - "state_province_region": "SP", - "country": "BR", - "postal_code": "04538-132", - "legal_name": "Empresa Exemplo Ltda", - "alternate_name": "Exemplo", - "formation_date": "2010-05-20T00:00:00.000Z", - "incorporation_doc_file": "https://example.com/image.png", - "proof_of_address_doc_type": "UTILITY_BILL", - "proof_of_address_doc_file": "https://example.com/image.png", - "proof_of_ownership_doc_file": "https://example.com/image.png", - "tos_id": "to_nppX66ntvtHs", - "website": "https://site.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": None, - "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", - }, - ], - } - ) - - assert response["error"] is None - assert response["data"] == {"id": "re_IOxAUL24LG7P"} - - def test_get_receiver(self): - mocked_receiver = { - "id": "re_YuaMcI2B8zbQ", - "type": "individual", - "kyc_type": "enhanced", - "kyc_status": "verifying", - "kyc_warnings": [ - { - "code": None, - "message": None, - "resolution_status": None, - "warning_id": None, - }, - ], - "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, - }, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver, "error": None} - - response = self.blindpay.receivers.get("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_receiver - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ") - - def test_update_receiver(self): - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = self.blindpay.receivers.update( - { - "receiver_id": "re_YuaMcI2B8zbQ", - "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", - "alternate_name": "Exemplo", - "formation_date": "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": None, - "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", - }, - ], - "incorporation_doc_file": "https://example.com/image.png", - "proof_of_ownership_doc_file": "https://example.com/image.png", - "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", - "external_id": "some-external-id", - "tos_id": "to_3ZZhllJkvo5Z", - } - ) - - assert response["error"] is None - assert response["data"] == {"data": None} - - def test_delete_receiver(self): - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": {"data": None}, "error": None} - - response = self.blindpay.receivers.delete("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == {"data": None} - mock_request.assert_called_once_with("DELETE", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ", None) - - def test_get_receiver_limits(self): - mocked_receiver_limits = { - "limits": { - "payin": { - "daily": 10000, - "monthly": 50000, - }, - "payout": { - "daily": 20000, - "monthly": 100000, - }, - }, - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_receiver_limits, "error": None} - - response = self.blindpay.receivers.get_limits("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_receiver_limits - mock_request.assert_called_once_with("GET", "/instances/in_000000000000/limits/receivers/re_YuaMcI2B8zbQ") - - def test_get_limit_increase_requests(self): - mocked_limit_increase_requests = [ - { - "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", - }, - ] - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_limit_increase_requests, "error": None} - - response = self.blindpay.receivers.get_limit_increase_requests("re_YuaMcI2B8zbQ") - - assert response["error"] is None - assert response["data"] == mocked_limit_increase_requests - mock_request.assert_called_once_with( - "GET", "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ/limit-increase" - ) - - def test_request_limit_increase(self): - mocked_response = { - "id": "rl_000000000000", - } - - with patch.object(self.blindpay._api, "_request") as mock_request: - mock_request.return_value = {"data": mocked_response, "error": None} - - response = self.blindpay.receivers.request_limit_increase( - { - "receiver_id": "re_YuaMcI2B8zbQ", - "daily": 100000, - "monthly": 500000, - "per_transaction": 50000, - "supporting_document_file": "https://example.com/tax-return.pdf", - "supporting_document_type": "individual_tax_return", - } - ) - - assert response["error"] is None - assert response["data"] == mocked_response - mock_request.assert_called_once_with( - "POST", - "/instances/in_000000000000/receivers/re_YuaMcI2B8zbQ/limit-increase", - { - "daily": 100000, - "monthly": 500000, - "per_transaction": 50000, - "supporting_document_file": "https://example.com/tax-return.pdf", - "supporting_document_type": "individual_tax_return", - }, - ) diff --git a/tests/resources/test_terms_of_service.py b/tests/resources/test_terms_of_service.py index eb84db7..683a28d 100644 --- a/tests/resources/test_terms_of_service.py +++ b/tests/resources/test_terms_of_service.py @@ -22,7 +22,7 @@ async def test_initiate_terms_of_service(self): response = await self.blindpay.instances.terms_of_service.initiate( { "idempotency_key": "123e4567-e89b-12d3-a456-426614174000", - "receiver_id": None, + "customer_id": None, "redirect_url": None, } ) @@ -34,7 +34,7 @@ async def test_initiate_terms_of_service(self): "/e/instances/in_000000000000/tos", { "idempotency_key": "123e4567-e89b-12d3-a456-426614174000", - "receiver_id": None, + "customer_id": None, "redirect_url": None, }, ) @@ -56,7 +56,7 @@ def test_initiate_terms_of_service(self): response = self.blindpay.instances.terms_of_service.initiate( { "idempotency_key": "123e4567-e89b-12d3-a456-426614174000", - "receiver_id": None, + "customer_id": None, "redirect_url": None, } ) @@ -68,7 +68,7 @@ def test_initiate_terms_of_service(self): "/e/instances/in_000000000000/tos", { "idempotency_key": "123e4567-e89b-12d3-a456-426614174000", - "receiver_id": None, + "customer_id": None, "redirect_url": None, }, ) diff --git a/tests/resources/test_transfers.py b/tests/resources/test_transfers.py index 53a9827..3ace081 100644 --- a/tests/resources/test_transfers.py +++ b/tests/resources/test_transfers.py @@ -30,9 +30,9 @@ async def test_create_transfer_quote(self): { "wallet_id": "cw_source", "sender_token": "USDC", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_token": "USDC", - "receiver_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_token": "USDC", + "customer_network": "base", "request_amount": 100, "amount_reference": "sender", } @@ -49,9 +49,9 @@ async def test_create_transfer_quote(self): { "wallet_id": "cw_source", "sender_token": "USDC", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_token": "USDC", - "receiver_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_token": "USDC", + "customer_network": "base", "request_amount": 100, "amount_reference": "sender", }, @@ -68,10 +68,10 @@ async def test_create_transfer(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "pending", "estimated_time_of_arrival": None}, @@ -110,10 +110,10 @@ async def test_get_transfer(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "completed", "estimated_time_of_arrival": None}, @@ -149,10 +149,10 @@ async def test_list_transfers(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "completed", "estimated_time_of_arrival": None}, @@ -207,9 +207,9 @@ def test_create_transfer_quote(self): { "wallet_id": "cw_source", "sender_token": "USDC", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_token": "USDC", - "receiver_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_token": "USDC", + "customer_network": "base", "request_amount": 100, "amount_reference": "sender", } @@ -224,9 +224,9 @@ def test_create_transfer_quote(self): { "wallet_id": "cw_source", "sender_token": "USDC", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_token": "USDC", - "receiver_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_token": "USDC", + "customer_network": "base", "request_amount": 100, "amount_reference": "sender", }, @@ -242,10 +242,10 @@ def test_create_transfer(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "pending", "estimated_time_of_arrival": None}, @@ -281,10 +281,10 @@ def test_get_transfer(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "completed", "estimated_time_of_arrival": None}, @@ -318,10 +318,10 @@ def test_list_transfers(self): "sender_token": "USDC", "sender_amount": 100.5, "receiver_amount": 100.0, - "receiver_token": "USDC", - "receiver_network": "base", - "receiver_wallet_address": "0x1234567890abcdef", - "receiver_id": "rc_000000000000", + "customer_token": "USDC", + "customer_network": "base", + "customer_wallet_address": "0x1234567890abcdef", + "customer_id": "rc_000000000000", "address": "0x1234567890abcdef", "network": "base", "tracking_transaction_monitoring": {"step": "completed", "estimated_time_of_arrival": None}, diff --git a/tests/resources/test_webhooks.py b/tests/resources/test_webhooks.py index f0e462c..a84a0bd 100644 --- a/tests/resources/test_webhooks.py +++ b/tests/resources/test_webhooks.py @@ -22,7 +22,7 @@ async def test_create_webhook_endpoint(self): response = await self.blindpay.instances.webhook_endpoints.create( { "url": "https://example.com/webhook", - "events": ["receiver.new"], + "events": ["customer.new"], } ) @@ -31,7 +31,7 @@ async def test_create_webhook_endpoint(self): mock_request.assert_called_once_with( "POST", "/instances/in_000000000000/webhook-endpoints", - {"url": "https://example.com/webhook", "events": ["receiver.new"]}, + {"url": "https://example.com/webhook", "events": ["customer.new"]}, ) @pytest.mark.asyncio @@ -40,7 +40,7 @@ async def test_list_webhook_endpoints(self): { "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", @@ -117,7 +117,7 @@ def test_create_webhook_endpoint(self): response = self.blindpay.instances.webhook_endpoints.create( { "url": "https://example.com/webhook", - "events": ["receiver.new"], + "events": ["customer.new"], } ) @@ -126,7 +126,7 @@ def test_create_webhook_endpoint(self): mock_request.assert_called_once_with( "POST", "/instances/in_000000000000/webhook-endpoints", - {"url": "https://example.com/webhook", "events": ["receiver.new"]}, + {"url": "https://example.com/webhook", "events": ["customer.new"]}, ) def test_list_webhook_endpoints(self): @@ -134,7 +134,7 @@ def test_list_webhook_endpoints(self): { "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", diff --git a/tests/test_client.py b/tests/test_client.py index 443b4ab..e2d170d 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -13,7 +13,7 @@ def test_verify_webhook_signature_valid(self): secret = "whsec_" + base64.b64encode(secret_key).decode() webhook_id = "msg_123456" timestamp = "1614556800" - payload = '{"event":"receiver.new","data":{"id":"rec_000000000000"}}' + payload = '{"event":"customer.new","data":{"id":"cus_000000000000"}}' signed_content = f"{webhook_id}.{timestamp}.{payload}" expected_signature = base64.b64encode( @@ -32,7 +32,7 @@ def test_verify_webhook_signature_invalid(self): secret = "whsec_" + base64.b64encode(b"test_secret_key_1234").decode() webhook_id = "msg_123456" timestamp = "1614556800" - payload = '{"event":"receiver.new","data":{"id":"rec_000000000000"}}' + payload = '{"event":"customer.new","data":{"id":"cus_000000000000"}}' invalid_signature = "invalid_signature_value" is_valid = client.verify_webhook_signature( @@ -51,7 +51,7 @@ def test_sync_client_verify_webhook_signature(self): secret = "whsec_" + base64.b64encode(secret_key).decode() webhook_id = "msg_123456" timestamp = "1614556800" - payload = '{"event":"receiver.new","data":{"id":"rec_000000000000"}}' + payload = '{"event":"customer.new","data":{"id":"cus_000000000000"}}' signed_content = f"{webhook_id}.{timestamp}.{payload}" expected_signature = base64.b64encode( @@ -71,7 +71,7 @@ def test_sync_client_verify_webhook_signature_invalid(self): secret = "whsec_" + base64.b64encode(b"test_secret_key_1234").decode() webhook_id = "msg_123456" timestamp = "1614556800" - payload = '{"event":"receiver.new","data":{"id":"rec_000000000000"}}' + payload = '{"event":"customer.new","data":{"id":"cus_000000000000"}}' invalid_signature = "invalid_signature_value" is_valid = client.verify_webhook_signature( diff --git a/uv.lock b/uv.lock index 306e87e..eb46cea 100644 --- a/uv.lock +++ b/uv.lock @@ -27,7 +27,7 @@ wheels = [ [[package]] name = "blindpay" -version = "2.4.0" +version = "2.5.0" source = { editable = "." } dependencies = [ { name = "httpx" },