Skip to main content
The game demand endpoints let you see which retro game titles buyers are actively seeking — measured by purchase-intent clicks (redirects to eBay listings), watchlist alerts, and search activity. Use them to answer questions like “what should I stock right now?”, “is interest in this title accelerating?”, and “should I sell this copy loose or complete in box?”. All endpoints documented on this page require the demand-intent.read scope and a valid Authorization: Bearer <token> header.

Common query parameters

All list endpoints on this page share the following query parameters.
string
default:"7d"
The time window to aggregate over. One of day, 7d, or 30d.
integer
Restrict results to games belonging to this console. Omit to return results across all consoles.
string
Override the target date. Defaults to the latest computed date for the selected period. Format: YYYY-MM-DD.
integer
default:"25"
Page size. Capped by your plan’s max_page_size.
integer
default:"1"
Page number (page-mode pagination).
string
Cursor token for cursor-mode pagination. Pass paginate=cursor to opt in.
string
default:"page"
Pagination mode. Set to cursor to use cursor-based pagination.

Derived fields

Several fields in the response are computed from the raw demand data rather than stored directly. Understanding how they are derived helps you interpret what they signal.

momentum

Momentum measures whether buyer interest is accelerating or fading by comparing the recent 7-day daily pace against the longer 30-day baseline. A value above 1.0 means the game is getting more attention recently than its baseline average. When a game has no 30-day baseline (it is newly tracked, or had no activity in the prior 30 days), both value and label are returned as null / "unknown".

demand_score

A single 0–100 index blending intent, reach, and watch demand into one comparable number. Each component is normalised against the highest value in the current period and console scope, so the top-ranked title always scores 100 and every other title is scored relative to it. The three signals blended are:
  • Intent — redirect volume (purchase-intent clicks).
  • Reach — distinct users who generated those clicks.
  • Watch demand — watchlist alert count.

mobile_share

The fraction of demand activity that originated from a mobile device, expressed as a value between 0.0 (no mobile activity) and 1.0 (all mobile). Useful for understanding your buyers’ browsing context.

GET /api/v1/demand-intent/games

Returns a ranked leaderboard of games by demand for the selected period. Use this endpoint to answer “what should I source and stock right now?”

Query parameters

In addition to the common parameters:
string
default:"intent"
Sort order for the leaderboard. One of:
  • intent — by redirect volume (default)
  • watches — by watch_count descending (latent demand)
  • momentum — by the momentum ratio descending (fastest-rising first)

Response

Returns a paginated array of leaderboard rows. The meta object includes the resolved period, period_date, and sort.
array
Array of leaderboard rows, each representing one game ranked by the selected sort.
integer
The game’s rank within the current period and sort. Precomputed from the demand metrics tables.
object
Game identity fields.
integer
Unique game ID.
string
Display name of the game.
string
URL slug for the game.
integer
ID of the console this game belongs to.
string
Display name of the console.
object
Purchase-intent signals derived from redirect clicks to eBay listings.
integer
Number of purchase-intent clicks in the period.
integer
Number of unique users who clicked through.
float
Fraction of clicks from mobile devices (0.0–1.0).
object
Watchlist / notification alert signals (latent demand).
integer
Number of active watchlist alerts for this game in the period.
object
Acceleration of interest relative to the 30-day baseline.
float
Computed ratio. null when no 30-day baseline exists.
string
rising, steady, cooling, or unknown.
object
Current market prices from the catalog.
string
Loose (cartridge/disc only) price as a decimal string.
string
Complete-in-box price as a decimal string.
string
Sealed/new price as a decimal string.
integer
Composite 0–100 demand index. The highest-ranked title in the result set always scores 100.
object
string
The resolved period (day, 7d, or 30d).
string
The date the data was computed for (YYYY-MM-DD).
string
The active sort (intent, watches, or momentum).
object
Standard pagination metadata (see Pagination).
Example response:

GET /api/v1/demand-intent/games/

Returns a full demand profile for one game, with metrics shown side-by-side for all three periods (day, 7d, and 30d). Use this to understand how a specific title is performing across different time horizons.

Path parameters

integer
required
The numeric ID of the game. You can resolve IDs from the Games catalog endpoints.

Response

