Create Transaction (Transfer)

Use Case

Creates and signs a transfer transaction. When every policy passes, the transaction is signed automatically within the Bitnob Secure Enclave. If a policy requires multi-party approval, the transaction is parked in pending_authorization until approvers vote.

Create Transaction

Request Body
1
wallet_iduuidRequired

Source wallet.

2
to_addressstringRequired

Recipient address (26-128 chars).

3
amountstringRequired

Human-readable amount (e.g., `"1.5"`), must be > 0.

4
asset_idstringRequired

Asset identifier (2-50 chars, e.g., `USDC_ETH`, `ETH`, `BTC`).

5
networkstring

Network override (defaults to environment).

6
fee_levelstring

`low`, `medium` (default), or `high`.

7
memostring

Optional memo (max 256 chars).

8
idempotency_keystringRequired

1-64 characters.

9
sponsor_gasboolean

Enable gas sponsorship from org's gas station.

10
gas_station_iduuid

Specific gas station to use (implies `sponsor_gas = true`).

Example Payload

Create Transaction Response
1
idstring (uuid)

Unique identifier for this transaction. Use it on every follow-up endpoint — get, cancel, sign, speed-up, or sponsorship lookup — and pin it to your internal records.

2
wallet_idstring (uuid)

Source wallet that owns this transaction. Lets you trace the transaction back to a customer's wallet and the parent vault.

3
address_idstring (uuid)

Specific address involved in the transaction (the sending address on outbound transfers). Useful when a wallet has many derived addresses and you need to attribute funds to one.

4
asset_idstring

Asset identifier — bare symbol for native assets (e.g., `ETH`, `BTC`) and `<symbol>_<chain>` for tokens (e.g., `USDC_ETH`). Matches the same identifiers used in balances and policies.

5
chainstring

Blockchain the transaction settles on (e.g., `ethereum`, `bitcoin`, `solana`). Determines which signing curve and broadcast pipeline the Enclave uses.

6
networkstring

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

7
tx_typestring

Type of operation: `transfer` for ordinary sends, `swap` for in-protocol swaps, `contract_call` for arbitrary contract interactions, and `gas_refill` / `gas_sponsorship` for gas-station bookkeeping rows.

8
directionstring

`outbound` when Bitnob is sending funds out (created via this endpoint); `inbound` for funds received into one of your addresses. Drives whether the wallet's `balance` decreases or increases.

9
statusstring

Lifecycle status. Walks through `pending_signature` → `pending_authorization` (if a policy requires approval) → `signed` → `awaiting_sponsorship` → `broadcasting` → `confirming` → `completed`. Terminal failure states are `failed`, `cancelled`, and `rejected`.

10
display_statusstring

Human-friendly version of `status` (e.g., `Processing`, `Completed`, `Failed`). Safe to drop into UI without translating raw enum values.

11
from_addressstring

On-chain sender address. Always the wallet's address on `outbound` transactions; the external sender's address on `inbound`.

12
to_addressstring

On-chain recipient address. Set from the request body for outbound transfers; the wallet's address for inbound transfers.

13
amountstring

Raw amount in the asset's smallest unit (wei for ETH, satoshi for BTC, lamport for SOL, sun for TRX). Returned as a string to avoid floating-point precision loss in JSON.

14
amount_decimalstring

Human-readable amount aligned to the asset's `asset_decimals` (e.g., `1.5`, `100.0`). Safe to display in UI alongside the symbol.

15
asset_typestring

`native` for the chain's built-in gas asset (ETH, BTC, SOL, TRX, etc.); `token` for ERC-20s, SPLs, TRC-20s, and other contract-issued assets.

16
asset_symbolstring

Short ticker symbol (e.g., `ETH`, `USDC`, `BTC`). Pair with `amount_decimal` for human-readable amounts in dashboards or notifications.

17
asset_addressstring

Token contract address when `asset_type == "token"`. Empty string for native assets — that's the quickest way to distinguish the two without inspecting `asset_type`.

18
asset_decimalsinteger

Number of decimal places the asset uses (e.g., 18 for ETH, 6 for USDC, 8 for BTC). Use it to convert between `amount` and `amount_decimal` yourself when needed.

19
tx_hashstring

On-chain transaction hash. Empty until the Enclave signs and broadcasts; once set you can verify the tx on any block explorer for this chain.

20
block_explorer_urlstring

Convenience URL for a public block explorer (e.g., Etherscan, mempool.space) once the transaction is broadcast. Empty before broadcast.

21
block_numberinteger

Block height the transaction was mined in. `0` while still pending or broadcasting; updates once the network includes the tx in a block.

22
confirmationsinteger

Number of block confirmations accumulated. Bitnob marks the transaction `completed` once it meets the chain's finality threshold.

23
amount_usdstring

