Appearance
Quotes & corridors
v1 is closed to new integrations
Do not build on v1. The current API is v2 RFQ. v1 stays served for integrations already running on it, takes no new features, and gets no new endpoints.
List corridors
GET /v1/corridors?chainId=8453Returns the corridors available to your key. chainId is optional. Omit it to list every chain your key's environment covers. Requires quotes:read.
json
{
"data": [
{
"chainId": 8453,
"collateralAsset": "0x…",
"debtAsset": "0x…",
"collateralSymbol": "cNGN",
"collateralDecimals": 6,
"debtSymbol": "USDT",
"debtDecimals": 18,
"displayName": "cNGN → USDT",
"createdAt": "2026-01-01T00:00:00.000Z"
}
]
}A corridor is identified by chainId + collateralAsset + debtAsset: that triple is what every other endpoint takes. collateralAsset is the local-currency token you sell; debtAsset is what you receive (usually USDT).
Symbols and decimals come back with every corridor, so you can render a pair and scale an amount without resolving the tokens yourself. Read the decimals per corridor rather than per ticker: USDT is 18 decimals on BSC and 6 elsewhere.
This endpoint is a catalog, not a price. Ask /v1/order-book or /v1/quote for anything you'd show a user as a rate.
Removed fields
buyRateRay, sellRateRay, ratesFetchedAt and minPositionSize are no longer returned. The first three were quotes from the corridor's on-chain oracle and the last was the settlement pool's minimum trade size; both of those mechanisms are retired, and the fields had been serving a constant null/"0" since. Use /v1/quote for a price and /v1/order-book for available size.
See available liquidity and offers
GET /v1/order-book?chainId=8453&sellToken=0xCNGN&buyToken=0xUSDTReturns the live, funded offers for one swap direction, best rate first. It also returns aggregate capacity, so you can show available liquidity before asking the user for a swap amount. Requires quotes:read.
json
{
"data": {
"chainId": 8453,
"sellToken": "0x…",
"buyToken": "0x…",
"hasLiquidity": true,
"liveOffers": 2,
"executableOffers": 2,
"availableSellAmount": "8004000000",
"availableBuyAmount": "7870000000",
"bestRateRay": "990000000000000000000000000",
"asOf": "2026-07-21T10:00:00.000Z",
"offers": [
{
"id": "offer_…",
"maker": "0x…",
"sellAmount": "3001500000",
"feeAmount": "1500000",
"buyAmount": "2970000000",
"rateRay": "990000000000000000000000000",
"expiresAt": "2026-07-21T11:00:00.000Z"
}
]
}
}availableSellAmount is the fee-inclusive amount of sellToken needed to clear the maximum depth one swap can execute. Each offer’s sellAmount includes its feeAmount, so it can be passed directly to /quote or /swaps. availableBuyAmount is the corresponding buyToken proceeds if every listed offer fills. liveOffers counts the full funded book; executableOffers and the offers array are capped to the 100 offers a single swap can execute. All amounts are atomic-unit strings. Offers are checked for expiry, spent nonces, and maker funding before they are returned, but on-chain liquidity can still change between this read and execution.
Get a quote
GET /v1/quote?chainId=8453&sellToken=0xCNGN&buyToken=0xUSDT&sellAmount=1000000000A live, executable price for selling sellAmount of sellToken (collateral) into buyToken (debt) against the resting order book. Requires quotes:read.
| Query param | Required | Notes |
|---|---|---|
chainId | yes | Must match your key's environment |
sellToken | yes | Collateral asset address |
buyToken | yes | Debt asset address |
sellAmount | yes | Atomic units, base-10 string |
minRate | no | Minimum debt-per-collateral rate (RAY). Defaults to 0 (accept any). |
preferredLiquidityWallets | no | Comma-separated Stitch operator wallets to consume before fallback liquidity. Maximum 10. Not with restrictedLiquidityWallets. |
restrictedLiquidityWallets | no | Comma-separated Stitch operator wallets to match exclusively. No open-market fallback. Maximum 10. Not with preferredLiquidityWallets. |
json
{
"data": {
"chainId": 8453,
"sellToken": "0x…",
"buyToken": "0x…",
"sellAmount": "1000000000",
"fillableAmount": "1000000000",
"proceeds": "612000000",
"effectiveRateRay": "612000000000000000000000000",
"remainingAmount": "0",
"fullyFilled": true,
"ordersMatched": 2,
"liveOrders": 7,
"hasLiquidity": true
}
}fillableAmount: how much of your sell clears at or aboveminRate.proceeds: the debt asset you'd receive for that fillable part.hasLiquidity: false(liveOrdersis 0) means there's no filler market in this direction right now. That's not an error. Back off and retry.- Partial fills are normal: if
fillableAmount < sellAmount, only part clears at your price. LowerminRateor sell less.
When preferredLiquidityWallets is present, qualifying operator orders from those wallets are matched first, then the API falls back to the rest of the book. restrictedLiquidityWallets skips that fallback. Only listed wallets are eligible, and hasLiquidity reflects whether those wallets can fill. minRate remains a hard floor either way. The response's routing block reports which policy applied and whether fallback liquidity was used. Pass the same wallet field to /swaps to build the same route.
A quote is a read. To actually execute, call POST /v1/swaps, which returns the transactions to sign.