Docs
GET /v2/screener/movers

Top movers by percent change

screener_getMovers

Registry symbols ranked by the size of their latest session's move, largest absolute change_pct first. Use it for a daily top-gainers and top-losers list.

Query parameters

date string ISO date

Session date YYYY-MM-DD, echoed in meta. Not applied yet: rows always come from the latest session.

universe string

Universe to rank; only registry (the default, every symbol in GET /v2/symbols) is supported.

limit integer

Rows to return: default 25, at most 180.

Details

Requests with an API key never see index symbols in the list.

Units

spot (the latest daily close) and official_close (the prior session's close) are dollars; change_pct is percent (1.5 = +1.5%); volume is shares.

Freshness

Computed from daily bars at most once a minute and shared by every caller; meta.computed_at (epoch milliseconds) says when. The date parameter is echoed but not applied yet: the latest session is always served.

Limits

At most 180 rows (limit, default 25). No other per-operation limit applies.

Example

http
GET /v2/screener/movers?limit=1
json
{
  "data": [
    {
      "symbol": "SPCH",
      "spot": 10.16,
      "change_pct": 9.96,
      "volume": 26576051,
      "official_close": 9.24
    }
  ],
  "meta": {
    "count": 1,
    "computed_at": 1790493764431,
    "universe": "registry"
  }
}

Response

Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →

200application/json

Movers in data, largest |change_pct| first; meta.computed_at and a meta.note on how the universe was computed

object

A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.

data array<object> required
change_pct number · double required

Percent change from official_close (1.5 = +1.5%).

official_close number · double required USD

Prior session close, dollars.

spot number · double required USD

Latest daily close, dollars.

symbol string required
volume integer · int64 required

Latest session volume, shares.

meta object required

Response metadata.

caps object nullable

meta.caps — the entitlement caps that shaped this response. applied lists the caps that actually changed it (for example range_clamped).

applied array<string> required

Which caps actually shaped this response (e.g. range_clamped). Empty = nothing was clamped.

darkpool boolean nullable

Whether this account can use Off-Exchange in the site.

flow boolean nullable

Whether the OPRA option-flow capability (flow) is granted to this principal in the app: site Pro plus a CBOE non-professional attestation (never on an itm_ key). Emitted explicitly — true and false — by the account endpoints, so the app reads the grant instead of inferring it from tier and attestation; absent on routes that do not report it.

gexDepth string nullable

GEX data depth when the route reports it. Camel-cased to match the browser capability bundle; absent on unrelated routes.

tier string required

The tier the request was served under.

cursor string nullable

Opaque continuation cursor (pass back as ?cursor=); absent when there is nothing more to read.

plane string nullable

Which serving tier answered the read (meta.plane). Informational provenance: treat it as an opaque label, because new values may appear.

Errors

Every error is the JSON error envelope; branch on error.code.

StatusMeaning
401

unauthenticated

503

internal — no bars source configured here