Getting Started
Errors
Standard error codes and how to handle them.
Error Format
All errors follow the same format:
{
"ok": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description"
}
}Error Codes
| Code | HTTP Status | Description |
|---|---|---|
INVALID_API_KEY | 401 | Missing or invalid API key |
REVOKED_API_KEY | 401 | API key has been revoked |
NO_CREDITS | 402 | Insufficient balance for this request |
VALIDATION_ERROR | 400 | Request body validation failed |
NOT_FOUND | 404 | Endpoint or resource not found |
JOB_NOT_FOUND | 404 | Media job not found |
JOB_EXPIRED | 410 | Job result has expired, resubmit your request |
MEDIA_MODEL_NOT_FOUND | 400 | Unknown media model ID |
UPSTREAM_ERROR | 502 | Upstream provider returned an error |
AI_UPSTREAM_ERROR | 502 | AI provider returned an error |
INTERNAL_ERROR | 500 | Something went wrong on our end |
Handling Errors
const res = await fetch('https://api.yepapi.com/v1/seo/keywords', {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ keywords: ['nextjs seo'] }),
});
const result = await res.json();
if (!result.ok) {
const { code, message } = result.error;
if (code === 'NO_CREDITS') {
// Add funds at https://yepapi.com/dashboard/billing
}
}Upstream Errors
When an upstream data source returns an error, we return an UPSTREAM_ERROR with additional context:
{
"ok": false,
"error": {
"code": "UPSTREAM_ERROR",
"message": "Upstream data source returned an error",
"upstream": {
"status": 500,
"message": "Internal server error"
}
}
}