Skip to content

Futures · Bars, trades and book

Futures book

The current displayed depth of a futures contract.
GET/v1/futures/bookfuturesBook
On this page

The synchronized order book as displayed: aggregated size and order count per price level, best price first, with the book sequence. Only the live book exists; there is no historical book on this route (see /v1/futures/liquidity-heatmap for history). levels limits the depth per side.

Example request

curl -sS --get "https://api.ordermap.si/v1/futures/book" \
  -H "Authorization: Bearer $ORDERMAP_API_KEY" \
  --data-urlencode symbol=ES

Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.

Parameters

3 parameters, none required.

ParameterType and limitsDescription
symbolqueryoptionalstringat most 3 characterspattern ^[A-Za-z0-9]{1,3}$Futures product root, for example ES, NQ, CL or GC. Without contract the current front month is used and returned in the response.
contractqueryoptionalstringat most 6 characterspattern ^[A-Za-z0-9]{1,3}[FGHJKMNQUVXZfghjkmnquvxz][0-9]{1,2}$Exact dated contract: root, month code and year, for example ESZ6 (December 2026). Two-digit years are accepted and returned in the one-digit form (ESZ26 is ESZ6). Only the front month and the contracts listed by /v1/futures/contracts are served.
levelsqueryoptionalintegerdefault 20min 1max 1000Price levels to return per side.

Response

StatusMeaningBody
200Successful response.Schema below
400Invalid, unknown or repeated parameters, or an invalid cursor.Error object
401Missing or invalid API key.Error object
403The plan, dataset release or account state does not allow this request.Error object
422The request is valid but no data exists for it.Error object
429Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-AfterError object
500Internal error.Error object
503Data temporarily unavailable; retry after Retry-After seconds.Retry-AfterError object
504The request timed out.Error object

Authenticated responses carry the X-RateLimit-* headers (see rate limits); 429 and 503 add Retry-After.

200 response body

  • dataobjectrequiredThe displayed order book of one contract.19 fields inside
    • ask_levelsintegerrequiredLevels held on the ask side before the levels limit is applied.
    • asksarray<object>requiredAsk levels, best (lowest) first.4 fields inside
      • ordersintegerrequiredDisplayed orders at the level.
      • pricenumberrequiredPrice.
      • price_ticksstringrequiredPrice as an integer count of ticks, as a string.
      • sizeintegerrequiredDisplayed contracts at the level.
    • bid_levelsintegerrequiredLevels held on the bid side before the levels limit is applied.
    • bidsarray<object>requiredBid levels, best (highest) first.4 fields inside
      • ordersintegerrequiredDisplayed orders at the level.
      • pricenumberrequiredPrice.
      • price_ticksstringrequiredPrice as an integer count of ticks, as a string.
      • sizeintegerrequiredDisplayed contracts at the level.
    • contractstringrequiredDated contract.
    • depth_typestring | nullrequiredby_order: individual orders aggregated per level; by_price: price levels as published.by_orderby_pricenull
    • sequencestringrequiredBook sequence, as a string.
    • symbolstringrequiredProduct root.
    • tick_sizenumberrequiredMinimum price increment.
    • timestampinteger | nullunix-msrequiredTime of the book. Unix epoch milliseconds (UTC).
    • validbooleanrequiredThe book is synchronized; a false book must not be used.
  • metaobjectrequiredMeta object

Example response

{
  "data": {
    "ask_levels": 655,
    "asks": [
      {
        "orders": 24,
        "price": 6021.5,
        "price_ticks": "24086",
        "size": 96
      }
    ],
    "bid_levels": 640,
    "bids": [
      {
        "orders": 31,
        "price": 6021.25,
        "price_ticks": "24085",
        "size": 118
      }
    ],
    "contract": "ESZ6",
    "depth_type": "by_order",
    "sequence": "88213344",
    "symbol": "ES",
    "tick_size": 0.25,
    "timestamp": 1792159200123,
    "valid": true
  },
  "meta": {
    "as_of": 1760659200123,
    "coverage": {
      "complete": true
    },
    "delay_ms": 0,
    "delayed": false,
    "request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
    "source": "cme"
  }
}

Values are illustrative. Missing values are null, never 0.