Skip to main content
Bloom serves Solana and EVM from different hosts. Which host you call determines which API key works, which fields apply, and how priority_fee and processor_tip are denominated. Keys are not interchangeable — a Solana key sent to the EVM host is rejected with UNAUTHORIZED. Token deploys are Solana-only; see Deploy a token.

Regions

Solana runs in two regions. They are interchangeable: same account, same wallets, same keys, same request and response format. Pick whichever is closer — the only thing that differs is network latency to the API, which is worth getting right if you trade on tight timings. Your rate-limit budget is per account, not per region — the two regions draw on one budget, so calling both does not double your allowance.
Regional budgets reconcile continuously rather than instantaneously. Just after you switch regions, the X-RateLimit-Remaining-* headers from the new region can briefly read high before they catch up with what you already spent elsewhere. Treat a sudden increase in remaining budget as stale rather than as headroom, and keep your own count if you pace against these headers.
Latency aside, prefer to keep a given workload on one region. Nothing breaks if you spread it, but a single region gives you the most accurate rate-limit headers and the most predictable behaviour.

Selecting a chain

On the EVM host, a swap may name the chain it targets with a top-level chain field, matched case-insensitively:
chain is optional. Omit it and the token address is resolved across the supported chains automatically:
Sending an unrecognised value is an error, naming the ones that are valid:
Pass chain explicitly when you know it. It pins the lookup to one chain, so a token address that exists on more than one cannot resolve to the wrong market — and an address absent from that chain fails fast with TOKEN_OR_POOL_NOT_FOUND instead of silently finding a different pool.
On the Solana host there is no chain field; the host itself is the chain.

Supported chains and quote assets

A quote asset is what a Buy is denominated in — the token you spend, and the one wallets[].amount is measured in. Each chain supports its native gas token plus a set of stablecoins. Arc’s native gas token is USDC, so it has no separate stablecoin.

Naming the native asset

Each chain’s native token is named by its own symbolETH on Ethereum, Base and Robinhood, BNB on BNB Chain, USDC on Arc. Omitting quote_asset selects the native token too, so these are equivalent on Base:
On the Solana host, the native asset is SOL. quote_asset is validated against the chain you are trading on. Asking for an asset that chain does not support is rejected, and the error lists the ones that are:
Because the list is per chain, an asset valid on one chain can be rejected on another — USDT works on Ethereum and BNB Chain but not on Base or Robinhood.

What amount is denominated in

On a Buy, wallets[].amount is denominated in the quote asset you selected — not in the chain’s native token, and not in the token you are buying. Changing quote_asset changes what amount means.
Those are wildly different trade sizes for the same "10", so set amount and quote_asset together. On a Sell, quote_asset does not affect amount at all — it is read according to sell_mode: a percentage of holdings from 1100 (the default), or an absolute token quantity when sell_mode is "tokens".
amount is always a decimal string, never a JSON number — "0.05", not 0.05. This avoids floating-point precision loss on large or fine-grained amounts. Sending a number is rejected with INVALID_REQUEST.

Fee denomination

priority_fee and processor_tip mean different things on each host. This is the most common source of mis-sized fees. So a priority_fee of 0.001 is a thousandth of a SOL on Solana, but a thousandth of a gwei on EVM. A typical EVM priority fee is a whole number of gwei:
Here 3 is 3 gwei of priority fee, and 0.0005 is 0.0005 BNB of processor tip. The same split applies to the priority_fee and processor_tip fields inside auto-orders. Setting auto_tip: true lets the server choose both values for you, and is the safer default if you are not tuning fees per chain.