Overview
Lichess implements rate limiting to ensure fair resource usage and protect server infrastructure. Rate limits vary based on authentication status, endpoint type, and account reputation.Rate limits are designed to be generous for legitimate use. If you hit limits regularly, consider optimizing your integration or contacting support.
Rate Limit Tiers
Anonymous Requests
Requests without authentication:- Standard endpoints: ~15 requests per minute per IP
- Search endpoints: ~5 requests per minute per IP
- Export endpoints: Lower limits for large exports
- No streaming endpoints: Must authenticate to stream
Authenticated Requests
Requests with OAuth token or personal API token:- Standard endpoints: ~60 requests per minute per token
- Search endpoints: ~15 requests per minute per token
- Export endpoints: Higher limits for bulk data
- Streaming endpoints: Connection-based limits (typically 1-5 concurrent)
Bot Accounts
Special limits for verified bots:- Game endpoints: Unlimited for active games
- Challenge endpoints: ~120 requests per minute
- Move submission: No limit (reasonable use expected)
- Stream connections: Up to 5 concurrent game streams
Bot accounts must be verified. See the Bot API documentation for details.
Rate Limit Headers
API responses include rate limit information in headers:| Header | Description |
|---|---|
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when limit resets |
Handling Rate Limits
429 Too Many Requests
When you exceed limits, the API returns429:
Retry-After header (seconds to wait):
Recommended Strategy
Implement exponential backoff:Endpoint-Specific Limits
Game Export
Bulk game exports have special considerations:GET /api/games/user/{username}- Limited by data size and time rangePOST /api/games/export/_ids- Maximum 300 game IDs per requestGET /api/games/export/imports- Your imported games only
Search Endpoints
Search is computationally expensive:GET /games/search- Strict limits, requires authentication for heavy use- Use specific filters to reduce load
- Avoid broad date ranges without other filters
Streaming Endpoints
Connection-based limits:GET /api/stream/event- 1 connection per userGET /api/stream/game/{gameId}- 1 connection per gameGET /api/tv/feed- Multiple connections allowedPOST /api/stream/games-by-users- ~5 concurrent users monitored
Best Practices
Cache aggressively
Cache API responses when data doesn’t change frequently:
- User profiles (cache for 5+ minutes)
- Completed games (cache indefinitely)
- Tournament results (cache after completion)
Rate Limit Exceptions
Some situations may result in stricter or more lenient limits:Stricter Limits
- New accounts (< 1 week old)
- Accounts with prior API abuse
- Suspicious activity patterns
- Excessive failed authentication attempts
Higher Limits
- Established accounts in good standing
- Verified bot accounts
- Apps with prior approval (rare, contact support)
IP-Based Limits
Limits also apply per IP address:- Protects against DDoS attacks
- Shared hosting may affect multiple users
- VPNs/proxies share limits with other users
- Cloud providers (AWS, GCP, Azure) may have shared reputation
Checking Your Limits
Test your current limits:What to Do If Blocked
If you’re consistently hitting limits:- Review your code: Look for inefficient polling or excessive requests
- Implement caching: Reduce redundant API calls
- Use streaming: Replace polling with event streams
- Spread requests: Distribute calls over time instead of bursts
- Contact support: Explain your use case if legitimate needs exceed limits
Fair Use Policy
Beyond technical limits, follow fair use guidelines:- Don’t scrape the entire game database
- Don’t automate mass challenges or games without permission
- Don’t use the API to spam users
- Don’t reverse engineer or extract training data at scale
- Respect user privacy and data minimization
Lichess is a non-profit providing free services. Please use the API responsibly to ensure it remains available for everyone.
Next Steps
Authentication
Get authenticated tokens for higher limits
Streaming API
Use streaming instead of polling
Game Export
Export games efficiently
Bot API
Create bots with special rate limits

