Rate limits
API requests are rate limited to ensure fair usage and platform stability. Limits are applied per user.Request rate limits
| Endpoint Type | Limit |
|---|---|
| GET requests | 250 requests/minute |
| POST and DELETE requests | 125 requests/minute |
/scans/{id}/output | 60 requests/minute |
Pentest Robots have no rate limit when stopping scans via the API.
Rate limit headers
You can inspect your current rate limit status by checking the response headers on any request:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per minute |
X-RateLimit-Remaining | Requests remaining in current window |
When rate limited
When you exceed the rate limit, you’ll receive a429 Too Many Requests response with additional headers:
| Header | Description |
|---|---|
X-RateLimit-Reset | Unix timestamp when the limit resets |
Retry-After | Seconds to wait before retrying |
Error response format
Error responses include astatus code and message, with optional details:
Error codes
| Code | Meaning | Common Causes |
|---|---|---|
| 400 | Bad Request | Missing required parameters, invalid input format |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Valid API key but insufficient permissions |
| 404 | Not Found | Resource doesn’t exist or you don’t have access |
| 406 | Not Acceptable | Requested format not supported (e.g., JSON output for raw-only tools) |
| 409 | Conflict | Operation conflicts with current state (e.g., deleting running scan) |
| 422 | Unprocessable Entity | Validation failed for the request body |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server-side issue; retry later |
Common errors
401 Unauthorized
401 Unauthorized
403 Forbidden
403 Forbidden
Cause: Your API key lacks permission for this actionSolutions:
- Check your subscription plan includes the requested feature
- Verify you have access to the workspace or resource
- For target deletion: ensure your plan allows API target deletion
404 Not Found
404 Not Found
Cause: Resource doesn’t exist or you don’t have accessSolutions:
- Verify the resource ID is correct
- Check the resource belongs to your account or a workspace you have access to
- For scans/targets: ensure they haven’t been deleted
406 Not Acceptable
406 Not Acceptable
Cause: Requested output format not supportedExample: Requesting JSON output for a tool that only provides raw outputSolution: Use a different output format or download the PDF report instead
409 Conflict
409 Conflict
Cause: Operation conflicts with current resource stateExamples:
- Deleting a scan that is still running
- Creating a workspace with a name that already exists
- Deleting your current active workspace
429 Too Many Requests
429 Too Many Requests
Cause: Rate limit exceededSolution: Wait for the duration specified in the
Retry-After header before making more requestsBest practices
- Handle errors gracefully: Implement proper error handling for all API calls
- Respect rate limits: Monitor
X-RateLimit-Remainingand slow down before hitting limits - Use exponential backoff: When retrying failed requests, increase wait time between attempts
- Log errors: Keep records of errors for debugging and monitoring