Pagination, Filtering, and Limits¶
Pagination¶
Collection endpoints use opaque cursor pagination. Provide limit (1–100, default 25) and the returned cursor value. Do not construct a cursor or use it after 24 hours.
meta.next_cursor is null at the end. Results are a stable snapshot for the cursor lifetime where supported; rapidly changing deal feeds may add or omit entries between pages.
Filtering and sorting¶
Filter parameters are endpoint-specific: store_id, category_id, publisher_id, platform, available, min_discount, released_after. Sort values include relevance, price_asc, discount_desc, released_desc, and trend_desc. Invalid sorts return 400.
Rate limits and freshness¶
The default production allowance is 600 requests per minute per API key and 60 write requests per minute per user. Headers report RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. HTTP 429 includes Retry-After.
Offer responses have observed_at and expires_at; cache no longer than the earlier of your TTL and expires_at. Do not assume prices will remain available through checkout.
Versioning¶
/v1 is a compatibility contract. SteamDeals may add optional fields, values, endpoints, and headers. A removal, required-field change, or semantic break requires a new major path version and a deprecation notice.
Idempotency¶
POST/PATCH requests that change state accept an Idempotency-Key UUID. SteamDeals stores the method, route, body digest, and resulting response for 24 hours. Reusing a key with a different body returns 409 idempotency_conflict.