Errors

The error response shape and the status codes the API uses.

The API uses conventional HTTP status codes. Any error response carries a JSON body with a stable, machine-readable code and a human-readable message:

{
  "error": {
    "code": "not_found",
    "message": "Booking not found"
  }
}

Branch on error.code in your integration; surface or log message for people.

Exception — unauthenticated reporting requests. The reporting endpoints (/reports, /reports/runs, /reports/files) answer a request with no credentials with 401 and a WWW-Authenticate: Basic challenge rather than the JSON envelope above. The body is plain text (HTTP Basic: Access denied.) and Content-Type is text/html. Do not parse that 401 as JSON. See Authentication.

Statuserror.codeWhen it happens
400bad_requestMalformed JSON or a missing required parameter.
400idempotency_key_in_useSame idempotency key reused with a different request body — see Idempotency.
401unauthorizedMissing or invalid API key — see Authentication. On reporting endpoints, an unauthenticated request returns a Basic challenge instead of this envelope.
404not_foundThe resource doesn't exist, or isn't visible to your key.
409idempotency_key_in_progressA request with the same idempotency key is still being processed — see Idempotency.
422unprocessable_entityThe request was well-formed but failed validation or a business rule.
422unsupported_api_versionUnknown or unsupported Easol-API-Version — see Versioning.
422idempotency_key_requiredRequired Idempotency-Key header missing on endpoints that mandate it — see Idempotency.
422idempotency_key_too_longIdempotency-Key exceeds 255 characters — see Idempotency.
500internal_server_errorAn unexpected error on our side. Safe to retry.
503idempotency_store_unavailableThe idempotency store is temporarily unavailable — see Idempotency. Safe to retry.
503payment_provider_unavailableA payment provider is temporarily unreachable. Safe to retry.