Appearance
Quotes & corridors
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…",
"displayName": "cNGN → USDT",
"buyRateRay": "1550000000000000000000000000",
"sellRateRay": "1548000000000000000000000000",
"ratesFetchedAt": "2026-07-07T12:00:00.000Z",
"minPositionSize": "1000000",
"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). Rates are RAY-scaled and may be null when the oracle is stale.
buyRateRay and sellRateRay are the corridor oracle's reference rates. They're indicative, not what you'll trade at — your execution price comes from the resting offers, so use /v1/order-book or /v1/quote before you commit to a number.
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.