Create one or more time-off periods in a single request.
Provide exactly one of users or team:
users: create the same period for each resolved user. Inside users, provide exactly one identifier type — emails, slugs, or uuids — with up to 10 entries.
team: create the same period for every active member of a team. Identify the team by either team.uuid (the team’s UUID) or team.slug. Teams with more than 200 active members cannot be processed in a single request.
Overlap semantics: any existing period for a target user that overlaps the new date range is deleted and returned in the replaced array for that user; the entry’s status becomes replaced instead of created.
Authorization: the token’s owner must be allowed to edit schedules for each resolved user, otherwise that entry is reported as failed. The HTTP response is 200 if at least one period was created or replaced; 422 when none succeeded.
Every result entry always includes the target’s email, slug and uuid when the user resolves. For unresolved identifiers, only the field matching the lookup type is populated.
curl --request POST \
--url https://api.zeeg.me/v2/time-off \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"users": {
"emails": [
"lena.meier@horizondigital.de",
"tom.schmidt@horizondigital.de"
]
},
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04"
}
'{
"users": [
{
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"uuid": "Lena6mK2QwR9XPv",
"status": "created",
"period": {
"uuid": "01907f10-5b00-7b31-9cf0-1234567890ab",
"uri": "https://api.zeeg.me/v2/time-off/01907f10-5b00-7b31-9cf0-1234567890ab",
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04",
"startHalfDay": false,
"endHalfDay": false,
"startHalfDayCutoff": null,
"endHalfDayCutoff": null,
"note": null
},
"replaced": []
},
{
"email": "tom.schmidt@horizondigital.de",
"slug": "tom-schmidt",
"uuid": "TomXk3J8YqB1ZPN",
"status": "replaced",
"period": {
"uuid": "01907f10-5b00-7b31-9cf0-2222333344ff",
"uri": "https://api.zeeg.me/v2/time-off/01907f10-5b00-7b31-9cf0-2222333344ff",
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04",
"startHalfDay": false,
"endHalfDay": false,
"startHalfDayCutoff": null,
"endHalfDayCutoff": null,
"note": null
},
"replaced": [
"01907f10-5b00-7b31-9cf0-9999888877aa"
]
}
]
}vacation, out_of_office 255User-based target. Mutually exclusive with team. Provide exactly one of emails, slugs or uuids.
Half-day cutoff (HH:MM). Required when startHalfDay is true.
Half-day cutoff (HH:MM). Required when endHalfDay is true.
1000At least one period was created or replaced.
Hide child attributes
Target user's email, or the lookup key when resolution failed for an emails request.
Target user's slug, or the lookup key when resolution failed for a slugs request.
Target user's public UUID, or the lookup key when resolution failed for a uuids request.
created, replaced, failed The created time-off period. Present when status is created or replaced.
Hide child attributes
vacation, out_of_office UUIDs of pre-existing periods deleted due to overlap. Empty on created, non-empty on replaced, absent on failed.
Human-readable failure reason. Present only when status is failed.
curl --request POST \
--url https://api.zeeg.me/v2/time-off \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"users": {
"emails": [
"lena.meier@horizondigital.de",
"tom.schmidt@horizondigital.de"
]
},
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04"
}
'{
"users": [
{
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"uuid": "Lena6mK2QwR9XPv",
"status": "created",
"period": {
"uuid": "01907f10-5b00-7b31-9cf0-1234567890ab",
"uri": "https://api.zeeg.me/v2/time-off/01907f10-5b00-7b31-9cf0-1234567890ab",
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04",
"startHalfDay": false,
"endHalfDay": false,
"startHalfDayCutoff": null,
"endHalfDayCutoff": null,
"note": null
},
"replaced": []
},
{
"email": "tom.schmidt@horizondigital.de",
"slug": "tom-schmidt",
"uuid": "TomXk3J8YqB1ZPN",
"status": "replaced",
"period": {
"uuid": "01907f10-5b00-7b31-9cf0-2222333344ff",
"uri": "https://api.zeeg.me/v2/time-off/01907f10-5b00-7b31-9cf0-2222333344ff",
"type": "vacation",
"title": "Company offsite",
"startDate": "2026-09-01",
"endDate": "2026-09-04",
"startHalfDay": false,
"endHalfDay": false,
"startHalfDayCutoff": null,
"endHalfDayCutoff": null,
"note": null
},
"replaced": [
"01907f10-5b00-7b31-9cf0-9999888877aa"
]
}
]
}