Overview

Wallets are logical groupings of addresses derived from a vault's seed. Each wallet targets a specific chain. Use these endpoints to create, retrieve, update wallets and to manage the addresses and balances tracked under them.


List Wallets

Use Case

Returns a paginated list of wallets in the organization, with optional filters and include flags for primary addresses and balances.

List Wallets

Query Parameters
1
limitinteger

Page size. Default 20, max 100. Use with `offset` to paginate when an organisation has many wallets.

2
offsetinteger

Number of items to skip from the start of the result set. Default 0. Pair with `limit` for cursor-style paging.

3
vault_iduuid

Restrict results to wallets that live inside this specific vault. Useful when you already know the customer's vault and want a focused view.

4
customer_ref_idstring

Look up wallets by the external customer/account ID you supplied at creation. Most common way to find a single customer's wallets across vaults.

5
wallet_typestring

Filter by purpose: `hot` (online signing), `cold` (offline, elevated approval), or `operational` (system-managed, e.g., gas stations).

6
statusstring

Filter by lifecycle status: `active`, `inactive`, `pending`, `suspended`, or `archived`. Defaults to active wallets when omitted (use `include_archived` to widen).

7
chainstring

Restrict to a single blockchain (e.g., `ethereum`, `bitcoin`, `solana`, `tron`, `base`, `arbitrum`). Combine with `vault_id` to narrow further.

8
include_primary_addressesboolean

When `true`, populates each wallet's `primary_addresses[]` array. Off by default to keep list responses lightweight.

9
include_balancesboolean

When `true`, populates each wallet's `balances[]` array (per-asset balance + locked/available). Off by default; turn on only when you need balances.

10
include_archivedboolean

When `true`, archived wallets are included in the result. Off by default so list views only show live wallets.

11
include_gas_stationsboolean

When `true`, gas station wallets (the `operational` ones owned by the org for fee sponsorship) appear in the list. Off by default so they don't clutter customer-facing views.

Query

List Wallets Response
Same shape as Create Wallet Response

Each entry in data[] uses the same WalletResponse object as Create Wallet Response. Refer there for the per-field explanations.

List Wallets Response

Create Wallet

Use Case

Creates a new wallet. If vault_id is omitted, a dedicated vault is auto-created.

Create Wallet

Request Body
1
vault_iduuid

Identifier of an existing vault the wallet should live in. Omit to have Bitnob auto-create a dedicated vault for this wallet — convenient for one-off treasury wallets but skips the pool/dedicated choice.

2
namestringRequired

Display name for the wallet (2-100 characters). Shown in the dashboard and audit logs — use something descriptive like 'ETH Treasury' or 'Payouts Hot Wallet'.

3
chainstring

Blockchain the wallet targets (e.g., `ethereum`, `bitcoin`). Determines which key curve and address format the Enclave derives.

4
customer_ref_idstring

Your own external customer/account identifier. Mainly useful when the wallet lives inside a pool vault so you can map it back to a user in your system.

5
wallet_typestring

`hot` (online, actively signs), `cold` (offline, requires elevated approval), or `operational` (system-managed, e.g., gas stations). Defaults to `hot` when omitted.

6
asset_idsstring[]

Assets this wallet should support up front (e.g., `["ETH", "USDC_ETH"]`). Determines which initial balance entries are tracked; extra assets can be added later by deriving addresses.

7
networkstring

Network for the initial address derivation (e.g., `mainnet`, `sepolia`, `testnet`). Falls back to the environment's default network when omitted.

8
metadataobject

Arbitrary key-value JSON you set on the wallet for your own bookkeeping (tags, team, region, etc.). Returned back on every wallet read.

9
idempotency_keystringRequired

Client-generated key (1-64 chars) used to deduplicate retries. If two requests arrive with the same key, only the first creates a wallet and subsequent retries return the same response.

Example Payload

Create Wallet Response
1
successboolean

`true` when the wallet was created without errors.

2
messagestring

Human-readable status message for display or logging.

3
dataWalletResponse

The newly created wallet, with derived addresses and an initialised balances array.

4
idstring (uuid)

Unique identifier for the new wallet. Use it for transfers, address derivation, and exports.

5
vault_idstring (uuid)

Parent vault this wallet was created under.

6
namestring

Display name as supplied in the request, shown in dashboards and audit logs.

7
chainstring

Primary blockchain the wallet targets (e.g., `ethereum`, `bitcoin`).

8
customer_ref_idstring

External customer reference you passed in; lets you link this wallet to your own user/account ID.

9
wallet_typestring

`hot` (online signing), `cold` (offline, elevated approval), or `operational` (system-managed).

