StaffingCoverageAlarm
Get a single StaffingCoverageAlarm
GET/api/time/staffing_coverage_alarm/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single StaffingCoverageAlarmStaffingCoverageAlarm
Show fields (14)
statusstringidintegerPrimary key of the staffing coverage alarm. Internal ID.
requirementStaffingRequirement4Staffing requirement that is not covered.
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
employment_organizationEmploymentOrganization6Organization the requirement applies to.
organization_unitOrganizationUnit6R7: a rule for a whole area (OrganizationUnit) - every group of every organisation in it or below it. Only without group and organisation, with staffing_organization_unit_enabled.
modestringMode of the requirement, for example minimum staff or exact staff.
weekdays_bitmaskintegerISO weekday bitmask the rule applies on (Mo=1 ... So=64).
start_timestringStart time of the requirement in HH:MM.
end_timestringEnd time of the requirement in HH:MM.
min_staff_countintegerMinimum number of staff needed.
buffer_staff_countintegerL51: people wanted on top of the minimum. Between minimum and minimum + buffer a self service request is either handed in with a hint for the approvers or refused, depending on bufferMode (L53). 0 = no buffer.
buffer_modestringL53: HINT (default) submits with a hint, BLOCK refuses a self service request that would drop the day below minimum + buffer.
required_qualificationEmploymentQualification8Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
valid_fromstring (date-time)Rule only applies from this date on (null = always).
valid_untilstring (date-time)Date until which the requirement is valid.
applies_on_holidaysbooleanWhether the rule also applies on public holidays of the calendar of its scope (group calendar, organisation calendar, main calendar). Off by default: a closed Kita or office would otherwise be reported understaffed on every holiday; a club or care home with holiday operation switches it on.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
datestring (date-time)Date of the alarm.
required_countintegerNumber of staff required.
covered_countintegerNumber of staff available.
sourcestringWORKER (daily scan) or APPROVAL (an approval dropped the day below the minimum).
requestNonWorkTimeRequest4The request whose approval raised the alarm, when it was one (L54).
Show fields (35)
overduebooleanU04: still waiting after the processing deadline.
approval_versionintegerVersion of the approval process.
change_modestringMode of a change to the request.
balance_override_reasonstringL11: why a planner approved this request although the projected vacation balance was negative.
coverage_override_reasonstringL54: why the approver accepted a day below the minimum staffing.
coverage_hintbooleanL53: handed in although it eats into the staffing buffer - the approvers see the hint.
sick_during_vacationbooleanU13: a sick report inside approved vacation - set by the server, shown as "während Urlaub".
consultation_notestringWho was consulted before requesting days a blocking period marks as consultation-only (U14).
daily_absence_start_timestringLocal daily absence window for half-day types; null preserves legacy planning.
daily_absence_end_timestringEnd time of daily absence.
idintegerPrimary key of the request. Internal ID.
userUser14User the request belongs to.
descriptionstringDescription of the request.
startstring (date-time)Start of the requested period.
start_datestringStart date of the requested period.
start_monthintegerStart month of the requested period.
start_yearintegerStart year of the requested period.
endstring (date-time)End of the requested period.
end_datestringEnd date of the requested period.
end_monthintegerEnd month of the requested period.
end_yearintegerEnd year of the requested period.
durationnumber (float)duration in days linked to NonWorkTimePlan - a half day type counts 0.5 (Z6)
statusstringStatus of the request.
content_typestringType of the request, e.g. vacation or absence.
secondary_content_typestringSecondary type of the request.
linked_content_typeNonWorkTimePlanSelectionType3Plan selection type linked to the request.
parent_requestNonWorkTimeRequest4The request this one changes ("Änderungsantrag zum Jahresurlaub"). A change request is an ordinary request in every other respect; the reference is what turns a second, unrelated looking request into a visible correction of the first - and what lets the days it withdraws be marked as withdrawn instead of merely refused.
annual_requestNonWorkTimeAnnualRequest7L47/L48: the annual plan ("Jahresurlaubsantrag") this period belongs to. The bundle is decided as a whole; the period stays an ordinary request in every other respect.
request_kindstringU02/U18: ANNUAL = period of the annual plan, SUPPLEMENT = Ergänzungsantrag for the held back flexible days. null = ordinary request.
processing_due_datestring (date-time)U04/U20: the day by which the request has to be decided, counted from its receipt.
escalated_atstring (date-time)U04: when the overdue escalation was sent; null = not (yet) escalated.
written_approval_reasonstringU21: why the management step with a written comment was added to this request (e.g. SUMMER_CANCELLATION); null = no extra written approval needed.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
notified_atstring (date-time)Time the alarm was sent.
resolved_atstring (date-time)Time the alarm was resolved.
acknowledged_atstring (date-time)Time the alarm was acknowledged.
acknowledged_by_userUser14Login user who acknowledged the alarm.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/staffing_coverage_alarm_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StaffingCoverageAlarmController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"status": "string",
"requirement": {
"id": 42,
"name": "Beispiel",
"employment_contract_group": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
},
"employment_organization": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"allow_app_time_tracking": true,
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": true,
"search_string": "string",
"deleted": true
},
"organization_unit": {
"id": 42,
"name": "Beispiel",
"path": "string",
"depth": 1,
"level": "string",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
},
"date": "2026-10-15T09:30:00+02:00",
"required_count": 1,
"covered_count": 1,
"source": "string",
"request": {
"id": 42,
"description": "Text",
"overdue": true,
"approval_version": 1,
"change_mode": "string",
"balance_override_reason": "string",
"coverage_override_reason": "string",
"coverage_hint": true,
"sick_during_vacation": true,
"consultation_note": "string"
},
"notified_at": "2026-10-15T09:30:00+02:00",
"resolved_at": "2026-10-15T09:30:00+02:00"
}Acknowledge an alarm (the office has seen it and is dealing with it)
PUT/api/time/staffing_coverage_alarm/{id}
Path parameters
idrequiredstring |
Request body application/json
dataStaffingCoverageAlarm2
Responses
200Acknowledge a StaffingCoverageAlarmStaffingCoverageAlarm
Show fields (14)
statusstringidintegerPrimary key of the staffing coverage alarm. Internal ID.
requirementStaffingRequirement4Staffing requirement that is not covered.
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
employment_organizationEmploymentOrganization6Organization the requirement applies to.
organization_unitOrganizationUnit6R7: a rule for a whole area (OrganizationUnit) - every group of every organisation in it or below it. Only without group and organisation, with staffing_organization_unit_enabled.
modestringMode of the requirement, for example minimum staff or exact staff.
weekdays_bitmaskintegerISO weekday bitmask the rule applies on (Mo=1 ... So=64).
start_timestringStart time of the requirement in HH:MM.
end_timestringEnd time of the requirement in HH:MM.
min_staff_countintegerMinimum number of staff needed.
buffer_staff_countintegerL51: people wanted on top of the minimum. Between minimum and minimum + buffer a self service request is either handed in with a hint for the approvers or refused, depending on bufferMode (L53). 0 = no buffer.
buffer_modestringL53: HINT (default) submits with a hint, BLOCK refuses a self service request that would drop the day below minimum + buffer.
required_qualificationEmploymentQualification8Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
valid_fromstring (date-time)Rule only applies from this date on (null = always).
valid_untilstring (date-time)Date until which the requirement is valid.
applies_on_holidaysbooleanWhether the rule also applies on public holidays of the calendar of its scope (group calendar, organisation calendar, main calendar). Off by default: a closed Kita or office would otherwise be reported understaffed on every holiday; a club or care home with holiday operation switches it on.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
datestring (date-time)Date of the alarm.
required_countintegerNumber of staff required.
covered_countintegerNumber of staff available.
sourcestringWORKER (daily scan) or APPROVAL (an approval dropped the day below the minimum).
requestNonWorkTimeRequest4The request whose approval raised the alarm, when it was one (L54).
Show fields (35)
overduebooleanU04: still waiting after the processing deadline.
approval_versionintegerVersion of the approval process.
change_modestringMode of a change to the request.
balance_override_reasonstringL11: why a planner approved this request although the projected vacation balance was negative.
coverage_override_reasonstringL54: why the approver accepted a day below the minimum staffing.
coverage_hintbooleanL53: handed in although it eats into the staffing buffer - the approvers see the hint.
sick_during_vacationbooleanU13: a sick report inside approved vacation - set by the server, shown as "während Urlaub".
consultation_notestringWho was consulted before requesting days a blocking period marks as consultation-only (U14).
daily_absence_start_timestringLocal daily absence window for half-day types; null preserves legacy planning.
daily_absence_end_timestringEnd time of daily absence.
idintegerPrimary key of the request. Internal ID.
userUser14User the request belongs to.
descriptionstringDescription of the request.
startstring (date-time)Start of the requested period.
start_datestringStart date of the requested period.
start_monthintegerStart month of the requested period.
start_yearintegerStart year of the requested period.
endstring (date-time)End of the requested period.
end_datestringEnd date of the requested period.
end_monthintegerEnd month of the requested period.
end_yearintegerEnd year of the requested period.
durationnumber (float)duration in days linked to NonWorkTimePlan - a half day type counts 0.5 (Z6)
statusstringStatus of the request.
content_typestringType of the request, e.g. vacation or absence.
secondary_content_typestringSecondary type of the request.
linked_content_typeNonWorkTimePlanSelectionType3Plan selection type linked to the request.
parent_requestNonWorkTimeRequest4The request this one changes ("Änderungsantrag zum Jahresurlaub"). A change request is an ordinary request in every other respect; the reference is what turns a second, unrelated looking request into a visible correction of the first - and what lets the days it withdraws be marked as withdrawn instead of merely refused.
annual_requestNonWorkTimeAnnualRequest7L47/L48: the annual plan ("Jahresurlaubsantrag") this period belongs to. The bundle is decided as a whole; the period stays an ordinary request in every other respect.
request_kindstringU02/U18: ANNUAL = period of the annual plan, SUPPLEMENT = Ergänzungsantrag for the held back flexible days. null = ordinary request.
processing_due_datestring (date-time)U04/U20: the day by which the request has to be decided, counted from its receipt.
escalated_atstring (date-time)U04: when the overdue escalation was sent; null = not (yet) escalated.
written_approval_reasonstringU21: why the management step with a written comment was added to this request (e.g. SUMMER_CANCELLATION); null = no extra written approval needed.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
notified_atstring (date-time)Time the alarm was sent.
resolved_atstring (date-time)Time the alarm was resolved.
acknowledged_atstring (date-time)Time the alarm was acknowledged.
acknowledged_by_userUser14Login user who acknowledged the alarm.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '{}'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
payload = {}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', [
'body' => '{}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42")
.put(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/staffing_coverage_alarm_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StaffingCoverageAlarmController.acknowledge(42);
if (result.success) {
print(result.data);
}{
"id": 42,
"status": "string",
"requirement": {
"id": 42,
"name": "Beispiel",
"employment_contract_group": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
},
"employment_organization": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"allow_app_time_tracking": true,
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": true,
"search_string": "string",
"deleted": true
},
"organization_unit": {
"id": 42,
"name": "Beispiel",
"path": "string",
"depth": 1,
"level": "string",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
},
"date": "2026-10-15T09:30:00+02:00",
"required_count": 1,
"covered_count": 1,
"source": "string",
"request": {
"id": 42,
"description": "Text",
"overdue": true,
"approval_version": 1,
"change_mode": "string",
"balance_override_reason": "string",
"coverage_override_reason": "string",
"coverage_hint": true,
"sick_during_vacation": true,
"consultation_note": "string"
},
"notified_at": "2026-10-15T09:30:00+02:00",
"resolved_at": "2026-10-15T09:30:00+02:00"
}Acknowledge an alarm (the office has seen it and is dealing with it)
PATCH/api/time/staffing_coverage_alarm/{id}
Path parameters
idrequiredstring |
Request body application/json
dataStaffingCoverageAlarm2
Responses
200Acknowledge a StaffingCoverageAlarmStaffingCoverageAlarm
Show fields (14)
statusstringidintegerPrimary key of the staffing coverage alarm. Internal ID.
requirementStaffingRequirement4Staffing requirement that is not covered.
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
employment_organizationEmploymentOrganization6Organization the requirement applies to.
organization_unitOrganizationUnit6R7: a rule for a whole area (OrganizationUnit) - every group of every organisation in it or below it. Only without group and organisation, with staffing_organization_unit_enabled.
modestringMode of the requirement, for example minimum staff or exact staff.
weekdays_bitmaskintegerISO weekday bitmask the rule applies on (Mo=1 ... So=64).
start_timestringStart time of the requirement in HH:MM.
end_timestringEnd time of the requirement in HH:MM.
min_staff_countintegerMinimum number of staff needed.
buffer_staff_countintegerL51: people wanted on top of the minimum. Between minimum and minimum + buffer a self service request is either handed in with a hint for the approvers or refused, depending on bufferMode (L53). 0 = no buffer.
buffer_modestringL53: HINT (default) submits with a hint, BLOCK refuses a self service request that would drop the day below minimum + buffer.
required_qualificationEmploymentQualification8Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
valid_fromstring (date-time)Rule only applies from this date on (null = always).
valid_untilstring (date-time)Date until which the requirement is valid.
applies_on_holidaysbooleanWhether the rule also applies on public holidays of the calendar of its scope (group calendar, organisation calendar, main calendar). Off by default: a closed Kita or office would otherwise be reported understaffed on every holiday; a club or care home with holiday operation switches it on.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
datestring (date-time)Date of the alarm.
required_countintegerNumber of staff required.
covered_countintegerNumber of staff available.
sourcestringWORKER (daily scan) or APPROVAL (an approval dropped the day below the minimum).
requestNonWorkTimeRequest4The request whose approval raised the alarm, when it was one (L54).
Show fields (35)
overduebooleanU04: still waiting after the processing deadline.
approval_versionintegerVersion of the approval process.
change_modestringMode of a change to the request.
balance_override_reasonstringL11: why a planner approved this request although the projected vacation balance was negative.
coverage_override_reasonstringL54: why the approver accepted a day below the minimum staffing.
coverage_hintbooleanL53: handed in although it eats into the staffing buffer - the approvers see the hint.
sick_during_vacationbooleanU13: a sick report inside approved vacation - set by the server, shown as "während Urlaub".
consultation_notestringWho was consulted before requesting days a blocking period marks as consultation-only (U14).
daily_absence_start_timestringLocal daily absence window for half-day types; null preserves legacy planning.
daily_absence_end_timestringEnd time of daily absence.
idintegerPrimary key of the request. Internal ID.
userUser14User the request belongs to.
descriptionstringDescription of the request.
startstring (date-time)Start of the requested period.
start_datestringStart date of the requested period.
start_monthintegerStart month of the requested period.
start_yearintegerStart year of the requested period.
endstring (date-time)End of the requested period.
end_datestringEnd date of the requested period.
end_monthintegerEnd month of the requested period.
end_yearintegerEnd year of the requested period.
durationnumber (float)duration in days linked to NonWorkTimePlan - a half day type counts 0.5 (Z6)
statusstringStatus of the request.
content_typestringType of the request, e.g. vacation or absence.
secondary_content_typestringSecondary type of the request.
linked_content_typeNonWorkTimePlanSelectionType3Plan selection type linked to the request.
parent_requestNonWorkTimeRequest4The request this one changes ("Änderungsantrag zum Jahresurlaub"). A change request is an ordinary request in every other respect; the reference is what turns a second, unrelated looking request into a visible correction of the first - and what lets the days it withdraws be marked as withdrawn instead of merely refused.
annual_requestNonWorkTimeAnnualRequest7L47/L48: the annual plan ("Jahresurlaubsantrag") this period belongs to. The bundle is decided as a whole; the period stays an ordinary request in every other respect.
request_kindstringU02/U18: ANNUAL = period of the annual plan, SUPPLEMENT = Ergänzungsantrag for the held back flexible days. null = ordinary request.
processing_due_datestring (date-time)U04/U20: the day by which the request has to be decided, counted from its receipt.
escalated_atstring (date-time)U04: when the overdue escalation was sent; null = not (yet) escalated.
written_approval_reasonstringU21: why the management step with a written comment was added to this request (e.g. SUMMER_CANCELLATION); null = no extra written approval needed.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
notified_atstring (date-time)Time the alarm was sent.
resolved_atstring (date-time)Time the alarm was resolved.
acknowledged_atstring (date-time)Time the alarm was acknowledged.
acknowledged_by_userUser14Login user who acknowledged the alarm.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '{}'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
payload = {}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42', [
'body' => '{}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42")
.patch(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.patch(
Uri.parse('https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({}),
);
print(response.body);{
"id": 42,
"status": "string",
"requirement": {
"id": 42,
"name": "Beispiel",
"employment_contract_group": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
},
"employment_organization": {
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"allow_app_time_tracking": true,
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": true,
"search_string": "string",
"deleted": true
},
"organization_unit": {
"id": 42,
"name": "Beispiel",
"path": "string",
"depth": 1,
"level": "string",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
},
"date": "2026-10-15T09:30:00+02:00",
"required_count": 1,
"covered_count": 1,
"source": "string",
"request": {
"id": 42,
"description": "Text",
"overdue": true,
"approval_version": 1,
"change_mode": "string",
"balance_override_reason": "string",
"coverage_override_reason": "string",
"coverage_hint": true,
"sick_during_vacation": true,
"consultation_note": "string"
},
"notified_at": "2026-10-15T09:30:00+02:00",
"resolved_at": "2026-10-15T09:30:00+02:00"
}List StaffingCoverageAlarm objects (open ones by default: pass resolved_at=null or a status filter)
GET/api/time/staffing_coverage_alarm
Query parameters
idinteger | |
requirementstring | |
datestring | |
sourcestring | WORKER (daily scan) or APPROVAL (an approval dropped the day below the minimum). |
notifiedAtstring | |
resolvedAtstring | |
acknowledgedAtstring | |
requeststring | The request whose approval raised the alarm, when it was one (L54). |
searchStringstring | text to search for in the list |
orderFieldNamestring | name of the order field |
orderFieldSortstring | sorting modeAllowed: DESCASC |
pageinteger | page of the list |
pageSizeinteger | number of entries for each page |
withMaxPageNumberstring | returns the number of pages available as a header if this is set |
Responses
200Returns a list of StaffingCoverageAlarm objectsarray<StaffingCoverageAlarm3>
Show fields (13)
statusstringidintegerPrimary key of the staffing coverage alarm. Internal ID.
requirementStaffingRequirement5Staffing requirement that is not covered.
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
employment_organizationEmploymentOrganization7Organization the requirement applies to.
organization_unitOrganizationUnitR7: a rule for a whole area (OrganizationUnit) - every group of every organisation in it or below it. Only without group and organisation, with staffing_organization_unit_enabled.
modestringMode of the requirement, for example minimum staff or exact staff.
weekdays_bitmaskintegerISO weekday bitmask the rule applies on (Mo=1 ... So=64).
start_timestringStart time of the requirement in HH:MM.
end_timestringEnd time of the requirement in HH:MM.
min_staff_countintegerMinimum number of staff needed.
buffer_staff_countintegerL51: people wanted on top of the minimum. Between minimum and minimum + buffer a self service request is either handed in with a hint for the approvers or refused, depending on bufferMode (L53). 0 = no buffer.
buffer_modestringL53: HINT (default) submits with a hint, BLOCK refuses a self service request that would drop the day below minimum + buffer.
required_qualificationEmploymentQualification9Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
valid_fromstring (date-time)Rule only applies from this date on (null = always).
valid_untilstring (date-time)Date until which the requirement is valid.
applies_on_holidaysbooleanWhether the rule also applies on public holidays of the calendar of its scope (group calendar, organisation calendar, main calendar). Off by default: a closed Kita or office would otherwise be reported understaffed on every holiday; a club or care home with holiday operation switches it on.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
datestring (date-time)Date of the alarm.
required_countintegerNumber of staff required.
covered_countintegerNumber of staff available.
sourcestringWORKER (daily scan) or APPROVAL (an approval dropped the day below the minimum).
notified_atstring (date-time)Time the alarm was sent.
resolved_atstring (date-time)Time the alarm was resolved.
acknowledged_atstring (date-time)Time the alarm was acknowledged.
acknowledged_by_userUser14Login user who acknowledged the alarm.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/time/staffing_coverage_alarm"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/staffing_coverage_alarm_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StaffingCoverageAlarmController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"status": "string",
"requirement": {
"id": 42,
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1,
"buffer_staff_count": 1,
"buffer_mode": "string",
"qualification_match_mode": "string"
},
"date": "2026-10-15T09:30:00+02:00",
"required_count": 1,
"covered_count": 1,
"source": "string",
"notified_at": "2026-10-15T09:30:00+02:00",
"resolved_at": "2026-10-15T09:30:00+02:00",
"acknowledged_at": "2026-10-15T09:30:00+02:00"
}
]