2xx range carries a JSON body describing what went wrong.
Error shape
Branch on
statusCode, and on code where an endpoint documents one. Treat message as text for a human — it is written to be read, and its wording may change.
Status codes
404 versus 403
Tolmo returns 404 rather than 403 for a resource in an organization your token cannot access. This is deliberate: a 403 would confirm that the resource exists, which leaks information across organization boundaries.
So a 404 means one of two things, and the API will not tell you which:
- the id is wrong, or
- the resource belongs to an organization you cannot see.
403 behaves normally — it means your role is insufficient for this operation. Creating a finding as a published one with an ordinary member token returns 403; creating it as a draft succeeds.
Retrying
Retry503, and 429 if you receive one, with exponential backoff.
Do not blindly retry 400, 401, 403, or 404 — none of them will succeed on a second identical attempt.
Writes are not automatically idempotent. If a write times out and you cannot tell whether it landed, re-read the resource before sending it again rather than risking a duplicate.
Validation errors
Request validation runs from the same schemas that generate this reference, so a400 almost always means the request disagrees with a documented parameter or body schema.
Validation failures carry an extra validation array alongside the usual fields — one entry per offending field, so you can report every problem at once instead of fixing them one request at a time:
instancePath points at the field, keyword is the validation rule it broke, and params carries that rule’s bounds. Check the endpoint’s parameter table for each field’s type and limits.