Error Codes
Understanding and handling API errors.
Error Response Format
All errors follow a consistent JSON format:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": {} // Optional additional information
}
}HTTP Status Codes
| Status | Description |
|---|---|
| 200 | Success |
| 201 | Created successfully |
| 400 | Bad request - Invalid parameters |
| 401 | Unauthorized - Invalid or missing API key |
| 403 | Forbidden - Insufficient permissions |
| 404 | Not found - Resource doesn't exist |
| 429 | Rate limited - Too many requests |
| 500 | Internal server error |
| 503 | Service unavailable - Temporary outage |
Error Codes
UNAUTHORIZED
The API key is missing, invalid, or revoked.
Solution: Check your API key and ensure it's correctly included in the Authorization header.
FORBIDDEN
The API key doesn't have permission for this action.
Solution: Check the key's permissions in your dashboard.
RATE_LIMITED
Too many requests in a short period.
Solution: Implement exponential backoff and respect rate limits.
QUOTA_EXCEEDED
You've exceeded your credit quota.
Solution: Purchase more credits or upgrade your plan.
INVALID_INPUT
The request body contains invalid parameters.
Solution: Check the model's input schema and validate your parameters.
MODEL_NOT_FOUND
The specified model doesn't exist.
Solution: Check the model ID and browse available models.
JOB_NOT_FOUND
The specified job doesn't exist or has expired.
Solution: Job results are retained for 24 hours. Check the job ID.
MODEL_UNAVAILABLE
The model is temporarily unavailable.
Solution: Try again later or use an alternative model.
INFERENCE_FAILED
The model failed to process the request.
Solution: Check your input parameters. Some prompts may be rejected by content filters.
TIMEOUT
The request timed out.
Solution: Use async mode for long-running jobs.
Handling Errors
Always implement proper error handling in your code:
try {
const result = await abstrakt.run('fal-ai/flux/schnell', {
prompt: 'Hello world'
});
} catch (error) {
if (error.code === 'RATE_LIMITED') {
// Wait and retry with exponential backoff
await sleep(error.retryAfter * 1000);
// Retry the request...
} else if (error.code === 'QUOTA_EXCEEDED') {
// Notify user to add credits
} else if (error.code === 'INVALID_INPUT') {
// Fix the input parameters
console.error('Invalid input:', error.details);
} else {
// Handle other errors
console.error('API error:', error.message);
}
}