Hakuna Management API
Admin-only management of projects, clients and tasks
Admin-only management of projects, clients and tasks
openapi: 3.0.3
info:
title: hakuna Time Tracking Absences Management 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: Management
description: Admin-only management of projects, clients and tasks
paths:
/management/projects:
get:
operationId: listManagedProjects
summary: List managed projects
tags:
- Management
responses:
'200':
description: A list of projects
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
post:
operationId: createManagedProject
summary: Create a project
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectInput'
responses:
'201':
description: Project created
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
/management/projects/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getManagedProject
summary: Get a project
tags:
- Management
responses:
'200':
description: The project
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
patch:
operationId: updateManagedProject
summary: Update a project
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectInput'
responses:
'200':
description: Project updated
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
delete:
operationId: deleteManagedProject
summary: Delete a project
tags:
- Management
responses:
'204':
description: Project deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
/management/clients:
get:
operationId: listManagedClients
summary: List managed clients
tags:
- Management
responses:
'200':
description: A list of clients
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Client'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
post:
operationId: createManagedClient
summary: Create a client
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClientInput'
responses:
'201':
description: Client created
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
/management/clients/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getManagedClient
summary: Get a client
tags:
- Management
responses:
'200':
description: The client
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
patch:
operationId: updateManagedClient
summary: Update a client
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClientInput'
responses:
'200':
description: Client updated
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
delete:
operationId: deleteManagedClient
summary: Delete a client
tags:
- Management
responses:
'204':
description: Client deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
/management/tasks:
get:
operationId: listManagedTasks
summary: List managed tasks
tags:
- Management
responses:
'200':
description: A list of tasks
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Task'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
post:
operationId: createManagedTask
summary: Create a task
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskInput'
responses:
'201':
description: Task created
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
/management/tasks/{id}:
parameters:
- $ref: '#/components/parameters/Id'
get:
operationId: getManagedTask
summary: Get a task
tags:
- Management
responses:
'200':
description: The task
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
patch:
operationId: updateManagedTask
summary: Update a task
tags:
- Management
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskInput'
responses:
'200':
description: Task updated
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/RateLimited'
delete:
operationId: deleteManagedTask
summary: Delete a task
tags:
- Management
responses:
'204':
description: Task deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
components:
parameters:
Id:
name: id
in: path
required: true
schema:
type: string
description: The unique identifier of the resource.
schemas:
Error:
type: object
description: JSON error object with a descriptive message.
properties:
message:
type: string
description: Human-readable description of the error.
Client:
type: object
description: A client that projects belong to.
properties:
id:
type: string
name:
type: string
archived:
type: boolean
Task:
type: object
description: A categorization task.
properties:
id:
type: string
name:
type: string
archived:
type: boolean
ProjectInput:
type: object
required:
- name
properties:
name:
type: string
client_id:
type: string
archived:
type: boolean
ClientInput:
type: object
required:
- name
properties:
name:
type: string
archived:
type: boolean
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'
TaskInput:
type: object
required:
- name
properties:
name:
type: string
archived:
type: boolean
responses:
Unauthorized:
description: The auth token is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
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.