aaa1fb8782c8

latestOpenAPI 3.1.0Proprietary2026-08-141526321.5 MB
External Accounts

Verify ownership with a wallet signature

Complete a WALLET_SIGNATURE challenge by submitting the signature the wallet produced for the challenge's messageToSign. The message must be signed exactly as returned, and the signature must be submitted before the challenge's expiresAt — after expiry, start a new challenge.

On success the account moves to ACTIVE; on an invalid signature it moves to UNVERIFIED (start a new challenge to retry). LIVENESS challenges complete asynchronously and never use this endpoint — their outcome is delivered via EXTERNAL_ACCOUNT.STATUS_UPDATED webhooks or by polling the account.

post/platform/external-accounts/{externalAccountId}/verify

Path parameters

externalAccountIdstring required

External account ID

Request body

signaturestring required

The signature produced over the exact messageToSign — EIP-191 hex for EVM chains, base64 for Bitcoin, base58-encoded Ed25519 for Solana.

signatureScheme'bip137' | 'electrum'

Bitcoin message-signing format. Defaults to bip137; use electrum for Electrum/Sparrow wallets. Ignored for non-Bitcoin chains.

Example request

{
  "signature": "0x52d75f01c9e7b8b2ce2fbcbd21bfeeee7bcd1a2f01ce6b8ad9a67a45e83a8f5d1c"
}

Response

Signature valid; the updated external account is returned with status: ACTIVE.

idstring required

The system generated identifier of this account

customerIdstring

The customer this account is tied to, or null if the account is on behalf of the platform.

status'PENDING' | 'ACTIVE' | 'PENDING_OWNERSHIP_VERIFICATION' | 'UNVERIFIED' | 'UNDER_REVIEW' | 'INACTIVE' required

Status of an external account.

PENDING_OWNERSHIP_VERIFICATION: the wallet's ownership must be verified (e.g. under the EU Travel Rule) before unrestricted use; transfers below regulatory thresholds are still allowed. UNVERIFIED: the most recent verification attempt failed; start a new challenge to retry. Successful verification moves the account to ACTIVE.

platformAccountIdstring

Optional platform-specific identifier for this account

ownershipType'FIRST_PARTY' | 'THIRD_PARTY'

Whether the external account belongs to the customer themselves (FIRST_PARTY) or to someone else (THIRD_PARTY). Required when creating self-custody crypto wallet external accounts on platforms subject to counterparty requirements — for example, under the EU Travel Rule or similar requirements in other regions; recommended for all other accounts, where providing it can unlock additional capabilities and smoother compliance handling.

currencystring required

The ISO 4217 currency code

defaultUmaDepositAccountboolean

Whether this account is the default UMA deposit account for the customer. If true, incoming UMA payments to this customer's UMA address will be automatically deposited into this account instead of the primary internal account. False if not provided. Note that at most, one external account can be set as the default UMA deposit account for a customer. If there is no default UMA deposit account, incoming UMA payments will be deposited into the primary internal account for the customer.

beneficiaryVerificationStatus'MATCHED' | 'PARTIAL_MATCH' | 'NOT_MATCHED' | 'UNSUPPORTED' | 'CHECKED_BY_RECEIVING_FI' | 'PENDING'

The result of verifying the beneficiary name against the account holder name.

StatusDescription
MATCHEDThe beneficiary name is an exact match
PARTIAL_MATCHThe beneficiary name is a fuzzy match
NOT_MATCHEDThe beneficiary name does not match
UNSUPPORTEDThe payment rail does not support name verification
CHECKED_BY_RECEIVING_FIVerification is deferred to the receiving financial institution (e.g. ACH)
PENDINGVerification is still in progress

Example response

{
  "id": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",
  "customerId": "Customer:da459a29-1fb7-41ce-a4cb-eb3a3c9fd7a7",
  "platformAccountId": "acc_123456789",
  "ownershipType": "FIRST_PARTY",
  "currency": "USD",
  "beneficiaryVerifiedData": {
    "fullName": "John Doe"
  },
  "accountInfo": {
    "accountType": "AED_ACCOUNT",
    "iban": "AE070331234567890123456",
    "swiftCode": "EBILAEAD"
  }
}