> ## Documentation Index
> Fetch the complete documentation index at: https://docs.routeur.app/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Prices are US dollars per contract that pays $1: 0.46 means 46 cents. Spread is the Yes ask plus the No ask minus $1. Liquidity grades are deep, tradeable and thin; lists hide thin markets unless include_thin=true. Relations are proven from contract terms, never inferred from wording; a lead marked informational is never executable. Every figure carries a graph_run; read /agents/reading-order first, then /concepts/relations and /concepts/liquidity.

# Reading order for LLMs

> The order in which a model should read these docs, and the ten facts it must hold to answer questions about Routeur data correctly.

These docs are written to be read by models as well as people. A model that reads the pages below in order, and keeps the ten facts that follow, answers most questions about Routeur data correctly; a model that skips them tends to quote a price without its venue, call a spread an edge, or treat a missing relation as "unrelated". Everything on this page was checked against the live API on 2026-09-17.

## Read in this order

| Step | Page                                                                                                   | What it settles                                                                                 |
| ---- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| 1    | [Agents & MCP](/agents/overview)                                                                       | What exists, the three surfaces, what a call costs, that everything is read-only.               |
| 2    | [Events and markets](/concepts/events-and-markets)                                                     | What a market, an event, an outcome and a twin are; how ids are formed.                         |
| 3    | [Venues](/concepts/venues)                                                                             | How Kalshi and Polymarket differ and how the API evens them out; where fees come from.          |
| 4    | [Relations](/concepts/relations)                                                                       | The five relation kinds, how a proof is built, and that "not proven" is not "unrelated".        |
| 5    | [Leads](/concepts/leads)                                                                               | What a two-leg lead is, what `depth` and `executable` mean, why top-of-book asks are not depth. |
| 6    | [Data freshness](/freshness) and [Errors and conventions](/errors)                                     | Crawl cadence, `graph_run`, decimal strings, RFC 3339 times, the error codes.                   |
| 7    | [Tool reference](/agents/tools)                                                                        | Every tool and argument, with defaults and ranges. Generated from the server.                   |
| 8    | [Agent workflows](/agents/workflows)                                                                   | Five sequences with the calls made and the output observed.                                     |
| 9    | [Signals](/concepts/signals), [Calibration](/concepts/calibration), [Strategies](/concepts/strategies) | Only when the question is about flow, history or backtests.                                     |
| 10   | [Data and limitations](/data-and-limits)                                                               | What is not covered, so the model says so instead of inventing it.                              |

Over MCP, steps 2 to 6 are condensed into four resources that cost nothing to read: `routeur://concepts/glossary`, `routeur://concepts/relations`, `routeur://concepts/leads-and-fees` and `routeur://concepts/prices`. Reading them at the start of a session about pricing is the single most useful thing a client can do.

## The ten facts

### 1. Prices are asks, in dollars per contract that pays \$1

Every price is the lowest offer to sell, per contract paying \$1, in USD, as an exact decimal string: `"yes_ask_usd": "0.52"` means 52 cents to buy Yes. `no_ask_usd` is what No costs. The **implied chance** is the midpoint of the Yes ask and one minus the No ask. Never parse a price into a float before comparing money; compare the strings or use decimal arithmetic. Report prices in cents and name the venue with every price.

### 2. The spread is what crossing costs

`spread_usd = yes_ask_usd + no_ask_usd - 1`, because a Yes and a No together always pay exactly \$1. A market at 0.52 / 0.49 has a 1¢ spread. A wide spread means a thin book, and what looks like an edge may only be the spread. `market_snapshot` returns `price.spread_usd` with this note attached; the order book also carries `yes_spread_usd` and `no_spread_usd` (ask less bid on each side).

### 3. Liquidity grades, and the defaults that hide thin markets

Markets carry a `liquidity` grade from the recorded book and 24-hour volume:

| Grade       | Means                                                                                              |
| ----------- | -------------------------------------------------------------------------------------------------- |
| `deep`      | At least $25,000 traded in 24 hours or $250,000 of open interest, with a round trip of 2¢ or less. |
| `tradeable` | At least $1,000 traded or $25,000 of open interest, with a round trip of 5¢ or less.               |
| `thin`      | Anything less, or no quoted round trip.                                                            |

