Errors
One error envelope, stable codes, human-readable messages.
Jelliu uses conventional HTTP status codes and returns every error in the same JSON envelope:
Messages are for people, codes are for code
Messages are written for the person reading them, and the language depends on the endpoint. Jelliu’s customers are Spanish-speaking, so many product-facing messages are in Spanish, while others are in English. Both of these are real responses:
Never parse or match message. It is not translated consistently and can be reworded without notice. Switch on error.code and the HTTP status.
HTTP status codes
For 5xx responses the real cause is logged on our side and never returned. The body carries a generic message: Internal server error, or An unexpected error occurred with code INTERNAL_ERROR.
Common error codes
The status shown is the usual one. A few codes are returned with a different status on specific endpoints (for example VALIDATION_FAILED with 409 or 422), so read the status and the code together.
Validation errors
Validation failures return 400 with code VALIDATION_FAILED and a details field. Depending on the endpoint, details takes one of two shapes.
Field map. Most create and update endpoints report errors grouped by field:
Issue list. Other endpoints return a flat list of issues, each with a dotted path:
Handle both: if details is an array, read path and message from each item; if it is an object, read fieldErrors.
Metadata
metadata is included only for the four codes below, and only with keys from a fixed allowlist. Everything else stays server-side. The keys you will typically see:
Retrying
- Retry
429and503after the number of seconds in theRetry-Afterheader. 409 AGENT_PROVISIONINGalso carriesRetry-After.- Other
4xxerrors will fail again until the request, the key or the resource state changes. - For other
5xxerrors, retry with exponential backoff.

