Local data API
The indicator can serve its line values to another program on the same computer: a spreadsheet, a script, your own dashboard. It is a single read-only web address that returns JSON; your program asks for it as often as it likes (every few seconds is plenty).
Switching it on
It is off by default.
- Bookmap: Configure add-ons → Pulling & Stacking Indicator → Console & Chart Markers: tick Enable the local data API, and optionally set a port and an API key. It applies at once and the panel shows the status.
The status reads Listening on http://127.0.0.1:8787/v1/flow.
Only this computer
It listens on 127.0.0.1, so another computer cannot reach it, even on your
own network. With an API key set, every request must carry it in the
X-API-Key header (or ?key= in the address); without it the reply is
401. The key keeps other programs on this computer out. It is sent in plain
text, which is why the API never leaves the computer.
A web page in a browser cannot read it.
Asking for the data
curl -H "X-API-Key: my-key" http://127.0.0.1:8787/v1/flow
import requests, time
while True:
data = requests.get("http://127.0.0.1:8787/v1/flow",
headers={"X-API-Key": "my-key"}, timeout=3).json()
for inst in data["instruments"]:
five = next(w for w in inst.get("windows", []) if w["minutes"] == 5)
print(inst["symbol"], inst["line"], five["total"], five["sigma"])
time.sleep(5)
What comes back
One document for every instrument the indicator is loaded on.
{
"apiVersion": 1, "indicatorVersion": "3.0.21", "platform": "bookmap",
"time": "2026-10-14T09:31:05",
"instruments": [
{ "symbol": "ESZ6", "hasData": true, "stale": false,
"lastEvent": "2026-10-14T09:31:05",
"line": "Total Flow", "mode": "flow", "primaryMinutes": 5,
"headline": "Total Flow +1.2σ (5m)",
"state": "INITIATIVE - book and tape aligned",
"windows": [
{ "minutes": 5,
"total": 5494, "passive": -3353, "aggressive": 8847, "placement": -12200,
"sigma": 1.2, "warm": true, "provisional": false,
"sigmaTotal": 1.2, "sigmaPassive": -0.8, "sigmaPlacement": -2.1,
"bandTotal": 12299.18, "bandPassive": 9100.5, "bandPlacement": 15020.25,
"flowBandWarm": true }
] }
]
}
(The numbers above are an example; windows always holds the 2, 3, 5 and 10
minute windows.)
| Field | Meaning |
|---|---|
line, mode |
The line the chart is set to, as on the console tile, and flow or buysell. |
sigma, warm, provisional |
The reading of that line, as on the console badge. null while the band is warming. |
total, passive, aggressive, placement |
The four Flow lines over that window, in contracts. |
sigmaTotal, sigmaPassive, sigmaPlacement |
Each line in units of its own band's σ. |
bandTotal, bandPassive, bandPlacement |
Each line's band: Resistance is plus, Support minus this value. |
buy, sell, buySigma, sellSigma, resistance, support |
Buy / Sell mode only: both lines, their σ from the band's centre, and the band. |
stale |
No flow for longer than the stale timeout. |
hasData |
False until the instrument has delivered market data. |
A number that cannot be computed is null. Other replies: 401 wrong or
missing key, 404 unknown address, 405 anything other than GET.
Limits
- The current reading only; there is no history.
- A program on another computer cannot reach it.
- It reports what the console holds, refreshed about once a second (twice on Bookmap). Asking more often than that returns the same values.
apiVersionis 1. Fields may be added; existing ones will not change meaning without a new version.