Skip to main content
GET
cURL
Measure three observation-only Polymarket sports cohorts outside the funded Sports Edge Signals. Use this endpoint for research, never for order execution. It needs the Pro plan.

Read the cohorts

cohort is required.
  • wider_holder measures pre-game holder piles outside the funded route’s admission, with recent-flow rows that its caps rejected.
  • in_play admits only provider-confirmed live games. It fails closed when the live board, holder, or directional evidence is stale or unavailable.
  • emerging_pile projects wider_holder rows with sharp_pct in [0.75, 0.85), holder_scan_complete=true, and a kickoff after its pinned cutoff. It overlaps wider_holder and adds no new work.

Read the rows

  • observation_only is always true.
  • category is one of 14 sport buckets. Omit it to get all 14, with Table Tennis and Pickleball. Those two stay outside the funded projection.
  • holder_scan_complete=false means the pile is a lower bound. It cannot support a capital promotion.
  • directional_status is available, unknown_ungrouped, unknown_stale, or unavailable. A wider_holder row stays emitted with unavailable. An in_play row is not emitted.
  • degraded is snapshot-wide. true means an operational failure or an unknown completeness state made the snapshot partial. capacity_limited rows do not set it.
  • funnel.sports[] accounts for every input per sport. reconciled is true only when input equals terminal_total. A mismatch is an operational fault, not an empty cohort.
  • snapshot_as_of is the snapshot completion time. A healthy wider_holder snapshot serves for about 180 seconds. An in_play request never serves a snapshot older than about 30 seconds. A degraded snapshot serves for about 30 seconds.

Handle the 503

  1. Read error.reason on a 503. read_model_warming means a refresh is in flight, a compute deadline expired, or the provider-work admission is busy.
  2. Retry this route only after Retry-After or error.retry_at. Do not add it to a shared rate-limit backoff.
  3. A 503 without error.reason is the rate limiter outage. Retry after Retry-After.
A SQL or Redis coordination failure returns 500 internal_error. A later board, holder, or price failure stays in a 200 with degraded=true. The compute deadline is about 25 seconds under the 30-second router timeout. A 408 has an empty body.

Handle the cursor

  1. Read next_cursor. It is a signed seo_v2_ cursor that pins snapshot_as_of, cohort, rank, and condition_id.
  2. Send it only with the same cohort. A cursor cannot cross cohorts.
  3. A refreshed snapshot returns 400 with error.reason="cursor_expired". Request the first page again.

Cache the page

The 200 response carries a weak ETag over the stable page payload. Request-specific meta is excluded. Send If-None-Match to get 304 Not Modified with an empty body. Both 200 and 304 set Cache-Control: private, no-cache, so revalidate before every reuse. A fresh compute reports meta.cost of 5. A cache hit reports 1. Get Sports Edge Signals returns the funded pre-game list.

Authorizations

Authorization
string
header
required

API key authentication. Send your key in the Authorization header as Bearer oxi_sk_live_.... Live keys require an active Pro subscription and return live data.

Headers

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
next_cursor
string | null
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