Download OpenAPI specification:
Integration API for the SaaS.de HR and time-management platform: read employees' working-time accounts, presence and leave data, and record clock-in / clock-out bookings.
All endpoints live under the /rest context of your SaaS.de instance, e.g.
https://desktop.saas.de/rest/api/....
Every request is authenticated with an API key passed as a path segment (the {api}
parameter) — a company key for company-wide endpoints, or an employee key where
noted. Some endpoints additionally accept an employee email in the request body together
with the company key. The key is part of the URL: always call over HTTPS and keep it secret.
The newer Projects endpoints and POST /api/leave/types instead take the company api-key
and an employee email in the JSON request body (not the URL); the project endpoints
additionally require that employee to hold the project-management manager role.
YYYY-MM-DD; timestamps (e.g. the time field) are epoch milliseconds.POST /api/time/account takes a 1-based month
(1 = January); the v2 GET endpoints take a 0-based month (0 = January … 11 = December).
Each endpoint states its base.The API allows up to 60 requests per minute; exceeding this returns HTTP 429 (Too Many Requests).
Authentication or authorization failures return HTTP 403 with a text/plain body that is
either empty or one of the codes below. Successful responses that carry a code field use the
same table (code: 0 = OK). Some endpoints use 400, 401 or 404 instead — see each operation.
| Code | Meaning |
|---|---|
| 0 | OK |
| 1 | Employee not found |
| 2 | Company inactive |
| 3 | Authentication failed (invalid key) |
| 4 | Bad date / value could not be resolved |
| 7 | E-mail already in use |
| 8 | Missing module / license |
Returns the working-time account (target/actual/balance) of a single employee for a month, including that month's individual bookings. For the current month the totals are recalculated on each call.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| project | boolean Default: false Include the project name on each booking entry. |
| email required | string <email> E-mail of the employee whose account is requested. |
| year | integer Year. Accepts a number or a numeric string. Defaults to the current year. |
| month | integer [ 1 .. 12 ] Month, 1-based (1 = January). Accepts a number or a numeric string.
Defaults to the current month. A month in the future is rejected with 403 body |
{- "email": "max.mustermann@example.com",
- "year": 2026,
- "month": 6
}{- "code": 0,
- "time": 1718700000000,
- "today_soll": 480,
- "today_ist": 120,
- "list": [
- {
- "length": 480,
- "start": 1718611200000,
- "end": 1718640000000
}
], - "account_balance": 120,
- "account_soll": 9600,
- "account_ist": 9480,
- "account_surcharge": 0,
- "account_saldo": -120,
- "flexTime": 0,
- "PAYOFF_TIMEACCOUNT": 0,
- "TIMEACCOUNT_PAYOFF": 0,
- "OVERTIMEACCOUNT_TIMEACCOUNT": 0,
- "TIMEACCOUNT_OVERTIMEACCOUNT": 0
}Returns the target (soll) and actual (ist) minutes per day for a date range. With an
email only that employee is returned; otherwise all time-tracked employees of the company
(identified by the company key) are returned.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
string <email> Restrict the result to this employee. Omit to get the whole company (company key). | |
| start | string Start date |
| end | string End date |
{- "start": "2026-06-01",
- "end": "2026-06-03"
}{- "code": 0,
- "time": 1718700000000,
- "info": [
- {
- "employee": "Max Mustermann",
- "membercode": "123",
- "days": {
- "2026-06-01": {
- "ist": 480,
- "soll": 480,
- "count": 2
}, - "2026-06-02": {
- "ist": 455,
- "soll": 480,
- "count": 1
}
}
}
]
}Returns a per-employee presence and absence overview for the current day. With an email
only that employee is returned; otherwise the set of employees depends on the modules and
supervisor scope of the key owner. Detail fields (current booking, platform, device) are
only filled for the key owner or their supervisors. Send at least an empty JSON object {}.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
string <email> Restrict the overview to this employee. |
{- "email": "max.mustermann@example.com"
}{- "code": 0,
- "time": 1750334400000,
- "info": [
- {
- "employee": "Anna Schmidt",
- "uuid": "EXT-10293",
- "membercode": "00042",
- "department": "Vertrieb",
- "currentStart": "08:14",
- "currentProject": "Webshop Relaunch",
- "currentService": "Entwicklung",
- "lastTimestamp": "2026-06-19 08:14:03",
- "currentPlatform": "Browser",
- "currentDevice": "Chrome / macOS",
- "status": "green",
- "list": { }
}, - {
- "employee": "Bernd Klein",
- "uuid": "EXT-10311",
- "membercode": "00057",
- "department": "Buchhaltung",
- "currentStart": null,
- "currentProject": null,
- "currentService": null,
- "status": "blue",
- "list": {
- "1": {
- "publicholiday": false,
- "description": "Urlaub",
- "comment": "Sommerurlaub",
- "length": 1,
- "deputy": "c.mueller",
- "deputyName": "Carla Mueller",
- "halfDay": false,
- "firstDay": "2026-06-15",
- "firstDayPrint": "15.06.2026",
- "lastDay": "2026-06-26",
- "lastDayPrint": "26.06.2026",
- "status": "APPROVED"
}
}
}
]
}Returns, per employee, whether they are present on the given day and any absences (leave or
public holidays) for that day. With an email only that employee is returned; otherwise all
time-tracked employees of the company are returned.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
string <email> Restrict to this employee. Omit for the whole company (company key). | |
| day | string Day |
{- "day": "2026-06-18"
}{- "code": 0,
- "time": 1718700000000,
- "info": [
- {
- "employee": "Max Mustermann",
- "membercode": "123",
- "present": true,
- "list": {
- "property1": {
- "publicholiday": true,
- "description": "Urlaub",
- "comment": "string",
- "length": 1
}, - "property2": {
- "publicholiday": true,
- "description": "Urlaub",
- "comment": "string",
- "length": 1
}
}
}
]
}Records a time booking for a single employee.
come — clock in (optionally on a project/service)go — clock outstop — clock out and immediately clock back in (break / context switch)Returns true on success, false otherwise — e.g. an invalid company key, an unresolvable
employee, a come on a project without the project-management module, a plain come
without the time-tracking module, or a go/stop that is not currently possible (such
as clocking out when not clocked in). The request body is optional.
| action required | string Enum: "come" "go" "stop" The booking action. |
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| employee required | string The employee's API key or e-mail |
| device | string Free-text device label stored with the booking. Defaults to |
| comment | string |
| project | string External project id (for a project-based |
| service | string External service id (for a project-based |
{- "device": "Reception terminal",
- "comment": "Start of shift"
}trueReturns the working-time account of a single employee for a month.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| employee required | string The employee's API key or e-mail |
| year required | integer Example: 2026 |
| month required | integer [ 0 .. 11 ] Example: 5 Month, 0-based (0 = January … 11 = December). |
{- "employee": "string",
- "year": 0,
- "month": 0,
- "hasTime": true,
- "hasProject": true,
- "current": "string",
- "lastMonth": 0,
- "soll": 0,
- "ist": 0,
- "surcharge": 0,
- "saldo": 0,
- "saldo2": 0,
- "onWork": 0,
- "outOfWork": 0,
- "istOnWeekend": 0,
- "isReadOnly": true,
- "PAYOFF_TIMEACCOUNT": 0,
- "TIMEACCOUNT_PAYOFF": 0,
- "OVERTIMEACCOUNT_TIMEACCOUNT": 0,
- "TIMEACCOUNT_OVERTIMEACCOUNT": 0,
- "OVERTIMEACCOUNT_PAYOFF": 0,
- "PAYOFF_OVERTIMEACCOUNT": 0,
- "unpaidOvertime": 0,
- "autoOvertime": 0,
- "overtimeAccountMonth": 0,
- "overtimeAccount": 0,
- "today": {
- "ist": 0,
- "soll": 0
}, - "traffic": {
- "active": true,
- "color": "green",
- "colorOvertime": "green"
}, - "inactive": true,
- "start": "string",
- "end": "string",
- "list": [
- {
- "date": "string",
- "startDate": "string",
- "startTime": "string",
- "endDate": "string",
- "endTime": "string",
- "ist": 0,
- "pause": 0,
- "soll": 0,
- "sollType": "string",
- "surchargeMinutes": 0,
- "holidayType": "string",
- "comment": "string",
- "employeeUUID": "string",
- "employeeName": "string",
- "isDummy": 0,
- "status": "string",
- "uuid": "string"
}
]
}Returns the current time account of every employee in a department, keyed by the employee's login account (e-mail). Employees without a login account are omitted.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| department required | string Department API key. |
{- "anna.mueller@example.com": {
- "employee": "emp-ext-0001",
- "year": 0,
- "month": 0,
- "hasTime": true,
- "hasProject": false,
- "soll": 0,
- "ist": 0,
- "saldo": 0,
- "inactive": true,
- "traffic": {
- "active": false
}, - "list": [ ],
- "start": "2025-01-01",
- "end": null
}
}Returns one monthly time summary per active employee in the department for the requested month. The array is empty when the month is in the future or no employee qualifies.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| department required | string Department external id. |
| year required | integer Example: 2026 |
| month required | integer [ 0 .. 11 ] Example: 4 Month, 0-based (0 = January … 11 = December). |
[- {
- "name": "Anna Müller",
- "uuid": "e3a1c9f2-7b21-4d8e-9a0c-12ab34cd56ef",
- "employee": "e3a1c9f2-7b21-4d8e-9a0c-12ab34cd56ef",
- "year": 2026,
- "month": 4,
- "hasTime": true,
- "hasProject": false,
- "onWork": 20,
- "outOfWork": 1.5,
- "soll": 9600,
- "ist": 9720,
- "saldo": 240,
- "today": null,
- "traffic": {
- "active": true,
- "color": "green",
- "colorOvertime": "green"
}
}
]Adjusts an employee's extra-leave balance and records the change in the leave history.
A positive value pays leave in, a negative value pays it out.
Returns true on success, false otherwise — e.g. an invalid company key, an unknown
account, an employee of another company, a missing leave-management module, or an
unknown action. action must be present in the body.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| account required | string <email> E-mail of the employee. |
| action required | string Value: "extraleave" Only |
| value required | number Days to add (positive = pay in) or remove (negative = pay out). |
| year | integer Leave year. Defaults to the current year. |
| comment | string |
{- "account": "max.mustermann@example.com",
- "action": "extraleave",
- "value": 1.5,
- "year": 2026,
- "comment": "Bonus leave"
}trueBooks an absence (outside the regular leave workflow) for an employee. abscenceReasonUuid
and employeeUuid are required. Depending on the absence type a substitute
(replacementUuid) may be mandatory.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| abscenceReasonUuid required | string External id of the absence type / reason. |
| employeeUuid required | string External id of the employee to book for. |
| replacementUuid | string External id of the substitute (required for some absence types). |
| duration | integer Default: 1
|
| startDay | string Start date |
| endDay | string End date |
| planned | boolean Default: false |
| comment | string |
{- "abscenceReasonUuid": "ext-leave-type-1",
- "employeeUuid": "ext-emp-42",
- "duration": 1,
- "startDay": "2026-06-18",
- "endDay": "2026-06-20",
- "planned": false,
- "comment": "Family event"
}"success"Returns the leave records of all leave-managed employees that overlap the given month.
Note:
monthis 0-based (0 = January … 11 = December).
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| year required | integer Example: 2026 |
| month required | integer [ 0 .. 11 ] Example: 5 Month, 0-based (0 = January … 11 = December). |
[- {
- "start": "2026-06-01",
- "end": "2026-06-05",
- "length": 5,
- "type": "Urlaub",
- "status": "APPROVED",
- "employee": "Max Mustermann",
- "uuid": "string",
- "apiKey": "string"
}
]Returns a yearly leave overview for all leave-managed employees, plus a legend that resolves each leave-type id to its localized names.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
| year required | integer Example: 2026 |
{- "list": [
- {
- "name": "Erika Mustermann",
- "lastyear": 5,
- "expired": 0,
- "paidoff": 0,
- "leaveentitlement": 30,
- "extraleave": 1,
- "approved": 12,
- "requested": 2,
- "planned": 3,
- "remainingleave": 19,
- "3f8a1c2e-9b4d-4e6a-8c11-2a7e5d0b9f01": 14
}
], - "legende": {
- "3f8a1c2e-9b4d-4e6a-8c11-2a7e5d0b9f01": {
- "de": "Urlaub",
- "en": "Vacation"
}
}
}Returns every leave type configured for the company (vacation, sick leave, …). Requires the
Leave management module. Credentials (email + api-key) are sent in the request body.
Company api-key plus an employee email, sent in the JSON body.
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y"
}{- "code": 0,
- "time": 1718700000000,
- "list": [
- {
- "uuid": "string",
- "value": "string",
- "name": "string",
- "label": "string",
- "active": true,
- "blockade": true,
- "color": "string",
- "datevKey": "string",
- "maxCalendarDays": 0,
- "allowed": "string",
- "approve": "string",
- "used": true,
- "pos": 0,
- "lock": 0,
- "substituteType": "string",
- "obligationDeputy": true,
- "dutyComment": true,
- "allowPlanned": true,
- "defaultPlanned": true,
- "completely": true,
- "halfDay": true,
- "hourlyBasis": true
}
]
}Returns a list of single-entry objects mapping each employee's full name to the name of their main department.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
[- {
- "Max Mustermann": "Sales"
}, - {
- "Erika Musterfrau": "Engineering"
}
]Returns master data for every employee of the company. Employees without a login account are omitted.
| api required | string Example: c0mp4ny-4p1-k3y The API key — a company key for company-wide endpoints, or an employee key where noted. Keep it secret and send it over HTTPS only. |
[- {
- "personnelNumber": "1001",
- "mainDepartment": "Sales",
- "email": "max.mustermann@example.com",
- "givenName": "Max",
- "lastName": "Mustermann",
- "birthday": "1990-05-12",
- "joinDate": "2020-01-15",
- "dateOfSeparation": null,
- "RFID": "",
- "uuid": "ext-emp-42",
- "apiKey": "3mpl0y33-4p1-k3y"
}
]Project master data, sub-projects and project time bookings (project-management managers only).
Returns all non-removed projects of the company. Requires the Project management module and the manager role. Credentials are sent in the request body.
Company api-key plus an employee email, sent in the JSON body.
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y"
}{- "code": 0,
- "time": 1718700000000,
- "projects": [
- {
- "uuid": "string",
- "name": "string",
- "label": "string",
- "workingTime": 0,
- "parentUuid": "string",
- "startDate": 0,
- "completionDate": 0,
- "description": "string",
- "status": "string",
- "type": "string"
}
]
}Creates a new project for the company. Requires the Project management module and the
manager role. Optionally nest it under an existing parent via parentId (the parent's
UUID; omit or "0" for a top-level project).
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
required | object |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y",
- "project": {
- "name": "New website",
- "workingTime": 1200,
- "startDate": "2026-06-01",
- "completionDate": "2026-12-31",
- "description": "Relaunch of the corporate website"
}
}{- "code": 0,
- "time": 1718700000000,
- "uuid": "string"
}Deletes the project identified by its UUID. Requires the Project management module and
the manager role. The project must belong to the caller's company; an unknown or foreign
UUID is rejected with 403 body 3. Credentials are sent in the request body.
| uuid required | string Example: 3f2a9c10-7b4e-4f1a-9c2d-8e5b1a0d6f33 The project's external id (UUID). |
Company api-key plus an employee email, sent in the JSON body.
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y"
}{- "code": 0,
- "time": 1718700000000
}Returns the UUIDs of all non-removed projects of the company whose name matches name
exactly. Several equally named projects yield several UUIDs. Requires the Project
management module and the manager role.
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
| name required | string Exact project name to search for. |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y",
- "name": "New website"
}{- "code": 0,
- "time": 1718700000000,
- "projects": [
- "string"
]
}Returns the time bookings of the given project (and its sub-projects) within a date range.
The range may span at most one month (31 days) and startDate must not be after
endDate — otherwise the request is rejected with 403 body 4. Requires the Project
management module and the manager role.
| uuid required | string Example: 3f2a9c10-7b4e-4f1a-9c2d-8e5b1a0d6f33 The project's external id (UUID). |
| email required | string <email> E-mail of an employee of the company. |
| api-key required | string The company API key — sent in the body (not the URL) for these endpoints. |
| startDate required | string Start date |
| endDate required | string End date |
{- "email": "max.mustermann@example.com",
- "api-key": "c0mp4ny-4p1-k3y",
- "startDate": "2026-06-01",
- "endDate": "2026-06-30"
}{- "code": 0,
- "time": 1718700000000,
- "entries": [
- {
- "project": "string",
- "timerecording-uuid": "string",
- "start": 0,
- "end": 0,
- "comment": "string"
}
]
}Workspace shift schedules — read a week's shifts and create shifts (workspace API key).
Returns all shifts of a workspace (Arbeitsbereich) for the given ISO calendar week, together with the employees assigned to each shift. Authenticated with the workspace API key in the path — not a company or employee key.
| workspaceApi required | string Example: w0rksp4c3-4p1-k3y The workspace API key. Keep it secret and send it over HTTPS only. |
| year required | integer Example: 2026 ISO week-year (the year the week belongs to). |
| week required | integer [ 1 .. 53 ] Example: 28 ISO week number (1–53). |
{- "jahr": 2026,
- "kw": 28,
- "arbeitsbereich": "Empfang",
- "arbeitsbereich_id": "w0rksp4c3-ext-01",
- "schichten": [
- {
- "id": 12345,
- "start": "Wed Jul 08 06:00:00 UTC 2026",
- "end": "Wed Jul 08 14:00:00 UTC 2026",
- "kommentar": "Frühschicht",
- "soll_mitarbeiter": 2,
- "employeeNames": [
- "Max Mustermann",
- "Anna Müller"
], - "employees": [
- "ext-emp-42",
- "ext-emp-43"
], - "employeeAmount": 2
}
]
}Creates a single shift in a workspace (Arbeitsbereich) and optionally assigns employees to
it. Authenticated with the workspace API key, sent in the JSON body as workspace (not the
URL). Only employees of the workspace's own company are assigned; unknown or foreign employee
UUIDs are ignored.
Times are given as minutes after midnight. If endTime is not greater than startTime,
the shift is treated as an overnight shift and ends on the following day.
| workspace required | string The workspace API key (authenticates the request). |
| startDate | string Shift date |
| startTime required | integer Shift start as minutes after midnight (e.g. 360 = 06:00). |
| endTime required | integer Shift end as minutes after midnight (e.g. 840 = 14:00). If not greater than
|
| employeeAmount | integer Target number of employees for the shift. Defaults to 1. |
| comment | string Optional free-text comment. |
| projectUuid | string Optional UUID of a project to link the shift to. |
| employees | Array of strings Employee UUIDs to assign. Only employees of the workspace's own company are assigned. |
{- "workspace": "w0rksp4c3-4p1-k3y",
- "startDate": "2026-07-08",
- "startTime": 360,
- "endTime": 840,
- "employeeAmount": 2,
- "comment": "Frühschicht",
- "employees": [
- "ext-emp-42",
- "ext-emp-43"
]
}{- "success": true,
- "shift_id": 0
}