NonWorkTimeBlockingPeriod
This method will get all NonWorkTimeBlockingPeriod Objects
GET/api/time/non_work_time_blocking_period
Query parameters
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
modestring | |
scopestring | |
maxDaysPerYearstring | Days per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules. |
quotaScopestring | Which days inside the period count towards the quota. Only meaningful together with maxDaysPerYear. |
requiresConsultationboolean | Days this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14). |
cancellationQuotaDaysstring | U21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit. |
cancellationRequiresWrittenApprovalboolean | U21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory). |
startstring | First blocked day (inclusive). |
endstring | Last blocked day (inclusive) - a one day block has start = end. |
employmentContractGroupstring | |
employmentOrganizationstring | All three references empty means the period applies to everyone. |
contractstring | |
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 NonWorkTimeBlockingPeriod objectsarray<NonWorkTimeBlockingPeriod>
Show fields (19)
levelintegerHow narrow the period is. The narrowest level with a matching period decides, so a single contract can carry an exception without touching the group or organization rule it sits under.
idintegerPrimary key of the blocking period. Internal ID.
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
employment_organizationEmploymentOrganizationAll three references empty means the period applies to everyone.
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
employment_contract_groupEmploymentContractGroupContract group the blocking period 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.
contractEmploymentContractContract the blocking period applies to.
Show fields (43)
staged_absence_approvalbooleannull inherits group then organization policy; existing installations stay off.
idintegerPrimary key of the employment contract. Internal ID.
tokenstringPublic token of the contract. Used instead of the ID.
userUser14Login user of the employee.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Total working days per week.
reserved_hours_preparationnumber (float)L03: weekly hours reserved for Vorbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_follow_upnumber (float)L03: weekly hours reserved for Nachbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_travelnumber (float)L03: weekly hours reserved for Fahrt - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_flexiblenumber (float)L03: weekly hours reserved for freie Einteilung - part of the contract hours but not plannable in the shift plan. null = none.
week_full_time_total_daysnumber (float)Total working days per week for a full-time contract.
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.
startstring (date-time)Start date of the contract.
endstring (date-time)End date of the contract.
fixed_term_statusstringBefristung: PERMANENT (unbefristet, default), FIXED_TERM or EXTENDED (FIXED_TERM_STATUS_*).
fixed_term_endstring (date-time)Befristet bis (erster Zeitraum).
fixed_term_extension_endstring (date-time)Befristet bis nach Verlängerung.
probation_endstring (date-time)Probezeit bis; filled from the template's probationMonths when a contract is created without it.
numberstringContract number.
descriptionstringDescription of the contract.
archivedbooleanThe contract is archived.
allow_app_time_trackingbooleanThe employee may track time in the app.
allow_scanner_time_trackingbooleanThe employee may track time with the scanner.
allow_app_non_work_time_managementbooleanThe employee may manage absences in the app.
force_no_auto_breakbooleanAutomatic breaks are not added for this contract.
work_time_modestringHow the target working time is defined - null behaves as WEEKDAY_HOURS so existing contracts keep their previous behaviour unchanged.
holiday_credit_modestringHoliday credit for WEEK_TOTAL contracts - null behaves as WEEKDAY_TARGET (previous behaviour, only meaningful for WEEKDAY_HOURS contracts).
holiday_credit_fixed_secondsintegerFixed holiday credit in seconds.
planning_weekdays_bitmaskintegerISO weekday bitmask (Mo=1 ... So=64) of the days this WEEK_TOTAL contract can be planned / takes vacation on - null behaves as Mo-Fr.
request_lead_time_daysintegerDays an absence request has to be handed in ahead of its first day ("Bearbeitungs- frist"). null falls back to the contract group and from there to the installation wide setting, so an existing contract keeps behaving exactly as before.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the group (which inherits the organisation).
search_stringstringText that the entity can be searched by.
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/non_work_time_blocking_period \
--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/non_work_time_blocking_period', 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/non_work_time_blocking_period"
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/non_work_time_blocking_period', [
'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/non_work_time_blocking_period"),
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/non_work_time_blocking_period")
.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/non_work_time_blocking_period"
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/non_work_time_blocking_period_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 NonWorkTimeBlockingPeriodController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"level": 1,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1,
"quota_scope": "string",
"requires_consultation": true
}
]Add a new NonWorkTimeBlockingPeriod
POST/api/time/non_work_time_blocking_period
Request body application/json
dataNonWorkTimeBlockingPeriod2Show fields (11)
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Add a new NonWorkTimeBlockingPeriodNonWorkTimeBlockingPeriod3
Show fields (19)
levelintegerHow narrow the period is. The narrowest level with a matching period decides, so a single contract can carry an exception without touching the group or organization rule it sits under.
idintegerPrimary key of the blocking period. Internal ID.
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
employment_organizationEmploymentOrganization2All three references empty means the period applies to everyone.
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
employment_contract_groupEmploymentContractGroupContract group the blocking period 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.
contractEmploymentContract2Contract the blocking period applies to.
Show fields (43)
staged_absence_approvalbooleannull inherits group then organization policy; existing installations stay off.
idintegerPrimary key of the employment contract. Internal ID.
tokenstringPublic token of the contract. Used instead of the ID.
userUser14Login user of the employee.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Total working days per week.
reserved_hours_preparationnumber (float)L03: weekly hours reserved for Vorbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_follow_upnumber (float)L03: weekly hours reserved for Nachbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_travelnumber (float)L03: weekly hours reserved for Fahrt - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_flexiblenumber (float)L03: weekly hours reserved for freie Einteilung - part of the contract hours but not plannable in the shift plan. null = none.
week_full_time_total_daysnumber (float)Total working days per week for a full-time contract.
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.
startstring (date-time)Start date of the contract.
endstring (date-time)End date of the contract.
fixed_term_statusstringBefristung: PERMANENT (unbefristet, default), FIXED_TERM or EXTENDED (FIXED_TERM_STATUS_*).
fixed_term_endstring (date-time)Befristet bis (erster Zeitraum).
fixed_term_extension_endstring (date-time)Befristet bis nach Verlängerung.
probation_endstring (date-time)Probezeit bis; filled from the template's probationMonths when a contract is created without it.
numberstringContract number.
descriptionstringDescription of the contract.
archivedbooleanThe contract is archived.
allow_app_time_trackingbooleanThe employee may track time in the app.
allow_scanner_time_trackingbooleanThe employee may track time with the scanner.
allow_app_non_work_time_managementbooleanThe employee may manage absences in the app.
force_no_auto_breakbooleanAutomatic breaks are not added for this contract.
work_time_modestringHow the target working time is defined - null behaves as WEEKDAY_HOURS so existing contracts keep their previous behaviour unchanged.
holiday_credit_modestringHoliday credit for WEEK_TOTAL contracts - null behaves as WEEKDAY_TARGET (previous behaviour, only meaningful for WEEKDAY_HOURS contracts).
holiday_credit_fixed_secondsintegerFixed holiday credit in seconds.
planning_weekdays_bitmaskintegerISO weekday bitmask (Mo=1 ... So=64) of the days this WEEK_TOTAL contract can be planned / takes vacation on - null behaves as Mo-Fr.
request_lead_time_daysintegerDays an absence request has to be handed in ahead of its first day ("Bearbeitungs- frist"). null falls back to the contract group and from there to the installation wide setting, so an existing contract keeps behaving exactly as before.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the group (which inherits the organisation).
search_stringstringText that the entity can be searched by.
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/non_work_time_blocking_period \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
mode: 'string',
scope: 'string',
max_days_per_year: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period', 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/non_work_time_blocking_period"
payload = { "data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 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/non_work_time_blocking_period', [
'body' => '{"data":{"name":"Beispiel","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","mode":"string","scope":"string","max_days_per_year":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/non_work_time_blocking_period"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period")
.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/non_work_time_blocking_period"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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/non_work_time_blocking_period_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/non_work_time_blocking_period.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await NonWorkTimeBlockingPeriodController.post(NonWorkTimeBlockingPeriod.fromJson({
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"level": 1,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1,
"quota_scope": "string",
"requires_consultation": true
}This method will get a single NonWorkTimeBlockingPeriod with the given id
GET/api/time/non_work_time_blocking_period/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single NonWorkTimeBlockingPeriodNonWorkTimeBlockingPeriod3
Show fields (19)
levelintegerHow narrow the period is. The narrowest level with a matching period decides, so a single contract can carry an exception without touching the group or organization rule it sits under.
idintegerPrimary key of the blocking period. Internal ID.
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
employment_organizationEmploymentOrganization2All three references empty means the period applies to everyone.
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
employment_contract_groupEmploymentContractGroupContract group the blocking period 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.
contractEmploymentContract2Contract the blocking period applies to.
Show fields (43)
staged_absence_approvalbooleannull inherits group then organization policy; existing installations stay off.
idintegerPrimary key of the employment contract. Internal ID.
tokenstringPublic token of the contract. Used instead of the ID.
userUser14Login user of the employee.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Total working days per week.
reserved_hours_preparationnumber (float)L03: weekly hours reserved for Vorbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_follow_upnumber (float)L03: weekly hours reserved for Nachbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_travelnumber (float)L03: weekly hours reserved for Fahrt - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_flexiblenumber (float)L03: weekly hours reserved for freie Einteilung - part of the contract hours but not plannable in the shift plan. null = none.
week_full_time_total_daysnumber (float)Total working days per week for a full-time contract.
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.
startstring (date-time)Start date of the contract.
endstring (date-time)End date of the contract.
fixed_term_statusstringBefristung: PERMANENT (unbefristet, default), FIXED_TERM or EXTENDED (FIXED_TERM_STATUS_*).
fixed_term_endstring (date-time)Befristet bis (erster Zeitraum).
fixed_term_extension_endstring (date-time)Befristet bis nach Verlängerung.
probation_endstring (date-time)Probezeit bis; filled from the template's probationMonths when a contract is created without it.
numberstringContract number.
descriptionstringDescription of the contract.
archivedbooleanThe contract is archived.
allow_app_time_trackingbooleanThe employee may track time in the app.
allow_scanner_time_trackingbooleanThe employee may track time with the scanner.
allow_app_non_work_time_managementbooleanThe employee may manage absences in the app.
force_no_auto_breakbooleanAutomatic breaks are not added for this contract.
work_time_modestringHow the target working time is defined - null behaves as WEEKDAY_HOURS so existing contracts keep their previous behaviour unchanged.
holiday_credit_modestringHoliday credit for WEEK_TOTAL contracts - null behaves as WEEKDAY_TARGET (previous behaviour, only meaningful for WEEKDAY_HOURS contracts).
holiday_credit_fixed_secondsintegerFixed holiday credit in seconds.
planning_weekdays_bitmaskintegerISO weekday bitmask (Mo=1 ... So=64) of the days this WEEK_TOTAL contract can be planned / takes vacation on - null behaves as Mo-Fr.
request_lead_time_daysintegerDays an absence request has to be handed in ahead of its first day ("Bearbeitungs- frist"). null falls back to the contract group and from there to the installation wide setting, so an existing contract keeps behaving exactly as before.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the group (which inherits the organisation).
search_stringstringText that the entity can be searched by.
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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period/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/non_work_time_blocking_period_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 NonWorkTimeBlockingPeriodController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"level": 1,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1,
"quota_scope": "string",
"requires_consultation": true
}Update a NonWorkTimeBlockingPeriod
PUT/api/time/non_work_time_blocking_period/{id}
Path parameters
idrequiredstring |
Request body application/json
dataNonWorkTimeBlockingPeriod2Show fields (11)
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a NonWorkTimeBlockingPeriodNonWorkTimeBlockingPeriod3
Show fields (19)
levelintegerHow narrow the period is. The narrowest level with a matching period decides, so a single contract can carry an exception without touching the group or organization rule it sits under.
idintegerPrimary key of the blocking period. Internal ID.
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
employment_organizationEmploymentOrganization2All three references empty means the period applies to everyone.
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
employment_contract_groupEmploymentContractGroupContract group the blocking period 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.
contractEmploymentContract2Contract the blocking period applies to.
Show fields (43)
staged_absence_approvalbooleannull inherits group then organization policy; existing installations stay off.
idintegerPrimary key of the employment contract. Internal ID.
tokenstringPublic token of the contract. Used instead of the ID.
userUser14Login user of the employee.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Total working days per week.
reserved_hours_preparationnumber (float)L03: weekly hours reserved for Vorbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_follow_upnumber (float)L03: weekly hours reserved for Nachbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_travelnumber (float)L03: weekly hours reserved for Fahrt - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_flexiblenumber (float)L03: weekly hours reserved for freie Einteilung - part of the contract hours but not plannable in the shift plan. null = none.
week_full_time_total_daysnumber (float)Total working days per week for a full-time contract.
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.
startstring (date-time)Start date of the contract.
endstring (date-time)End date of the contract.
fixed_term_statusstringBefristung: PERMANENT (unbefristet, default), FIXED_TERM or EXTENDED (FIXED_TERM_STATUS_*).
fixed_term_endstring (date-time)Befristet bis (erster Zeitraum).
fixed_term_extension_endstring (date-time)Befristet bis nach Verlängerung.
probation_endstring (date-time)Probezeit bis; filled from the template's probationMonths when a contract is created without it.
numberstringContract number.
descriptionstringDescription of the contract.
archivedbooleanThe contract is archived.
allow_app_time_trackingbooleanThe employee may track time in the app.
allow_scanner_time_trackingbooleanThe employee may track time with the scanner.
allow_app_non_work_time_managementbooleanThe employee may manage absences in the app.
force_no_auto_breakbooleanAutomatic breaks are not added for this contract.
work_time_modestringHow the target working time is defined - null behaves as WEEKDAY_HOURS so existing contracts keep their previous behaviour unchanged.
holiday_credit_modestringHoliday credit for WEEK_TOTAL contracts - null behaves as WEEKDAY_TARGET (previous behaviour, only meaningful for WEEKDAY_HOURS contracts).
holiday_credit_fixed_secondsintegerFixed holiday credit in seconds.
planning_weekdays_bitmaskintegerISO weekday bitmask (Mo=1 ... So=64) of the days this WEEK_TOTAL contract can be planned / takes vacation on - null behaves as Mo-Fr.
request_lead_time_daysintegerDays an absence request has to be handed in ahead of its first day ("Bearbeitungs- frist"). null falls back to the contract group and from there to the installation wide setting, so an existing contract keeps behaving exactly as before.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the group (which inherits the organisation).
search_stringstringText that the entity can be searched by.
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/non_work_time_blocking_period/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
mode: 'string',
scope: 'string',
max_days_per_year: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period/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/non_work_time_blocking_period/42"
payload = { "data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 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/non_work_time_blocking_period/42', [
'body' => '{"data":{"name":"Beispiel","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","mode":"string","scope":"string","max_days_per_year":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/non_work_time_blocking_period/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period/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/non_work_time_blocking_period/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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/non_work_time_blocking_period_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/non_work_time_blocking_period.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await NonWorkTimeBlockingPeriodController.put(NonWorkTimeBlockingPeriod.fromJson({
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"level": 1,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1,
"quota_scope": "string",
"requires_consultation": true
}Update a NonWorkTimeBlockingPeriod
PATCH/api/time/non_work_time_blocking_period/{id}
Path parameters
idrequiredstring |
Request body application/json
dataNonWorkTimeBlockingPeriod2Show fields (11)
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a NonWorkTimeBlockingPeriodNonWorkTimeBlockingPeriod3
Show fields (19)
levelintegerHow narrow the period is. The narrowest level with a matching period decides, so a single contract can carry an exception without touching the group or organization rule it sits under.
idintegerPrimary key of the blocking period. Internal ID.
startstring (date-time)First blocked day (inclusive).
endstring (date-time)Last blocked day (inclusive) - a one day block has start = end.
modestringMode of the blocking period, for example block or warn.
scopestringScope of the blocking period, for example group or contract.
max_days_per_yearintegerDays per calendar year that may still be taken inside this period before it decides anything at all. null keeps the period absolute - the previous and still default behaviour. A value turns the period from a wall into an allowance: "at most seven days outside the school holidays" is one period over the whole year with a quota of seven, not seven separate rules.
quota_scopestringWhich days inside the period count towards the quota. Only meaningful together with maxDaysPerYear.
requires_consultationbooleanDays this period counts (e.g. outside school holidays) may only be requested after a consultation with the responsible team lead; the request has to name it (U14).
cancellation_quota_daysintegerU21: how many already approved absence days a person may withdraw again inside this period per year (e.g. two days of the summer closure). null = no limit.
cancellation_requires_written_approvalbooleanU21: withdrawing approved days inside this period needs the written decision of the management step (comment mandatory).
employment_organizationEmploymentOrganization2All three references empty means the period applies to everyone.
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
employment_contract_groupEmploymentContractGroupContract group the blocking period 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.
contractEmploymentContract2Contract the blocking period applies to.
Show fields (43)
staged_absence_approvalbooleannull inherits group then organization policy; existing installations stay off.
idintegerPrimary key of the employment contract. Internal ID.
tokenstringPublic token of the contract. Used instead of the ID.
userUser14Login user of the employee.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Total working days per week.
reserved_hours_preparationnumber (float)L03: weekly hours reserved for Vorbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_follow_upnumber (float)L03: weekly hours reserved for Nachbereitung - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_travelnumber (float)L03: weekly hours reserved for Fahrt - part of the contract hours but not plannable in the shift plan. null = none.
reserved_hours_flexiblenumber (float)L03: weekly hours reserved for freie Einteilung - part of the contract hours but not plannable in the shift plan. null = none.
week_full_time_total_daysnumber (float)Total working days per week for a full-time contract.
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.
startstring (date-time)Start date of the contract.
endstring (date-time)End date of the contract.
fixed_term_statusstringBefristung: PERMANENT (unbefristet, default), FIXED_TERM or EXTENDED (FIXED_TERM_STATUS_*).
fixed_term_endstring (date-time)Befristet bis (erster Zeitraum).
fixed_term_extension_endstring (date-time)Befristet bis nach Verlängerung.
probation_endstring (date-time)Probezeit bis; filled from the template's probationMonths when a contract is created without it.
numberstringContract number.
descriptionstringDescription of the contract.
archivedbooleanThe contract is archived.
allow_app_time_trackingbooleanThe employee may track time in the app.
allow_scanner_time_trackingbooleanThe employee may track time with the scanner.
allow_app_non_work_time_managementbooleanThe employee may manage absences in the app.
force_no_auto_breakbooleanAutomatic breaks are not added for this contract.
work_time_modestringHow the target working time is defined - null behaves as WEEKDAY_HOURS so existing contracts keep their previous behaviour unchanged.
holiday_credit_modestringHoliday credit for WEEK_TOTAL contracts - null behaves as WEEKDAY_TARGET (previous behaviour, only meaningful for WEEKDAY_HOURS contracts).
holiday_credit_fixed_secondsintegerFixed holiday credit in seconds.
planning_weekdays_bitmaskintegerISO weekday bitmask (Mo=1 ... So=64) of the days this WEEK_TOTAL contract can be planned / takes vacation on - null behaves as Mo-Fr.
request_lead_time_daysintegerDays an absence request has to be handed in ahead of its first day ("Bearbeitungs- frist"). null falls back to the contract group and from there to the installation wide setting, so an existing contract keeps behaving exactly as before.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the group (which inherits the organisation).
search_stringstringText that the entity can be searched by.
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/non_work_time_blocking_period/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
mode: 'string',
scope: 'string',
max_days_per_year: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period/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/non_work_time_blocking_period/42"
payload = { "data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 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/non_work_time_blocking_period/42', [
'body' => '{"data":{"name":"Beispiel","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","mode":"string","scope":"string","max_days_per_year":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/non_work_time_blocking_period/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/non_work_time_blocking_period/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/non_work_time_blocking_period/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"mode\":\"string\",\"scope\":\"string\",\"max_days_per_year\":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/non_work_time_blocking_period/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"name": "Beispiel",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1
}
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"level": 1,
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"mode": "string",
"scope": "string",
"max_days_per_year": 1,
"quota_scope": "string",
"requires_consultation": true
}