Skip to content

Quotes & corridors

List corridors

GET /v1/corridors?chainId=8453

Returns 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=0xUSDT

Returns 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=1000000000

A live, executable price for selling sellAmount of sellToken (collateral) into buyToken (debt) against the resting order book. Requires quotes:read.

Query paramRequiredNotes
chainIdyesMust match your key's environment
sellTokenyesCollateral asset address
buyTokenyesDebt asset address
sellAmountyesAtomic units, base-10 string
minRatenoMinimum debt-per-collateral rate (RAY). Defaults to 0 (accept any).
preferredLiquidityWalletsnoComma-separated Stitch operator wallets to consume before fallback liquidity. Maximum 10. Not with restrictedLiquidityWallets.
restrictedLiquidityWalletsnoComma-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 above minRate.
  • proceeds — the debt asset you'd receive for that fillable part.
  • hasLiquidity: false (liveOrders is 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. Lower minRate or 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.