network parameter, address book entries carry their own
identifier, and withdrawals can also be sent to a Coinbase Travel Network (CTN)
counterparty instead of an on-chain address.
Discovering the available networks
Networks are identified by a network resource name such asnetworks/ethereum-mainnet, and this string is the value you pass as network.
Do not construct it yourself — read it from
public/get_currencies.
Every Coinbase wallet currency includes a coinbase_networks array with at least
one network.
Example Response
resource_name to send to the API and a display_name to show
to a user. Coinbase wallet currencies always have networks — do not expect
coinbase_networks to be missing or empty for those currencies.
private/create_deposit_address,
private/get_current_deposit_address
and private/add_to_address_book validate network against the currency’s
coinbase_networks and reject one that is not configured for it. Elsewhere —
private/withdraw, the update and remove methods and
private/set_address_requires_security_key — network is only used to select an
existing address book entry, so an unknown value fails to match. The method
private/coinbase/estimate_withdrawal_fee
is restricted to Coinbase wallet type accounts.
Deposit addresses
private/create_deposit_address
requires both currency and network, so each currency and network combination
has its own deposit address. An optional label can be supplied, which defaults
to "deposit address".
Example Request
Response
tag is only returned for networks which use a destination tag, for example
XRPL. Deposit addresses always report info_required as true; the flag concerns
withdrawal beneficiary data and has no meaning for a deposit address.
This method is get-or-create. If an address already exists for the currency and
network it is returned unchanged, which means a label sent on a later call is
ignored rather than applied. Use
private/get_current_deposit_address
to read the existing address without attempting to create one; it also requires
network and returns null when nothing has been created yet.
Address book entries
Every entry has anid — a UUID7 assigned by Deribit and returned by
private/get_address_book.
Because the same address can be whitelisted on several networks, an entry is
identified in one of two ways:
- By
id. This is unambiguous and is the recommended approach. - By
address, addingnetworkandtagwhere needed.
kind field distinguishes the two sorts of destination:
Accepted
type values differ per method:
deposit_source is not used. Deposit entries are created by
private/create_deposit_address rather than added by hand, which is why
deposit is readable but not writable.
The status field reports availability: waiting while your account’s
withdrawal delay is still pending, ready once the entry can be used, and
active for deposit addresses. Fields that were never set — tag and network
on CTN entries, and any Travel Rule field you did not supply — are omitted from
address book responses rather than returned as null, so test for presence. The
exception is a deposit entry, which reports tag as an empty string; these are
returned by type: "deposit" as well as by the deposit address methods.
Listing entries, including CTN counterparties
CTN counterparties work with any asset, so they are stored under"all" rather
than under a specific currency like ETH or BTC.
Adding an on-chain address
private/add_to_address_book
requires type and label, plus currency, address and network. Add tag
for networks that use a destination tag or memo.
Adding a CTN counterparty
Supplycounterparty_id instead of address and network, and omit currency
— the entry is stored under "all".
Travel Rule data
Beneficiary information is supplied on on-chain entries when adding or updating them. The legacybeneficiary_*, agreed and personal parameters are
not used, and extra_currencies is not supported.
name and country are the two fields that matter operationally: together they
satisfy the Travel Rule requirement, clear info_required, and are the values
forwarded with the withdrawal. The remaining fields are stored alongside them as
supplementary detail.
Once any of this data is stored the entry returns
beneficiary_created and
beneficiary_updated timestamps. A withdrawal that needs Travel Rule data and
does not have name and country is rejected — on the usual confirmation path
this happens when the withdrawal is confirmed rather than when it is created, so
private/withdraw can return prepared and the withdrawal then fail with
travel_rule_data_required. Supply both fields when whitelisting an address you
intend to withdraw to.
CTN entries do not store beneficiary data. Travel Rule fields sent with a
counterparty_id are accepted but discarded, such entries always report
info_required as true, and they never return the beneficiary_* timestamps.
Counterparty identity is already established within the Travel Network, so CTN
withdrawals are not blocked by this.Updating and removing entries
private/update_in_address_book
takes currency and type, plus either address or id. label is optional
here, and the method returns the updated entry rather than "ok".
private/remove_from_address_book
takes the same identifying parameters and returns "ok".
Resolving an entry by address
When you identify an entry byaddress rather than id, Deribit narrows the
candidates by tag first and then by network:
- If several entries share the address and all of them carry a tag, omitting
tagis rejected — whether or not the tags differ. - If some candidates have a tag and others do not, omitting
tagselects the untagged ones. - If more than one candidate still remains and
networkwas not supplied, the call is rejected.
network when only one of the two entries is untagged.
Pass id, or address together with network and tag, whenever you need to
be certain which entry you are acting on.
Requiring a security key per address
private/set_address_requires_security_key
controls whether withdrawals to one entry need security key approval. It takes
currency, type and value, plus either address or id, and returns the
updated entry. It requires only the wallet:read_write scope — unlike the legacy
wallet type it does not additionally require mainaccount, so a subaccount can
call it for its own entries.
Creating a withdrawal
private/withdraw requires currency
and amount, plus either address or id. The destination must already exist
in the address book. When identifying it by address, pass network — and tag
where applicable — for an on-chain destination, or pass the counterparty ID as
address for a CTN destination.
The priority and nonce parameters are not used.
Example Request
Response
id here is the withdrawal’s own identifier and is unrelated to the address
book id used to select the destination.
Withdrawal states
A new withdrawal starts as
prepared and requires email confirmation. Entries
whose requires_confirmation is false and whose delay has elapsed are
trusted, and withdrawals to them skip confirmation and are submitted
immediately, so they start at unconfirmed. Since requires_confirmation
defaults to true, expect the confirmation path unless you have explicitly
turned it off for that entry.
transfer_idem is the idempotency key shared with the custodian and appears only
once the withdrawal has been submitted, so it is absent while a withdrawal is
prepared. As with the rest of the response, unset fields are omitted;
transaction_id appears only after the transaction has been broadcast.Estimating the withdrawal fee
private/coinbase/estimate_withdrawal_fee
returns the expected network fee for a currency and network. Note that this
method names the parameter network_name, not network.
Example Request
Response
estimated_fee is returned as a string to preserve precision, and
estimated_fee_before_subsidy is the amount before any fee subsidy is applied —
it falls back to estimated_fee when the custodian does not report it, so the two
being equal does not by itself mean no subsidy applied. expires_at is a
timestamp after which the estimate should no longer be relied on, and is null
when the custodian does not supply one. The estimate is indicative: the fee
charged at settlement may differ. Parse these values defensively — they are
passed through from the custodian.
Subaccount withdrawals
Subaccounts cannot withdraw unless the main account has allowed it. The main account controls this withprivate/set_coinbase_subaccount_withdrawals_allowed,
which takes a single enabled boolean and echoes it back. Calling it from a
subaccount is rejected. While disabled, private/withdraw from a subaccount
fails with a permission error.
Differences from the legacy wallet type
Notes and best practices
- Always read network names from the API. Treat
resource_nameas an opaque string and never hardcode or derive it, so that newly supported networks work without a client change. - Prefer
idoveraddress. Identifying an entry byidavoids the tag and network ambiguity described above, and avoids sending the address on every call. - Query
currency: "all"as well. CTN counterparties are invisible to a per-currencyprivate/get_address_bookcall. - Supply
nameandcountrywhen whitelisting. Without them an on-chain entry stays atinfo_required: trueand withdrawals that need Travel Rule data are rejected. - Do not blindly retry withdrawals. There is no
nonce, so a retry creates a second withdrawal. - Test for presence, not for
null. Unset fields are omitted from address book and withdrawal responses. - Re-check the fee near submission. Fee estimates expire, and the amount charged at settlement can differ from the estimate.
- Enable subaccount withdrawals deliberately. The setting is off by default and can only be changed by the main account.
- Match the tag to the network. Networks that use a destination tag or memo need
tagboth when whitelisting the address and when withdrawing to it by address.