object
object
integer
Game ID.
string
Display name.
string
Display name of the console.
object
Current market prices.
string
Loose price (decimal string).
string
Complete-in-box price (decimal string).
string
Sealed/new price (decimal string).
object
Demand metrics for each time window.
object
integer
Purchase-intent clicks in the last day.
integer
Unique users in the last day.
integer
Active watchlist alerts in the last day.
integer
Leaderboard rank for the day period.
object
integer
Purchase-intent clicks in the last 7 days.
integer
Unique users in the last 7 days.
integer
Active watchlist alerts in the last 7 days.
integer
Leaderboard rank for the 7-day period.
object
integer
Purchase-intent clicks in the last 30 days.
integer
Unique users in the last 30 days.
integer
Active watchlist alerts in the last 30 days.
integer
Leaderboard rank for the 30-day period.
object
float
Momentum ratio (7-day pace vs. 30-day baseline). null if no baseline.
string
rising, steady, cooling, or unknown.
Example response:
Returns 404 not_found if the game_id does not correspond to an enabled game in the catalog.

GET /api/v1/demand-intent/games//conditions

Returns a condition breakdown for one game, showing whether buyers most want it loose (cartridge/disc only), CIB (complete in box), new (sealed), or any (no condition preference). This is sourced from saved notification alerts — real buyer intent with a specific condition attached — making it a reliable signal for how to list your copy.

Path parameters

integer
required
The numeric ID of the game.

Query parameters

string
default:"7d"
The time window to aggregate over. One of day, 7d, or 30d.

Response

object
object
integer
Game ID.
string
Display name.
string
URL slug.
integer
Console ID.
string
Console display name.
object
string
Loose price (decimal string).
string
Complete-in-box price (decimal string).
string
Sealed/new price (decimal string).
array
All four condition rows, sorted by rank. Rows sum to approximately 1.0 on condition_share.
integer
Rank within this game’s conditions for the period.
string
One of loose, cib, new, or any.
integer
Number of active watchlist alerts for this game/condition pair.
integer
Number of price-drop notification triggers for this game/condition pair.
float
This condition’s share of all alerts across the game’s four conditions (0.0–1.0). All four rows sum to ~1.0.
integer
Unique users behind these alerts.
float
Fraction of alert activity from mobile devices (0.0–1.0).
All four conditions are always returned. A condition with no alerts in the selected period appears as a zeroed row (watch_count: 0, condition_share: 0.0) ranked after the conditions that had activity. Returns 404 not_found if the game_id is unknown or disabled.

GET /api/v1/demand-intent/trending

Returns games ranked by momentum — the fastest-rising titles whose recent daily activity most exceeds their 30-day baseline. Use this to get ahead of demand before prices move. The sort is fixed to momentum and cannot be overridden.

Query parameters

string
default:"7d"
The time window to aggregate over. One of day, 7d, or 30d.
integer
Filter results to a single console.
string
Override the target date (defaults to latest computed).
integer
default:"25"
Page size.
integer
default:"1"
Page number.
string
Cursor token for cursor-mode pagination.
string
default:"page"
Set to cursor for cursor-based pagination.

Response

Returns a paginated array of leaderboard rows in the same shape as GET /api/v1/demand-intent/games. The meta.sort field is always "momentum".
Games with no 30-day baseline are excluded from this endpoint — momentum is undefined without a prior period to compare against. If you need to include brand-new titles, use the main leaderboard with sort=intent.

GET /api/v1/demand-intent/watched

Returns the most-watched games — titles with the highest number of active watchlist alerts, representing buyers who are waiting for the right price before purchasing. This surfaces latent demand that redirect intent alone may not capture: a game with modest click-through but many alert saves signals a price-sensitive buyer pool ready to act.

Query parameters

string
default:"7d"
The time window to aggregate over. One of day, 7d, or 30d.
integer
Filter results to a single console.
string
Override the target date (defaults to latest computed).
integer
default:"25"
Page size.
integer
default:"1"
Page number.
string
Cursor token for cursor-mode pagination.
string
default:"page"
Set to cursor for cursor-based pagination.

Response

Returns a paginated array of leaderboard rows in the same shape as GET /api/v1/demand-intent/games. The sort is fixed to watch_count descending. Redirect intent (intent.redirects) is left-joined from the intent table and may be 0 for titles that have watchlist saves but no purchase-intent clicks in the period.
Because this endpoint is built from the watch table rather than the intent table, you may see titles that do not appear on the main leaderboard at all — games people are waiting on but not yet actively clicking to buy.