openapi: 3.0.3 info: title: hakuna Time Tracking Absences Timer API description: 'The hakuna REST API provides programmatic access to the hakuna time-tracking and personnel-management platform: the running timer, time entries, absences, projects, tasks, clients, users, and account-wide company settings. Personal endpoints act in the context of the authenticated user; management endpoints require an admin token and the organization endpoint requires an organization-level token. All requests and responses are JSON. Generated by the API Evangelist enrichment pipeline from the published API documentation; not an official hakuna machine-readable specification.' version: v1 x-apievangelist-generated: '2026-07-19' x-apievangelist-method: generated x-apievangelist-source: https://app.hakuna.ch/api_docs contact: name: hakuna Support url: https://www.hakuna.ch/kontakt termsOfService: https://www.hakuna.ch/rechtliches/agb servers: - url: https://app.hakuna.ch/api/v1 description: Production security: - AuthToken: [] tags: - name: Timer description: The single running timer for the authenticated user paths: /timer: get: operationId: getTimer summary: Get the running timer description: Retrieve the currently running timer for the authenticated user, if any. tags: - Timer responses: '200': description: The running timer content: application/json: schema: $ref: '#/components/schemas/Timer' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' post: operationId: startTimer summary: Start the timer description: Start a new timer for the authenticated user. tags: - Timer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TimerInput' responses: '201': description: Timer started content: application/json: schema: $ref: '#/components/schemas/Timer' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/RateLimited' put: operationId: updateTimer summary: Update the running timer description: Update attributes of the currently running timer. tags: - Timer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TimerInput' responses: '200': description: Timer updated content: application/json: schema: $ref: '#/components/schemas/Timer' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/RateLimited' delete: operationId: stopTimer summary: Stop the timer description: Stop the currently running timer, converting it into a time entry. tags: - Timer responses: '200': description: Timer stopped '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' components: schemas: Error: type: object description: JSON error object with a descriptive message. properties: message: type: string description: Human-readable description of the error. Task: type: object description: A categorization task. properties: id: type: string name: type: string archived: type: boolean Client: type: object description: A client that projects belong to. properties: id: type: string name: type: string archived: type: boolean TimerInput: type: object properties: start_time: type: string format: date-time task_id: type: string project_id: type: string note: type: string Project: type: object description: A project that time can be tracked against. properties: id: type: string name: type: string archived: type: boolean client: $ref: '#/components/schemas/Client' Timer: type: object description: The running timer for a user. properties: start_time: type: string format: date-time duration: type: string task: $ref: '#/components/schemas/Task' project: $ref: '#/components/schemas/Project' note: type: string responses: Unauthorized: description: The auth token is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Too many requests. Limited to 100 requests per minute per customer. headers: X-RateLimit-Limit: schema: type: integer description: Maximum requests allowed in the window. X-RateLimit-Remaining: schema: type: integer description: Requests remaining in the current window. X-RateLimit-Reset: schema: type: integer description: Seconds until the window resets. Retry-After: schema: type: integer description: Seconds to wait before retrying. content: application/json: schema: $ref: '#/components/schemas/Error' UnprocessableEntity: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: AuthToken: type: apiKey in: header name: X-Auth-Token description: Personal API token managed under "My Settings". Organization endpoints require a separate organization-level token; management endpoints require an admin token.