Destinations
Register the addresses you pay out to. A destination is usable only once can_send is true.
Payouts can only go to destinations in your organisation's destination book (the API calls them counterparties). A new destination starts pending and is not usable until its ownership is verified.
List destinations
GET /api/v1/counterparties returns your destination book.
Branch on can_send — it is the single field that says whether a destination is usable, so you never
have to infer the rule from status and verification separately. can_send means the destination passed
the book's verification gate; other policy checks may still refuse a payout.
Add a destination
POST /api/v1/counterparties registers a destination as pending.
| Field | Type | Notes |
|---|---|---|
network | string | Required. Network id, e.g. ethereum. Up to 128 characters. |
address | string | Required. Validated for that network's format. Up to 128 characters. |
counterparty_type | string | Required. individual · company. |
first_name / last_name | string | Required when individual. |
company_name | string | Required when company. |
wallet_type | string | Required. vasp (a hosted wallet at a service provider) · unhosted. |
vasp_name | string | Required when wallet_type is vasp. |
country | string | Required. ISO-2, e.g. SG. |
direction | string | Optional. send (default) · both. |
Names (first_name, last_name, company_name, vasp_name, label) are up to 120 characters. Unknown
fields are refused with 400 validation_failed.
{
"network": "ethereum",
"address": "0x03a6…81b9",
"counterparty_type": "company",
"company_name": "ACME Markets Pte Ltd",
"wallet_type": "vasp",
"vasp_name": "ACME Digital Custody",
"country": "SG",
"direction": "send"
}201 Created
{
"data": {
"id": "cp_5d02…",
"label": "ACME Markets Pte Ltd",
"network": "ethereum",
"network_name": "Ethereum",
"address": "0x03a6…81b9",
"direction": "send",
"status": "pending",
"can_send": false,
"verified_at": null,
"counterparty_type": "company",
"company_name": "ACME Markets Pte Ltd",
"wallet_type": "vasp",
"vasp_name": "ACME Digital Custody",
"country": "SG",
"created_at": "2026-07-30T09:10:00.000Z"
},
"meta": {}
}Re-posting an address that is already registered returns the existing entry with
meta.already_exists: true instead of erroring. It does not edit the entry.
Verification
Creating an entry cannot approve or verify it. Complete ownership verification in the console; until
then a payout to it is refused with 422 destination_not_whitelisted. Poll GET /counterparties (or
check before each payout) and send only when can_send is true.