Create Satoshi Test challenge
This operation creates a Satoshi Test challenge for self-custody address verification. Satoshi Test verifies address ownership by having the counterparty transfer a small, uniquely-generated amount from their wallet to a Cobo-controlled verification address.
A single endpoint covers both flows via the action parameter:
- Two-step flow (
action=PREPAREthenaction=SUBMIT): Preview the verification details first, then activate. The 180-minute countdown only starts onSUBMIT. The server uses(chain_id, from_address)as the idempotency key, so the second call automatically targets the prepared challenge. For extra safety, pass thechallenge_idreturned byPREPAREin the subsequentSUBMITcall — it pins the activation to that specific challenge. - One-shot flow (
action=SUBMITdirectly, withoutchallenge_id): Prepare and submit in a single call. The challenge is created directly inPENDINGstate with the countdown started.
If the counterparty address has already been verified, the operation returns HTTP 400 ADDRESS_ALREADY_VERIFIED. Call List address verifications with chain_id, address, and status=VERIFIED first to pre-check.
Supported chains: BTC, ETH, BASE_ETH, BSC_BNB, TRON.
Documentation Index
Fetch the complete documentation index at: https://cobo.com/developers/llms.txt
Use this file to discover all available pages before exploring further.
Authorizations
The API key. For more details, refer to API key.
In the API playground, enter your API secret, and your API key will be accordingly calculated.
Body
Request body for creating a Satoshi Test challenge. A single endpoint covers both the two-step flow (PREPARE then SUBMIT) and the one-shot flow (SUBMIT directly). Idempotent on (chain_id, from_address) per organization.
The action to perform when creating a Satoshi Test challenge.
PREPARE: Preview the verification address and amount. The 180-minute countdown is NOT started yet. RepeatedPREPAREcalls for the same(chain_id, from_address)refresh the amount.SUBMIT: Activate the challenge and start the 180-minute countdown. If aPREPAREchallenge already exists for this(chain_id, from_address)it is activated; otherwise a new challenge is created directly inPENDINGstate (one-shot flow).
PREPARE, SUBMIT "PREPARE"
The chain ID of the counterparty address. See the operation description for supported chains.
"ETH"
The counterparty (self-custody) wallet address that will transfer the micro-deposit.
"0x1234567890abcdef1234567890abcdef12345678"
The Cobo transaction ID that this Satoshi Test is verifying for.
"123e4567-e89b-12d3-a456-426614174000"
The direction of the underlying transaction in a Travel Rule operation.
DEPOSIT: A deposit transaction (verifying the source address).WITHDRAW: A withdrawal transaction (verifying the destination address).
DEPOSIT, WITHDRAW "DEPOSIT"
The challenge_id returned by a previous PREPARE call.
- When
action=SUBMIT: if provided, activates that specific challenge by id (recommended when you cached the id client-side afterPREPARE). If omitted, the server activates the latest matching challenge identified by(chain_id, from_address). - When
action=PREPARE: must be omitted. A new challenge is always generated; passing achallenge_idhere will cause the request to be rejected.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response
The Satoshi Test challenge was created.
action=PREPARE: returned challenge hasstatus=PREPARE; the 180-minute countdown is not started yet.action=SUBMIT: returned challenge hasstatus=PENDING;started_atandexpires_atare set.
If the counterparty address has already been verified (by signature or a prior Satoshi Test), this operation returns HTTP 400 ADDRESS_ALREADY_VERIFIED instead — call List address verifications with chain_id, address, and status=VERIFIED first to pre-check.
Full information about a Satoshi Test challenge, returned by the create and get operations.
The unique identifier of the Satoshi Test challenge.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
The counterparty (self-custody) wallet address that must transfer the micro-deposit.
"0x1234567890abcdef1234567890abcdef12345678"
The Cobo-generated verification address that will receive the micro-deposit.
"0xabcdef1234567890abcdef1234567890abcdef12"
The exact amount (in the token's smallest unit) that must be transferred. The amount is unique per challenge and is used together with to_address to identify a matching on-chain transfer.
"1100001000000000"
The ID of the token used for the micro-deposit (typically the chain's native asset).
"ETH"
The chain on which the micro-deposit is expected.
"ETH"
The lifecycle status of a Satoshi Test challenge.
PREPARE: Challenge created (address and amount returned); the 180-minute countdown is not started yet.PENDING: Challenge submitted; countdown active, waiting for the counterparty's on-chain transfer.MATCHED: An on-chain transfer matching the expected amount has been observed; waiting for block confirmations.VERIFIED: The matched transfer reached confirmation — the address is verified.EXPIRED: Challenge was not matched within 180 minutes.DELETED: Challenge was cancelled by the client.
PREPARE, PENDING, MATCHED, VERIFIED, EXPIRED, DELETED "PENDING"
Remaining time (in seconds) before the challenge expires. 0 when the challenge is not yet submitted or has already completed/expired.
10550
The on-chain transaction hash of the matching transfer, once matched.
"0xabc123..."
Timestamp (milliseconds) when the challenge was submitted and the countdown started.
1732523887000
Timestamp (milliseconds) when the challenge will expire if not matched.
1732534687000
