Skip to main content

Overview

The address book is a per-user list of saved recipient addresses. Each entry stores an address, its chain type, a unique name, a CEX / Wallet classification, and an optional memo (destination tag). It has two jobs:

Convenience

A named, reusable list of recipients you can filter by chain type or address type.

Whitelisting

When forced-address-book enforcement is on, a transfer whose destination is not in the book is rejected before it is signed.
Entries are not subject to a confirmation step. A personal entry is stored with is_verified = true and counts for whitelisting the moment createAddressBookEntry resolves. The OTP and pending-verification flow exists only in the organization address book. See How the organization address book differs.

Types

EAddressBookEntryType is the enum form of the same two values, and AddressBookEntryType is the string-literal union the method inputs accept. Either works: EAddressBookEntryType.CEX and 'CEX' are the same value.
The HTTP response for an entry also carries updatedAt, and the response for an address-type lookup also carries isInAddressBook and isOnlyExist. Those fields are present on the wire but are not declared on the SDK’s AddressBookEntry / AddressTypeResponse interfaces. See Address type lookup for how to read them.

Method inputs

Methods

None of these require an unlocked wallet session. They are plain API-key calls and touch no key material.
The API key must carry one of wallet_management, vault_management or transaction_management. Create, update and delete additionally pass through the force-2FA guard; list and lookup do not.

Creating entries

The address is validated twice. The SDK runs assertValidAddressForChain before the request leaves your process, and the server re-validates against the chain type with its own network mode, so a mainnet deployment rejects a testnet-only address form. A client-side failure throws before any HTTP call is made.

Entries with a memo

A numeric tag (unsigned 32-bit integer) that routes a deposit to the right account behind a shared exchange address. Sending without the required tag can strand the funds.
An arbitrary string attached through the SPL Memo program as a separate instruction. The SDK depends on @solana/spl-memo to build it.
A string attached to TRX and TRC-20 transfers, used by exchanges for deposit identification.
Storing the memo on the entry is bookkeeping only; the transfer methods do not read it back for you. Pass memo explicitly on sendTransaction / createSendOrder when you send. See Transactions and Orders.

Uniqueness

Two separate 409 conditions apply, both scoped to your personal entries:
The name check runs across all your entries, not just the ones on that chain. You cannot save "Treasury" for both an EVM and a Solana address, so give them distinct names.

Listing entries

Both filters are optional. The response is a plain array; this listing is not paginated.

Updating entries

Only name and memo are mutable. address, chainType and type are fixed at creation; to change any of them, delete the entry and create a new one.
Passing memo: null clears the stored memo; omitting memo leaves it untouched. Passing neither name nor memo is a 400 (At least one of name or memo must be provided). A new name that collides with another of your entries is a 409.

Deleting entries

Returns void (HTTP 204). Deletion is scoped to your own personal entries, so an id belonging to another user or to an organization entry simply matches nothing.
Under forced-address-book enforcement, deleting an entry immediately blocks that address as a transfer destination.

Address type lookup

The wire response carries three fields: Only type is declared on AddressTypeResponse. To read the other two, widen the result:
getAddressType sends the address in the request body rather than the URL, so it never ends up in access logs or error trackers. Use the same form in direct HTTP calls.

Whitelisting

Whitelisting is enforced server-side before a transfer is built, on every chain, for both personal sends and multisig orders. Which book is consulted, and which switch turns it on, depends on whether your API key resolves to an organization. Two behaviours worth knowing:
  • Organization policy takes precedence. Inside an organization the platform-wide setting is not consulted at all.
  • An organization Master is exempt only when acting from a non-SDK client. A Master calling through the SDK is subject to the whitelist like anyone else.
Both messages surface as an ApiError with statusCode: 400. See Errors.

Checking before you send

For a full dry run of a transfer, covering balance, fees, policy and whitelist checks in one call, use preflightSend / preflightOrder instead of hand-rolling the checks. See Preflight.
To validate that a string is even a well-formed address for a chain before you save it or send to it, use the exported validateAddressForChain / assertValidAddressForChain helpers rather than a round trip to the API. They are covered in Transactions.

How the organization address book differs

The organization (“Corporate”) address book is a separate list with its own methods (listOrgAddresses, addOrgAddress, updateOrgAddress, deleteOrgAddress), shared by every member of the organization rather than owned by one user. Writes are Master-only, entries carry an isVerified flag and FATF Travel Rule metadata that the personal book has no concept of, and only verified entries satisfy the organization whitelist.
Full coverage of the organization methods, roles and Travel Rule fields lives in Organization wallets. The whitelist policy switch itself is documented in Organization policies.
Last modified on August 31, 2026