Submit a Wallet
POST https://trade-uk.sandbox.zodiamarkets.com/api/3/ssi/wallets
Ask Zodia Markets to add a crypto wallet under your own onboarded entity, or under an existing beneficiary or sender.
Choosing the participant
Section titled “Choosing the participant”participantUuid names who the wallet belongs to:
| To add a wallet for | Take uuid from |
|---|---|
| Your own onboarded entity | Get Account Details List |
| An existing beneficiary | Get Beneficiary List |
| An existing sender | Get Sender List |
The participant must be one of yours, for the account group you name. Otherwise the call returns 400 Originator record not found — please contact support, whichever kind of participant you named. You cannot create a new beneficiary or sender here; contact your relationship manager for that.
Before you call
Section titled “Before you call”accountGroupUuid, participantUuid, blockchain, asset, address and alias are required. memo is optional and limited to 1024 characters. A missing or empty required field returns 403 Invalid signed params without naming the field, so validate client-side against the table below.
The address is checked against the format of the blockchain you name, and a malformed one is refused with 400 and a message describing the problem.
walletType, vasp, executionProvider, direction and defaultWallet are optional, and Operations reviews what you declare. A request for defaultWallet: true is refused if the participant already has a default wallet for that asset and blockchain.
After it succeeds
Section titled “After it succeeds”The call returns approvalRequestId and status: PENDING. The request appears on List Wallet Requests, with kind set to the participant’s kind, as PENDING_SCREENING.
Once Operations approves it, the request drops off that list and the wallet appears under its participant on the matching Get endpoint. Use it only when that endpoint reports enabled: true and whitelisted: true. If Operations declines it, the request is listed as REJECTED; contact your relationship manager for the reason. See Adding a bank account or wallet.
Domain: Payment participants
Request
Section titled “Request”POST https://trade-uk.sandbox.zodiamarkets.com/api/3/ssi/walletsHeaders
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Rest-Key |
yes | API key for authentication |
Rest-Sign |
yes | Calculated API Signature |
| Field | Type | Required | Description |
|---|---|---|---|
tonce |
integer (int64) | yes | The current Unix time in microseconds. Accepted only within two minutes of server time. Send either tonce or nonce. |
nonce |
integer (int64) | Alternative to tonce, and takes precedence when both are sent. Must be a whole number and strictly increasing for a given API key: a reused or lower value is rejected. A request carrying neither nonce nor tonce is rejected with 401. |
|
accountGroupUuid |
string | yes | The account group you are acting for. You must hold ROLE_OPERATIONS on it. |
participantUuid |
string | yes | The participant the new entry is added under: your own onboarded entity (the uuid from Get Account Details List), or an existing beneficiary or sender (the uuid from Get Beneficiary List or Get Sender List). It must be one of yours. A new beneficiary or sender cannot be created through this API. |
blockchain |
string | yes | The blockchain the wallet is on. It must be one Zodia Markets supports for your account. |
asset |
string | yes | The asset the wallet will hold, for example USDC. |
address |
string | yes | The wallet address. It is checked against the format of blockchain. |
alias |
string | yes | Your own name for the wallet. |
memo |
string | Optional free text, up to 1024 characters. | |
walletType |
string (enum) | Optional. Whether the wallet is self-hosted or held with a custodian. When omitted, Zodia Markets applies its default. — One of: SELF_HOSTED, CUSTODY | |
vasp |
string | Optional. For a custodial wallet, the custodian (VASP) that holds it. Free text, reviewed by Operations. | |
executionProvider |
string | Optional. For a custodial wallet, the execution provider. | |
direction |
string | Optional. Which way the wallet is used. When omitted, Zodia Markets applies its default. | |
defaultWallet |
boolean | Optional. Ask for this wallet to become the default for its asset and blockchain on the participant. Refused if another wallet already is. |
Responses
Section titled “Responses”200 OK
Section titled “200 OK”Request accepted for review by Zodia Markets Operations. The bank account or wallet is not usable yet.
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
approvalRequestId |
integer (int64) | Identifier of the review request. Quote it to your relationship manager, and match it against the id returned by the wallet requests list. |
|
status |
string | PENDING: awaiting review by Zodia Markets Operations. The list endpoint reports the same state as PENDING_SCREENING. |
400 Bad Request
Section titled “400 Bad Request”The request was not created.
message |
Cause |
|---|---|
Originator record not found — please contact support |
participantUuid does not identify one of your participants for this account group. The message reads Originator whichever kind of participant you named |
<field>: <reason>, several joined by ; |
The details failed validation, for example an address that is not valid for the blockchain |
Another reason, or The submitted details were rejected |
The details were refused for a reason not covered above |
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
message |
string |
401 Unauthorized
Section titled “401 Unauthorized”Authentication failed: unknown key, bad signature, a missing, malformed, reused or decreasing nonce or out-of-window tonce, a body that is not parseable JSON, or a throttled caller. Rate limiting surfaces here as 401, not 429.
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
message |
string |
403 Forbidden
Section titled “403 Forbidden”Body missing or failed field validation (Invalid signed params), the API key lacks the Move Funds permission (MOVE FUNDS permission required), or you do not hold ROLE_OPERATIONS on accountGroupUuid (You do not have permission to perform this action). The message does not name the field or the permission at fault. Required: accountGroupUuid, participantUuid, blockchain, asset, address, alias; memo at most 1024 characters.
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
message |
string |
500 Internal Server Error
Section titled “500 Internal Server Error”Unexpected error. The outcome is undefined.
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
message |
string |
The service that holds bank accounts and wallets could not be reached or returned an unusable answer. The outcome is undefined: call the matching list endpoint before resending.
| Field | Type | Required | Description |
|---|---|---|---|
success |
boolean | ||
message |
string |
