Skip to main content
GET
Retired sports edge endpoint
GET /api/v1/sports-edge-signals has been retired. With a valid live credential, it returns 410 Gone with error.code and error.reason set to endpoint_retired; it no longer returns signals or observations. Use Edge Hunter at GET /api/v1/edge-hunter. It supports the quoted board, ranked signals, and observation cohorts. Every view requires a Max credential. The response includes Deprecation, Sunset, and a Link naming /api/v1/edge-hunter as the successor. Browser clients can read all 3 headers.

Migrate your client

Change the path to /api/v1/edge-hunter?view=signals. Keep supported category, min_grade, horizon_hours, and limit filters. Signals default to a 12-hour horizon and 20 rows per page; limit clamps to 1 to 100, and the grade floor accepts S, A, or B. The response remains a list envelope with rows in data, and adds view: "signals". It retains backed token IDs, snapshot clocks, holder and directional analytics, category-skill evidence, pagination, and conditional reads. Start from page one; retired-route cursors cannot be reused. Omitting view returns the quoted board in data.rows, with a 30-row limit and B floor by default. Select the advanced view to retain the former feed capabilities; changing the path without selecting a view changes the response shape. For the field contract and request examples, see Edge Hunter. A Pro credential returns 403 forbidden with error.reason: max_plan_required on every replacement view. The replacement supports shared market selection in every view. Use verified league and market identities; a category alias still selects its whole canonical sport bucket.

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

Response

Bad request. On this cursor-paginated route a 400 has TWO distinct causes; branch on error.reason. (1) error.reason="cursor_expired" (with error.param="cursor"): the pagination cursor was invalidated by an upstream data change mid-walk (e.g. the ranking snapshot behind the page refreshed). It is NOT a malformed parameter and NOT a reason to stop: recovery is mechanical -- re-request the first page and walk forward again. There is deliberately no Retry-After and no error.retry_at, because waiting changes nothing. (2) no error.reason: an ordinary invalid request parameter -- check error.param when present, otherwise error.message. Both carry error.code="bad_request" (a FROZEN contract value), so error.reason is the discriminator.

object
string
required
Allowed value: "error"
error
object
required
meta
object
required