What you’ll get
A poller that prints every unusual-flow signal once, with the trades and dollars behind it, and marks a signal that keeps firing as extended rather than repeating it. A second call shows which way the money went and whether the market is liquid enough to matter. On 2026-09-17 the last hour filled a 100-signal page, most of it 15-minute crypto markets with no history to compare against.Prerequisites
- An API key in
ROUTEUR_API_KEY - Python 3 with
requests, or Node 18+
1
Read the signals of the last hour
Signals are scored every five minutes against the market’s own previous week. Repeated detections of the same market and kind within an hour extend one signal, so Two signals, as observed 2026-09-17 12:39 UTC:
id stays the same and last_detected_at moves.2
Poll, and print each signal once
Keep The first pass, observed 2026-09-17 12:52 UTC and trimmed to six of 100 lines:
id together with last_detected_at: a signal you have printed is only worth printing again when it has been extended.3
Check the money behind it
A flow signal names its market but not its size. For the fills themselves, read
GET /v1/insights/flows ranks markets by net money toward Yes or No over the window, carries every liquidity field, and leaves thin markets out by default (min_volume_usd, max_spread_usd, include_thin change that).GET /v1/markets/{venue}/{id}/trades, or GET /v1/insights/tape?min_usd=5000 for the largest fills across venues.Read the result
Pitfalls
- A score of 1000 is a missing baseline, not a giant surprise. The 15-minute crypto and commodity markets on Kalshi are new every quarter hour, so anything they trade is “unusual” against an empty week. Filter them out by title, or by requiring
baseline_trades_per_window > 0, if you want signals on markets with history. - Signals describe trading, not its cause. A burst is often news arriving; a large fill can be one account hedging. Say what moved and how much money was behind it.
- The signal carries no liquidity.
markethere is venue, id and title only. ReadGET /v1/markets/{venue}/{id}or/v1/insights/flowsforliquidity,volume_24h_usdandspread_usdbefore treating it as tradeable. - Some markets have no title. A few Kalshi signals on 2026-09-17 came back with
title: ""; key onmarket.id, not the title. - Polling faster than five minutes gains nothing; scoring runs every five minutes. For fills as they happen, subscribe to the
tradestopic of/v1/streaminstead: see Stream consumer.
Narrowing it
Related
- Signals: moves, large fills, one-sided money and unusual flow, and where each comes from.
- Stream consumer: every recorded fill pushed as it happens, resumable.
GET /v1/insights/moves: the biggest 24-hour moves, each with its signals and how many markets the graph relates to it.GET /v1/insights/tape: the largest fills across venues, with the outcome each backs.