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 the Sumsub webhook integration.

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). The signature must be produced over the exact message string.

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

Both values pass request body validation. Only WALLET_SIGNATURE is completed on this route; SUMSUB_LIVENESS receives 422 (complete Sumsub liveness through the webhook-driven flow instead).

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 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: 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.

Responses

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