API Overview
Versioning
All endpoints live under /api/v1. Breaking changes increment to /api/v2. Additive changes (new fields, new endpoints) do not bump the version.
Base URL
https://{project}-api.{domain}/api/v1
For local development with Docker Compose:
http://localhost:8000/api/v1
Content Types
- Requests:
application/json(ormultipart/form-datafor uploads). - Responses:
application/json.
Pagination
Cursor pagination on list endpoints:
GET /api/v1/attendances?limit=50&cursor=eyJpZCI6MTAwfQ
Response envelope:
{
"data": [ /* ... */ ],
"meta": {
"next_cursor": "eyJpZCI6MTUwfQ",
"limit": 50
}
}
Timestamps
- All timestamps are ISO-8601 in UTC:
2026-04-23T09:05:12Z. - The Flutter and React clients render them in the unit's timezone.
Idempotency
Write endpoints accept an optional Idempotency-Key header. When present, the server dedupes requests with the same key within a 24-hour window.
Health
GET /up → 200 "healthy"
GET /api/v1/ping → 200 { "now": "2026-04-23T09:05:12Z" }