Insight endpoints and their tools (`get_insights`, `get_moves`, `get_tape`, `get_flows`, `get_closing`, `list_opportunities`, `list_strategies`, `get_strategy`) leave thin markets out by default: `min_volume_usd` defaults to `1000`, `max_spread_usd` to `0.05`, and `include_thin` to `false` (pass `include_thin: true` with `min_volume_usd: 0` for no floor). `find_opportunities` defaults to `executable_only: true` and `min_volume_usd: 1000`. An empty result under the defaults means "nothing liquid met the filters", not "nothing exists".

### 4. Relation kinds, and what "informational" means

From the market you asked about (`list_relations`, `explain_relation`): `implies` (this Yes guarantees the other Yes), `implied_by` (the reverse), `equivalent` (same outcome always), `contradicts` (both cannot be Yes), `overlaps` (outcome sets intersect without containment). Lists stated from the *left* market's side (`list_cross_venue_pairs`, `list_opportunities`, the stream) use `equivalent`, `subset`, `superset`, `contradicts`, `overlaps`; `subset` is the left market implying the right.

A relation is proven from both contracts' structured terms and exact arithmetic, never from wording, against a specific `rules_hash`. Conflicting or ambiguous evidence is withheld. **No relation returned means "not proven", never "unrelated."** `get_relation_proof` shows the proof steps and says whether the stored relation is still `reproduced` from the current contract versions; `404 relation_not_found` means both markets are listed but the latest graph does not relate their current versions.

**Informational** is a value of a lead's `depth.limited_by` (alongside `price`, `depth`, `minimum`, `fees`, `unavailable`). It means the pair would fill, but the relation rests on a settlement the two venues could resolve differently, such as an economic release that is delayed or cancelled, so the lead is never offered as `executable` and its `issues` say so. Report such a lead as a price inconsistency, not as money.

### 5. Graph runs and freshness

The relation graph is rebuilt hourly, about ten minutes past the hour, from the latest complete crawl of each venue; a run takes about twenty seconds. Every graph-derived answer carries `graph_run`, an integer that increases by one per run (run `74` when this page was checked). Kalshi listings and asks are read every 15 minutes, Polymarket every 30, trades every minute, order books live from the venues' feeds, unusual-flow signals every 5 minutes, calibration and strategies every 30 minutes. `get_status` reports the latest run and crawls. Prices carry `observed_at`; say how old they are.

### 6. Cursors and paging

| Where                                                                         | How the next page is asked for                                                                                         |
| ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `list_markets`, `list_trades` (REST `next_cursor`)                            | Pass `next_cursor` back as `cursor`, unchanged. Opaque; the format may change.                                         |
| `list_events`, `list_relations`, `list_cross_venue_pairs`                     | Add `limit` to `offset` until a page comes back short.                                                                 |
| `search_events` (REST `/v1/search`)                                           | Pass `next_offset` as `offset`; at most 300 results.                                                                   |
| Composed MCP tools (`find_opportunities`, `compare_venues`, `search_markets`) | Pass `next_cursor` as `cursor`. It is an opaque base64 offset such as `"Mg"`; the server rejects one it did not issue. |
| `GET /v1/stream`                                                              | Send the last event `id` as `Last-Event-ID` (or `cursor`); replay covers the last hour, older cursors get a `reset`.   |

`list_quotes` and `get_book_history` return at most 5,000 points per request and are narrowed by `days` or `from`/`to` rather than paged.

### 7. Id formats

