Errors

Errors are returned in the JSON-RPC error object. The HTTP status is 200 even for an error — inspect the body, not the status.

{ "jsonrpc": "2.0", "id": 1, "error": { "code": 2001, "message": "not_found", "data": "…" } }

error.data, when present, carries client-safe detail (a validation reason, a limit). Internal detail is never leaked into it.

Application codes

Code Message Meaning & remedy
1001 unauthorized Missing or invalid token, bad login, or a throttled login. Re-authenticate.
1002 token_expired The access token expired. Call auth.refresh once and retry.
1003 forbidden Not the owner, or the method is outside a personal access token's scope.
2001 not_found No such resource owned by the caller.
2002 validation_failed The request was malformed; error.data says why.
3001 storage_error A transient backend failure while verifying your request (e.g. a database blip). Your token is fine — retry with backoff.
4001 custom_crop_limit_exceeded The image already has the maximum of five custom crops.

JSON-RPC codes

Transport-level errors use the standard JSON-RPC range:

Code Meaning
-32700 Parse error — the body is not valid JSON.
-32600 Invalid request — not a conforming JSON-RPC object (e.g. a batch on an alias route, or a method that disagrees with the path).
-32601 Method not found.
-32602 Invalid params — the params did not match the method's schema.
-32603 Internal error.
-32605 The request exceeded the per-method time limit.

A batch_too_large invalid-request (-32600) is returned when a batch exceeds 20 requests (see rate limits).