|
| 1 | +--- |
| 2 | +description: "What liquidity and limit signals SharpAPI surfaces (max_bet, volume, volume_24h, open_interest, exchange_token_id) and what upstream books don't expose." |
| 3 | +--- |
| 4 | + |
| 5 | +import { Callout } from 'nextra/components' |
| 6 | + |
| 7 | +# Liquidity & Limits |
| 8 | + |
| 9 | +SharpAPI surfaces every liquidity and limit signal we receive from upstream |
| 10 | +books. This page enumerates exactly what's available, which books emit each |
| 11 | +field, and what isn't surfaced (with a note on why). |
| 12 | + |
| 13 | +## What we surface |
| 14 | + |
| 15 | +Each field below is an optional column on the `/api/v1/odds` response. The |
| 16 | +field is only present on rows where the upstream book actually publishes it — |
| 17 | +treat all five as `undefined`-tolerant. |
| 18 | + |
| 19 | +| Field | Type | Meaning | Emitting books | |
| 20 | +|-------|------|---------|----------------| |
| 21 | +| `max_bet` | number (USD) | Maximum wager the book will accept on this market / selection at the current line. | Pinnacle, SBObet | |
| 22 | +| `volume` | number | Cumulative traded volume on the selection, in the exchange's native units (USD for Kalshi). | Kalshi | |
| 23 | +| `volume_24h` | number | Rolling 24-hour traded volume in the exchange's native units. | Polymarket, Kalshi | |
| 24 | +| `open_interest` | number | Outstanding open contracts on the selection. | Kalshi | |
| 25 | +| `exchange_token_id` | string | Exchange's native token / market hash — used for downstream order routing on the exchange. | Polymarket (`token_id`), SX Bet (`marketHash`) | |
| 26 | + |
| 27 | +<Callout type="info"> |
| 28 | +The exchange-side fields (`volume`, `volume_24h`, `open_interest`, |
| 29 | +`exchange_token_id`) are the closest thing to a depth-of-book proxy that any |
| 30 | +public sportsbook API exposes. Use them as a coverage / liquidity signal when |
| 31 | +ranking selections within an exchange book; they are not directly comparable |
| 32 | +across books with different units. |
| 33 | +</Callout> |
| 34 | + |
| 35 | +## What we don't surface (and why) |
| 36 | + |
| 37 | +These are commonly asked about but are not surfaced today, because upstream |
| 38 | +books don't expose them in the public APIs we consume: |
| 39 | + |
| 40 | +- **Bid / ask order-book depth.** Traditional sportsbooks don't operate a |
| 41 | + visible order book. Exchanges (Polymarket, Kalshi, Novig, SX Bet) operate an |
| 42 | + internal book but only publish aggregate volume / open-interest, not depth. |
| 43 | +- **Pre-bet limit checks.** No upstream book exposes a "will this wager be |
| 44 | + accepted at this size" probe via public API. The `max_bet` field above is |
| 45 | + the book's posted ceiling on the market — the actual accept-or-reject |
| 46 | + decision is made at slip-submission time. |
| 47 | +- **Real-time book-side suspension reasons.** When a book pulls a line we |
| 48 | + emit a `removed` delta on `/api/v1/odds/delta` and the row disappears from |
| 49 | + `/api/v1/odds`, but we do not publish a structured reason code (suspended / |
| 50 | + void / cashout-only / etc.) — upstream books don't expose one. |
| 51 | + |
| 52 | +## Detecting coverage gaps |
| 53 | + |
| 54 | +If a customer-side coverage check relies on liquidity, the recommended |
| 55 | +pattern is: |
| 56 | + |
| 57 | +1. Filter `/api/v1/odds` by your books of interest. |
| 58 | +2. For exchange books, additionally filter rows where `volume_24h` or |
| 59 | + `open_interest` exceeds your minimum threshold. |
| 60 | +3. For traditional books, use `max_bet` (when emitted) as a coarse limit |
| 61 | + signal — Pinnacle and SBObet only. |
| 62 | +4. For everything else, fall back to row presence: an odds row in |
| 63 | + `/api/v1/odds` is a positive signal that the book is currently quoting |
| 64 | + that market. |
0 commit comments