Getting started
Qubit Exchange is a quote and execution engine for stablecoins and gas across twenty-three networks. The app at /app and this API share one engine: what you see in the app is exactly what the API returns.
Networks
Ethereum, Arbitrum, Base, Optimism, Polygon, BNB Chain, Avalanche, X Layer, Plasma, Berachain, Unichain, Sonic, World Chain, Ink, HyperEVM, Monad, Robinhood Chain, Sei, Mantle, Flare, Stable, MegaETH, Morph, Solana.
One quote
POST /v1/quote
{
"srcChain": "arbitrum", "dstChain": "base",
"srcSymbol": "USDC", "dstSymbol": "USDC",
"amount": "250",
"sender": "0x…", // optional: unlocks executable calldata
"recipient": "0x…", // optional: defaults to sender
"privacy": "basic" // optional: basic | advanced — confidential settlement
}
The response is { routes, notes }. Routes are ranked by netUsd — the amount you receive in dollars minus any network fee paid in native gas. notes lists providers that had no route and why.
Each route carries:
| Field | Meaning |
|---|---|
provider, mode | which rail; private when confidential |
amountOut, amountOutFormatted | what lands in the wallet, in the destination token |
fees.providerBps, fees.providerNative | the provider's own fee, in bps or native gas |
nativeFeeUsd, netUsd, rankedBy | the ranking basis |
points | points you earn on this route: { points, base, multiplier } |
steps[] | ordered actions: approve (only if allowance is short), tx (calldata), transfer (deposit address), relay (Qubit's relayer delivers) |
etaSeconds | provider's estimate |
Amounts are decimal strings in the token's smallest unit. Never round them.
Execute
Send each tx step from sender on step.chain, in order. The engine puts chainId in the transaction; wallets reject a signature on the wrong network. After the last step, register the hash for points:
POST /v1/points/track { "route": <the route object>, "txHash": "0x…", "wallet": "0x…" }
Track
GET /v1/status?provider=cctp&src=arbitrum&burnTx=0x…
GET /v1/status?provider=relay&requestId=…
GET /v1/status?provider=lifi|gaszip|lzoft&tx=0x…
GET /v1/status?provider=okxdex|kyber&chain=base&tx=0x…
GET /v1/status?provider=intents&depositAddress=…
CCTP transfers to the QubitGate are delivered by Qubit's relayer: POST /v1/relay { srcChain, dstChain, burnTx }, then GET /v1/relay?src=…&burnTx=….
Lists
GET /v1/chains — networks and which providers serve them. GET /v1/tokens?chain=base — tokens merged by contract address. GET /v1/health — providers enabled on this instance.
Points
GET /v1/points/nonce?address= returns a message; sign it with the wallet (EIP-191 or Solana ed25519) and POST /v1/points/bind. GET /v1/points/profile?address=, GET /v1/points/leaderboard. Rules: Points rules.
Limits
Public instances rate-limit per IP. Quotes are indicative for about 30 seconds; re-quote before signing if more time has passed.