Futures · Order flow
Futures signals
/v1/futures/signalsfuturesSignalsHistorical 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=ESconst params = new URLSearchParams({
symbol: "ES",
});
const res = await fetch(`https://api.ordermap.si/v1/futures/signals?${params}`, {
headers: { Authorization: `Bearer ${process.env.ORDERMAP_API_KEY}` },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data, meta } = await res.json();
console.log(data, meta.coverage);Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.
Parameters
15 parameters, none required.
| Parameter | Type and limits | Description |
|---|---|---|
symbolqueryoptional | stringat 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. |
contractqueryoptional | stringat 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_queryoptional | integerunix-msmin 946684800000max 4102444800000 | Start of the window (inclusive). |
end_queryoptional | integerunix-msmin 946684800000max 4102444800000 | End of the window (exclusive). |
window_queryoptional | integerdefault 2000min 100max 10000 | Length of the window a burst is measured over, in milliseconds. |
max_queryoptional | integerdefault 500min 10max 5000 | A burst ends after this long without a qualifying print, in milliseconds. |
min_queryoptional | integerdefault 6min 2max 1000 | Prints a burst needs. |
min_queryoptional | numberdefault 8min 0.1max 100000 | Prints per second a burst needs. |
velocity_queryoptional | numberdefault 2.5min 1max 100 | How many times the baseline rate the burst's rate must be. |
side_queryoptional | numberdefault 0.7min 0.5max 1 | Share of the burst's volume the aggressor side must hold, from 0.5 to 1. |
price_queryoptional | integerdefault 2min 0max 100 | Price movement, in ticks, that starts a new burst. |
max_queryoptional | integerdefault 6min 0max 1000 | Widest price range of one burst, in ticks. |
rate_queryoptional | integerdefault 500min 50max 5000 | Window of the rate measurement, in milliseconds. |
baseline_queryoptional | integerdefault 30000min 1000max 300000 | Window of the baseline rate, in milliseconds. |
baseline_queryoptional | integerdefault 2000min 0max 300000 | Shortest observed history before a baseline is used, in milliseconds. |
Response
| Status | Meaning | Body |
|---|---|---|
200 | Successful response. | Schema below |
400 | Invalid, unknown or repeated parameters, or an invalid cursor. | Error object |
401 | Missing or invalid API key. | Error object |
403 | The plan, dataset release or account state does not allow this request. | Error object |
422 | The request is valid but no data exists for it. | Error object |
429 | Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-After | Error object |
500 | Internal error. | Error object |
503 | Data temporarily unavailable; retry after Retry-After seconds.Retry-After | Error object |
504 | The 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 insidebaseline_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 insidebuy_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_partialfixturesidestringrequiredAggressor side of the burst.buysellside_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.activecompletedvelocity_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.