Errors

The API error format, how to handle errors and the full list of codes, each with its own anchor.

API documentationGuides · Errors

Shape of an error

An error uses the application/problem+json format (RFC 9457), with a stable code:

{
  "type": "https://mabellenote.com/developers/errors#invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "The request contains invalid fields.",
  "requestId": "req_Qm9uam91ciBNYSBCZWxsZQ",
  "errors": [{ "path": "query.limit", "message": "Must be less than or equal to 100" }]
}
FieldPurpose
typeAddress of the code's documentation, that is the matching anchor on this page.
titleShort title, in English.
statusHTTP status of the response.
codeStable code, to use for automated handling.
detailExplanation specific to this occurrence, in English, or null.
requestIdRequest identifier, identical to the X-Request-Id header.
errorsOnly present for invalid_request: the list of faulty fields, with their path (query.limit, body.email…) and a message.

Every response, error or not, carries the X-Request-Id header. Share it with support for any question about a specific call.

Handling an error

  • Code against code, never against title or detail, whose wording may change.
  • A code never disappears and never changes status within a version. New codes may come with new operations: handle an unknown code based on its HTTP status.
  • 429 rate_limited: wait for the number of seconds given by the Retry-After header, then send the request again.
  • 409 idempotency_in_progress: a request with the same Idempotency-Key is still running. Send it again a little later, with the same key. The idempotency guide details these cases.
  • 503 service_unavailable: the request had no effect. Send it again after the Retry-After delay when present, otherwise after an increasing wait.
  • 500 internal_error: send the request again with an increasing wait and a limited number of attempts, then contact support with the requestId.
  • Other 4xx errors are not fixed by sending the same request again: fix it first.
  • 404 route_not_found means the path does not exist, 404 not_found that the resource is missing or belongs to another account. 405 method_not_allowed lists the accepted methods in the Allow header.

Code catalog

This list comes from the API's OpenAPI description. It is part of the v1 contract.

The request contains invalid parameters or fields. Details are listed in errors.

The pagination cursor is invalid or was issued for different filters.

No API key was provided in the Authorization: Bearer header.

The provided API key does not exist.

The API key has been revoked. Create a new one from the application.

The API key has passed its expiration date.

The account's monthly AI credit is exhausted.

The API key does not carry the scope required by this operation.

The API is reserved for the Pro plan. It resumes as soon as the account is back on Pro.

The account is read-only: writes are refused, reads remain available.

The establishment has not authorized publishing replies to Google through the API.

No operation matches this path.

The resource does not exist or does not belong to the key's account.

This path exists but does not accept this method. The Allow header lists the accepted methods.

The operation conflicts with the current state of the resource.

A request with the same idempotency key is still being processed.

The account has reached the maximum number of active API keys.

The account has reached the maximum number of webhook endpoints.

This promo code has already been redeemed.

This promo code has expired.

The request body exceeds the maximum allowed size.

The request body must be sent as application/json.

The idempotency key was already used for a different request.

The request is well formed but breaks a business rule.

Too many calls with this key. Retry after the delay given by Retry-After.

Unexpected error. Share the requestId with support.

Publishing to Google through the API is temporarily disabled for all accounts.

The service is temporarily unavailable. Retry later.

Updated on October 25, 2026