| Thing             | Format                                               | Example                                                       |
| ----------------- | ---------------------------------------------------- | ------------------------------------------------------------- |
| Kalshi market     | Ticker: series, event and strike                     | `KXNFLTOTAL-26SEP17DETBUF-55`                                 |
| Polymarket market | Slug                                                 | `nfl-det-buf-2026-09-18-total-54pt5`                          |
| Kalshi event      | Event ticker                                         | `KXNFLTOTAL-26SEP17DETBUF`                                    |
| Polymarket event  | Numeric id as a string                               | `"810546"`                                                    |
| Strategy          | `venue~category~horizon~band~side`                   | `all~sports~1d~b1~yes` (band `b1` is 10–20¢)                  |
| Graph run         | Integer                                              | `74`                                                          |
| Flow signal       | Integer                                              | `5689`                                                        |
| Trade             | The venue's own id, as a string                      | Kalshi: a UUID such as `0722103f-4801-a7f1-a0c4-ee1cf769c9ea` |
| Topic             | Slug                                                 | `democratic-party`                                            |
| Rulebook          | `venue`, `kind` (`series`, `event`, `market`) and id | `kalshi/event/KXNFLTOTAL-26SEP17DETBUF`                       |
| API key           | `rk_live_<12-character id>_<43-character secret>`    | never printed                                                 |

A market is always addressed as `venue` + `id`; the ids are the venues' own, so they are what you would use on the venue itself. Market ids match `^[A-Za-z0-9][A-Za-z0-9_.-]{0,199}$`. Every tool that returns a market returns its `venue` and `id`, and every tool that takes one takes those two.

### 8. A lead is money only when `depth.executable` is true

A lead is a two-leg purchase that pays at least \$1 in every outcome a proven relation allows. `cost_usd`, `gross_edge_usd`, `estimated_fee_usd` and `net_edge_usd` are priced from recorded top-of-book asks. Only the best leads each run are sized against live books in `depth`; `depth.executable: true` means at least one whole pair could be bought for less than it pays after fees and minimum sizes, `depth.pairs` how many, `depth.net_usd` what they net. A lead with `net_edge_usd: "0"` and `pairs: "0"` is a price inconsistency the books could not fill. Leads are observations at the moment of a graph run, not quotes.

### 9. Strategies and calibration are settled history, before fees

Calibration gives, per 10-cent band, `markets`, `avg_price_usd` and `yes_rate`. Buying Yes at price *p* in a band that resolves Yes at rate *r* returned `100 × (r / p − 1)` per \$100 before fees. A strategy is one such band, side, venue, category and horizon, listed only with at least 100 settled markets, a 3% return and an edge on at least one horizon, ranked by the cautious end of its 95% range. Returns use the band's average midpoint, not the ask you would pay; bands under 10¢ and over 90¢ are excluded. History is not a forecast, and a rule fitted on the history that selected it is not an out-of-sample test.

### 10. What is not possible

* Placing, sizing or recommending an order; reading any account, wallet, position or balance. There is no such tool and no write path.
* Opening the event stream over MCP (`GET /v1/stream` is not a tool) or from a browser `EventSource` (it cannot send the key header).
* Proving a relation from wording, or across venues outside sports today: economic ladders, crypto prices and one-winner events are proven within each venue only. Markets without structured terms are listed and searchable but never related.
* Reading Polymarket's US exchange; only Kalshi and global Polymarket are covered.
* Order books older than 90 days, quote windows longer than 90 days, more than 5,000 points per history request, more than 300 search results, more than 50 markets on one stream filter.
* OAuth sign-in. Authentication is by API key only, so clients that require OAuth for custom connectors (ChatGPT today) cannot connect directly; see [OpenAI](/agents/openai).
* A forecast. Prices are what people paid, calibration is what settled markets did, and nothing here is investment advice.

## Answering well

Name the venue and `observed_at` with every price; give prices in cents. Quote the contract's terms (`rules`, `yes_label`) rather than its headline. Say what the graph proves and what it does not. Say how the data could be wrong: prices move, fees are estimates, top-of-book size is not depth, and thin books make a price weak evidence. Budget calls: composed tools cost several requests, and one `market_snapshot` after one `search_markets` usually beats a sweep.

## Related

* [Agents & MCP](/agents/overview), [Tool reference](/agents/tools), [Agent workflows](/agents/workflows)
* [Glossary](/glossary), [Errors and conventions](/errors), [Pagination](/pagination), [Data freshness](/freshness)
* `https://routeur.app/llms-full.txt`: the same facts in plain text, served from the website.
