Skip to main content
This page covers when each kind of data is recorded, how long each endpoint’s response is cached on the server, and which timestamp to read to know how old a figure is. You need it to choose a polling pace and to interpret any price or count.

Cadences

Routeur’s jobs run on fixed schedules (all times UTC). Each response tells you what it was built from. A graph run reads only complete crawls. If a venue’s latest crawl did not finish, the run keeps the previous complete one and its markets stay listed. Observed on 17 September 2026: graph run 74 started at 12:10:17 from the crawls that began at 12:00, and finished 20 seconds later; the next crawls started at 12:30 and finished at 12:33 (Kalshi) and 12:36 (Polymarket).

Server-side cache

Many endpoints keep a recent response for the same path and query, per API instance. A cached response is still counted against your key. Cached or not, JSON responses carry Cache-Control: private, max-age=30; errors and the stream carry no-store. Polling an endpoint faster than its cache time returns the same body and spends quota. Poll at the cadence of the data behind it instead, or use the live stream.

Which timestamp to read

Observed on one Kalshi market on 17 September 2026: quote.observed_at was 12:33:03 (the 12:30 crawl), the order book’s as_of was 12:40:56 with venue_ts 12:40:56.573, and the latest trade’s executed_at was 12:38:23.

Prices are observations

Quotes are the venues’ top-of-book asks and bids as recorded on a crawl, up to 15 minutes old on Kalshi and 30 on Polymarket. Between crawls the book moves, and a venue can hold more size at worse prices behind the top level. For a live view, read GET /v1/markets/{venue}/{id}/book, which is rebuilt from the venue feed; for sizing a lead, read its depth, which walks both books with fees and minimum sizes.

Checking the service

GET /v1/books/health reports each venue’s order-book feed: status (up, degraded, down), connected, last_message_at, stale_seconds, message and event rates, and feed latency (latency_ms_p50, latency_ms_p99).