Skip to main content
Every error response is application/problem+json — a small, consistent JSON body, regardless of which endpoint failed.

Codes

This list covers every resource live today. As new resources ship (patients, notes, appointments, inventory writes, drug requests — see the overview), they will add their own codes without changing what any code above means — see Versioning.
not_found and scope_missing can look similar from the outside, but they mean different things: not_found means “this doesn’t exist, or isn’t yours to see” — you’ll never learn which. scope_missing means the record exists and you could see it, if your key had the right scope. Don’t infer a record’s existence from getting a 403 instead of a 404.

What never appears in an error

No error body ever includes a raw database message, a stack trace, or any detail about a clinic’s internal data beyond what the request itself already revealed. If you see anything that looks like an internal error message rather than one of the codes above, treat it as a bug and include the request_id when you report it.