Skip to content

Conventions & errors

All endpoints live under https://app.todomino.eu/api. Requests and responses are JSON (Content-Type: application/json) unless stated otherwise. Authenticate with a personal access token.

  • IDs are UUIDs, generated by the server.
  • Timestamps are ISO-8601 instants in UTC, e.g. 2026-07-18T09:30:00Z.
  • Due dates are also instants; the web client stores them as midnight UTC of the chosen day (2026-08-01T00:00:00Z).
Field Values
Task/subtask status PENDING, DONE
Task priority LOW, NORMAL, HIGH, CRITICAL, or null
Member role OWNER, ADMIN, MEMBER

Tasks carry a version number. Full updates (PUT) must echo the version you last read; if someone else changed the task in between, the API answers 409 Conflict — re-read the task and reapply your change.

Mutating endpoints on tasks, subtasks, and lists accept an optional X-Op-Id header carrying a client-generated UUID. The same op id is executed exactly once: replays (e.g. a retry after a lost response) are acknowledged with the same status without re-executing, so offline clients can push queued operations safely. Creates sent with an op id must also carry a client-generated id in the body — the client already knows every id a replay would need. Deletes are idempotent by nature and need no op id.

Status Meaning
400 Malformed request (missing field, invalid value)
401 Missing or invalid token / not signed in
403 Authenticated, but your role does not allow this action
404 Not found — also returned for workspaces you are not a member of
409 Conflict: duplicate name, version mismatch, or duplicate attachment
413 Workspace storage limit reached

Error responses are Spring problem details; the HTTP status is the contract, the body text is informational and may change.