Fetching Orders

💡 Production advice: run your own indexer from chain events. Use our API for development/testing.

Endpoint

GET https://round-snowflake-9c31.devops-118.workers.dev/

Polling & Freshness

  • Refresh every ~30s (aligns with Odette.fi / Flys.bet cadence).

  • Fetch fresh orders right before trade execution.

  • Orders can expire or be filled between polls.

const REFRESH_INTERVAL = 30_000;

async function fetchAndUpdateOrders() {
  const res = await fetch('https://round-snowflake-9c31.devops-118.workers.dev/');
  const json = await res.json();
  updateOrdersDisplay(json.data.orders);
  if (json.data.market_data) updateMarketPrices(json.data.market_data);
}

fetchAndUpdateOrders();
setInterval(fetchAndUpdateOrders, REFRESH_INTERVAL);

Response Shape (abridged)

{
  "data": {
    "orders": [
      {
        "order": {
          "maker": "0x...",
          "collateral": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "isCall": true,
          "priceFeed": "0x64c911996D3c6aC71f9b455B1E8E7266BcbD848F",
          "implementation": "0xb727690FDD4Bb0ff74f2f0CC3E68297850A634c5",
          "strikes": [100000000000, 110000000000],
          "expiry": 1734336000,
          "price": "5000000",
          "maxCollateralUsable": "1000000000",
          "isLong": true,
          "orderExpiryTimestamp": 1734336000,
          "numContracts": "0",
          "extraOptionData": "0x"
        },
        "nonce": "12345",
        "signature": "0x...",
        "optionBookAddress": "0x1fcA1052F45A3271F12221D4D990BfED4EE7D0b1"
      }
    ],
    "market_data": { "BTC": 95000.50, "ETH": 3500.25 }
  }
}

Common Filters

// by strike count
const spreads = orders.filter(o => o.order.strikes.length === 2);
const butterflies = orders.filter(o => o.order.strikes.length === 3);
const condors = orders.filter(o => o.order.strikes.length === 4);

// by asset
const BTC_FEED = '0x64c9...48F';
const btcOrders = orders.filter(o => o.order.priceFeed === BTC_FEED);

// by collateral (USDC)
const USDC = '0x8335...913';
const usdcOrders = orders.filter(o => o.order.collateral.toLowerCase() === USDC.toLowerCase());

// by implementation
const CALL_SPREAD = '0x2Db5...eE3';
const callSpreads = orders.filter(o => o.order.implementation.toLowerCase() === CALL_SPREAD.toLowerCase());

Decimals

Field
Decimals
Example
Human

strikes[]

8

100000000000

1000

price

8

5000000

0.05 USDC

maxCollateralUsable

6

1000000

1 USDC

const strike = order.strikes[0] / 1e8;
const price = Number(order.price) / 1e8;

Last updated