Error Handling
The Scrappa API uses standard HTTP status codes and returns errors in a consistent JSON format.
Error Response Format
All errors follow a consistent JSON structure:
{
"message": "Error description",
"error": "Optional error type"
}
HTTP Status Codes
| Code | Meaning | Description |
|---|---|---|
200 |
Success | Request completed successfully |
400 |
Bad Request | Invalid parameters or malformed request |
401 |
Unauthenticated | Missing or invalid API key |
403 |
Forbidden | No active subscription or package, or out of credits |
404 |
Not Found | Endpoint or resource not found |
422 |
Validation Error | Request validation failed |
500 |
Internal Server Error | Server error occurred |
502 |
Bad Gateway | Invalid response from external service |
503 |
Service Unavailable | Service temporarily unavailable |
Common Error Examples
401 Unauthenticated
Missing or invalid API key
{
"message": "Unauthenticated"
}
403 Forbidden
No active subscription or out of credits
422 Validation Error
Invalid request parameters
{
"message": "Validation failed",
"errors": {
"q": ["The q field is required."],
"location": ["The location must be a valid location."]
}
}
500 Internal Server Error
Server error
{
"error": "An error occurred while processing the request",
"message": "Detailed error message"
}
Error Handling Best Practices
- Always check the HTTP status code before processing the response
- Implement retry logic for transient errors (500, 502, 503)
- Use exponential backoff when retrying requests
- Log error responses for debugging and monitoring
- Display user-friendly error messages based on the error type
- Handle validation errors (422) by showing specific field errors to users
- For 401/403 errors, prompt users to check their API key or subscription status
Example Error Handling
async function handleApiRequest(url, apiKey) {
try {
const response = await fetch(url, {
headers: {
'X-API-KEY': apiKey
}
});
if (!response.ok) {
const error = await response.json();
switch (response.status) {
case 401:
throw new Error('Invalid API key. Please check your credentials.');
case 403:
throw new Error('Access denied. Please check your subscription.');
case 422:
const validationErrors = error.errors || {};
throw new Error(`Validation failed: ${JSON.stringify(validationErrors)}`);
default:
throw new Error(error.message || 'An error occurred');
}
}
return await response.json();
} catch (error) {
console.error('API Error:', error);
throw error;
}
}