> ## Documentation index
> Fetch the complete documentation index at: https://docs.predictefy.com/llms.txt
> Use it to discover every available page before exploring further.

# Venue coverage

> The 17 supported venues and exactly what each one supports — real vs reconstructed order books, and public trades tapes.

Predictefy serves **17 venues**, including PredictStreet and Novig, through one normalized API. Use any venue id below as
the `{exchange}` path segment, or `router` for the all-venues union on the list verbs.

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, `synthetic` on order books).

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

`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` | `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. In the current shipped runtime, SX Bet's
rollup and fail-closed calculator exist but its result is not yet applied to the Core catalog, so
its market values remain null.

| Venue id        | Order book                         | Real depth (`depth`) | Public trades tape |
| --------------- | ---------------------------------- | :------------------: | :----------------: |
| `polymarket`    | Real CLOB                          |         yes          |        yes         |
| `kalshi`        | Real CLOB                          |         yes          |        yes         |
| `smarkets`      | 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`        | Emulated (AMM top-of-book)         |          no          |        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         |

:::note[Novig]
Novig is a CFTC-regulated US sports prediction exchange (`api.novig.us`). Reads require OAuth 2.0
Client Credentials token minting (`NOVIG_CLIENT_ID`/`NOVIG_CLIENT_SECRET`). Catalog walks ~22 sports
leagues, and order books expose a bids-only ladder with the offer side derived as the exact 1-p
binary complement. There is no public market-wide trades tape. Server execution lane wiring is in
progress (N2).
:::

:::note[PredictStreet]
PredictStreet serves a keyless paged catalog, per-market detail, native two-sided outcome
books, and the venue's keyless public `/trades` tape. Missing venue prices remain `null`; catalog
prices are venue last-trade values and no complement outcome is fabricated. Its server-built VAULT
execution lane is armed for build and submit, with no hosted cancel.
Predict Street Limited states it operates under Gibraltar licence 167, and FIFA names
it the official prediction-market partner of the FIFA World Cup 2026. Venue and jurisdiction
eligibility remain the operator's and integrator's compliance responsibility.
:::

:::note[Pascal, XO, and PRED execution — three different states]
These three used to share one "source-ready but off" sentence. They no longer share a state, so
read them one at a time:

- **Pascal — armed.** Server-built place and cancel permits are live in production (armed
  2026-08-12; fleet-verified 2026-08-15). It also serves a **credential-free status refresh** —
  Pascal's account reads are keyless, so the background reconciler polls it too — and a public
  trades tape.
- **XO Market — armed: build + submit + cancel (rebuilt and re-armed 2026-08-18).** The order
  builder now signs the venue's current 13-field contract against the on-chain-verified exchange;
  cancel and the client-credentialed status refresh are live. Nothing has been submitted to XO yet,
  so the first live submit is the confirmation checkpoint. Check `GET /v1/exec/venues` for the
  live row.
- **PRED — production-darked (2026-08-13).** The venue confirmed it refuses platform-key submits
  for caller-owned Safe makers, so `PRED_EXCHANGE_ADDRESSES` was emptied. That allowlist registers
  the **whole** lane, so PRED is absent from `GET /v1/exec/venues` and every PRED execution route,
  **build included**, answers `404 VENUE_NOT_SUPPORTED`. Client-side signing helpers stay valid for
  callers with their own venue arrangement, and PRED never had a cancel lane at all.

None of the three has a hosted account, funding, or venue-history lane, so those verbs answer an
honest `NOT_SUPPORTED`. PRED restricts the US, UK, France, Ontario,
Singapore, Poland, Thailand, and Taiwan and prohibits location masking. Venue-side access limits
and the trading guide's owner/compliance gates still apply.
:::

:::note[XO has no public trades tape — that is the venue, not a gap]
XO's own trade endpoints are **caller-scoped**: they return the authenticated caller's own fills,
not a market-wide tape. There is therefore no public XO tape in existence to normalize, so
`fetchTrades` answers an honest `501 NOT_SUPPORTED` rather than synthesizing one from the book.
This is a property of the venue's API, not a missing Predictefy integration, and it will not change
by arming anything on our side.
:::

:::caution[SX Bet order books degraded]
SX Bet has a real CLOB, but hosted `fetchOrderBook` can currently return an
empty book. That book issue does not change SX Bet's separate tape, OHLCV, WebSocket
capture, or `fetchTrades` capabilities; their runtime availability remains
independently capability-qualified.
:::

## Reading the flags

- **`capabilities.depth`** (market-level): a real, executable-quality price-level order
  book exists for this venue.
- **`synthetic`** (per order-book response): `true` means the returned book was
  _reconstructed_ — a single top-of-book level synthesized from a spot price, AMM pool,
  parimutuel odds, or P2P offer odds. `false` means 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.trade`** is `false` on every venue by design. It describes the
  legacy unified `trade` verb on the data API, which Predictefy does not expose.
  Live execution is served separately for supported venues; see
  [Trading & execution](/guides/trading/).

## Trades tape

`fetchTrades` is a **recent public tape** read (a snapshot of recent trades), not a
time-ranged history query. The eleven venues marked "yes" above expose a verified public
tape; every other 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` 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.

## Freshness notes

- Every response carries `asOf` (when the data was snapshotted) and
  `provenance.source`.
- `polymarket_us` reads are served through a ~30-second public CDN cache: `asOf` is 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` public quotes are delayed by the venue.

## 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.
