Create a reusable deposit address
Name exactly one of network, networks or family. The result is ONE DepositAddress per network: with family: "evm" the same address string on every enabled EVM network, each with its own id (payments reference the id of the network they arrived on). A name that already exists is returned, not duplicated (created: false, status 200).
Authorization
Section titled “Authorization”Send your API key as a bearer token in the Authorization header. Secret API key: Authorization: Bearer ctp_live_sk_…. A publishable key (ctp_…_pk_…) is accepted by these operations only, which serve reference data: getRate, listAssets, listNetworks (each marked x-publishable-key: true). Every other operation refuses it with 403 publishable_key_not_allowed, whatever Origin the request carries: that header binds browsers, not other clients, and nothing on this API relies on it.
Headers
Section titled “Headers”| Name | Type | Description |
|---|---|---|
Idempotency-Key |
string | Makes the request safe to retry: the same key with the same request replays the first response (Idempotent-Replayed: true) for 24 hours; the same key with a different request is 422 idempotency_key_reused; while the first request is still running, 409 idempotency_request_in_progress with Retry-After. Only POST honours it. At most 255 characters. Pattern ^[!-~]+$. |
Request body
Section titled “Request body”| Field | Type | Description |
|---|---|---|
name |
string | Your name for the address, unique per network. Creating a name that exists returns it. At most 64 characters. |
network |
string | One network slug. At least 2 characters, at most 32 characters. |
networks |
array of strings | Several networks of one family. At least 1 item, at most 32 items. |
family |
string | Every enabled network of a family: for evm, one address valid on all of them. One of evm, bitcoin, solana, tron. |
Example request
Section titled “Example request”curl -X POST "https://api.ctpeway.com/v1/deposit_addresses" \ -H "Authorization: Bearer $CTPEWAY_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: <a-unique-key>" \ -d '{ "name": "Customer 42", "family": "evm"}'import { CtpeWay } from '@ctpeway/sdk';
const ctpeway = new CtpeWay(process.env.CTPEWAY_API_KEY);
const result = await ctpeway.depositAddresses.create({ name: 'Customer 42', family: 'evm',});Response
Section titled “Response”200 OK
Section titled “200 OK”| Field | Type | Description |
|---|---|---|
created |
boolean | false when an address with this name already existed on every network asked for. |
data |
array of objects | One object per network. On EVM the same address on each. |
data[]. |
string | |
data[]. optional |
string | |
data[]. |
string | |
data[]. |
string | |
data[]. |
string | One of active, disabled, archived. |
data[]. |
string (date-time) | |
data[]. |
object | What this address received on its network. Confirmed payments only: detected, orphaned and dropped payments are not counted. |
data[]. |
integer | Confirmed payments received. |
data[]. |
string | Their value in USD, each at the price it confirmed at. A decimal number written as a string, with up to 8 decimal places. |
data[]. optional |
string (date-time) | When the latest confirmed payment was detected. Absent while there is none. |
data[]. |
array of objects | One entry per asset received, by asset symbol. |
data[]. |
string | Asset symbol, e.g. USDT. |
data[]. |
string | |
data[]. optional |
string | |
data[]. |
integer | |
data[]. |
string | Sum of the confirmed payments in this asset, base units. A whole number written as a string of digits. |
data[]. |
string | Their value in USD, each at the price it confirmed at. A decimal number written as a string, with up to 8 decimal places. |
data[]. |
integer | Confirmed payments in this asset. |
data[]. |
boolean | false for objects of the test environment. |
{ "created": true, "data": [ { "id": "string", "name": "string", "network": "string", "address": "string", "status": "active", "created_at": "2026-01-01T00:00:00.000Z", "totals": { "payments": 0, "usd_value": "10.00", "last_payment_at": "2026-01-01T00:00:00.000Z", "received": [ { "asset": "string", "asset_id": "string", "contract": "string", "decimals": 0, "amount": "1000000", "usd_value": "10.00", "payments": 0 } ] }, "livemode": true } ]}The values are placeholders generated from the schema. They show the shape, not real data.
201 Created
Section titled “201 Created”| Field | Type | Description |
|---|---|---|
created |
boolean | false when an address with this name already existed on every network asked for. |
data |
array of objects | One object per network. On EVM the same address on each. |
data[]. |
string | |
data[]. optional |
string | |
data[]. |
string | |
data[]. |
string | |
data[]. |
string | One of active, disabled, archived. |
data[]. |
string (date-time) | |
data[]. |
object | What this address received on its network. Confirmed payments only: detected, orphaned and dropped payments are not counted. |
data[]. |
integer | Confirmed payments received. |
data[]. |
string | Their value in USD, each at the price it confirmed at. A decimal number written as a string, with up to 8 decimal places. |
data[]. optional |
string (date-time) | When the latest confirmed payment was detected. Absent while there is none. |
data[]. |
array of objects | One entry per asset received, by asset symbol. |
data[]. |
string | Asset symbol, e.g. USDT. |
data[]. |
string | |
data[]. optional |
string | |
data[]. |
integer | |
data[]. |
string | Sum of the confirmed payments in this asset, base units. A whole number written as a string of digits. |
data[]. |
string | Their value in USD, each at the price it confirmed at. A decimal number written as a string, with up to 8 decimal places. |
data[]. |
integer | Confirmed payments in this asset. |
data[]. |
boolean | false for objects of the test environment. |
{ "created": true, "data": [ { "id": "string", "name": "string", "network": "string", "address": "string", "status": "active", "created_at": "2026-01-01T00:00:00.000Z", "totals": { "payments": 0, "usd_value": "10.00", "last_payment_at": "2026-01-01T00:00:00.000Z", "received": [ { "asset": "string", "asset_id": "string", "contract": "string", "decimals": 0, "amount": "1000000", "usd_value": "10.00", "payments": 0 } ] }, "livemode": true } ]}The values are placeholders generated from the schema. They show the shape, not real data.
Errors
Section titled “Errors”A failed request answers with the error format described under Errors.
Besides the codes any endpoint can return, this endpoint can answer with these code values:

