/v1/wallet/address
signed
Get a player's deposit address
Returns the player's wallet address on a network, issuing one on the first call. Show it to the player once and they can keep using it: there is no session to open and no amount to agree on beforehand. Every token enabled on that network is accepted at the same address.
Idempotent on (network, player_id). Calling it again is free and returns the same address, so it is safe to call on every visit to the cashier rather than caching it yourself.
Addresses are per network: the same player has a different address on tron and on bsc.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
network |
string | yes | Network id, lower-case. Only networks with wallet addresses enabled for your merchant are accepted. |
player_id |
string | yes | Your identifier for the player. The address is bound to it: the same (network, player_id) always returns the same address. |
Request
curl -X POST "$BASE_URL/v1/wallet/address" \
-H "Content-Type: application/json" \
-H "X-Api-Key: $API_KEY_ID" \
-H "X-Timestamp: $TS" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIG" \
-d '{"network":"tron","player_id":"player-1042"}'res, err := client.Call(ctx, "POST", "/v1/wallet/address", `{
"network": "tron",
"player_id": "player-1042"
}`)$res = $client->call('POST', '/v1/wallet/address', [
'network' => 'tron',
'player_id' => 'player-1042',
]);const res = await client.call("POST", "/v1/wallet/address", {
"network": "tron",
"player_id": "player-1042"
});res = client.call("POST", "/v1/wallet/address", {
"network": "tron",
"player_id": "player-1042",
})const res = await client.call("POST", "/v1/wallet/address", {
"network": "tron",
"player_id": "player-1042"
});The client is the one on Signing requests: it signs, sends, and turns an error into an exception carrying its code.
Response 200
The player's address on that network, new or existing.
{
"address": "TFbu1gKVsrs6c96r3FyuD9aUs3Gdi1HmH3",
"network": "tron",
"player_id": "player-1042",
"created_at": "2026-09-18T12:00:00Z"
}
Errors
400
unsupported
A missing or over-long player_id, a missing network, or a network that does not issue wallet addresses for your merchant (code unsupported). Not retryable as sent.
{
"error": {
"code": "unsupported",
"message": "network \"eth\" does not issue deposit addresses for this merchant"
}
}
401
unauthorized
The signature, key, timestamp or nonce did not check out: a missing header, an unknown key id, a timestamp more than 5 minutes from ours, a signature that does not match, or a nonce already used inside the window. Do not retry without rebuilding the request — a retry needs a new timestamp, a new nonce and a new signature.
{
"error": {
"code": "unauthorized",
"message": "invalid signature"
}
}
403
forbidden
The credential is valid but the caller's IP is not in the allowlist configured for your merchant. Not retryable.
{
"error": {
"code": "forbidden",
"message": "client IP not allowed for this merchant"
}
}