OverviewVenues
Venue coverage
Predictefy serves 16 venues, including PredictStreet and Novig, through one normalized API. Use any served venue id
below as the {exchange} path segment, or router for the all-served-venues union on the list verbs.
Dark venues
Section titled “Dark venues”Dark venue. Smarkets is implemented but not served on this deployment: every
/api/smarkets/…request returns404 EXCHANGE_NOT_AVAILABLE, router fan-outs exclude it, and it is not counted among the served venues. It returns when a commercial API agreement is in place.
Dark venue. PredictIt is implemented as a data-only read path but is not served on this deployment: every
/api/predictit/…request returns404 EXCHANGE_NOT_AVAILABLE, router fan-outs exclude it, and it is not counted among the served venues. No production lane walks it. It returns when a commercial data licence is in place.
Not every venue exposes the same raw data, and we do not paper over the differences —
the table below is mirrored from the capability flags the API itself returns
(capabilities on markets, sourceMetadata.synthetic on order books).
The /has buildOrder and submitOrder flags report implemented lanes, not deployment arming;
use GET /v1/exec/venues for the armed hosted lanes.
Market volume24h and liquidity are always present but nullable. For 24-hour volume, null no
longer means only “the venue does not publish it”: it means Predictefy has no accepted value for
that market now. A derived mechanism may still be warming or may have stale, gapped, unavailable,
or restated evidence. 0 is reserved for a real venue-published zero or a complete derived window
that honestly computes to zero.
24-hour volume
Section titled “24-hour volume”GET /api/{exchange}/has exposes the venue-level mechanism at volume24h. venue uses a
venue-published 24-hour value. derived_cumulative differences typed cumulative snapshots without
silently converting their units. derived_tape sums accepted canonical fills only after the whole
trailing window passes its coverage gate. false means no honest mechanism is registered.
| Venue id | has.volume24h | Unit | Cumulative input |
|---|---|---|---|
polymarket | venue | USD | — |
kalshi | venue | CONTRACTS | — |
smarkets (dark) | derived_cumulative | GBP | volume |
opinion | venue | USD | — |
hyperliquid | venue | USDC | — |
limitless | derived_cumulative | USDC | volumeFormatted ?? volume / 1e6 |
polymarket_us | false | — | — |
sxbet | derived_tape | USD | — |
myriad | venue | USD | — |
gemini | venue | CONTRACTS | — |
rain | derived_cumulative | COLLATERAL | totalVolume |
predictfun | venue | USD | — |
pascal | venue | USD | — |
xo | false | — | — |
pred | derived_cumulative | USD | volume |
predictstreet | venue | USD | — |
novig | derived_cumulative | CASH | volume |
When present, market volume24hSource is venue, derived_cumulative, or derived_tape and
describes only that metric; the separate market provenance.source still says which implementation
served the object. A null market can carry venue when that row’s venue field is unavailable, or a
derived source while no value is accepted. The current public market DTO does not expose the
internal warm-up/degradation status. Opinion child rows are
also null because the parent volume is never copied or apportioned to children. Polymarket US and
XO have volume24hSource absent because their registry mechanism is false.
Event and canonical-category sums expose
volume24hSource: { sources: [...], partial: boolean }. sources is the distinct set from
non-null contributing markets; partial is true when any member volume is null. Cluster members
carry the current market’s value and source. A /has mechanism is capability truth, not proof that
an individual market is warmed or currently available. As verified live on 2026-09-02, SX Bet
markets now carry volume24h with volume24hSource: derived_tape.
| Venue id | Order book | Real depth (depth) | Public trades tape |
|---|---|---|---|
polymarket | Real CLOB | yes | yes |
kalshi | Real CLOB | yes | yes |
smarkets (dark) | Real CLOB (delayed quotes) | yes | yes — 5 fills |
opinion | Real CLOB | yes | no |
hyperliquid | Real CLOB | yes | yes |
limitless | Real CLOB (CLOB markets only) | per-market | yes |
polymarket_us | Real CLOB (~30s CDN cache) | yes | no |
sxbet | Real CLOB | yes — degraded | yes |
myriad | Dual (native CLOB / synthetic AMM) | per-market | yes |
gemini | Real CLOB (keyless sized depth) | yes | yes |
rain | Emulated (on-chain price, 1 level) | no | no |
predictfun | Real CTF/CLOB | yes | yes |
pascal | Real CLOB (Solana) | yes | yes |
xo | Real CLOB (own rollup) | yes | no — see below |
pred | Real CLOB (Base) | yes | no |
predictstreet | Real CLOB (ADI Chain) | yes | yes |
novig | Real CLOB (bids-only complement) | yes | no |
For Myriad, Order Book markets return native CLOB depth; AMM markets return a synthetic top-of-book.
Venue size metrics
Section titled “Venue size metrics”GET /v1/venues/metrics returns the latest stored reporting date for each available venue and metric
pair — venue-level size and liquidity figures, distinct from the per-market volume24h above.
curl -s "$PREDICTEFY_API_URL/v1/venues/metrics?venue=polymarket" \ -H "Authorization: Bearer pk_live_YOUR_KEY"venue is optional; omit it for every tracked venue. Nothing is estimated. A missing venue or a
missing metric means the configured source does not track it, and an untracked venue returns an empty
object rather than a zero.
The route is gated by READS_ENABLE_VENUE_METRICS and answers 404 where it is not enabled. It costs
one credit; see Credits & billing.
Reading the flags
Section titled “Reading the flags”capabilities.depth(market-level): a real, executable-quality price-level order book exists for this venue.sourceMetadata.synthetic(per order-book response):truemeans the returned book was reconstructed — a single top-of-book level synthesized from a spot price, AMM pool, parimutuel odds, or P2P offer odds.falsemeans a real CLOB depth snapshot.- An empty real book is a valid “no liquidity right now” state — check the levels, not just the flags.
capabilities.tradeisfalseon every venue by design. It describes the legacy unifiedtradeverb on the data API, which Predictefy does not expose. Live execution is served separately for supported venues; see Trading & execution.
Trades tape
Section titled “Trades tape”fetchTrades is a recent public tape read (a snapshot of recent trades), not a
time-ranged history query. The ten served venues marked “yes” above expose a verified public
tape; the Smarkets row records an implemented dark capability, and every other served venue
answers an honest 501 NOT_SUPPORTED rather than synthesizing trades. pascal’s tape carries no
time parameters at the venue, so start/end are
applied after the fetch — an older window simply returns fewer rows, never invented ones.
smarkets (dark — not served) is the same shape with a harder ceiling: the venue accepts no tape
parameters at all and returns at most five fills per outcome, so limit is applied locally
and a window older than those five reachable fills returns fewer rows rather than a fabricated
one.
SX Bet’s fetchOrderBook degradation is documented above. Tape/OHLCV, Trader
Intelligence, and public account capabilities are independent of that book issue, while
hosted execution and official history remain unsupported. Runtime availability is not
inferred from capability alone.
Price change windows & tape coverage
Section titled “Price change windows & tape coverage”Market outcomes served from the hot catalog snapshot expose eight price-change windows alongside per-outcome tape coverage metadata:
priceChange1m,priceChange5m,priceChange15m— computed from top-of-book order-book ticks (tob_ticks.last) with zero freshness tolerance.priceChange1h,priceChange6h,priceChange24h— computed from 1m stored candle history (1h fallback).priceChange7d,priceChange30d— computed from official venue candles where available (1h then 1d fallback, then 1m).
Every window key is always present on snapshot-enriched market outcomes (a numeric probability delta or null when reference history is insufficient; null never means zero).
Each outcome includes a coverage object (or null when uncomputed) detailing tape mechanism
(ws-lossless, ws-top20, rest-adaptive, rest-top-of-book, synthetic-spot), tapeSince,
effectiveIntervalMs, gaps24h, and lastGapAt.
Freshness notes
Section titled “Freshness notes”- Every response carries
asOf(when the data was snapshotted) andprovenance.source. polymarket_usreads are served through a ~30-second public CDN cache:asOfis the fetch time, so treat its book data with a ≥30s freshness tolerance (the venue’s own transaction time is preserved in the raw metadata).smarkets(dark — not served) public quotes are delayed by the venue.
Sandbox
Section titled “Sandbox”A kalshi-demo sandbox venue (Kalshi’s paper-trading environment) exists for
integration testing. It serves paper data, not real market data — it is excluded
from the public venue list, router results, and all cross-venue outputs.