Sports

Paginated catalog of verified cross-venue matched markets

Returns embedding-verified cross-venue market matches (verified matches only), joined against market metadata for display (title, ticker, images, expiry, status). min_similarity is clamped server-side to never go below a minimum threshold regardless of what the caller passes. Pairs are dropped if either correlation side has expired, if either side references a provider that is unknown or not currently indexing-enabled, or if either side's resolved market status is settled/closed/resolved; a side with no metadata available (unmirrored rather than de-indexed) is kept with null display fields. has_more reflects whether the underlying page (before the live-status post-filter) was full, so it is not a strict function of the returned count/pairs length. total is only computed (filters applied before the live-status post-filter) when include_total=true. This is treated as a primary, non-additive endpoint: any backend failure returns 503 rather than a degraded/empty result.

get/matched-markets

Request

  • Base URL
    https://data.kairos.trade
  • Auth
    none required

Query parameters

limitinteger

Maximum number of pairs to return.

offsetinteger

Legacy pagination offset. Do not combine with cursor.

cursorstring

Opaque keyset cursor. Send an empty value on the first page, then pass each response next_cursor. Cursor mode orders by immutable canonical pair identity so catalogue mutations cannot shift page boundaries, and binds every page to one full-set fingerprint.

providerstring

Filter to pairs where either side belongs to this provider. Must resolve to a known provider name (case-insensitive) or the request fails with 400.

min_similaritynumber double

Minimum embedding similarity score. Always clamped up server-side to a minimum threshold even if a lower value is supplied.

sort_by'similarity' | 'updated_at'

Sort column. Must be "similarity" or "updated_at"; any other value fails with 400.

include_totalboolean

When true, runs an additional COUNT query and includes the total matching-pair count in the response.

Response

A page of verified cross-venue matched market pairs.

countinteger required

Number of pairs on this page after live-status post-filtering (may be less than limit).

limitinteger required
offsetinteger required
has_moreboolean required

Whether the underlying page (before live-status post-filtering) was full — not a strict function of count.

next_cursorstring nullable

Opaque cursor for the next keyset page. Present when cursor mode is requested.

catalog_versionstring

Full-set fingerprint shared by every page in one cursor walk.

totalinteger

Only present when include_total=true. Total matching-pair count under the pre-live-filter query filters.

Example response

{
  "pairs": [
    {
      "a": {
        "provider_id": 2,
        "provider": "polymarket",
        "market_id": "587234",
        "title": "Will the Celtics win?"
      },
      "b": {
        "provider_id": 2,
        "provider": "polymarket",
        "market_id": "587234",
        "title": "Will the Celtics win?"
      },
      "similarity": 0.94
    }
  ],
  "count": 42,
  "limit": 50,
  "total": 1284
}

Changes

No recorded changes to this operation across all 1 revision of this API.