Skip to main content
GET
cURL
Use this to see what gets eliminated before it can become a pre-game side. The three groups here are measured only: they never feed that route and never change it. Every row carries observation_only: true, and no row should ever reach an order executor. GET /api/v1/sports-edge-observations is the deprecated spelling of this path. It stays live and answers the same body, and its responses carry Deprecation and Link headers that name this path as the successor.

Parameters

The 3 groups

Key response fields

Within the group you asked for, rows are sorted by directional_rank_score, then backing_score, then category, then condition_id. Each row names the heavy side as side, its grade-weighted score as backing_score, and its signed share of the graded dollars as side_share. The deprecated piled_side, conviction_score, and smart_score keys carry the same three values and stay in every response. The size, price, and event fields on each row are the ones Pre-game sides carries. The spec below lists every one of them.

Errors that are not what they look like

Example

What it does not return

  • A funded signal. Every row is a market outside the funded list, and measuring it here changes nothing there.
  • A market with zero or missing volume. It is counted as invalid_market in the funnel and never becomes a row.
  • A game past kickoff that Polymarket has not confirmed is live. in_play drops it rather than guessing.
  • Arrival history. emerging_pile is a view of the current wider_holder snapshot, not a log of when wallets arrived.

Caching

Send the weak ETag from a response back in an If-None-Match header. If the page has not changed, you get 304 Not Modified with an empty body. Both the 200 and the 304 carry Cache-Control: private, no-cache, so revalidate before you reuse a stored response.

Authorizations

Authorization
string
header
required

Legacy default or named integration API key, or OAuth 2.1 access token, in the Authorization header as Bearer oxi_sk_live_... or Bearer oxi_at_.... Default keys retain full access; integration keys are limited to their approved read, webhooks, export and usage scopes and expire within 90 days. All credentials share the owner's account limits. Data calls require an active Pro subscription and return live data. A 401 carries WWW-Authenticate: Bearer resource_metadata="https://api.0xinsider.com/.well-known/oauth-protected-resource" (RFC 6750 section 3, RFC 9728).

Headers

X-Query-Validation
enum<string>

Opt into strict query-name validation. The default is compatible: unknown names are ignored and reported in X-Query-Ignored. With strict, an unknown name returns 400 bad_request with error.reason unknown_query_parameter before the handler runs, including when its percent escape is incomplete.

Available options:
strict
If-None-Match
string

Conditional GET using a previous weak semantic ETag. Matching stable payloads return 304 Not Modified with an empty body; request-specific meta and the opaque emerging_pile projection cutoff inside next_cursor are excluded from validation.

Query Parameters

cohort
enum<string>
required

Observation cohort. wider_holder measures pre-game holder piles outside the funded route's exact raw signals admission. in_play admits only provider-confirmed live games and excludes stale or unavailable provider live-board, holder, or directional evidence. emerging_pile is a post-compute wider_holder projection for finite sharp_pct in [0.75, 0.85) with holder_scan_complete=true and a kickoff after its pinned projection cutoff; it overlaps wider_holder, is not an independent denominator, and is not arrival history.

Available options:
wider_holder,
in_play,
emerging_pile
category
string

Optional canonical sport bucket. Omitted or blank selects all registered sports. Raw provider categories resolve through the canonical taxonomy, including table-tennis or table tennis to Table Tennis and pickleball to Pickleball; a non-sport category returns an empty list.

limit
integer
default:20

Page size.

Required range: 1 <= x <= 100
cursor
string

Server-authenticated opaque seo_v2_ cursor from next_cursor. Pins snapshot_as_of, cohort, rank, and condition_id; pre-deploy unsigned seo_ cursors are rejected, so clients must request the first page after this contract ships; emerging_pile cursors also pin the first-page projection_now cutoff so kickoff filtering cannot renumber continuation pages. Client edits fail closed; it cannot cross cohorts; a refreshed snapshot invalidates it with 400.

Response

Observation-only sports cohort with a snapshot-wide operational/unknown-completeness degraded verdict and accountable funnel

object
string
required
Allowed value: "list"
data
object[]
required
has_more
boolean
required
snapshot_as_of
string<date-time>
required

Completion time of the shared observation snapshot pinned by the cursor.

degraded
boolean
required

True when an operational failure or unknown provider-board, holder, directional, reconciliation, or internal completeness state made this snapshot partial. This is snapshot-wide and can retain degradation that the funnel's one-terminal-per-input accounting cannot represent. Intentional bounded capacity_limited rows remain fully accounted in the funnel and do not by themselves set this field.

funnel
object
required

Per-sport accountable funnel for the full observation snapshot, returned on every page.

meta
object
required
next_cursor
string