Errors
The exit1.dev API uses standard HTTP status codes and returns structured error responses.
Status Codes
| Code | Meaning | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created successfully (POST) |
| 400 | Bad Request | Invalid request parameters or body |
| 401 | Unauthorized | Missing, invalid or disabled credentials |
| 403 | Forbidden | Missing scope, check owned by another account, or feature not on your plan |
| 404 | Not Found | Resource or route not found |
| 405 | Method Not Allowed | HTTP method not supported for this endpoint |
| 409 | Conflict | Duplicate resource (for example URL already monitored) or plan limit reached |
| 422 | Unprocessable | Malformed Idempotency-Key, or the key was used for a different request |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server-side error |
Error Response Format
Every error response is a JSON object with a single error string:
{
"error": "Invalid status. Allowed: all, online, offline, degraded, unknown"
}429 responses add retryAfter and sometimes quotaLimit and quotaReset. See Rate Limits.
Common Errors
400 Bad Request
{
"error": "Invalid check ID format"
}Causes:
- Check ID contains characters other than letters, digits,
-and_, or is longer than 128 characters - Unsupported
statusfilter on List Checks - Invalid
rangeson Check Stats - Missing
Idempotency-Keyon create, or a field that fails validation
401 Unauthorized
{
"error": "Invalid API key"
}| Message | Cause |
|---|---|
Missing credentials. Send X-Api-Key or an OAuth Bearer token. | No X-Api-Key or Authorization: Bearer header |
Invalid API key | The key does not exist or was revoked |
API key disabled | The key exists but is disabled |
API key expired | The key’s expiry has passed |
Invalid or expired access token | The OAuth access token is invalid or expired |
403 Forbidden
{
"error": "Credential does not have the required scope: checks:write"
}Causes:
- API key missing the required scope for the operation
- The check belongs to a different account (
{"error": "Forbidden"}) - The check type is not available on your plan, for example
DNS monitoring requires a paid plan. - The key is restricted and tried to create a check outside its folders, or to use an
/alertsroute
404 Not Found
{
"error": "Not found"
}Causes:
- The check ID does not exist. Read endpoints return
Not found, write endpoints returnCheck not found - The path does not match any endpoint
A check that exists but belongs to another account returns 403, not 404.
A key restricted
to other checks gets 404 with Check not found on every route.
409 Conflict
{
"error": "A check already exists for this URL"
}Causes:
- Duplicate URL when creating or updating a check
- The domain is already monitored by another domain check
- Maximum check limit reached for your plan (
Maximum of 5 checks reached for your plan.)
422 Unprocessable
{
"error": "Idempotency key already used for a different request"
}Causes:
- The same
Idempotency-Keywas used with a different HTTP method or path. Use a new key for each distinct request - The key is not 1 to 256 letters, digits, hyphens or underscores
429 Too Many Requests
{
"error": "Rate limit exceeded. Please try again later.",
"retryAfter": 42
}Cause: You’ve exceeded a rate limit. Wait retryAfter seconds (also sent as the Retry-After header) before retrying.
500 Internal Server Error
{
"error": "Internal error"
}Cause: An unexpected server-side failure. Retry with backoff.
Last updated on