Skip to content

Futures · Order flow

Futures order flow

Aggregated futures prints (order-flow bubbles) for a window.
GET/v1/futures/order-flowfuturesOrderFlow
On this page

The prints of a window in time order. When the window holds more than 4,000 prints, prints at the same price, side and second are grouped into one row with aggregated true; size and trade_count always add up to every print in the window, so no volume is dropped. The window defaults to the last 15 minutes and is at most 24 hours; windows beyond the live capture are read from retained history (current and previous trading session). For every print use /v1/futures/trades.

Example request

curl -sS --get "https://api.ordermap.si/v1/futures/order-flow" \
  -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

4 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.
start_timequeryoptionalintegerunix-msmin 946684800000max 4102444800000Start of the window (inclusive).
end_timequeryoptionalintegerunix-msmin 946684800000max 4102444800000End of the window (exclusive).

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

  • dataarray<object>required9 fields inside
    • aggregatedbooleanrequiredThe row groups several prints.
    • contractstringrequiredDated contract.
    • idstringrequiredIdentifier of the print; grouped rows carry an aggregate identifier.
    • pricenumberrequiredPrice.
    • price_ticksstringrequiredPrice as an integer count of ticks, as a string.
    • sidestringrequiredAggressor side.buysellunknown
    • sizeintegerrequiredContracts.
    • timestampintegerunix-msrequiredTime of the print (the last print of a group). Unix epoch milliseconds (UTC).
    • trade_countintegerrequiredPrints in the row.
  • metaobjectrequiredMeta object

Example response

{
  "data": [
    {
      "aggregated": false,
      "contract": "ESZ6",
      "id": "9f2c1d0e8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d",
      "price": 6021.5,
      "price_ticks": "24086",
      "side": "buy",
      "size": 3,
      "timestamp": 1792159200123,
      "trade_count": 1
    }
  ],
  "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.