Skip to main content
POST
/
customers
/
{customerId}
/
wallets
/
registered-addresses
Register a wallet address for a customer
curl --request POST \
  --url https://api.conduit.financial/v2/customers/{customerId}/wallets/registered-addresses \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "type": "SELF_CUSTODY",
  "chain": "<string>",
  "address": "<string>",
  "selfCustodyAttestation": true,
  "label": "<string>"
}
'
{
  "id": "<string>",
  "customerId": "<string>",
  "address": "<string>",
  "label": "<string>",
  "originatorDetails": {
    "entityType": "BUSINESS",
    "legalName": "<string>",
    "country": "<string>"
  },
  "selfCustodyAttestation": true,
  "attestedAt": "2026-01-15T09:30:00.000Z",
  "screenedAt": "2026-01-15T09:30:00.000Z",
  "createdAt": "2026-01-15T09:30:00.000Z"
}

Authorizations

x-api-key
string
header
required

Headers

Idempotency-Key
string
required

Caller-generated unique key that lets the server safely replay this request. The cached response is returned for 5 minutes on any retry with the same key from the same API principal. Required on every state-changing money-moving or resource-creating POST.

Required string length: 1 - 128
Pattern: ^[A-Za-z0-9_.:-]{1,128}$

Path Parameters

customerId
string
required

Body

application/json

Discriminated by type: SELF_CUSTODY requires selfCustodyAttestation: true; THIRD_PARTY requires originatorDetails for travel-rule disclosure.

type
enum<string>
required

Self-custody attestation: the customer signs that the wallet is owned and controlled by them, not a third-party VASP. Requires selfCustodyAttestation: true.

Available options:
SELF_CUSTODY
chain
string
required

Blockchain network of the address. Lowercase on the wire (e.g. ethereum, polygon).

address
string
required

On-chain destination address.

Required string length: 1 - 255
selfCustodyAttestation
enum<boolean>
required

Must be exactly true on a SELF_CUSTODY registration. The literal opts the customer into the self-custody attestation; any other value (including absence) is rejected.

Available options:
true
label
string

Optional human-readable label.

Maximum string length: 255

Response

id
string
required
Pattern: ^wra_[0-9A-Za-z]{22}$
customerId
string
required
Pattern: ^cus_[0-9A-Za-z]{22}$
chain
enum<string>
required
Available options:
ethereum,
base,
solana,
polygon,
arbitrum,
optimism,
avalanche,
tron,
stellar,
bsc,
bitcoin
address
string
required
type
enum<string>
required
Available options:
SELF_CUSTODY,
THIRD_PARTY
status
enum<string>
required
Available options:
registered,
suspended,
revoked
label
string | null
required
originatorDetails
object
required
selfCustodyAttestation
boolean | null
required
attestedAt
string<date-time> | null
required

ISO 8601 timestamp

Example:

"2026-01-15T09:30:00.000Z"

screenedAt
string<date-time>
required

ISO 8601 timestamp

Example:

"2026-01-15T09:30:00.000Z"

createdAt
string<date-time>
required

ISO 8601 timestamp

Example:

"2026-01-15T09:30:00.000Z"