Absences
Valid Attributes
Section titled “Valid Attributes”| Attribute | Description | Details |
|---|---|---|
| user_id | The ID of the user to whom the absence belongs. | Must be set |
| absence_type_id | The ID of the absence type of this absence. | Must be set |
| confirmations_count | The number of confirmations that this absence has received | Cannot be set |
| starts_at | The start date of the absence. | Must be set (format: YYYY-MM-DD) |
| ends_at | The end date of the absence. | Must be set; must be >= starts_at |
| status | The status of the absence entry. | Cannot be set; defaults to created (options: created, confirmed, rejected) |
The following relationships can be included in requests:
| Relationship | Type |
|---|---|
| absence_type | belongs_to |
| user | belongs_to |
Meta data: Permissions
| Group | Description |
|---|---|
| actions | Indicates whether the user can edit or delete the absence itself, and whether they can create (confirm.create — confirm or reject) or discard (confirm.delete — reset) an absence confirmation |
Create
Section titled “Create”HTTP Request
Section titled “HTTP Request”POST /api/v1/absences
Example request:
{ "data": { "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "starts_at": "2025-10-02", "ends_at": "2025-10-06" } }}Example response:
{ "data": { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-10-02", "ends_at": "2025-10-06", "status": "created" } }}This endpoint creates a new absence entry. Additionally, if the absence type is
linked to a quota type, an absence_quota_transaction of type reserve is
created.
Note: Overlapping absences for the same absence_type and user are not
allowed.
Update
Section titled “Update”Example request:
{ "data": { "type": "absence", "attributes": { "ends_at": "2025-10-10" } }}Example response:
{ "data": { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-10-02", "ends_at": "2025-10-10", "status": "created" } }}This endpoint updates an absence entry. If the absence type is linked to a quota
type, absence_quota_transactions are created accordingly.
Quota Transaction Behavior on Update
Section titled “Quota Transaction Behavior on Update”If the absence was previously reserved, the existing reserve transaction is
handled based on the update:
When updating duration (same quota type):
- A
cancel_reservetransaction is created for the previous reservation. - A new
reservetransaction is created reflecting the updated duration.
When changing to an absence type with another quota type:
- A
cancel_reservetransaction is created for the previous quota. - A new
reservetransaction is created for the new quota.
When changing to an absence type without a quota type:
- A
cancel_reservetransaction is created for the previous quota.
HTTP Request
Section titled “HTTP Request”PUT /api/v1/absences/:absence_id
URL Parameters
Section titled “URL Parameters”| Parameter | Description |
|---|---|
| absence_id | ID of the absence to be updated |
Example response:
{ "data": { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-10-02", "ends_at": "2025-10-06", "status": "created" } }}This endpoint returns an absence entry.
HTTP Request
Section titled “HTTP Request”GET /api/v1/absences/:absence_id
URL Parameters
Section titled “URL Parameters”| Parameter | Description |
|---|---|
| absence_id | ID of the absence to return |
Example response:
{ "data": [ { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-10-02", "ends_at": "2025-10-06", "status": "created" } }, { ... } ]}This endpoint returns absence entries.
HTTP Request
Section titled “HTTP Request”GET /api/v1/absences
Delete
Section titled “Delete”Example response:
{ "data": { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-10-02", "ends_at": "2025-10-06", "status": "confirmed", "discarded_at": "2025-10-13T11:30:00Z" } }}This endpoint deletes an absence.
HTTP Request
Section titled “HTTP Request”DELETE /api/v1/absences/:absence_id
URL Parameters
Section titled “URL Parameters”| Parameter | Description |
|---|---|
| absence_id | ID of the absence to delete |
List Absences Alongside the Associated Users
Section titled “List Absences Alongside the Associated Users”Example response:
{ "data": [ { "id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "type": "user", "attributes": { "avatar": "avatar/a376ad73-665f-455c-87ef-db2d69bc8aac.png", "name": "Tatjana Schubert", "status": "active" } }, ... ] "included": [ { "id": "a6e9e2f8-5b4e-4a4b-8c7e-6a5b85a3c2b1", "type": "absence", "attributes": { "user_id": "9f8d7c6b-5a4e-3d2c-1b0a-9e8f7d6c5b4a", "absence_type_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "confirmations_count": 0, "starts_at": "2025-12-24", "ends_at": "2026-01-05", "status": "created" } }, { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "type": "absence_type", "attributes": { "account_id": "63c0885f-777a-4a6c-bf95-4aa388f877e7", "active": true, "discarded_at": null, "name": "Vacation", "quota_type_id": null, "required_confirmation_count": 2, } }, ... ]}This endpoint returns users including all their absences that lie (at least partially) in a certain date range, sorted by the users’ names.
Absences (and their linked absence types) are included by default, so there is
no need to specify ?include=absences or ?include=absences.absence_types.
To use the endpoint, the requesting user needs permission to read absence types. Additionally, only users are being returned for whom the requesting user has the rights to both read the user and to read the absences of that user.
This endpoint uses keyset-based pagination - refer to our pagination documentation for more details.
HTTP Request
Section titled “HTTP Request”GET /api/v1/user_absences
Query Parameters
Section titled “Query Parameters”The following query parameters are mandatory:
| Parameter | Description |
|---|---|
| absence_range_start | Start date of the date range for which to include absences. |
| absence_range_end | End date (inclusive) of the date range for which to include absences. |
Example:
GET /api/v1/user_absences?absence_range_start=2026-01-01&absence_range_end=2026-01-07