10
statusstring

Lifecycle status — `active` immediately after creation.

11
primary_addressesAddressInfo[]

Primary address per chain, derived from the wallet's HD path on creation. Hand the `address` to customers as a deposit destination.

12
balancesBalanceInfo[]

Per-asset balance entries. Zeroed at creation; gets populated as funds arrive.

13
created_atstring (RFC3339)

Timestamp when the wallet was created.

Create Wallet Response

Get Wallet

Use Case

Retrieves a single wallet by ID.

Get Wallet

Get Wallet Response
Same shape as Create Wallet Response

The response payload uses the same WalletResponse object as Create Wallet Response. Refer there for the per-field explanations.

Get Wallet Response

Update Wallet

Use Case

Updates a wallet's name or metadata.

Update Wallet

Request Body
1
namestring

Updated display name for the wallet (2-100 characters). Shown in the dashboard and audit logs. PATCH-style — omit to leave the existing name untouched.

2
metadataobject

Replacement key-value metadata for the wallet (tags, team, region, etc.). Pass the full object — keys you omit will not be merged with the existing metadata.

Example Payload

Update Wallet Response
Same shape as Create Wallet Response

The response payload uses the same WalletResponse object as Create Wallet Response. Refer there for the per-field explanations.

Update Wallet Response

List Addresses

Use Case

Lists addresses derived for a wallet.

List Addresses

Query Parameters
1
limitinteger

Page size. Default 20, max 100. Use with `offset` to paginate when a wallet has many derived addresses.

2
offsetinteger

Number of items to skip from the start of the result set. Default 0. Pair with `limit` for cursor-style paging.

3
asset_idstring

Restrict results to addresses tied to a specific asset (e.g., `USDC_ETH`, `ETH`). The chain is inferred from the asset, so you don't need to pass `chain` as well.

4
chainstring

Filter by blockchain (e.g., `ethereum`, `bitcoin`). Useful when a wallet has addresses on multiple chains and you want one.

5
networkstring

Restrict to a single network within the chain (e.g., `mainnet`, `sepolia`). Combine with `chain` to scope to one testnet, for example.

6
statusstring

Filter by lifecycle status: `active` (default working set) or `inactive` (deactivated but kept for audit).

Query

List Addresses Response
1
idstring (uuid)

Unique identifier for this address record.

2
wallet_idstring (uuid)

Identifier of the wallet that owns this address. Lets you trace an address back to its HD-derived parent.

3
chainstring

Blockchain the address is on (e.g., `ethereum`, `bitcoin`, `solana`). Determines which curve the key was derived under and which RPC to use.

4
networkstring

Network within the chain (e.g., `mainnet`, `sepolia`, `testnet`, `devnet`). Critical to check — testnet funds and mainnet funds are not interchangeable.

5
addressstring

The actual on-chain address string. This is what you hand to customers / counterparties as a deposit destination.

6
address_formatstring

Encoding format used (e.g., `EIP-55` checksummed for EVM, `P2WPKH` / `P2TR` for Bitcoin, `Base58` for Solana). Useful for downstream validators that need to know how to parse the string.

7
derivation_pathstring

BIP-32 HD derivation path used to generate the key for this address (e.g., `m/44'/60'/0'/0/0`). Shows where this address sits in the wallet's HD tree.

8
is_primaryboolean

`true` for the first address derived for the chain — what `WalletResponse.primary_addresses` points at. Additional derived addresses are `false`.

9
labelstring

Optional free-form label you set when deriving the address (e.g., `Customer deposit`, `Refund slot`). Helps operators tell derived addresses apart in the dashboard.

10
statusstring

Lifecycle status. `active` addresses still accept funds; `inactive` are deactivated but kept on the record for audit.

11
created_atstring (RFC3339)

Timestamp when the address was derived.

List Addresses Response

Create Address

Use Case

Derives a new address from the wallet's HD key.

Create Address

Request Body
1
asset_idstringRequired

Asset identifier (2-50 chars). Chain is derived automatically (e.g., `USDC_ETH` → `ethereum`).

2
networkstringRequired

Network (e.g., `mainnet`, `sepolia`, `testnet`, `devnet`).

3
address_formatstring

Address format override (uses chain default).

4
derivation_pathstring

HD derivation path override (uses BIP-44 default).

5
labelstring

Human-readable label.

Example Payload

Create Address Response
Same shape as List Addresses Response

data is a single AddressResponse — the same object shape used in each entry of List Addresses Response. Refer there for the per-field explanations.

Create Address Response
Did you find this page useful?

Join our Discord