Aller au contenu

Conventions

  • Encoding: UTF-8, content type application/json.
  • Property naming: snake_case on the wire. (Internally we use C# PascalCase; the API serialization layer rewrites it.)
  • null for “unset”, absent for “ignore on PATCH”. A PATCH that does not mention a field leaves that field untouched.
  • 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 timezone setting used by the dashboard for day-bucketing. It does not affect the raw timestamps the API returns.

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’s page.next_cursor. Do not parse it.
  • When has_more is false, the iteration is done. next_cursor will be null.
  • 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.