Rate Limits
Limits apply at three levels: a per-minute quota per guild, shared by every API key the guild has; a rolling 24-hour cap per API key; and a per-IP cap for unauthenticated callers. Adding more keys to a guild does not raise its per-minute quota.
| Plan | Requests / minute (per guild) | Requests / 24h (per key) | Global lookups / minute (per guild) |
|---|---|---|---|
| Free | 60 | 5,000 | Not available |
| Developer | 600 | 500,000 | 120 |
The 24-hour cap is a rolling window: requests count against it for 24 hours after they are made, rather than resetting at a fixed time of day.
Global lookups
Routes that need the link:read:global scope (looking up links outside your own guild) have their own per-minute quota per guild, separate from the guild quota above. It is a Developer feature; on Free the quota is zero.
Unauthenticated requests
Requests without an API key are limited to 300 per minute per IP. Requests with an invalid key are limited separately, to 20 per minute per IP, so a misconfigured client gets a 429 quickly instead of hammering the API.
Response headers
X-RateLimit-Limit: cap for the current per-minute windowX-RateLimit-Remaining: requests left in that windowX-RateLimit-Reset: unix timestamp when the window resetsX-RateLimit-Daily-Limit: this key's 24-hour capX-RateLimit-Daily-Remaining: requests left in the rolling 24 hours
On 429
Exceeding a limit returns 429 rate_limited with a Retry-After header (seconds). The error body says which limit was hit in error.meta:
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded.",
"meta": { "scope": "guild_minute", "limit": 600, "retryAfterSeconds": 12 }
},
"requestId": "..."
}scope | Meaning |
|---|---|
guild_minute | The guild's per-minute quota, shared by all of its API keys. |
global_lookup_minute | The guild's per-minute quota for global lookup routes. |
key_day | This API key's rolling 24-hour cap. |
ip | The per-IP cap on unauthenticated requests. |
ip_failed_auth | Too many requests with a missing or invalid API key from this IP. |
Wait at least Retry-After seconds, then back off with jitter. Because the per-minute quota is shared, one busy key can exhaust it for the guild's other keys. Repeated saturation is treated as abuse.
Anti-scraping
Anomaly detection flags sudden volume spikes and broad identifier enumeration. Flagged keys may be suspended pending review. If your workload is legitimately high-volume (e.g. a game server fleet), reach out before launching so we can tune limits.