Skip to main content
CS2Cap enforces two independent rate limits on every API key: a per-minute burst limit and a monthly quota. Exceeding either returns a 429 response with machine-readable headers that tell you exactly when you can retry. Understanding how these limits work — and which endpoints count against them — lets you design efficient integrations that never get blocked unexpectedly.

Limits by tier

Special limits for bulk snapshot endpoints

POST /prices and POST /bids stream a full NDJSON snapshot of current listings/bids across specified providers. Each call counts as one request against your monthly quota (like any core endpoint) and is additionally subject to a rolling 24-hour cap on successful stream starts per API key — 50/day on Pro, 300/day on Quant, tracked per endpoint. Only one stream may be active per API key per endpoint; a second concurrent request returns 409. Only successful starts count toward the 24-hour cap; pace loops with X-RateLimit-Remaining and X-RateLimit-Reset.

Which endpoints consume monthly quota

Monthly quota applies to public core market-data endpoints — prices, bids, candles, history, sales, items, providers, FX, and market analytics. These are the endpoints that drive the most data volume. The following route categories are exempt from monthly quota (they still have burst protection, but they do not count against your 1,000 / 50,000 / 500,000 / 1,000,000 monthly total):
  • Account and billing management routes
  • Email verification and account recovery routes
  • Alert creation, listing, and management routes
  • Webhook configuration routes

Rate limit response headers

When you are approaching or have exceeded a limit, the API includes the following headers on the response:

Example 429 response headers

On the bulk streaming endpoints the X-RateLimit-* headers describe that endpoint’s 24-hour stream-start quota (not the monthly quota) and appear on successful 200 responses too.

Error codes

Both rate limit conditions return HTTP 429 with a machine-readable code field in the response body.

Best practices

Always read the Retry-After header on a 429 response and wait the indicated number of seconds before retrying. Retrying immediately wastes quota and continues to return 429.
  • Check X-RateLimit-Remaining proactively. If your remaining monthly quota is low, throttle your request rate rather than waiting for a hard block.
  • Batch requests wherever possible. Use POST /prices/batch and POST /bids/batch (Starter, Pro, and Quant) to fetch up to 100 items in a single request instead of making one request per item.
  • Use POST /prices for bulk data. One call returns the entire catalog. Pace your scheduler against the rolling 24-hour stream-start quota (50/day Pro, 300/day Quant, per endpoint) and don’t run two streams of the same endpoint at once.
  • Treat monthly quota as a budget. Allocate quota across your use cases. On Free (1,000 requests/month), keep calls exploratory; on Starter (50,000 requests/month), use batch lookups for known item sets instead of per-item polling loops.
  • Handle 429 with exponential backoff when Retry-After is not present, adding jitter to avoid synchronized retry storms across multiple keys.
Last modified on July 12, 2026