Core concepts

Rate limits

Per-key and per-endpoint request limits, and how to handle a 429

Need higher limits? Email support@agg.market with your app ID, the API key name (never the secret), the endpoints you call, and your expected peak requests per minute. We can raise limits per key and per endpoint group.

Overall limits

CallerLimit
Your backend, with a valid x-app-api-key18,000 requests per minute per key
Browsers and other clients without a key1,000 requests per minute per IP

Each API key has its own budget, separate from your other keys and your browser traffic. Browser traffic is also limited per user, so one busy user cannot use up the limit for the rest of your app. See Server API keys.

Endpoint limits

Some endpoints have their own per-minute limits on top of the overall limit. A higher key limit does not raise these.

Endpoint groupEndpointsPer IPPer userPer API key
Event bootstrapGET /venue-events/{id}/bootstrap1202401,200
Chart manifestGET /charts/history/manifest2404802,400
Chart barsGET /charts/bars1202401,200
SearchGET /search1202401,200
DiscoveryGET /venue-events, GET /venue-events/{id}, GET /venue-markets, GET /venue-market-outcomes, GET /crypto/recurring-markets, GET /sports/live, /correlated-markets/*, GET /news-feed/*, GET /leaderboard/*6003003,000
Catalog feedGET /catalog/changes3001201,200
PricesGET /midpoints, GET /orderbooks6006001,200
Outcome order booksGET /orderbooks/outcomes, GET /orderbook/outcome/{outcomeId}6001,2006,000
QuotesGET /orderbook/{outcomeId}/route, POST /execution/withdraw/preview, POST /execution/withdrawable/quote6006001,500
PortfolioGET /execution/status, GET /execution/positions, GET /execution/orders, GET /execution/balances, GET /execution/deposit-addresses, GET /execution/withdrawals/{id}, GET /users/activity6006003,000
TradingPOST /execution/fill, POST /execution/orders, POST /execution/limit-orders, order cancels, POST /execution/redeem, POST /execution/withdraw, POST /execution/sync-balances1201206,000

All endpoints in a group share one budget. For example, a fill and a cancel both count toward Trading.

Order-book reads count one unit per outcome. A GET /orderbooks/outcomes call for 10 outcomes uses 10.

Sign-in and email endpoints have tighter limits to stop abuse. A user can receive up to 10 magic-link emails per hour.

Handling a 429

A 429 includes a Retry-After header in seconds. Wait at least that long before you retry. Do not cache a 429, and do not treat it as empty data.

A 403 from a high-volume source can mean our network firewall blocked it. Back off for a few minutes. If one server IP will send a lot of traffic, tell us before you launch.

To stay under the limits:

  • Use the orderbook socket instead of polling order books.
  • Debounce typeahead before calling GET /search?mode=instant.
  • Route reads that fan out for many users through your backend, with an API key.

Before retrying a write, read Errors, retries & idempotency.

On this page