EmploymentContractChangeRequest
This method will get all EmploymentContractChangeRequest Objects. Without HR read access a lead gets the requests of the contracts they lead; with the contract parameter the caller has to lead (or own) that contract.
GET/api/time/employment_contract_change_request
Query parameters
idinteger | |
contractstring | |
statusstring | |
startstring | First day the new distribution applies; always a month start beyond the change deadline. |
requestedByUserstring | |
requestedByPersonstring | |
decidedByUserstring | |
autoAppliedboolean | True when the confirmation happened without an HR decision (unchanged weekly total, installation setting). |
createdstring | |
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 EmploymentContractChangeRequest objectsarray<EmploymentContractChangeRequest>
Show fields (25)
requested_by_namestringidintegerPrimary key of the contract change request. Internal ID.
contractEmploymentContract3Contract the change 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.
requested_by_userUser14Login user who requested the change.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
requested_by_personCRMPerson10Person who requested the change.
Show fields (81)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
positionstringPosition or role of the person.
languagestringPreferred language of the person.
special_salutationstringSpecial salutation text for letters.
form_of_salutationstringForm of salutation, for example formal or informal.
birthdaystring (date-time)Birthday of the person.
known_allergiesstringKnown allergies of the person.
confirmed_no_allergiesbooleanGuardian confirmed that there are no known allergies.
allow_photosbooleanPhotos of the person may be taken and published.
allow_leaving_alonebooleanThe person may leave the event alone.
authorized_pickupstringPersons who are allowed to pick up the person.
needs_supportbooleanThe person needs support, for example for inclusion.
support_descriptionstringDescription of the support the person needs.
financial_supportbooleanThe person receives financial support.
financial_support_numberstringNumber of the financial support.
municipal_supportbooleanThe person receives municipal support.
municipal_support_numberstringNumber of the municipal support.
grade_levelintegerSchool grade level of the person.
school_classstringSchool class of the person.
start_timestring (date-time)Start of the membership or activity.
start_time_reasonstringReason for the start.
end_timestring (date-time)End of the membership or activity.
end_time_reasonstringReason for the end.
confirmed_gtc_timestring (date-time)Time the general terms and conditions were confirmed.
chatbot_opt_inbooleanEinwilligung in die Nutzung des KI-Assistenten. Denormalisierter aktueller Stand - das pruefbare Protokoll steht in ChatbotConsent.
chatbot_opt_in_atstring (date-time)Time the person opted in to the chatbot.
chatbot_opt_in_text_versionstringVersion des Einwilligungstextes, dem zugestimmt wurde. Weicht sie von der aktuellen Version ab, ist das Opt-in abgelaufen.
app_usage_statistics_opt_outbooleanWiderspruch gegen die anonyme Nutzungsstatistik der Mitglieder-App. Die App liest ihn aus den StaticData und schickt dann nichts mehr; die gezaehlten Aufrufe selbst haben keinen Bezug zur Person.
crm_person_contact_dataarray<CRMPersonContactData>Contact data of the person, for example phone and e-mail.
archivedbooleanWhether the person is archived.
subscribed_newsletterbooleanWhether the person subscribed to the newsletter.
subscribed_magazinebooleanWhether the person subscribed to the magazine.
printed_member_cardbooleanWhether a member card has been printed for the person.
has_login_userbooleanWhether the person has a login user.
profile_picture_urlstringURL of the profile picture of the person.
log_book_staffbooleanLog book flag: staff.
log_book_staff1booleanLog book flag: staff, level 1.
log_book_staff2booleanLog book flag: staff, level 2.
log_book_memberbooleanLog book flag: member.
log_book_trainerbooleanLog book flag: trainer.
log_book_trainer1booleanLog book flag: trainer, level 1.
log_book_trainer2booleanLog book flag: trainer, level 2.
log_book_head_of_departmentbooleanLog book flag: head of department.
log_book_supervisory_boardbooleanLog book flag: supervisory board.
log_book_board_of_directorsbooleanLog book flag: board of directors.
log_book_honorary_memberbooleanLog book flag: honorary member.
log_book_club_card_onebooleanLog book flag: club card.
log_book_health_recoveredbooleanLog book flag: recovered from illness.
log_book_health_vaccinatedbooleanLog book flag: vaccinated.
log_book_health_vaccinated_additionstringDetails of the vaccination.
log_book_good_conductbooleanLog book flag: certificate of good conduct.
log_book_first_aidbooleanLog book flag: first aid training.
log_book_measles_vaccinationbooleanLog book flag: measles vaccination.
sync_lanistabooleanWhether the person is synchronized with Lanista.
categoryCRMPersonCategoryPerson category.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
search_stringstringText that the entity can be searched by.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
createdstring (date-time)Point in time the entity was created.
- … 2 more fields
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
week_total_hoursnumber (float)Sum of the requested weekday hours, kept for lists and for the auto-apply rule.
previous_week_total_hoursnumber (float)Weekly total the contract had for the requested month when the request was made.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decided_by_userUser14Login user who decided on the request.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
decided_atstring (date-time)Time the request was decided.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
auto_appliedbooleanTrue when the confirmation happened without an HR decision (unchanged weekly total, installation setting).
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/employment_contract_change_request \
--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/employment_contract_change_request', 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/employment_contract_change_request"
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/employment_contract_change_request', [
'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/employment_contract_change_request"),
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/employment_contract_change_request")
.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/employment_contract_change_request"
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/employment_contract_change_request_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 EmploymentContractChangeRequestController.getAll();
if (result.success) {
print(result.data);
}[
{
"requested_by_name": "Beispiel",
"id": 42,
"decision_comment": "Text",
"contract": {
"id": 42,
"description": "Text",
"staged_absence_approval": true,
"token": "string",
"week_total_hours": 1.5,
"week_total_days": 1.5,
"reserved_hours_preparation": 1.5,
"reserved_hours_follow_up": 1.5,
"reserved_hours_travel": 1.5,
"reserved_hours_flexible": 1.5
},
"requested_by_user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"archived": true,
"require2fa": true,
"search_string": "string"
},
"requested_by_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5
}
]Hand in a change request for the weekly working days of a contract
POST/api/time/employment_contract_change_request
Request body application/json
dataEmploymentContractChangeRequest2Show fields (14)
contractEmploymentContract4Contract the change applies to.
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
Responses
200Add a new EmploymentContractChangeRequestEmploymentContractChangeRequest3
Show fields (25)
requested_by_namestringidintegerPrimary key of the contract change request. Internal ID.
contractEmploymentContract5Contract the change 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.
requested_by_userUser14Login user who requested the change.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
requested_by_personCRMPerson10Person who requested the change.
Show fields (81)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
positionstringPosition or role of the person.
languagestringPreferred language of the person.
special_salutationstringSpecial salutation text for letters.
form_of_salutationstringForm of salutation, for example formal or informal.
birthdaystring (date-time)Birthday of the person.
known_allergiesstringKnown allergies of the person.
confirmed_no_allergiesbooleanGuardian confirmed that there are no known allergies.
allow_photosbooleanPhotos of the person may be taken and published.
allow_leaving_alonebooleanThe person may leave the event alone.
authorized_pickupstringPersons who are allowed to pick up the person.
needs_supportbooleanThe person needs support, for example for inclusion.
support_descriptionstringDescription of the support the person needs.
financial_supportbooleanThe person receives financial support.
financial_support_numberstringNumber of the financial support.
municipal_supportbooleanThe person receives municipal support.
municipal_support_numberstringNumber of the municipal support.
grade_levelintegerSchool grade level of the person.
school_classstringSchool class of the person.
start_timestring (date-time)Start of the membership or activity.
start_time_reasonstringReason for the start.
end_timestring (date-time)End of the membership or activity.
end_time_reasonstringReason for the end.
confirmed_gtc_timestring (date-time)Time the general terms and conditions were confirmed.
chatbot_opt_inbooleanEinwilligung in die Nutzung des KI-Assistenten. Denormalisierter aktueller Stand - das pruefbare Protokoll steht in ChatbotConsent.
chatbot_opt_in_atstring (date-time)Time the person opted in to the chatbot.
chatbot_opt_in_text_versionstringVersion des Einwilligungstextes, dem zugestimmt wurde. Weicht sie von der aktuellen Version ab, ist das Opt-in abgelaufen.
app_usage_statistics_opt_outbooleanWiderspruch gegen die anonyme Nutzungsstatistik der Mitglieder-App. Die App liest ihn aus den StaticData und schickt dann nichts mehr; die gezaehlten Aufrufe selbst haben keinen Bezug zur Person.
crm_person_contact_dataarray<CRMPersonContactData>Contact data of the person, for example phone and e-mail.
archivedbooleanWhether the person is archived.
subscribed_newsletterbooleanWhether the person subscribed to the newsletter.
subscribed_magazinebooleanWhether the person subscribed to the magazine.
printed_member_cardbooleanWhether a member card has been printed for the person.
has_login_userbooleanWhether the person has a login user.
profile_picture_urlstringURL of the profile picture of the person.
log_book_staffbooleanLog book flag: staff.
log_book_staff1booleanLog book flag: staff, level 1.
log_book_staff2booleanLog book flag: staff, level 2.
log_book_memberbooleanLog book flag: member.
log_book_trainerbooleanLog book flag: trainer.
log_book_trainer1booleanLog book flag: trainer, level 1.
log_book_trainer2booleanLog book flag: trainer, level 2.
log_book_head_of_departmentbooleanLog book flag: head of department.
log_book_supervisory_boardbooleanLog book flag: supervisory board.
log_book_board_of_directorsbooleanLog book flag: board of directors.
log_book_honorary_memberbooleanLog book flag: honorary member.
log_book_club_card_onebooleanLog book flag: club card.
log_book_health_recoveredbooleanLog book flag: recovered from illness.
log_book_health_vaccinatedbooleanLog book flag: vaccinated.
log_book_health_vaccinated_additionstringDetails of the vaccination.
log_book_good_conductbooleanLog book flag: certificate of good conduct.
log_book_first_aidbooleanLog book flag: first aid training.
log_book_measles_vaccinationbooleanLog book flag: measles vaccination.
sync_lanistabooleanWhether the person is synchronized with Lanista.
categoryCRMPersonCategoryPerson category.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
search_stringstringText that the entity can be searched by.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
createdstring (date-time)Point in time the entity was created.
- … 2 more fields
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
week_total_hoursnumber (float)Sum of the requested weekday hours, kept for lists and for the auto-apply rule.
previous_week_total_hoursnumber (float)Weekly total the contract had for the requested month when the request was made.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decided_by_userUser14Login user who decided on the request.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
decided_atstring (date-time)Time the request was decided.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
auto_appliedbooleanTrue when the confirmation happened without an HR decision (unchanged weekly total, installation setting).
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/employment_contract_change_request \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
decision_comment: 'Text',
start: '2026-10-15T09:30:00+02:00',
monday_hours: 1.5,
tuesday_hours: 1.5,
wednesday_hours: 1.5,
thursday_hours: 1.5
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/employment_contract_change_request', 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/employment_contract_change_request"
payload = { "data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
} }
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/employment_contract_change_request', [
'body' => '{"data":{"decision_comment":"Text","start":"2026-10-15T09:30:00+02:00","monday_hours":1.5,"tuesday_hours":1.5,"wednesday_hours":1.5,"thursday_hours":1.5}}',
'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/employment_contract_change_request"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
{
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\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/employment_contract_change_request")
.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/employment_contract_change_request"
payload := strings.NewReader("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
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/employment_contract_change_request_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/employment_contract_change_request.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EmploymentContractChangeRequestController.post(EmploymentContractChangeRequest.fromJson({
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}));
if (result.success) {
print(result.data);
}{
"requested_by_name": "Beispiel",
"id": 42,
"decision_comment": "Text",
"contract": {
"id": 42,
"description": "Text",
"staged_absence_approval": true,
"token": "string",
"user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"archived": true,
"require2fa": true,
"search_string": "string"
},
"week_total_hours": 1.5,
"week_total_days": 1.5,
"reserved_hours_preparation": 1.5,
"reserved_hours_follow_up": 1.5,
"reserved_hours_travel": 1.5
},
"requested_by_user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"crm_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"archived": true,
"require2fa": true,
"search_string": "string"
},
"requested_by_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5
}This method will get a single EmploymentContractChangeRequest with the given id
GET/api/time/employment_contract_change_request/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single EmploymentContractChangeRequestEmploymentContractChangeRequest3
Show fields (25)
requested_by_namestringidintegerPrimary key of the contract change request. Internal ID.
contractEmploymentContract5Contract the change 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.
requested_by_userUser14Login user who requested the change.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
requested_by_personCRMPerson10Person who requested the change.
Show fields (81)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
positionstringPosition or role of the person.
languagestringPreferred language of the person.
special_salutationstringSpecial salutation text for letters.
form_of_salutationstringForm of salutation, for example formal or informal.
birthdaystring (date-time)Birthday of the person.
known_allergiesstringKnown allergies of the person.
confirmed_no_allergiesbooleanGuardian confirmed that there are no known allergies.
allow_photosbooleanPhotos of the person may be taken and published.
allow_leaving_alonebooleanThe person may leave the event alone.
authorized_pickupstringPersons who are allowed to pick up the person.
needs_supportbooleanThe person needs support, for example for inclusion.
support_descriptionstringDescription of the support the person needs.
financial_supportbooleanThe person receives financial support.
financial_support_numberstringNumber of the financial support.
municipal_supportbooleanThe person receives municipal support.
municipal_support_numberstringNumber of the municipal support.
grade_levelintegerSchool grade level of the person.
school_classstringSchool class of the person.
start_timestring (date-time)Start of the membership or activity.
start_time_reasonstringReason for the start.
end_timestring (date-time)End of the membership or activity.
end_time_reasonstringReason for the end.
confirmed_gtc_timestring (date-time)Time the general terms and conditions were confirmed.
chatbot_opt_inbooleanEinwilligung in die Nutzung des KI-Assistenten. Denormalisierter aktueller Stand - das pruefbare Protokoll steht in ChatbotConsent.
chatbot_opt_in_atstring (date-time)Time the person opted in to the chatbot.
chatbot_opt_in_text_versionstringVersion des Einwilligungstextes, dem zugestimmt wurde. Weicht sie von der aktuellen Version ab, ist das Opt-in abgelaufen.
app_usage_statistics_opt_outbooleanWiderspruch gegen die anonyme Nutzungsstatistik der Mitglieder-App. Die App liest ihn aus den StaticData und schickt dann nichts mehr; die gezaehlten Aufrufe selbst haben keinen Bezug zur Person.
crm_person_contact_dataarray<CRMPersonContactData>Contact data of the person, for example phone and e-mail.
archivedbooleanWhether the person is archived.
subscribed_newsletterbooleanWhether the person subscribed to the newsletter.
subscribed_magazinebooleanWhether the person subscribed to the magazine.
printed_member_cardbooleanWhether a member card has been printed for the person.
has_login_userbooleanWhether the person has a login user.
profile_picture_urlstringURL of the profile picture of the person.
log_book_staffbooleanLog book flag: staff.
log_book_staff1booleanLog book flag: staff, level 1.
log_book_staff2booleanLog book flag: staff, level 2.
log_book_memberbooleanLog book flag: member.
log_book_trainerbooleanLog book flag: trainer.
log_book_trainer1booleanLog book flag: trainer, level 1.
log_book_trainer2booleanLog book flag: trainer, level 2.
log_book_head_of_departmentbooleanLog book flag: head of department.
log_book_supervisory_boardbooleanLog book flag: supervisory board.
log_book_board_of_directorsbooleanLog book flag: board of directors.
log_book_honorary_memberbooleanLog book flag: honorary member.
log_book_club_card_onebooleanLog book flag: club card.
log_book_health_recoveredbooleanLog book flag: recovered from illness.
log_book_health_vaccinatedbooleanLog book flag: vaccinated.
log_book_health_vaccinated_additionstringDetails of the vaccination.
log_book_good_conductbooleanLog book flag: certificate of good conduct.
log_book_first_aidbooleanLog book flag: first aid training.
log_book_measles_vaccinationbooleanLog book flag: measles vaccination.
sync_lanistabooleanWhether the person is synchronized with Lanista.
categoryCRMPersonCategoryPerson category.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
search_stringstringText that the entity can be searched by.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
createdstring (date-time)Point in time the entity was created.
- … 2 more fields
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
week_total_hoursnumber (float)Sum of the requested weekday hours, kept for lists and for the auto-apply rule.
previous_week_total_hoursnumber (float)Weekly total the contract had for the requested month when the request was made.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decided_by_userUser14Login user who decided on the request.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
decided_atstring (date-time)Time the request was decided.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
auto_appliedbooleanTrue when the confirmation happened without an HR decision (unchanged weekly total, installation setting).
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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request/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/employment_contract_change_request_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 EmploymentContractChangeRequestController.get('42');
if (result.success) {
print(result.data);
}{
"requested_by_name": "Beispiel",
"id": 42,
"decision_comment": "Text",
"contract": {
"id": 42,
"description": "Text",
"staged_absence_approval": true,
"token": "string",
"user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"archived": true,
"require2fa": true,
"search_string": "string"
},
"week_total_hours": 1.5,
"week_total_days": 1.5,
"reserved_hours_preparation": 1.5,
"reserved_hours_follow_up": 1.5,
"reserved_hours_travel": 1.5
},
"requested_by_user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"crm_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"archived": true,
"require2fa": true,
"search_string": "string"
},
"requested_by_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5
}Decide a change request (HR): status APPROVED applies it as a dated contract change, DECLINED closes it
PUT/api/time/employment_contract_change_request/{id}
Path parameters
idrequiredstring |
Request body application/json
dataEmploymentContractChangeRequest2Show fields (14)
contractEmploymentContract4Contract the change applies to.
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
Responses
200Decide an EmploymentContractChangeRequestEmploymentContractChangeRequest3
Show fields (25)
requested_by_namestringidintegerPrimary key of the contract change request. Internal ID.
contractEmploymentContract5Contract the change 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.
requested_by_userUser14Login user who requested the change.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
requested_by_personCRMPerson10Person who requested the change.
Show fields (81)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
positionstringPosition or role of the person.
languagestringPreferred language of the person.
special_salutationstringSpecial salutation text for letters.
form_of_salutationstringForm of salutation, for example formal or informal.
birthdaystring (date-time)Birthday of the person.
known_allergiesstringKnown allergies of the person.
confirmed_no_allergiesbooleanGuardian confirmed that there are no known allergies.
allow_photosbooleanPhotos of the person may be taken and published.
allow_leaving_alonebooleanThe person may leave the event alone.
authorized_pickupstringPersons who are allowed to pick up the person.
needs_supportbooleanThe person needs support, for example for inclusion.
support_descriptionstringDescription of the support the person needs.
financial_supportbooleanThe person receives financial support.
financial_support_numberstringNumber of the financial support.
municipal_supportbooleanThe person receives municipal support.
municipal_support_numberstringNumber of the municipal support.
grade_levelintegerSchool grade level of the person.
school_classstringSchool class of the person.
start_timestring (date-time)Start of the membership or activity.
start_time_reasonstringReason for the start.
end_timestring (date-time)End of the membership or activity.
end_time_reasonstringReason for the end.
confirmed_gtc_timestring (date-time)Time the general terms and conditions were confirmed.
chatbot_opt_inbooleanEinwilligung in die Nutzung des KI-Assistenten. Denormalisierter aktueller Stand - das pruefbare Protokoll steht in ChatbotConsent.
chatbot_opt_in_atstring (date-time)Time the person opted in to the chatbot.
chatbot_opt_in_text_versionstringVersion des Einwilligungstextes, dem zugestimmt wurde. Weicht sie von der aktuellen Version ab, ist das Opt-in abgelaufen.
app_usage_statistics_opt_outbooleanWiderspruch gegen die anonyme Nutzungsstatistik der Mitglieder-App. Die App liest ihn aus den StaticData und schickt dann nichts mehr; die gezaehlten Aufrufe selbst haben keinen Bezug zur Person.
crm_person_contact_dataarray<CRMPersonContactData>Contact data of the person, for example phone and e-mail.
archivedbooleanWhether the person is archived.
subscribed_newsletterbooleanWhether the person subscribed to the newsletter.
subscribed_magazinebooleanWhether the person subscribed to the magazine.
printed_member_cardbooleanWhether a member card has been printed for the person.
has_login_userbooleanWhether the person has a login user.
profile_picture_urlstringURL of the profile picture of the person.
log_book_staffbooleanLog book flag: staff.
log_book_staff1booleanLog book flag: staff, level 1.
log_book_staff2booleanLog book flag: staff, level 2.
log_book_memberbooleanLog book flag: member.
log_book_trainerbooleanLog book flag: trainer.
log_book_trainer1booleanLog book flag: trainer, level 1.
log_book_trainer2booleanLog book flag: trainer, level 2.
log_book_head_of_departmentbooleanLog book flag: head of department.
log_book_supervisory_boardbooleanLog book flag: supervisory board.
log_book_board_of_directorsbooleanLog book flag: board of directors.
log_book_honorary_memberbooleanLog book flag: honorary member.
log_book_club_card_onebooleanLog book flag: club card.
log_book_health_recoveredbooleanLog book flag: recovered from illness.
log_book_health_vaccinatedbooleanLog book flag: vaccinated.
log_book_health_vaccinated_additionstringDetails of the vaccination.
log_book_good_conductbooleanLog book flag: certificate of good conduct.
log_book_first_aidbooleanLog book flag: first aid training.
log_book_measles_vaccinationbooleanLog book flag: measles vaccination.
sync_lanistabooleanWhether the person is synchronized with Lanista.
categoryCRMPersonCategoryPerson category.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
search_stringstringText that the entity can be searched by.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
createdstring (date-time)Point in time the entity was created.
- … 2 more fields
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
week_total_hoursnumber (float)Sum of the requested weekday hours, kept for lists and for the auto-apply rule.
previous_week_total_hoursnumber (float)Weekly total the contract had for the requested month when the request was made.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decided_by_userUser14Login user who decided on the request.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
decided_atstring (date-time)Time the request was decided.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
auto_appliedbooleanTrue when the confirmation happened without an HR decision (unchanged weekly total, installation setting).
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/employment_contract_change_request/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
decision_comment: 'Text',
start: '2026-10-15T09:30:00+02:00',
monday_hours: 1.5,
tuesday_hours: 1.5,
wednesday_hours: 1.5,
thursday_hours: 1.5
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/employment_contract_change_request/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/employment_contract_change_request/42"
payload = { "data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
} }
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/employment_contract_change_request/42', [
'body' => '{"data":{"decision_comment":"Text","start":"2026-10-15T09:30:00+02:00","monday_hours":1.5,"tuesday_hours":1.5,"wednesday_hours":1.5,"thursday_hours":1.5}}',
'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/employment_contract_change_request/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
{
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\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/employment_contract_change_request/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/employment_contract_change_request/42"
payload := strings.NewReader("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
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/employment_contract_change_request_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/employment_contract_change_request.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EmploymentContractChangeRequestController.put(EmploymentContractChangeRequest.fromJson({
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}));
if (result.success) {
print(result.data);
}{
"requested_by_name": "Beispiel",
"id": 42,
"decision_comment": "Text",
"contract": {
"id": 42,
"description": "Text",
"staged_absence_approval": true,
"token": "string",
"user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"archived": true,
"require2fa": true,
"search_string": "string"
},
"week_total_hours": 1.5,
"week_total_days": 1.5,
"reserved_hours_preparation": 1.5,
"reserved_hours_follow_up": 1.5,
"reserved_hours_travel": 1.5
},
"requested_by_user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"crm_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"archived": true,
"require2fa": true,
"search_string": "string"
},
"requested_by_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5
}Decide a change request (HR): status APPROVED applies it as a dated contract change, DECLINED closes it
PATCH/api/time/employment_contract_change_request/{id}
Path parameters
idrequiredstring |
Request body application/json
dataEmploymentContractChangeRequest2Show fields (14)
contractEmploymentContract4Contract the change applies to.
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
Responses
200Decide an EmploymentContractChangeRequestEmploymentContractChangeRequest3
Show fields (25)
requested_by_namestringidintegerPrimary key of the contract change request. Internal ID.
contractEmploymentContract5Contract the change 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.
requested_by_userUser14Login user who requested the change.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
requested_by_personCRMPerson10Person who requested the change.
Show fields (81)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
positionstringPosition or role of the person.
languagestringPreferred language of the person.
special_salutationstringSpecial salutation text for letters.
form_of_salutationstringForm of salutation, for example formal or informal.
birthdaystring (date-time)Birthday of the person.
known_allergiesstringKnown allergies of the person.
confirmed_no_allergiesbooleanGuardian confirmed that there are no known allergies.
allow_photosbooleanPhotos of the person may be taken and published.
allow_leaving_alonebooleanThe person may leave the event alone.
authorized_pickupstringPersons who are allowed to pick up the person.
needs_supportbooleanThe person needs support, for example for inclusion.
support_descriptionstringDescription of the support the person needs.
financial_supportbooleanThe person receives financial support.
financial_support_numberstringNumber of the financial support.
municipal_supportbooleanThe person receives municipal support.
municipal_support_numberstringNumber of the municipal support.
grade_levelintegerSchool grade level of the person.
school_classstringSchool class of the person.
start_timestring (date-time)Start of the membership or activity.
start_time_reasonstringReason for the start.
end_timestring (date-time)End of the membership or activity.
end_time_reasonstringReason for the end.
confirmed_gtc_timestring (date-time)Time the general terms and conditions were confirmed.
chatbot_opt_inbooleanEinwilligung in die Nutzung des KI-Assistenten. Denormalisierter aktueller Stand - das pruefbare Protokoll steht in ChatbotConsent.
chatbot_opt_in_atstring (date-time)Time the person opted in to the chatbot.
chatbot_opt_in_text_versionstringVersion des Einwilligungstextes, dem zugestimmt wurde. Weicht sie von der aktuellen Version ab, ist das Opt-in abgelaufen.
app_usage_statistics_opt_outbooleanWiderspruch gegen die anonyme Nutzungsstatistik der Mitglieder-App. Die App liest ihn aus den StaticData und schickt dann nichts mehr; die gezaehlten Aufrufe selbst haben keinen Bezug zur Person.
crm_person_contact_dataarray<CRMPersonContactData>Contact data of the person, for example phone and e-mail.
archivedbooleanWhether the person is archived.
subscribed_newsletterbooleanWhether the person subscribed to the newsletter.
subscribed_magazinebooleanWhether the person subscribed to the magazine.
printed_member_cardbooleanWhether a member card has been printed for the person.
has_login_userbooleanWhether the person has a login user.
profile_picture_urlstringURL of the profile picture of the person.
log_book_staffbooleanLog book flag: staff.
log_book_staff1booleanLog book flag: staff, level 1.
log_book_staff2booleanLog book flag: staff, level 2.
log_book_memberbooleanLog book flag: member.
log_book_trainerbooleanLog book flag: trainer.
log_book_trainer1booleanLog book flag: trainer, level 1.
log_book_trainer2booleanLog book flag: trainer, level 2.
log_book_head_of_departmentbooleanLog book flag: head of department.
log_book_supervisory_boardbooleanLog book flag: supervisory board.
log_book_board_of_directorsbooleanLog book flag: board of directors.
log_book_honorary_memberbooleanLog book flag: honorary member.
log_book_club_card_onebooleanLog book flag: club card.
log_book_health_recoveredbooleanLog book flag: recovered from illness.
log_book_health_vaccinatedbooleanLog book flag: vaccinated.
log_book_health_vaccinated_additionstringDetails of the vaccination.
log_book_good_conductbooleanLog book flag: certificate of good conduct.
log_book_first_aidbooleanLog book flag: first aid training.
log_book_measles_vaccinationbooleanLog book flag: measles vaccination.
sync_lanistabooleanWhether the person is synchronized with Lanista.
categoryCRMPersonCategoryPerson category.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
search_stringstringText that the entity can be searched by.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
createdstring (date-time)Point in time the entity was created.
- … 2 more fields
startstring (date-time)First day the new distribution applies; always a month start beyond the change deadline.
monday_hoursnumber (float)Requested working hours on Monday.
tuesday_hoursnumber (float)Requested working hours on Tuesday.
wednesday_hoursnumber (float)Requested working hours on Wednesday.
thursday_hoursnumber (float)Requested working hours on Thursday.
friday_hoursnumber (float)Requested working hours on Friday.
saturday_hoursnumber (float)Requested working hours on Saturday.
sunday_hoursnumber (float)Requested working hours on Sunday.
week_total_hoursnumber (float)Sum of the requested weekday hours, kept for lists and for the auto-apply rule.
previous_week_total_hoursnumber (float)Weekly total the contract had for the requested month when the request was made.
statusstringStatus of the request, for example open, approved or rejected.
reasonstringWhy the lead asks for the change; shown to HR.
decided_by_userUser14Login user who decided on the request.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
decided_atstring (date-time)Time the request was decided.
decision_commentstringComment on the decision.
vacation_days_modestringHR's decision on the annual vacation entitlement when approving: null keeps the entitlement as it is, PROPORTIONAL recalculates it from the new working days, MANUAL sets yearVacationDays. Uses the EmploymentContractModifier::VACATION_DAYS_MODE_* values.
year_vacation_daysnumber (float)The new annual vacation entitlement HR sets with vacationDaysMode MANUAL.
auto_appliedbooleanTrue when the confirmation happened without an HR decision (unchanged weekly total, installation setting).
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/employment_contract_change_request/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
decision_comment: 'Text',
start: '2026-10-15T09:30:00+02:00',
monday_hours: 1.5,
tuesday_hours: 1.5,
wednesday_hours: 1.5,
thursday_hours: 1.5
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/employment_contract_change_request/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/employment_contract_change_request/42"
payload = { "data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
} }
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/employment_contract_change_request/42', [
'body' => '{"data":{"decision_comment":"Text","start":"2026-10-15T09:30:00+02:00","monday_hours":1.5,"tuesday_hours":1.5,"wednesday_hours":1.5,"thursday_hours":1.5}}',
'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/employment_contract_change_request/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
{
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\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/employment_contract_change_request/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/employment_contract_change_request/42"
payload := strings.NewReader("{\"data\":{\"decision_comment\":\"Text\",\"start\":\"2026-10-15T09:30:00+02:00\",\"monday_hours\":1.5,\"tuesday_hours\":1.5,\"wednesday_hours\":1.5,\"thursday_hours\":1.5}}")
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/employment_contract_change_request/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"decision_comment": "Text",
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5,
"thursday_hours": 1.5
}
}),
);
print(response.body);{
"requested_by_name": "Beispiel",
"id": 42,
"decision_comment": "Text",
"contract": {
"id": 42,
"description": "Text",
"staged_absence_approval": true,
"token": "string",
"user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"archived": true,
"require2fa": true,
"search_string": "string"
},
"week_total_hours": 1.5,
"week_total_days": 1.5,
"reserved_hours_preparation": 1.5,
"reserved_hours_follow_up": 1.5,
"reserved_hours_travel": 1.5
},
"requested_by_user": {
"id": 42,
"name": "Beispiel",
"username": "lena.hartmann@example.org",
"email": "lena.hartmann@example.org",
"profile_picture_url": "https://vynst.de",
"positioningeneral": "string",
"crm_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"archived": true,
"require2fa": true,
"search_string": "string"
},
"requested_by_person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"language": "de",
"support_description": "Text",
"profile_picture_url": "https://vynst.de",
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163"
},
"start": "2026-10-15T09:30:00+02:00",
"monday_hours": 1.5,
"tuesday_hours": 1.5,
"wednesday_hours": 1.5
}