Create deposit address
POST/v1/addresses
Returns the deposit address for one player on one chain. Each player gets their own permanent address, so every incoming payment is matched to the right account.
Request body
| Field | Type | Description |
|---|---|---|
chain | string · required | Chain id: tron, bsc, eth, arbitrum, base or polygon. |
player_ref | string · required | Your id for the player. 1–128 characters from A–Z a–z 0–9 _ . : @ -. |
Idempotent by design
The address is unique per (chain, player_ref). The first call returns 201 Created. Every later call with the same pair returns 200 OK with the same address, so it is safe to call this every time you show the deposit page.
Example
const { status, body } = await icn("POST", "/v1/addresses", { chain: "tron", player_ref: "player_1024", });
status, body = icn("POST", "/v1/addresses", { "chain": "tron", "player_ref": "player_1024", })
{
"chain": "tron",
"player_ref": "player_1024"
}201 Created
{
"id": "6f1c2b9e-4a7d-4c1e-9a43-0f6f3b2d8e51",
"chain": "tron",
"address": "TQ9xG7c2...7kLm",
"player_ref": "player_1024",
"created_at": "2026-10-10T08:00:00.000Z"
}EVM addresses (bsc, eth, arbitrum, base, polygon) are EIP-55 checksummed 0x… strings. TRON addresses are base58 T… strings. icn() is the signing helper from Authentication.
Errors
404 chain_not_enabled: the chain is not enabled for your account.501 not_implemented: addresses are not available on this chain yet (Solana).503 chain_unavailable: the chain is temporarily unavailable. Retry later.
What happens next
When the player pays, you receive deposit.detected and deposit.confirmed webhooks that include this player_ref.