Rate Limiting Policies
To ensure platform reliability, backend resource availability, and protection against malicious traffic spikes, Glow Prow enforces dynamic multi-tiered rate limiting policies across all public API endpoints.
Tiered Throttling Architecture
Our rate limiting infrastructure adaptively evaluates requests based on operation complexity, resource load, and client credentials:
- Read & Query Endpoints: Generous baseline quotas are allocated for high-frequency data fetching (e.g., assembly searches, drops lists, map points) to ensure responsive client UI rendering.
- Write & Mutation Endpoints: Stricter adaptive rate limits are enforced for state-modifying actions such as assembly publishing, collection creation, and profile updates.
- Sensitive & High-Cost Operations: Operations involving password verification, login, image rendering, or captcha generation are protected by tight safety windows to guard against brute-force attempts and computational overload.
- Multi-Dimensional Tracking: Limits are computed across client IP addresses, authentication bearer tokens, and application identifiers.
Rate Limit Response Headers
Each HTTP response includes rate limit metadata reflecting your current sliding window:
| Response Header | Description |
|---|---|
X-RateLimit-Limit | Maximum allowed requests within the current time window |
X-RateLimit-Remaining | Remaining requests available in the current window |
X-RateLimit-Reset | Unix timestamp (in seconds) when the quota window resets |
Example Response Headers
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 98
X-RateLimit-Reset: 1774932000
Handling Throttled Responses
When request volume exceeds the allocated window quota, the API rejects subsequent calls with an HTTP 429 Too Many Requests response:
{
"code": 429,
"message": "Too many requests, please slow down and try again later",
"data": {
"retryAfter": 15
}
}
The response includes a Retry-After header indicating the number of seconds to back off before retrying.
Client Integration Best Practices
- Leverage Client-Side Caching: For slow-changing data (e.g. codex items, war history archives, guide images), maintain a local cache (5 minutes to 3 hours) to avoid redundant requests.
- Implement Exponential Backoff: Upon receiving an HTTP 429 response, parse the
Retry-Afterheader and apply exponential backoff with jitter before reattempting the request. Avoid busy retry loops. - Throttle Paginated Batch Queries: When scraping or batch-fetching pages, introduce minor spacing delays between consecutive network calls.
- Use Authenticated User Sessions: Authenticated user tokens receive higher baseline quotas suitable for interactive integrations.