Conventions
This content is not available in your language yet.
Wire format
Section intitulée « Wire format »- Encoding: UTF-8, content type
application/json. - Property naming:
snake_caseon the wire. (Internally we use C#PascalCase; the API serialization layer rewrites it.) nullfor “unset”, absent for “ignore on PATCH”. A PATCH that does not mention a field leaves that field untouched.
Dates and times
Section intitulée « Dates and times »- All timestamps are ISO 8601 with offset, e.g.
2026-05-19T14:32:00+02:00. - The API never returns naive times. If you receive a timestamp without an offset it is a bug — please report.
- Workspaces have a
timezonesetting used by the dashboard for day-bucketing. It does not affect the raw timestamps the API returns.
Pagination
Section intitulée « Pagination »List endpoints under /api/v1/... are cursor-paginated.
Request:
GET /api/v1/clients?limit=50&cursor=eyJuYW1lIjoiQWNtZSIsImlkIjoiZGVhZGJlZWYtLi4ifQ==Response:
{ "data": [ { "...": "..." } ], "page": { "next_cursor": "eyJuYW1lIjoiQmV0YSIsImlkIjoiYWFhYWFhYWEtLi4ifQ==", "has_more": true }}limit— optional, integer, default 50, max 200.cursor— opaque token from the previous response’spage.next_cursor. Do not parse it.- When
has_moreisfalse, the iteration is done.next_cursorwill be null.
HTTP semantics
Section intitulée « HTTP semantics »200 OK— successful GET / PATCH / DELETE (when returning a body).201 Created— successful POST that created a resource.204 No Content— successful DELETE without a body.404 Not Found— resource does not exist or the caller cannot see it. We do not differentiate the two (anti-enumeration).4xx— client error, see Errors.5xx— server error. Retry with backoff.