Search

Find markets by what their book and tape are doing

Screens the whole live catalogue by spread, resting depth, rolling volume, open interest and price, rather than by text. Numbers are live from the market-vitals cache (sub-second book and tape), joined to the discover cache for titles; a market the discover cache has never seen is still returned, under its id, with hasMetadata: false.

Prices and spread are in cents, money in dollars. At least one metric bound is required — an unfiltered screen is a ranking, not a screen, and is rejected with 400.

spread is ask - bid on one outcome, and a book with only one side cannot be crossed, so it has no spread: any query bounding spread only matches markets quoting both sides. two_sided asks for that explicitly without bounding the width. Bounds are compared on one canonical price scale, so a threshold means the same width on every venue whatever scale that venue publishes.

get/search/screener

Request

  • Base URL
    https://data.kairos.trade
  • Auth
    API key in header X-Client-Id and API key in header X-Api-Key and API key in header X-Api-Secret

Query parameters

min_spreadnumber

Cents. Only two-sided books can satisfy a spread bound.

max_spreadnumber

Cents.

min_pricenumber

Cents, on the matched outcome's mid.

max_pricenumber

Cents, on the matched outcome's mid.

min_volume_24hnumber

Dollars traded in the rolling 24h window.

min_volume_1hnumber

Dollars traded in the rolling 1h window.

min_liquiditynumber

Dollars resting across every outcome, both sides.

max_liquiditynumber

Dollars resting across every outcome, both sides. Pair with a volume floor to find thin books carrying heavy flow.

min_outcome_liquiditynumber

Dollars resting on the matched outcome alone, both sides.

min_open_interestnumber

Contracts outstanding.

two_sidedboolean

Only markets quoting a bid and an ask. A settled market has no quotes at all, which would otherwise read as infinitely thin.

max_book_age_minutesnumber

Drop markets whose top of book has not been published within this many minutes. Settled and delisted markets stop being streamed, so their frozen book would otherwise screen as a live quote — on a live catalogue that is more than half the records. 0 removes the bound and returns them.

The timestamp is the streamer's publish clock, so this detects "nothing is publishing this market any more", not "the venue's book went quiet": a wedged venue connection re-publishing a cached book still stamps now.

providerstring[]

Repeatable. Restricts the screen to these venues.

sort'volume_24h' | 'volume_1h' | 'spread_desc' | 'spread_asc' | 'liquidity' | 'open_interest'
limitinteger
offsetinteger

Response

A page of matching markets, most relevant to the chosen sort first.

totalinteger required

Matches before paging. -1 means the ordered walk stopped at the page bound and the rest were not counted — render it as "top N", not as a count.

availableboolean required

False when the live vitals service could not be reached. Distinct from a screen that matched nothing, which is available with an empty markets.

planstring

How the scan ran (index_ordered, index_range, scan). Diagnostic.

limitinteger
offsetinteger

Changes

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