USD equivalent of `amount` at the moment the transaction was created. Snapshotted on creation so dashboards and reports stay stable even when prices move.

24
fee_amount_usdstring

USD equivalent of the network fee at the time the transaction was created. Useful for reconciling cost across many transactions.

25
usd_exchange_ratestring

The asset → USD rate used to compute `amount_usd` and `fee_amount_usd`. Lets you re-derive the snapshots if you ever need to.

26
error_messagestring

Failure reason — populated only when `status` is `failed`. Empty string on healthy transactions.

27
created_atstring (RFC3339)

When Bitnob accepted the transaction request. Set immediately on creation; the other timestamps below fill in as the transaction progresses.

28
signed_atstring (RFC3339)

When the Bitnob Secure Enclave produced a signature for the transaction. Empty until status leaves `pending_signature` / `pending_authorization`.

29
broadcast_atstring (RFC3339)

When the signed transaction was submitted to the network. Empty until status reaches `broadcasting` or later.

30
confirmed_atstring (RFC3339)

When the transaction crossed the chain's confirmation threshold and Bitnob marked it `completed`. Empty until then.

31
feeTransactionFeeResponse

Network fee breakdown for this transaction — contains `amount`, `amount_decimal`, `asset_id`, `asset_symbol`, and `asset_decimals` for the fee asset (usually the chain's native gas token).

32
sponsoredboolean

`true` when a gas station paid the network fee for this transfer instead of the source wallet. Lets you tell sponsored withdrawals apart at a glance.

33
sponsored_by_gas_stationstring (uuid)

Identifier of the gas station that funded the fee when `sponsored = true`. Empty for self-funded transactions.

34
sponsor_tx_idstring (uuid)

Identifier of the separate `gas_sponsorship` transaction that moved the fee asset from the gas station to this wallet. Use it to reconcile sponsored fee flows.

35
sponsor_amountstring

Raw amount of native gas the sponsor transferred into the source wallet to cover the fee, in the asset's smallest unit.

Create Transaction Response

Batch Transfer

Use Case

Sends up to 100 transfers in a single request from the same source wallet.

Batch Transfer

Request Body
1
source_wallet_iduuidRequired

Wallet that funds every transfer in this batch.

2
transfersarrayRequired

1-100 transfer items. Each item produces its own transaction.

3
destination_addressstringRequired

Recipient address (26-128 chars). Validated against the asset's chain.

4
asset_idstringRequired

Asset identifier (e.g., `USDC_ETH`, `ETH`, `BTC`). Chain is inferred from the asset.

5
amountstringRequired

Human-readable amount (e.g., `"50"`, `"1.5"`). Must be > 0.

6
referencestring

Optional client reference (max 64 chars) echoed back on the leg's transaction.

7
networkstringRequired

Network the whole batch settles on (e.g., `mainnet`, `sepolia`).

8
idempotency_keystringRequired

Client-generated key (1-64 chars) that deduplicates batch retries.

Example Payload

Get Transaction

Use Case

Retrieves a single transaction by ID.

Get Transaction

Get Transaction Response
Same shape as Create Transaction Response

data is the same TransactionResponse object returned by Create Transaction Response. Refer there for the per-field explanations.

Get Transaction Response

List Transactions

Use Case

Lists transactions for a wallet or address. Either wallet_id or address_id is required.

List Transactions

Query Parameters
1
wallet_iduuid

Restrict results to transactions on a single wallet. One of `wallet_id` or `address_id` is required.

2
address_iduuid

Restrict results to transactions on a single derived address. Use instead of `wallet_id` when a wallet has many addresses and you only want one.

3
limitinteger

Page size. Default 20, max 100. Use with `offset` to paginate through long transaction histories.

4
offsetinteger

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

5
statusstring

Filter by lifecycle status (e.g., `completed`, `pending_authorization`, `failed`). Useful for surfacing transactions stuck awaiting approval.

6
tx_typestring

Filter by operation type: `transfer`, `swap`, `contract_call`, `gas_refill`, or `gas_sponsorship`. Handy for excluding internal gas bookkeeping rows.

7
directionstring

`inbound` for funds received, `outbound` for funds sent. Default returns both.

8
addressstring

Filter by a counterparty on-chain address — matches whether it appears as sender or recipient. Use the more specific `from_address` / `to_address` if you need one side.

9
from_addressstring

Match only transactions where this address is the sender. Use to find deposits from a known origin.

10
to_addressstring

Match only transactions where this address is the recipient. Use to find withdrawals to a known destination.

11
periodstring

Preset time window (`1h`, `24h`, `7d`, `30d`, `180d`, `270d`, `1y`). Quicker than supplying `start_date` / `end_date` for common ranges.

12
start_datestring (RFC3339)

Custom range lower bound. Overrides `period` when both are provided. Inclusive.

13
end_datestring (RFC3339)

Custom range upper bound. Pair with `start_date` for a precise window. Inclusive.

14
include_failed_inboundboolean

Include failed inbound transactions from internal transfers. Off by default to keep customer-facing views clean.

15
assetstring

Filter by asset symbol (e.g., `ETH`, `USDC`). Returns transactions in that asset across whichever chain the symbol lives on.

16
tx_hashstring

Filter by on-chain hash (prefix match supported). Useful when you only know part of the hash from a block explorer or webhook.

Query

List Transactions Response
Same shape as Create Transaction Response

Each entry in data[] uses the same TransactionResponse object as Create Transaction Response. Refer there for the per-field explanations. The meta envelope below carries pagination state (total, limit, offset, has_more).

List Transactions Response

Estimate Fee

Use Case

Returns an estimated network fee for a proposed transfer before submission.

Estimate Fee

Request Body
1
wallet_iduuidRequired

Source wallet.

2
to_addressstringRequired

Recipient (26-128 chars).

3
amountstringRequired

Transfer amount.

4
asset_idstringRequired

Asset identifier (2-50 chars).

5
networkstringRequired

Network.

Example Payload

Estimate Fee Response
1
asset_idstring

Asset the fee will be paid in — typically the chain's native gas asset (e.g., `ETH`, `BTC`, `TRX`).

2
chainstring

Blockchain the estimate applies to.

3
networkstring

Network within the chain (e.g., `mainnet`, `sepolia`).

4
estimated_feestring

Estimated network fee in the native asset's smallest unit (wei, satoshi, sun). Returned as a string to avoid float precision loss.

5
estimated_fee_usdstring

Same fee converted to USD using the current exchange rate. Handy for quoting cost in your UI.

6
gas_limitstring

Gas limit Bitnob will set on the transaction. EVM chains only.

7
gas_pricestring

Legacy gas price (wei) for pre-EIP-1559 EVM transactions. Empty when EIP-1559 fields are in use.

8
max_fee_per_gasstring

EIP-1559 max fee per gas (wei) — the cap on `base_fee + tip`. EVM chains on EIP-1559 only.

9
max_priority_feestring

EIP-1559 priority tip (wei) paid to the validator on top of the base fee. EVM chains on EIP-1559 only.

10
fee_ratestring

Bitcoin fee rate in sat/vB. Populated only for Bitcoin estimates.

11
prioritystring

Priority tier the estimate corresponds to: `low`, `medium`, or `high`. Higher tiers shrink `estimated_seconds` at the cost of `estimated_fee`.

12
estimated_secondsinteger

Expected confirmation time at this priority, in seconds. Treat as a guideline — actual inclusion depends on network conditions.

13
energy_usedinteger

Estimated energy units the transaction will consume. Tron only — drives TRX-staked energy planning for gas stations.

14
bandwidth_usedinteger

Estimated bandwidth points the transaction will consume. Tron only — drives TRX-staked bandwidth planning for gas stations.

Estimate Fee Response

Validate Address

Use Case

Validates an on-chain address against the rules of the specified asset's chain.

Validate Address

Request Body
1
asset_idstringRequired

Asset to validate against.

2
addressstringRequired

Address to validate.

Example Payload

Validate Address Response
1
validboolean

Whether the address passed validation for the given asset's chain.

2
asset_idstring

Echo of the requested asset identifier.

3
chainstring

Chain inferred from the asset.

4
addressstring

Echo of the address checked.

Validate Address Response

Sign Transaction

Use Case

Manually triggers signing for a transaction that was held in pending_authorization and has now received the required approvals.

Sign Transaction

Sign Transaction Response
Same shape as Create Transaction Response

data is the same TransactionResponse object returned by Create Transaction Response. Refer there for the per-field explanations. The main change after this call is status advancing from pending_authorization to signed and signed_at getting populated.

Sign Transaction Response

Cancel Transaction

Use Case

Cancels a pending transaction before it is broadcast.

Cancel Transaction

Cancel Transaction Response
Same shape as Create Transaction Response

data is the same TransactionResponse object returned by Create Transaction Response. Refer there for the per-field explanations. The main change after this call is status flipping to cancelled — terminal, so no further timestamps update.

Cancel Transaction Response

Speed Up Transaction

Use Case

Replaces a pending (broadcast but unconfirmed) transaction with a higher fee.

Speed Up Transaction

Speed Up Transaction Response
Same shape as Create Transaction Response

data is the same TransactionResponse object returned by Create Transaction Response. Refer there for the per-field explanations. The main changes after this call are a fresh tx_hash, an updated fee breakdown (higher than the original), and a new broadcast_at timestamp.

Speed Up Transaction Response

Transaction Analytics, Assets, Export

Use Case

Aggregated analytics, the list of distinct assets transacted, and JSON/CSV export of historical transactions.

Analytics & Export
Did you find this page useful?