Skip to main content

Errors

The Arsel API uses standard HTTP status codes and returns errors in a consistent JSON format.

Error Response Format

All errors follow this structure:

{
"status_code": 422,
"name": "validation_error",
"message": "to must be an array, each value in to must be an email"
}
FieldTypeDescription
status_codenumberThe HTTP status code
namestringA machine-readable error identifier in snake_case
messagestringA human-readable description of what went wrong

Status Codes

CodeNameWhen It Happens
202AcceptedThe request was accepted and the message is queued for delivery
200OKThe request succeeded (used for GET requests)
400bad_requestThe request body is malformed or missing required fields
401unauthorizedThe API key is missing, invalid, expired, or revoked
403forbiddenThe API key does not have permission for this action
404not_foundThe requested resource does not exist
409conflictThe request conflicts with the current state of the resource
422validation_errorThe request body failed validation (e.g., invalid email format)
429rate_limit_exceededYou have exceeded the per-second request limit
500internal_server_errorAn unexpected error occurred on our end

Validation Errors

When a request fails validation, the message field contains a comma-separated list of all validation issues:

{
"status_code": 422,
"name": "validation_error",
"message": "from must be an email, to should not be empty, subject must be shorter than or equal to 998 characters"
}

Handling Errors

Check status_code first to determine the category of error. Use name for programmatic error handling, and message for logging or displaying to users.

const response = await fetch("https://api.arsel.sa/api/v1/email/send", options);
const data = await response.json();

if (response.status >= 400) {
switch (data.name) {
case "unauthorized":
// Refresh or rotate your API key
break;
case "validation_error":
// Fix the request payload
break;
case "rate_limit_exceeded":
// Back off and retry
break;
default:
// Log and alert
console.error(`API error: ${data.name}${data.message}`);
}
}