Skip to main content
GET
List biggest gainers and losers
Rows come back ordered by change_bp, biggest gainer first for direction=up and steepest drop first for direction=down, paged by cursor exactly like List cards. Pass expansion_id to rank inside one expansion instead of the whole catalog.

One row per card, and the printing depends on direction

A card can move differently on different printings. The gainers list names whichever printing rose most; the losers list, for the same card and the same window, names whichever printing fell most, and that can be a different printing entirely. A card whose holofoil rose while its reverse holofoil fell appears on both lists, each row naming the printing it is actually about. Read the printing off the row rather than assume the two lists agree on which piece of cardboard they mean. card_variant_id is what names it exactly: it matches an id in the card’s variants, from Get a card or ?include=variants on List cards. printing is the type axis alone, and one card can carry several printings that share a type, so matching on that string can land on the wrong one.

What qualifies

The leaderboard ranks the ungraded tier, which is the price of a raw copy, so a slab that moved sharply does not push a card up this list. A printing ranks only if it trades often enough for a movement to mean something, and only if it was above a minimum price at the start of the window. A percentage measured on a handful of sales a year says more about which two copies happened to change hands than about the market, so a printing that thin is absent from both lists rather than at the top of one. The same applies at the other end: a card that went from two cents to six is up 200% and is not news. Read sales_volume on any printing from Get a card to see how many copies sold in the trailing year. A card can therefore be absent here while still carrying prices.

Telling a held price from a stale one

A price is recorded only on the days it moved, so a printing that has held steady has no reading on most days. start_cents for a window is carried forward from the last day it was actually observed, and start_as_of is that day. When start_as_of sits well before the window’s start, change_bp is measured against a carried value rather than a fresh reading: a card untouched for two months can still surface here, at a real percentage computed against an old price. Compare start_as_of to the window to tell “held steady” from “not seen in a while.”

Windows need history behind them

A window is computable only once observations reach back across it, and the price history behind this leaderboard begins on 21.08.2026. 30d therefore carries nothing until late September, and an empty page for a wide window is an absence rather than a market that stopped moving. Narrower windows fill in first.

A different selection from include=change

?include=change on List cards and Get a card reports change data for a card too, but for a different printing: the one the card’s displayed price is read from, not necessarily the one that moved most. A card can lead this leaderboard on one printing’s percentage while its include=change figure, drawn from another, reads something smaller, or even moves the other way. See Change on the card object.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

window
enum<string>
default:7d

The period to measure over.

Available options:
1d,
7d,
30d
direction
enum<string>
default:up

up for biggest gainers, down for biggest losers.

Available options:
up,
down
expansion_id
string

Narrow the list to one expansion. An id that matches nothing is an empty page, not a 404.

limit
integer
default:50

How many rows to return. Defaults to 50 and stops at 200; a larger value is clamped, not rejected.

Required range: 1 <= x <= 200
cursor
string

The next_cursor from the previous page. Omit it for the first page. A cursor this endpoint did not issue is ignored, and you get the first page back.

Response

Movers

data
object
required
error
object | null
required