POST
Estimate a transaction

Authorizations

Authorization
string
header
required

An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key carries scopes (read, wallets.write, transactions.write, events.write, webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in lifetime — see Authentication.

Body

application/json
wallet
string
required

Wallet id, reference, or address on network; a wallet id must live on network. A signed request (X-Citadel-Request-Signature) names it by id or address only.

network
enum<string>
required

The network the data lives on. Required wherever it appears in a request — there is no default network. One your installation does not serve: 422 network_not_served.

Available options:
mainnet,
testnet
actions
(transfer · object | approve · object | swap · object | call · object)[]
required
Minimum array length: 1
end_user_ref
string

The user the payout is for; policy limits count per user.

idempotency_key
string

Same as the Idempotency-Key header.

queue
boolean
default:false

true records the payout for a workflow to send later in a batch, instead of sending it now. Exactly one transfer action.

At the door nothing is reserved, no network fee is estimated, and your approval rules are not asked. The funds stay spendable until a workflow's batch payout picks the payout up by its tags and reserves them for the batch. The answer is 202 with status: created and queued: true.

Once a batch carries it, the transaction reads final when the batch landed and failed when it did not. It has no tx_hash of its own, and these changes come without operation.* webhooks: read them with GET /transactions/{id}. Until a batch carries it, POST /transactions/{id}/cancel withdraws it, with operation.failed.

tags
string[]

Selects a queued payout in a workflow.

Response

What a send would hold and whether it would wait for people.

What sending the request now would do. network_fee and approval are always present; null is an answer.

network
enum<string>
required

The network the data lives on. Required wherever it appears in a request — there is no default network. One your installation does not serve: 422 network_not_served.

Available options:
mainnet,
testnet
chain
enum<string>
required
Available options:
tron,
evm,
solana,
ton
wallet
object
required

The wallet it would leave from.

network_fee
object | null
required

The most the network may charge the sending wallet, in the chain's native coin — what a send holds next to the amounts. null: Citadel prices no fee for this wallet and a send holds none (every wallet but an EVM one paying its own gas).

approval
object | null
required

The quorum your approval rules would hold the send for — the strictest rule that matches, every match listed in reasons. null: it would go out without waiting for people.