Error Codes
Error Response Format
All errors follow this structure:
{ "success": false, "error": { "code": "ERROR_CODE", "message": "Human-readable description" }}Error Codes
| Code | HTTP Status | Description |
|---|---|---|
UNAUTHORIZED | 401 | Missing, invalid, or revoked API key |
FORBIDDEN | 403 | Valid key but no active paid subscription |
BAD_REQUEST | 400 | Missing or invalid parameters |
NOT_FOUND | 404 | Resource or route not found |
RATE_LIMITED | 429 | Rate limit exceeded |
INTERNAL_ERROR | 500 | Server error — try again later |
Common Errors
No API key
{ "success": false, "error": { "code": "UNAUTHORIZED", "message": "API key is required. Get one at https://developers.skytools.app/dashboard" }}Invalid API key
{ "success": false, "error": { "code": "UNAUTHORIZED", "message": "Invalid or revoked API key." }}No paid subscription
{ "success": false, "error": { "code": "FORBIDDEN", "message": "An active paid subscription (Starter or Pro) is required to use the API. Subscribe at https://skytools.app" }}Missing required parameter
{ "success": false, "error": { "code": "BAD_REQUEST", "message": "item_id parameter is required" }}Route not found
{ "success": false, "error": { "code": "NOT_FOUND", "message": "Route GET /v1/unknown not found. See GET / for available endpoints." }}