Pterodactyl implements rate limiting to protect the Panel from abuse and ensure fair resource usage. Different endpoints have different rate limits.
API Rate Limits
Client API
The Client API has a default rate limit of 256 requests per minute per user or IP address.
Configuration:
Set via environment variable:
Or in config/http.php:
Application API
The Application API has a default rate limit of 256 requests per minute per API key or IP address.
Configuration:
Set via environment variable:
Or in config/http.php:
Authentication Endpoints
Authentication endpoints have stricter rate limits to prevent brute force attacks:
Login & Two-Factor
- 10 requests per minute for login and checkpoint endpoints
- Applied to the client IP address
Password Reset
- 2 requests per minute for password reset requests
- Prevents email spam and abuse
Resource-Specific Throttling
Certain resource-intensive operations have additional throttling beyond the standard API limits:
Backup Creation
Backups are throttled to prevent excessive resource usage:
Default Configuration:
This means users can create a maximum of 2 backups within a 10-minute period.
Disable Throttling:
Server Resources
Individual server operations are throttled to prevent rapid-fire actions:
- Databases: Rate limited per server
- Backups: Rate limited per server
- File Pull: Rate limited per server
- Allocations: Rate limited per server
- Schedules: Rate limited per server
- Subusers: Rate limited per server
- Websocket: Rate limited per server
These are applied using Laravel’s rate limiting with dynamic keys based on the server identifier.
Rate Limit Tracking
Rate limits are tracked by:
- Authenticated Users: Tracked by user UUID
- Unauthenticated Requests: Tracked by IP address
Key Format (from app/Providers/RouteServiceProvider.php):
This means switching IP addresses will not bypass rate limits for authenticated users.
API responses include rate limit information in the headers:
X-RateLimit-Limit: Maximum requests allowed in the time window
X-RateLimit-Remaining: Requests remaining in current window
Retry-After: Seconds until the rate limit resets (only when limit exceeded)
Rate Limit Response
When you exceed the rate limit, you’ll receive a 429 Too Many Requests response:
Response Headers:
SFTP Authentication
SFTP authentication has its own throttling mechanism to prevent brute force attacks:
- Failed authentication attempts are tracked per server
- Throttle key:
sftp.{server_id}:{request_ip}
- When throttled, returns seconds until available
Example Response:
Best Practices
1. Implement Retry Logic
3. Batch Requests
When possible, use endpoints that support includes to reduce the number of requests:
4. Cache Responses
Cache API responses when the data doesn’t change frequently:
Don’t request all resources at once. Use pagination:
Adjusting Rate Limits
For high-traffic installations, you can increase rate limits:
Environment Variables:
Backup Throttles (config/backups.php):
Increasing rate limits too high may expose your Panel to abuse or performance issues.
Historical Context
Version 1.12.1 (March 2026):
- Default Client API rate limit increased from 128 to 256 requests per minute
- Change made to reduce “Too Many Requests” errors for legitimate users
Version 1.0.1:
- Client API rate limit increased from 240 to 720 requests per minute (later adjusted)
Troubleshooting
Consistently Hitting Rate Limits
- Review your code for unnecessary API calls
- Implement caching for frequently accessed data
- Use includes to fetch related resources in single requests
- Consider increasing limits if running a high-traffic installation
Rate Limits Not Working
- Verify cache driver is properly configured (Redis recommended)
- Check that environment variables are set correctly
- Clear configuration cache:
php artisan config:clear
- Verify rate limiter middleware is applied to routes