Qubit Exchange

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:

FieldMeaning
provider, modewhich rail; private when confidential
amountOut, amountOutFormattedwhat lands in the wallet, in the destination token
fees.providerBps, fees.providerNativethe provider's own fee, in bps or native gas
nativeFeeUsd, netUsd, rankedBythe ranking basis
pointspoints 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)
etaSecondsprovider'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.