Hakuna Timer API
The single running timer for the authenticated user
The single running timer for the authenticated user
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/hakuna-timer-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: hakuna Time Tracking 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.'
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:
Client:
type: object
description: A client that projects belong to.
properties:
id:
type: string
name:
type: string
archived:
type: boolean
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
TimerInput:
type: object
properties:
start_time:
type: string
format: date-time
task_id:
type: string
project_id:
type: string
note:
type: string
Error:
type: object
description: JSON error object with a descriptive message.
properties:
message:
type: string
description: Human-readable description of the error.
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'
Task:
type: object
description: A categorization task.
properties:
id:
type: string
name:
type: string
archived:
type: boolean
responses:
Unauthorized:
description: The auth token is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnprocessableEntity:
description: The request payload failed validation.
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'
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.