Fees & limits
Rates are set by your agreement with us. The API returns yours; nothing on this site states a price.
Your fee schedule
GET /v1/fees
{"fees": [{"product": "SWAP", "currency": null, "rail": null,
"percent": "...", "minimum_fee": "...",
"priority": 0, "effective_from": "2026-09-01T00:00:00Z"}]}
| Field | |
|---|---|
product | SWAP, CRYPTO_WITHDRAWAL, ... |
currency, rail | null means any |
percent | A percentage. 2 means 2%, not 0.02 |
minimum_fee | A floor in currency. A small amount pays this instead of the percentage |
priority | Rows are ordered the way they are applied: most specific first, then by priority. The first row matching an operation prices it |
Indicative. For a conversion, POST /v1/quotes is the price you are charged: it can also pick up a provider floor above the percentage. If you add your own margin, ours applies to what is left after yours: 3% then 2% is 4.94% of the original, not 5%.
Estimates
Two read-only calls price a payout or a withdrawal before you send it. An estimate reserves nothing and writes nothing. Values we cannot know are null, with the reason in usd_unavailable; they are never 0.
Chain payout
GET /v1/chain-payouts/estimate?network=tron¤cy=USDT_TRC20&amount=500&address=T...
Scope chain_payouts:read. network is one of tron, bsc, ethereum, base, bitcoin, stellar; address, the destination, is optional.
{
"network": "tron",
"currency": "USDT_TRC20",
"amount": {"amount": "500", "currency": "USDT_TRC20"},
"fee": {"amount": "0", "currency": "USDT_TRC20"},
"fee_usd": "0",
"network_fee": {"amount": "...", "currency": "TRX"},
"network_fee_usd": "...",
"network_fee_charged_to_you": false,
"recipient_holds_asset": true,
"assumed_worst_case": false,
"total_usd": "...",
"usd_unavailable": [],
"payouts_enabled": true,
"limits": {
"per_payout_usd": "...",
"daily_usd": "...",
"daily_used_usd": "...",
"new_address_daily_usd": "...",
"review_at_or_above_usd": "..."
},
"estimated_at": "2026-10-03T10:00:00Z"
}
| Field | |
|---|---|
amount | What you asked to send |
fee, fee_usd | Our fee. For chain payouts it is currently 0 |
network_fee, network_fee_usd | The estimated network cost, in the network's own coin: TRX, BNB, ETH, BTC or XLM. network_fee is null when the network cost could not be read, with the reason in usd_unavailable; never 0 |
network_fee_charged_to_you | Whether that network cost is charged to you today |
recipient_holds_asset | TRON and EVM tokens: whether the destination already holds this token, which changes the energy or gas a transfer needs. null when no address was given or the read failed; the estimate then takes the worst case and assumed_worst_case is true |
total_usd | The total in US dollars, or null when a part of it cannot be priced |
usd_unavailable | Why a dollar figure is null, one string per reason |
payouts_enabled | Whether payouts on this network are switched on for you |
limits | Your payout policy and today's use of it. null where a limit is not set |
estimated_at | When the estimate was made |
Withdrawal
GET /v1/withdrawals/estimate?currency=USDT_TRC20&amount=100
Scope withdrawals:read.
| Field | |
|---|---|
amount | What you asked to withdraw |
fee, fee_usd | Our fee, from your CRYPTO_WITHDRAWAL rule |
network_fee, network_fee_usd | The expected network cost. null when we have no figure for this currency, never 0 |
amount_received | amount − fee − network_fee: what arrives. null while network_fee is unknown |
usd_unavailable | Why a dollar figure is null |
estimated_at | When the estimate was made |
Refusals
| Code | HTTP | |
|---|---|---|
validation_failed | 422 | Unknown network or currency, or an invalid amount. detail names the field |
forbidden_scope | 403 | The key lacks the read scope |
Limits
GET /v1/limits
The numbers applied to your key, not the service defaults:
| Field | |
|---|---|
requests.reads_per_minute, requests.writes_per_minute | After any ceiling of your tenant |
requests.tenant_ceiling_per_minute | Your own cap, or null. It can only tighten the two above |
requests.window_seconds | The sliding window |
requests.idempotency_key_max_length | 120 |
requests.quote_lifetime_seconds | How long a quote lives |
money.withdrawal_limit_usd, money.withdrawal_spent_usd, money.withdrawal_remaining_usd | Your rolling withdrawal limit. remaining_usd already counts what is in flight |
money.withdrawal_window_hours | Rolling, not a calendar day |
Chain payout limits are separate from the withdrawal limit and are returned by the payout estimate above.
| Fixed limit | |
|---|---|
Addresses per POST /v1/deposit-addresses | 500 |
Addresses per POST /v1/deposit-addresses/derive | 100 |
Deposit reference | 1–200 printable ASCII, no space |
Payout reference | 1–120 printable ASCII, no space |
Idempotency-Key | 120 characters |
GET /v1/deposits, GET /v1/deposit-addresses | 200 per page by default, 500 maximum |
GET /v1/events | 100 per page by default, 500 maximum |
| Signature window | ±300 seconds |
| watch-now window | 60 minutes from the latest call |
| Webhook attempts | 8, then abandoned |