ODXProxy

Error Codes

The ODXProxy JSON-RPC error catalog and the two-step success check.

Every /api/* response is a JSON-RPC 2.0 envelope. result and error are mutually exclusive:

{
  "jsonrpc": "2.0",
  "id": "<echoed request id>",
  "result": "<any> | omitted",
  "error": { "code": 0, "message": "...", "data": "<any> | omitted" }
}

Catalog

HTTPJSON-RPC codeWhen
200Odoo's own codeOdoo logic error (pass-through; data carries Odoo's payload).
400-32001action not in the allowlist.
400-32002call_method without fn_name.
401-32000Missing/wrong x-api-key (id is null).
4030Proxy license expired/invalid.
502-32004Network failure reaching Odoo.
504-32003Upstream Odoo call timed out.
500-32005Internal proxy error decoding Odoo's response.

Do not infer success from the HTTP status alone

A 200 OK response can still contain an error object — Odoo logic errors (validation, access-right denial) are returned this way. Clients must:

  1. If the HTTP status is not 200, treat it as a proxy-level failure and surface the JSON-RPC error.
  2. If the status is 200, check whether error is set. If so, surface it; otherwise read result.

On this page