Skip to main content
Every response uses the same envelope, whether it succeeded or not.
Branch on success, not on the status code alone, and read code rather than message when handling failures. Messages are written for humans and can be reworded; codes are stable.

List responses

Endpoints returning a list add pages: how many pages exist at the current page size. There’s no total item count, so page until you reach it.
See Filtering & Sorting for narrowing, ordering and paging those results.

Errors

code is a stable PascalCase identifier: AccessDenied, NotFound, ObjectConflict, ValidationError, UpgradeRequired and so on.

Validation errors

Validation failures add invalidFields, one entry per problem, each formatted Field: what's wrong:
Surface these to whoever submitted the data - they name the field and the rule it broke.

HTTP status codes

Retrying

Retry 429 and 5xx with increasing delays rather than immediately. Don’t retry 4xx responses other than 429 - the request will fail the same way until you change it. If a 5xx persists, check status.komerza.com before digging into your own code.

Every error code

The full list of code values, what triggers each and how to recover.
Last modified on August 2, 2026