Requests use one rolling 60-second account window shared by every key. Lifetime retained successful spend earns the account tier; IP and action-specific protections may reject earlier or separately. There is no hourly or per-key tier quota.
20,000 requests / minute / IP addressApplied before key validation so brute-force key enumeration is bounded. Shared across all keys behind the same IP. The default is set globally and is not user-configurable.
120–2,400 requests / rolling 60 secondsAll active API keys on one account consume the same counter. The fixed lifetime-successful-spend ladder supplies the limit unless a direct admin RPM override exists.
Depends on the actionSome sensitive actions add a narrower account rule. For example, cancel accepts 30 requests per minute per account; its 429 reports action.
Qualification uses retained successful spend over the account's lifetime. Completed and partial delivery adds the retained successful amount; later refunds reduce it. The effective limit updates from the stored total without a daily upgrade job. Use action=account_status to read the earned tier and effective RPM.
| Tier | Minimum lifetime spend | Requests / minute |
|---|---|---|
| 0 | $0.00000000 | 120 |
| 1 | $10.00000000 | 300 |
| 2 | $50.00000000 | 600 |
| 3 | $100.00000000 | 900 |
| 4 | $500.00000000 | 1,200 |
| 5 | $1000.00000000 | 1,800 |
| 6 | $2500.00000000 | 2,400 |
| Header | Description |
|---|---|
| X-RateLimit-Limit | On normal responses, the effective shared account requests-per-minute limit. On a 429, the limit reported by the rejecting layer. |
| X-RateLimit-Remaining | On normal responses, requests remaining in the shared account window. On a 429, the remaining value reported by the rejecting layer. |
| X-RateLimit-Reset | Relative number of seconds until the reported window resets; it is not a Unix timestamp. |
| X-RateLimit-Tier | The earned lifetime-successful-spend tier (0–6). A custom RPM override does not change this value. |
| X-RateLimit-Source | "tier" when the fixed ladder supplies the effective RPM; "custom" when a direct admin override supplies it. |
| X-RateLimit-DeniedBy | Sent on 429 responses when a named limiter rejects the call: "ip", "api_requests_per_minute", or "action". |
| Retry-After | On a retryable 429 or 503 with Retry-After, wait at least this many seconds before retrying. For action=add, reuse the same idempotency key after the wait. |
ip, api_requests_per_minute, and action identify the rejecting layer; changing keys does not bypass the shared account, IP, or action limit.action=status.