Submit wallet verification for a declared counterparty

Application-authenticated (HMAC) follow-up when a declared self-hosted OWNED counterparty has a pending wallet verification (for example after crossing Travel Rule thresholds). Only WALLET_SIGNATURE is completed on this endpoint; SUMSUB_LIVENESS is validated at the edge but returns 422 because that flow is completed via webhook/widget.

Ownership message (same as declare signedMessage)

For WALLET_SIGNATURE, the message field must use the same fixed English template and UTC date rules as signedMessage on POST /counterparty/self-hosted: embedded DD/MM/YYYY must be yesterday, today, or tomorrow in UTC, and the full string must match exactly (after date validation) for signed_address and userId in this request.

I am verifying ownership of the wallet address {signed_address} as customer {userId}. This message was signed on {DD/MM/YYYY} to confirm my control over this wallet.

Signature is checked with the same chain-specific rules as declare (EVM personal_sign, Bitcoin Signed Message, Solana Ed25519 detached). See declare self-hosted and signatureVerifiers.test.ts for how to build and sign the message.

signed_address must match the pending verification wallet (the declared counterparty address); EVM addresses are compared case-insensitively.

Optional walletVerificationId selects the pending verification row; omit it to use the server-resolved default for this wallet. It does not appear inside message.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
uuid
required

The counterparty id to attach wallet verification to

Body Params
uuid
required

User for this verification.

string
enum
required

Use WALLET_SIGNATURE; SUMSUB_LIVENESS returns 422 on this route.

Allowed:
uuid

Optional; defaults to pending verification for this wallet.

string
required

Outcome label stored with the verification.

string
required

Cryptographic proof that the wallet controls signed_address, over the exact UTF-8 string in message. Validated with the same rules as declare self-hosted wallet proof (verifyWalletSignature by chain): EVM (ethereum, polygon, bnb smart chain) — personal_sign / EIP-191, signature as hex; Bitcoin — Bitcoin Signed Message (compact base64, 65 bytes); Solana — Ed25519 detached, signature base58-encoded.

string
required

The on-chain address whose key signed message. Must match the pending verification wallet (the declared counterparty address). EVM chains: comparison is case-insensitive; other chains: exact string match.

string
required

For WALLET_SIGNATURE, the exact UTF-8 string the wallet signed — same format as signedMessage on POST /counterparty/self-hosted (declare self-hosted OWNED with proof).

After extracting the embedded date, the text must match character-for-character:

I am verifying ownership of the wallet address {signed_address} as customer {userId}. This message was signed on {DD/MM/YYYY} to confirm my control over this wallet.

{signed_address} and {userId} are the same values as in this JSON body. {DD/MM/YYYY} is the calendar date in UTC and must be yesterday, today, or tomorrow relative to the server's current UTC date when the request is processed.

Example (adjust date to a valid UTC window when calling):

I am verifying ownership of the wallet address 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb as customer 8ae384b7-ce6b-4b00-a4ec-1bcb9a5e5d1d. This message was signed on 14/05/2026 to confirm my control over this wallet.

Responses

Language
Credentials
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json