Skip to content

Futures · Order flow

Futures signals

Bursts of one-sided aggressive trading found in captured prints.
GET/v1/futures/signalsfuturesSignals
On this page

Historical aggression signals: bursts in which one side's prints arrive much faster than the recent baseline (velocity_multiplier), in volume that one side dominates (side_dominance), found by a deterministic detector over the captured prints of the window. The detector is retrospective: it reports bursts that occurred and makes no claim about absorption or hidden orders. The window defaults to the last 15 minutes and is at most 24 hours; quality captured_partial means the captured input is not known to be complete. Every parameter after end_time tunes the detector; the defaults match the terminal's.

Example request

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

15 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).
window_msqueryoptionalintegerdefault 2000min 100max 10000Length of the window a burst is measured over, in milliseconds.
max_idle_msqueryoptionalintegerdefault 500min 10max 5000A burst ends after this long without a qualifying print, in milliseconds.
min_executionsqueryoptionalintegerdefault 6min 2max 1000Prints a burst needs.
min_ratequeryoptionalnumberdefault 8min 0.1max 100000Prints per second a burst needs.
velocity_multiplierqueryoptionalnumberdefault 2.5min 1max 100How many times the baseline rate the burst's rate must be.
side_dominancequeryoptionalnumberdefault 0.7min 0.5max 1Share of the burst's volume the aggressor side must hold, from 0.5 to 1.
price_ticksqueryoptionalintegerdefault 2min 0max 100Price movement, in ticks, that starts a new burst.
max_price_span_ticksqueryoptionalintegerdefault 6min 0max 1000Widest price range of one burst, in ticks.
rate_window_msqueryoptionalintegerdefault 500min 50max 5000Window of the rate measurement, in milliseconds.
baseline_msqueryoptionalintegerdefault 30000min 1000max 300000Window of the baseline rate, in milliseconds.
baseline_min_msqueryoptionalintegerdefault 2000min 0max 300000Shortest observed history before a baseline is used, in milliseconds.

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>required29 fields inside
    • baseline_availablebooleanrequiredA baseline was observed for comparison.
    • baseline_ratenumberrequiredRecent baseline rate the burst is compared with.
    • classificationstringrequiredsustained_buy_aggression or sustained_sell_aggression.
    • contractstringrequiredDated contract.
    • contracts_per_secondnumberrequiredContracts per second.
    • end_timeintegerunix-msrequiredLast print of the burst. Unix epoch milliseconds (UTC).
    • execution_countintegerrequiredPrints in the burst.
    • execution_ratenumberrequiredPrints per second.
    • idstringrequiredIdentifier of the signal.
    • levelsarray<object>requiredContribution of each price to the burst.7 fields inside
      • buy_volumeintegerrequiredAggressive buy contracts.
      • execution_countintegerrequiredPrints at the price.
      • pricenumberrequiredPrice.
      • price_ticksstringrequiredPrice as an integer count of ticks, as a string.
      • sell_volumeintegerrequiredAggressive sell contracts.
      • total_volumeintegerrequiredAll contracts at the price.
      • unknown_volumeintegerrequiredContracts whose side is unknown.
    • pricenumberrequiredPrice of the first print.
    • price_maxnumberrequiredHighest price of the burst.
    • price_minnumberrequiredLowest price of the burst.
    • price_ticksstringrequiredprice as an integer count of ticks, as a string.
    • qualitystringrequiredcaptured when the input is complete, captured_partial otherwise.capturedcaptured_partialfixture
    • sidestringrequiredAggressor side of the burst.buysell
    • side_dominancenumberrequiredShare of the burst's volume on the aggressor side.
    • sizeintegerrequiredContracts in the burst.
    • start_timeintegerunix-msrequiredFirst print of the burst. Unix epoch milliseconds (UTC).
    • statestringrequiredactive while the burst may still grow, completed once it ended.activecompleted
    • velocity_multiplenumber | nullrequiredexecution_rate divided by baseline_rate.
    • vwapnumberrequiredVolume-weighted average price of the burst.
  • metaobjectrequiredMeta object

Example response

{
  "data": [
    {
      "baseline_available": true,
      "baseline_rate": 9.4,
      "classification": "sustained_buy_aggression",
      "contract": "ESZ6",
      "contracts_per_second": 158.2,
      "end_time": 1792159201480,
      "execution_count": 61,
      "execution_rate": 45.1,
      "id": "9f2c1d0e8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d",
      "levels": [
        {
          "buy_volume": 88,
          "execution_count": 27,
          "price": 6021.5,
          "price_ticks": "24086",
          "sell_volume": 4,
          "total_volume": 92,
          "unknown_volume": 0
        }
      ],
      "price": 6021.5,
      "price_max": 6022.25,
      "price_min": 6021.5,
      "price_ticks": "24086",
      "quality": "captured_partial",
      "side": "buy",
      "side_dominance": 0.86,
      "size": 214,
      "start_time": 1792159200123,
      "state": "completed",
      "velocity_multiple": 4.8,
      "vwap": 6021.8
    }
  ],
  "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.