ShiftType
This method will get all ShiftType Objects
GET/api/time/shift_type
Query parameters
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
employmentContractGroupstring | Group this type belongs to (null = available for the whole organization / installation). |
employmentOrganizationstring | |
requiredQualificationstring | Default qualification requirement for shifts of this type. |
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 ShiftType objectsarray<ShiftType>
Show fields (17)
idintegerPrimary key of the shift type. Internal ID.
employment_contract_groupEmploymentContractGroupGroup this type belongs to (null = available for the whole organization / installation).
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 shift type belongs 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
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
required_qualificationEmploymentQualification4Default qualification requirement for shifts of this type.
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.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
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/shift_type \
--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/shift_type', 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/shift_type"
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/shift_type', [
'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/shift_type"),
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/shift_type")
.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/shift_type"
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/shift_type_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 ShiftTypeController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"short_name": "Beispiel",
"color": "#3f5efb",
"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
},
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1,
"required_qualification": {
"id": 42,
"name": "Beispiel",
"ranking": 1,
"search_string": "string",
"deleted": true
}
}
]Add a new ShiftType
POST/api/time/shift_type
Request body application/json
dataShiftType2Show fields (10)
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Add a new ShiftTypeShiftType3
Show fields (17)
idintegerPrimary key of the shift type. Internal ID.
employment_contract_groupEmploymentContractGroupGroup this type belongs to (null = available for the whole organization / installation).
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 shift type belongs 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
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
required_qualificationEmploymentQualificationDefault qualification requirement for shifts of this type.
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.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
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/shift_type \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
short_name: 'Beispiel',
color: '#3f5efb',
name: 'Beispiel',
start_time: 'string',
end_time: 'string',
break_duration_seconds: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/shift_type', 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/shift_type"
payload = { "data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 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/shift_type', [
'body' => '{"data":{"short_name":"Beispiel","color":"#3f5efb","name":"Beispiel","start_time":"string","end_time":"string","break_duration_seconds":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/shift_type"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/shift_type")
.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/shift_type"
payload := strings.NewReader("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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/shift_type_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/shift_type.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ShiftTypeController.post(ShiftType.fromJson({
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"short_name": "Beispiel",
"color": "#3f5efb",
"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
},
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1,
"required_qualification": {
"id": 42,
"name": "Beispiel",
"ranking": 1,
"qualification_group": {
"id": 42,
"name": "Beispiel",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"search_string": "string",
"deleted": true
}
}This method will get a single ShiftType with the given id
GET/api/time/shift_type/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single ShiftTypeShiftType3
Show fields (17)
idintegerPrimary key of the shift type. Internal ID.
employment_contract_groupEmploymentContractGroupGroup this type belongs to (null = available for the whole organization / installation).
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 shift type belongs 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
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
required_qualificationEmploymentQualificationDefault qualification requirement for shifts of this type.
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.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
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/shift_type/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/shift_type/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/shift_type/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/shift_type/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/shift_type/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/shift_type/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/shift_type/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/shift_type_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 ShiftTypeController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"short_name": "Beispiel",
"color": "#3f5efb",
"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
},
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1,
"required_qualification": {
"id": 42,
"name": "Beispiel",
"ranking": 1,
"qualification_group": {
"id": 42,
"name": "Beispiel",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"search_string": "string",
"deleted": true
}
}Update a ShiftType
PUT/api/time/shift_type/{id}
Path parameters
idrequiredstring |
Request body application/json
dataShiftType2Show fields (10)
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a ShiftTypeShiftType3
Show fields (17)
idintegerPrimary key of the shift type. Internal ID.
employment_contract_groupEmploymentContractGroupGroup this type belongs to (null = available for the whole organization / installation).
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 shift type belongs 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
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
required_qualificationEmploymentQualificationDefault qualification requirement for shifts of this type.
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.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
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/shift_type/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
short_name: 'Beispiel',
color: '#3f5efb',
name: 'Beispiel',
start_time: 'string',
end_time: 'string',
break_duration_seconds: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/shift_type/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/shift_type/42"
payload = { "data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 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/shift_type/42', [
'body' => '{"data":{"short_name":"Beispiel","color":"#3f5efb","name":"Beispiel","start_time":"string","end_time":"string","break_duration_seconds":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/shift_type/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/shift_type/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/shift_type/42"
payload := strings.NewReader("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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/shift_type_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/shift_type.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await ShiftTypeController.put(ShiftType.fromJson({
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"short_name": "Beispiel",
"color": "#3f5efb",
"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
},
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1,
"required_qualification": {
"id": 42,
"name": "Beispiel",
"ranking": 1,
"qualification_group": {
"id": 42,
"name": "Beispiel",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"search_string": "string",
"deleted": true
}
}Update a ShiftType
PATCH/api/time/shift_type/{id}
Path parameters
idrequiredstring |
Request body application/json
dataShiftType2Show fields (10)
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
qualification_match_modestringL18: EXACT demands the required qualification itself; EQUIVALENT (default, previous behaviour) also accepts linked or same-group qualifications with sufficient ranking.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
Responses
200Update a ShiftTypeShiftType3
Show fields (17)
idintegerPrimary key of the shift type. Internal ID.
employment_contract_groupEmploymentContractGroupGroup this type belongs to (null = available for the whole organization / installation).
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 shift type belongs 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
short_namestringShort code for grids and print ("F", "S", "N").
start_timestringDefault start time as HH:MM.
end_timestringDefault end time as HH:MM - an end time before the start time means the shift ends on the following day (night shift).
break_duration_secondsintegerBreak duration of the shift in seconds.
colorstringColor of the shift type in the shift plan, as hex code.
required_qualificationEmploymentQualificationDefault qualification requirement for shifts of this type.
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.
default_staff_countintegerDefault number of staff needed for the shift.
sort_orderintegerSort order of the shift type in lists.
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/shift_type/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
short_name: 'Beispiel',
color: '#3f5efb',
name: 'Beispiel',
start_time: 'string',
end_time: 'string',
break_duration_seconds: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/shift_type/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/shift_type/42"
payload = { "data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 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/shift_type/42', [
'body' => '{"data":{"short_name":"Beispiel","color":"#3f5efb","name":"Beispiel","start_time":"string","end_time":"string","break_duration_seconds":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/shift_type/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/shift_type/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/shift_type/42"
payload := strings.NewReader("{\"data\":{\"short_name\":\"Beispiel\",\"color\":\"#3f5efb\",\"name\":\"Beispiel\",\"start_time\":\"string\",\"end_time\":\"string\",\"break_duration_seconds\":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/shift_type/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"short_name": "Beispiel",
"color": "#3f5efb",
"name": "Beispiel",
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1
}
}),
);
print(response.body);{
"id": 42,
"short_name": "Beispiel",
"color": "#3f5efb",
"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
},
"start_time": "string",
"end_time": "string",
"break_duration_seconds": 1,
"required_qualification": {
"id": 42,
"name": "Beispiel",
"ranking": 1,
"qualification_group": {
"id": 42,
"name": "Beispiel",
"sort_order": 1,
"search_string": "string",
"deleted": true,
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
},
"search_string": "string",
"deleted": true
}
}