StaffingRequirement
This method will get all StaffingRequirement Objects
GET/api/time/staffing_requirement
Query parameters
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
modestring | |
bufferModestring | L53: HINT (default) submits with a hint, BLOCK refuses a self service request that would drop the day below minimum + buffer. |
employmentContractGroupstring | |
employmentOrganizationstring | |
organizationUnitstring | R7: 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. |
requiredQualificationstring | Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper). |
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 StaffingRequirement objectsarray<StaffingRequirement>
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
employment_organizationEmploymentOrganizationOrganization the requirement applies to.
Show fields (12)
staged_absence_approvalbooleannull inherits the organization policy (contracts); existing installations stay off.
idintegerPrimary key of the employment organization. Internal ID.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
school_holiday_regionSchoolHolidayRegionU09: the school calendar (Bundesland) of this organisation; groups may override it.
organization_unitOrganizationUnit4L01: the node of the organisation tree this organisation hangs on (Einrichtung, Bereich, Geschäftsstelle ...). Leaders of that node and of the nodes above lead this organisation as well.
shift_booking_syncbooleanL35: published shifts of this organisation's people appear as availabilities in the event/booking area and a shift may be turned into an appointment. null = off.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
include_in_auto_exportbooleanWhether the organization is included in the automatic export.
search_stringstringText that the entity can be searched by.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
organization_unitOrganizationUnit4R7: 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.
Show fields (11)
pathstringThe path label for pickers and lists: "Geschäftsstelle / Bereich Sport / Halle Nord".
depthintegeridintegerPrimary key of the organization unit. Internal ID.
levelstringThe tier this node stands for, free text (Geschäftsstelle, Bereich, Einrichtung, ...).
parentOrganizationUnit4Parent organization of the unit.
sort_orderintegerOrder among siblings.
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.
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_qualificationEmploymentQualification4Optional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
Show fields (7)
idintegerPrimary key of the employment qualification. Internal ID.
rankingintegerRanking within an equivalence network - a linked qualification with a higher or equal ranking also satisfies requirements for this qualification.
equivalent_qualificationsarray<EmploymentQualification4>Linked ("equivalent") qualifications. Kept symmetric by the controller: every link A->B is mirrored as B->A, the ranking decides which direction actually covers which.
qualification_groupEmploymentQualificationGroupL17/A06: the "drawer" this qualification belongs to. Members of one group cover each other's requirements within their ranking, like a direct link would.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
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.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/staffing_requirement \
--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_requirement', 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_requirement"
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_requirement', [
'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_requirement"),
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_requirement")
.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_requirement"
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_requirement_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 StaffingRequirementController.getAll();
if (result.success) {
print(result.data);
}[
{
"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
}
]Add a new StaffingRequirement
POST/api/time/staffing_requirement
Request body application/json
dataStaffingRequirement2Show fields (13)
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.
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.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Add a new StaffingRequirementStaffingRequirement3
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
employment_organizationEmploymentOrganization2Organization the requirement applies to.
Show fields (12)
staged_absence_approvalbooleannull inherits the organization policy (contracts); existing installations stay off.
idintegerPrimary key of the employment organization. Internal ID.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
school_holiday_regionSchoolHolidayRegionU09: the school calendar (Bundesland) of this organisation; groups may override it.
organization_unitOrganizationUnit5L01: the node of the organisation tree this organisation hangs on (Einrichtung, Bereich, Geschäftsstelle ...). Leaders of that node and of the nodes above lead this organisation as well.
shift_booking_syncbooleanL35: published shifts of this organisation's people appear as availabilities in the event/booking area and a shift may be turned into an appointment. null = off.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
include_in_auto_exportbooleanWhether the organization is included in the automatic export.
search_stringstringText that the entity can be searched by.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
organization_unitOrganizationUnit5R7: 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.
Show fields (13)
pathstringThe path label for pickers and lists: "Geschäftsstelle / Bereich Sport / Halle Nord".
depthintegeridintegerPrimary key of the organization unit. Internal ID.
levelstringThe tier this node stands for, free text (Geschäftsstelle, Bereich, Einrichtung, ...).
parentOrganizationUnit5Parent organization of the unit.
leadershiparray<CRMPerson10>Leaders of this node; they lead everything below it.
staffing_alarm_recipientsarray<CRMPerson10>R7: who is alerted when a staffing rule in this area falls below its minimum; empty = the next area above, in the end staffing_alarm_recipient_persons.
sort_orderintegerOrder among siblings.
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.
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_qualificationEmploymentQualificationOptional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
Show fields (7)
idintegerPrimary key of the employment qualification. Internal ID.
rankingintegerRanking within an equivalence network - a linked qualification with a higher or equal ranking also satisfies requirements for this qualification.
equivalent_qualificationsarray<EmploymentQualification>Linked ("equivalent") qualifications. Kept symmetric by the controller: every link A->B is mirrored as B->A, the ranking decides which direction actually covers which.
qualification_groupEmploymentQualificationGroupL17/A06: the "drawer" this qualification belongs to. Members of one group cover each other's requirements within their ranking, like a direct link would.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
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.
curl --request POST \
--url https://your-instance.iw-erp.de/api/time/staffing_requirement \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
mode: 'string',
weekdays_bitmask: 1,
start_time: 'string',
end_time: 'string',
min_staff_count: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/staffing_requirement', 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_requirement"
payload = { "data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/time/staffing_requirement', [
'body' => '{"data":{"name":"Beispiel","mode":"string","weekdays_bitmask":1,"start_time":"string","end_time":"string","min_staff_count":1}}',
'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.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/staffing_requirement"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
{
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, "{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_requirement")
.post(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_requirement"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
req, _ := http.NewRequest("POST", 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_requirement_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/staffing_requirement.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StaffingRequirementController.post(StaffingRequirement.fromJson({
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}));
if (result.success) {
print(result.data);
}{
"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,
"school_holiday_region": {
"id": 42,
"name": "Beispiel",
"region_code": "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"
},
"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"
},
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": 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
}This method will get a single StaffingRequirement with the given id
GET/api/time/staffing_requirement/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single StaffingRequirementStaffingRequirement3
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
employment_organizationEmploymentOrganization2Organization the requirement applies to.
Show fields (12)
staged_absence_approvalbooleannull inherits the organization policy (contracts); existing installations stay off.
idintegerPrimary key of the employment organization. Internal ID.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
school_holiday_regionSchoolHolidayRegionU09: the school calendar (Bundesland) of this organisation; groups may override it.
organization_unitOrganizationUnit5L01: the node of the organisation tree this organisation hangs on (Einrichtung, Bereich, Geschäftsstelle ...). Leaders of that node and of the nodes above lead this organisation as well.
shift_booking_syncbooleanL35: published shifts of this organisation's people appear as availabilities in the event/booking area and a shift may be turned into an appointment. null = off.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
include_in_auto_exportbooleanWhether the organization is included in the automatic export.
search_stringstringText that the entity can be searched by.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
organization_unitOrganizationUnit5R7: 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.
Show fields (13)
pathstringThe path label for pickers and lists: "Geschäftsstelle / Bereich Sport / Halle Nord".
depthintegeridintegerPrimary key of the organization unit. Internal ID.
levelstringThe tier this node stands for, free text (Geschäftsstelle, Bereich, Einrichtung, ...).
parentOrganizationUnit5Parent organization of the unit.
leadershiparray<CRMPerson10>Leaders of this node; they lead everything below it.
staffing_alarm_recipientsarray<CRMPerson10>R7: who is alerted when a staffing rule in this area falls below its minimum; empty = the next area above, in the end staffing_alarm_recipient_persons.
sort_orderintegerOrder among siblings.
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.
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_qualificationEmploymentQualificationOptional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
Show fields (7)
idintegerPrimary key of the employment qualification. Internal ID.
rankingintegerRanking within an equivalence network - a linked qualification with a higher or equal ranking also satisfies requirements for this qualification.
equivalent_qualificationsarray<EmploymentQualification>Linked ("equivalent") qualifications. Kept symmetric by the controller: every link A->B is mirrored as B->A, the ranking decides which direction actually covers which.
qualification_groupEmploymentQualificationGroupL17/A06: the "drawer" this qualification belongs to. Members of one group cover each other's requirements within their ranking, like a direct link would.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
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.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/staffing_requirement/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_requirement/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_requirement/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_requirement/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_requirement/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_requirement/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_requirement/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_requirement_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 StaffingRequirementController.get('42');
if (result.success) {
print(result.data);
}{
"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,
"school_holiday_region": {
"id": 42,
"name": "Beispiel",
"region_code": "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"
},
"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"
},
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": 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
}Update a StaffingRequirement
PUT/api/time/staffing_requirement/{id}
Path parameters
idrequiredstring |
Request body application/json
dataStaffingRequirement2Show fields (13)
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.
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.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a StaffingRequirementStaffingRequirement3
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
employment_organizationEmploymentOrganization2Organization the requirement applies to.
Show fields (12)
staged_absence_approvalbooleannull inherits the organization policy (contracts); existing installations stay off.
idintegerPrimary key of the employment organization. Internal ID.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
school_holiday_regionSchoolHolidayRegionU09: the school calendar (Bundesland) of this organisation; groups may override it.
organization_unitOrganizationUnit5L01: the node of the organisation tree this organisation hangs on (Einrichtung, Bereich, Geschäftsstelle ...). Leaders of that node and of the nodes above lead this organisation as well.
shift_booking_syncbooleanL35: published shifts of this organisation's people appear as availabilities in the event/booking area and a shift may be turned into an appointment. null = off.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
include_in_auto_exportbooleanWhether the organization is included in the automatic export.
search_stringstringText that the entity can be searched by.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
organization_unitOrganizationUnit5R7: 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.
Show fields (13)
pathstringThe path label for pickers and lists: "Geschäftsstelle / Bereich Sport / Halle Nord".
depthintegeridintegerPrimary key of the organization unit. Internal ID.
levelstringThe tier this node stands for, free text (Geschäftsstelle, Bereich, Einrichtung, ...).
parentOrganizationUnit5Parent organization of the unit.
leadershiparray<CRMPerson10>Leaders of this node; they lead everything below it.
staffing_alarm_recipientsarray<CRMPerson10>R7: who is alerted when a staffing rule in this area falls below its minimum; empty = the next area above, in the end staffing_alarm_recipient_persons.
sort_orderintegerOrder among siblings.
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.
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_qualificationEmploymentQualificationOptional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
Show fields (7)
idintegerPrimary key of the employment qualification. Internal ID.
rankingintegerRanking within an equivalence network - a linked qualification with a higher or equal ranking also satisfies requirements for this qualification.
equivalent_qualificationsarray<EmploymentQualification>Linked ("equivalent") qualifications. Kept symmetric by the controller: every link A->B is mirrored as B->A, the ranking decides which direction actually covers which.
qualification_groupEmploymentQualificationGroupL17/A06: the "drawer" this qualification belongs to. Members of one group cover each other's requirements within their ranking, like a direct link would.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
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.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/time/staffing_requirement/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
mode: 'string',
weekdays_bitmask: 1,
start_time: 'string',
end_time: 'string',
min_staff_count: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/staffing_requirement/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_requirement/42"
payload = { "data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
} }
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_requirement/42', [
'body' => '{"data":{"name":"Beispiel","mode":"string","weekdays_bitmask":1,"start_time":"string","end_time":"string","min_staff_count":1}}',
'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_requirement/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
{
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, "{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_requirement/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_requirement/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
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_requirement_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/staffing_requirement.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await StaffingRequirementController.put(StaffingRequirement.fromJson({
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}));
if (result.success) {
print(result.data);
}{
"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,
"school_holiday_region": {
"id": 42,
"name": "Beispiel",
"region_code": "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"
},
"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"
},
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": 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
}Update a StaffingRequirement
PATCH/api/time/staffing_requirement/{id}
Path parameters
idrequiredstring |
Request body application/json
dataStaffingRequirement2Show fields (13)
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.
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.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a StaffingRequirementStaffingRequirement3
Show fields (21)
idintegerPrimary key of the staffing requirement. Internal ID.
employment_contract_groupEmploymentContractGroupContract group the requirement applies to.
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
employment_organizationEmploymentOrganization2Organization the requirement applies to.
Show fields (12)
staged_absence_approvalbooleannull inherits the organization policy (contracts); existing installations stay off.
idintegerPrimary key of the employment organization. Internal ID.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
school_holiday_regionSchoolHolidayRegionU09: the school calendar (Bundesland) of this organisation; groups may override it.
organization_unitOrganizationUnit5L01: the node of the organisation tree this organisation hangs on (Einrichtung, Bereich, Geschäftsstelle ...). Leaders of that node and of the nodes above lead this organisation as well.
shift_booking_syncbooleanL35: published shifts of this organisation's people appear as availabilities in the event/booking area and a shift may be turned into an appointment. null = off.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
include_in_auto_exportbooleanWhether the organization is included in the automatic export.
search_stringstringText that the entity can be searched by.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
organization_unitOrganizationUnit5R7: 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.
Show fields (13)
pathstringThe path label for pickers and lists: "Geschäftsstelle / Bereich Sport / Halle Nord".
depthintegeridintegerPrimary key of the organization unit. Internal ID.
levelstringThe tier this node stands for, free text (Geschäftsstelle, Bereich, Einrichtung, ...).
parentOrganizationUnit5Parent organization of the unit.
leadershiparray<CRMPerson10>Leaders of this node; they lead everything below it.
staffing_alarm_recipientsarray<CRMPerson10>R7: who is alerted when a staffing rule in this area falls below its minimum; empty = the next area above, in the end staffing_alarm_recipient_persons.
sort_orderintegerOrder among siblings.
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.
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_qualificationEmploymentQualificationOptional qualification the counted people have to satisfy (equivalences and ranking are honoured by QualificationMatchHelper).
Show fields (7)
idintegerPrimary key of the employment qualification. Internal ID.
rankingintegerRanking within an equivalence network - a linked qualification with a higher or equal ranking also satisfies requirements for this qualification.
equivalent_qualificationsarray<EmploymentQualification>Linked ("equivalent") qualifications. Kept symmetric by the controller: every link A->B is mirrored as B->A, the ranking decides which direction actually covers which.
qualification_groupEmploymentQualificationGroupL17/A06: the "drawer" this qualification belongs to. Members of one group cover each other's requirements within their ranking, like a direct link would.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
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.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/time/staffing_requirement/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
mode: 'string',
weekdays_bitmask: 1,
start_time: 'string',
end_time: 'string',
min_staff_count: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/staffing_requirement/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_requirement/42"
payload = { "data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
} }
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_requirement/42', [
'body' => '{"data":{"name":"Beispiel","mode":"string","weekdays_bitmask":1,"start_time":"string","end_time":"string","min_staff_count":1}}',
'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_requirement/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
{
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, "{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/staffing_requirement/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_requirement/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"mode\":\"string\",\"weekdays_bitmask\":1,\"start_time\":\"string\",\"end_time\":\"string\",\"min_staff_count\":1}}")
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_requirement/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"name": "Beispiel",
"mode": "string",
"weekdays_bitmask": 1,
"start_time": "string",
"end_time": "string",
"min_staff_count": 1
}
}),
);
print(response.body);{
"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,
"school_holiday_region": {
"id": 42,
"name": "Beispiel",
"region_code": "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"
},
"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"
},
"shift_booking_sync": true,
"allow_scanner_time_tracking": true,
"allow_app_non_work_time_management": true,
"include_in_auto_export": 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
}