Errors and rate limits
The error envelope
Every normalization endpoint returns the same shape on failure:
Always capture details.traceId — it’s what IMO Health support needs to find
your request.
POST /oauth/token uses the OAuth-standard shape instead
(error, error_description, error_uri). See
Authentication.
Status codes
Rate limits
429 responses carry a Retry-After header giving the seconds to wait.
Honor it rather than guessing — it reflects live capacity.
Retrying 400, 403, or 413 unchanged will fail identically and still counts
against your limit. Only 401 (once, after refresh), 429, 500, and 503 are
retryable.
Handling errors with the SDKs
The generated SDKs raise typed errors per status code, so you can branch on the class rather than parsing status integers.
Exact error-class names come from the generated SDKs. Check the README in the SDK repos for the precise symbols in your language and version.
A retry policy that works
Partial failures
A 200 does not mean every record succeeded. Batch calls report per-record
outcomes:
summary.count— records processedsummary.error_count— records that failedrequests[].response.error_message[]— the per-record reasons
Always check summary.error_count before treating a batch as fully normalized.
A record that fails to match returns an empty items array rather than an
exception.