Rate Limits
Every request counts towards a global limit, some endpoints have an additional, lower limit.
| Limit | Endpoints | Requests | Window |
|---|---|---|---|
| Global | All endpoints | 1000 | 1 hour |
| Items | /v1/items and /v1/sales/history together | 8 | 5 minutes |
How requests are counted
- With an API key, requests are counted per API key (the
Authorizationheader). - Without an API key, requests are counted per network: all IPv4 addresses that only differ in the last block (e.g.
203.0.113.0to203.0.113.255) share one limit. If you run your client on a cloud or hosting provider, other customers in the same network may use up your limit. Send your API key to get a limit of your own. - The windows are fixed: they start with your first request and reset after 5 minutes (or 1 hour).
When you are rate limited
Requests over the limit are answered with 429 Too Many Requests:
{
"errors": [
{
"id": "rate_limit_exceeded",
"message": "Your connection is being rate limited."
}
]
}
warning
Every request you send while you are rate limited extends the block by another full window. The limit only resets after a full window (5 minutes for the items limit) without any requests. Do not retry right away.
Best practices
- Send your API key with every request.
/v1/itemsand/v1/sales/historyare cached for 5 minutes. Requesting them more often returns the same data, so once every 5 minutes per parameter combination (e.g.tradable=0andtradable=1) is enough.- Don't send your requests exactly at the full 5 minutes: wait a little longer (e.g. 5.5 minutes) or add some random delay, so you never hit the end of a window.
- After a
429, wait at least a full window without any requests before you try again.