SmartLock
Returns a list of smart lock entries.
GET/api/event/smart_lock
Query parameters
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived |
namestring | |
typestring | |
baseBookablestring | |
employmentContractsstring | Linked employment contracts |
employmentContractGroupsstring | Linked employment contract groups |
connectionstring | |
providerDeviceIdstring | |
providerDeviceTypestring | |
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 SmartLocksarray<SmartLock>
Show fields (14)
idintegerPrimary key of the smart lock. Internal ID.
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable4Bookable the smart lock opens.
Show fields (51)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
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
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
employment_contractsarray<EmploymentContract16>Linked employment contracts
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.
employment_contract_groupsarray<EmploymentContractGroup>Linked employment contract groups
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
connectionSmartLockConnection3Connection used to control the smart lock.
Show fields (13)
idintegerPrimary key of the smart lock connection. Internal ID.
providerstringProvider of the smart lock, for example LOQED or a bridge.
modestringMode of the connection, for example bridge or web.
bridge_hoststringHost name of the bridge that talks to the lock.
bridge_portintegerPort of the bridge.
loqed_lock_idstringID of the LOQED lock at the provider.
ha_instance_idstringInstance that offers its locks through this connection: the Home Assistant core uuid or the id of a Node-RED lock bridge or n8n lock trigger. The ha_* fields are shared by these providers.
ha_webhook_urlstringWebhook of the Home Assistant integration (or of a Node-RED instance in push mode) that receives the signed lock commands.
scan_device_idsstringIds of the scanners of a scan webhook connection (Comydo: 12 hex digits each), separated by comma, space or new line. Every id becomes one smart lock when the connection is synced.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser14User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/event/smart_lock \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock', 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/event/smart_lock"
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/event/smart_lock', [
'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/event/smart_lock"),
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/event/smart_lock")
.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/event/smart_lock"
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/smart_lock_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 SmartLockController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"type": "string",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"connection": {
"id": 42,
"ha_webhook_url": "https://vynst.de",
"name": "Beispiel",
"provider": "string",
"mode": "string",
"bridge_host": "string",
"bridge_port": 1,
"loqed_lock_id": "42",
"ha_instance_id": "42",
"scan_device_ids": "string"
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true,
"self_service_type": "string",
"created": "2026-10-15T09:30:00+02:00"
}
]Creates a new smart lock entry.
POST/api/event/smart_lock
Request body application/json
dataSmartLock2Show fields (8)
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable17Bookable the smart lock opens.
employment_contractsarray<EmploymentContract17>Linked employment contracts
employment_contract_groupsarray<EmploymentContractGroup8>Linked employment contract groups
connectionSmartLockConnection4Connection used to control the smart lock.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Add a new SmartLockSmartLock
Show fields (14)
idintegerPrimary key of the smart lock. Internal ID.
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable4Bookable the smart lock opens.
Show fields (51)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
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
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
employment_contractsarray<EmploymentContract16>Linked employment contracts
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.
employment_contract_groupsarray<EmploymentContractGroup>Linked employment contract groups
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
connectionSmartLockConnection3Connection used to control the smart lock.
Show fields (13)
idintegerPrimary key of the smart lock connection. Internal ID.
providerstringProvider of the smart lock, for example LOQED or a bridge.
modestringMode of the connection, for example bridge or web.
bridge_hoststringHost name of the bridge that talks to the lock.
bridge_portintegerPort of the bridge.
loqed_lock_idstringID of the LOQED lock at the provider.
ha_instance_idstringInstance that offers its locks through this connection: the Home Assistant core uuid or the id of a Node-RED lock bridge or n8n lock trigger. The ha_* fields are shared by these providers.
ha_webhook_urlstringWebhook of the Home Assistant integration (or of a Node-RED instance in push mode) that receives the signed lock commands.
scan_device_idsstringIds of the scanners of a scan webhook connection (Comydo: 12 hex digits each), separated by comma, space or new line. Every id becomes one smart lock when the connection is synced.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser14User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/event/smart_lock \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
connection: {deleted: true},
provider_device_id: '42',
provider_device_type: 'string',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock', 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/event/smart_lock"
payload = { "data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": { "deleted": True },
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": True
} }
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/event/smart_lock', [
'body' => '{"data":{"type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"connection":{"deleted":true},"provider_device_id":"42","provider_device_type":"string","deleted":true}}',
'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/event/smart_lock"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
{
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\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/event/smart_lock")
.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/event/smart_lock"
payload := strings.NewReader("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
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/smart_lock_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/smart_lock.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await SmartLockController.post(SmartLock.fromJson({
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"type": "string",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"employment_contracts": [
{
"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
}
],
"employment_contract_groups": [
{
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
}
],
"connection": {
"id": 42,
"ha_webhook_url": "https://vynst.de",
"name": "Beispiel",
"provider": "string",
"mode": "string",
"bridge_host": "string",
"bridge_port": 1,
"loqed_lock_id": "42",
"ha_instance_id": "42",
"scan_device_ids": "string"
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}GET /api/event/smart_lock/my_accessible
GET/api/event/smart_lock/my_accessible
Responses
200Returns SmartLocks accessible for the current userarray<object>
Show fields (5)
idintegernamestringdescriptionstringtypestringnuki, loqed, homeassistant, comydo or qrlock
unlock_methodstringremote: unlock opens the door, qr_code: ask for an access code and show it as QR code
curl --request GET \
--url https://your-instance.iw-erp.de/api/event/smart_lock/my_accessible \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/my_accessible', 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/event/smart_lock/my_accessible"
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/event/smart_lock/my_accessible', [
'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/event/smart_lock/my_accessible"),
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/event/smart_lock/my_accessible")
.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/event/smart_lock/my_accessible"
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/smart_lock_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 SmartLockController.getMyAccessible();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"type": "string",
"unlock_method": "string"
}
]Returns a single smart lock entry.
GET/api/event/smart_lock/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Returns a single SmartLockSmartLock
Show fields (14)
idintegerPrimary key of the smart lock. Internal ID.
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable4Bookable the smart lock opens.
Show fields (51)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
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
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
employment_contractsarray<EmploymentContract16>Linked employment contracts
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.
employment_contract_groupsarray<EmploymentContractGroup>Linked employment contract groups
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
connectionSmartLockConnection3Connection used to control the smart lock.
Show fields (13)
idintegerPrimary key of the smart lock connection. Internal ID.
providerstringProvider of the smart lock, for example LOQED or a bridge.
modestringMode of the connection, for example bridge or web.
bridge_hoststringHost name of the bridge that talks to the lock.
bridge_portintegerPort of the bridge.
loqed_lock_idstringID of the LOQED lock at the provider.
ha_instance_idstringInstance that offers its locks through this connection: the Home Assistant core uuid or the id of a Node-RED lock bridge or n8n lock trigger. The ha_* fields are shared by these providers.
ha_webhook_urlstringWebhook of the Home Assistant integration (or of a Node-RED instance in push mode) that receives the signed lock commands.
scan_device_idsstringIds of the scanners of a scan webhook connection (Comydo: 12 hex digits each), separated by comma, space or new line. Every id becomes one smart lock when the connection is synced.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser14User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/event/smart_lock/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/event/smart_lock/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/event/smart_lock/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/event/smart_lock/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/event/smart_lock/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/event/smart_lock/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/event/smart_lock/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/smart_lock_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 SmartLockController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"type": "string",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"employment_contracts": [
{
"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
}
],
"employment_contract_groups": [
{
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
}
],
"connection": {
"id": 42,
"ha_webhook_url": "https://vynst.de",
"name": "Beispiel",
"provider": "string",
"mode": "string",
"bridge_host": "string",
"bridge_port": 1,
"loqed_lock_id": "42",
"ha_instance_id": "42",
"scan_device_ids": "string"
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}Updates an existing smart lock entry.
PUT/api/event/smart_lock/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataSmartLock2Show fields (8)
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable17Bookable the smart lock opens.
employment_contractsarray<EmploymentContract17>Linked employment contracts
employment_contract_groupsarray<EmploymentContractGroup8>Linked employment contract groups
connectionSmartLockConnection4Connection used to control the smart lock.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Update a SmartLockSmartLock
Show fields (14)
idintegerPrimary key of the smart lock. Internal ID.
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable4Bookable the smart lock opens.
Show fields (51)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
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
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
employment_contractsarray<EmploymentContract16>Linked employment contracts
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.
employment_contract_groupsarray<EmploymentContractGroup>Linked employment contract groups
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
connectionSmartLockConnection3Connection used to control the smart lock.
Show fields (13)
idintegerPrimary key of the smart lock connection. Internal ID.
providerstringProvider of the smart lock, for example LOQED or a bridge.
modestringMode of the connection, for example bridge or web.
bridge_hoststringHost name of the bridge that talks to the lock.
bridge_portintegerPort of the bridge.
loqed_lock_idstringID of the LOQED lock at the provider.
ha_instance_idstringInstance that offers its locks through this connection: the Home Assistant core uuid or the id of a Node-RED lock bridge or n8n lock trigger. The ha_* fields are shared by these providers.
ha_webhook_urlstringWebhook of the Home Assistant integration (or of a Node-RED instance in push mode) that receives the signed lock commands.
scan_device_idsstringIds of the scanners of a scan webhook connection (Comydo: 12 hex digits each), separated by comma, space or new line. Every id becomes one smart lock when the connection is synced.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser14User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/event/smart_lock/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
connection: {deleted: true},
provider_device_id: '42',
provider_device_type: 'string',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/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/event/smart_lock/42"
payload = { "data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": { "deleted": True },
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": True
} }
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/event/smart_lock/42', [
'body' => '{"data":{"type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"connection":{"deleted":true},"provider_device_id":"42","provider_device_type":"string","deleted":true}}',
'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/event/smart_lock/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
{
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\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/event/smart_lock/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/event/smart_lock/42"
payload := strings.NewReader("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
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/smart_lock_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/smart_lock.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await SmartLockController.put(SmartLock.fromJson({
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"type": "string",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"employment_contracts": [
{
"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
}
],
"employment_contract_groups": [
{
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
}
],
"connection": {
"id": 42,
"ha_webhook_url": "https://vynst.de",
"name": "Beispiel",
"provider": "string",
"mode": "string",
"bridge_host": "string",
"bridge_port": 1,
"loqed_lock_id": "42",
"ha_instance_id": "42",
"scan_device_ids": "string"
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}Updates an existing smart lock entry.
PATCH/api/event/smart_lock/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataSmartLock2Show fields (8)
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable17Bookable the smart lock opens.
employment_contractsarray<EmploymentContract17>Linked employment contracts
employment_contract_groupsarray<EmploymentContractGroup8>Linked employment contract groups
connectionSmartLockConnection4Connection used to control the smart lock.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200Update a SmartLockSmartLock
Show fields (14)
idintegerPrimary key of the smart lock. Internal ID.
typestringType of the smart lock, for example door or gate.
base_bookableBaseBookable4Bookable the smart lock opens.
Show fields (51)
ticketSeatingPlanIdintegerId of the seating plan of the room, also for the public serialization.
idintegerPrimary key of the bookable. Internal ID.
tokenstringPublic token of the bookable. Used in links instead of the ID.
bookable_typestringType of the bookable, for example room, court or vehicle.
floor_levelstringFloor the bookable is on.
floor_sizeintegerFloor size in square meters.
pets_allowedbooleanPets are allowed.
barrier_freebooleanThe bookable is barrier-free.
cargo_volumeintegerCargo volume in liters.
fuel_typestringFuel type of the vehicle.
seating_capacityintegerNumber of seats.
has_wait_listbooleanThe bookable has a waiting list once it is fully booked.
booking_limitintegerMaximum number of bookings.
billing_modestringHow bookings on this bookable are billed: BILLING_MODE_UPFRONT (null = upfront, invoice at booking time) or BILLING_MODE_USAGE (free reservation, deferred billing from real usage data) Also in Default: the member app shows "Nutzung erfassen" only for usage-billed bookables.
max_active_bookings_per_userintegerMaximum number of active (future, not cancelled) self-service bookings one person may hold on this bookable at the same time. Null = unlimited. Admin bookings are not limited.
max_advance_booking_hoursintegerMaximum number of hours a self-service booking may start in the future. Null = unlimited. Admin bookings are not limited.
inventory_managedbooleanKept as inventory (Inventar-Ausleihe): the office hands the item over and takes it back, with deposit and reminders. Only used while the setting event_inventory_enabled is on.
inventory_depositnumber (float)Deposit (Kaution) per piece asked on hand-over. Null = no deposit.
require_addressbooleanThe address must be entered when booking.
require_contactbooleanContact details must be entered when booking.
require_billingbooleanBilling details must be entered when booking.
require_booking_titlebooleanA title must be entered when booking.
allow_direct_billingbooleanrequire_agebooleanThe age must be entered when booking.
counter_update_modestringHow the usage counters of the bookable are updated.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
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
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
short_identifierstringShort identifier of the entity.
image_urlstringURL of the image of the entity.
slug_identifierstringSlug used in URLs of the entity.
employment_contractsarray<EmploymentContract16>Linked employment contracts
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.
employment_contract_groupsarray<EmploymentContractGroup>Linked employment contract groups
Show fields (25)
staged_absence_approvalbooleannull inherits the organization; false explicitly disables staged approval.
shift_booking_syncbooleanL35: shifts as availabilities / appointments in the booking area; null inherits the organisation, false switches it off for this group.
idintegerPrimary key of the contract group. Internal ID.
week_total_hoursnumber (float)Total working hours per week.
week_total_daysnumber (float)Working days per week.
year_vacation_daysnumber (float)Vacation days per year.
month_vacation_daysnumber (float)Vacation days per month.
year_vacation_weeksnumber (float)Vacation weeks per year.
monday_hoursnumber (float)Working hours on Monday.
tuesday_hoursnumber (float)Working hours on Tuesday.
wednesday_hoursnumber (float)Working hours on Wednesday.
thursday_hoursnumber (float)Working hours on Thursday.
friday_hoursnumber (float)Working hours on Friday.
saturday_hoursnumber (float)Working hours on Saturday.
sunday_hoursnumber (float)Working hours on Sunday.
netto_hour_costnumber (float)Net cost per hour.
brutto_hour_costnumber (float)Gross cost per hour.
allow_app_time_trackingbooleanWhether time tracking in the app is allowed.
allow_scanner_time_trackingbooleanWhether time tracking with a scanner is allowed.
allow_app_non_work_time_managementbooleanWhether non-work time can be managed in the app.
request_lead_time_daysintegerDays an absence request of this group has to be handed in ahead of its first day. null falls back to the installation wide setting - an existing group therefore behaves exactly as before.
school_holiday_regionSchoolHolidayRegionU09: the school calendar of this group when it differs from the organisation's (apprentices attending school in another Bundesland). null = the organisation's.
search_stringstringText that the entity can be searched by.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
connectionSmartLockConnection3Connection used to control the smart lock.
Show fields (13)
idintegerPrimary key of the smart lock connection. Internal ID.
providerstringProvider of the smart lock, for example LOQED or a bridge.
modestringMode of the connection, for example bridge or web.
bridge_hoststringHost name of the bridge that talks to the lock.
bridge_portintegerPort of the bridge.
loqed_lock_idstringID of the LOQED lock at the provider.
ha_instance_idstringInstance that offers its locks through this connection: the Home Assistant core uuid or the id of a Node-RED lock bridge or n8n lock trigger. The ha_* fields are shared by these providers.
ha_webhook_urlstringWebhook of the Home Assistant integration (or of a Node-RED instance in push mode) that receives the signed lock commands.
scan_device_idsstringIds of the scanners of a scan webhook connection (Comydo: 12 hex digits each), separated by comma, space or new line. Every id becomes one smart lock when the connection is synced.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
provider_device_idstringID of the device at the provider.
provider_device_typestringType of the device at the provider.
namestringName of the entity.
deletedbooleanThis property is used to mark an entity as deleted / archived
self_service_typestringType of the self-service option.
arslist_self_servicearray<AccessRightStorage2>Access rights list that controls the self-service option.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser14User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/event/smart_lock/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
type: 'string',
base_bookable: {
address_street: 'Jakobistr. 39',
address_city: 'Hannover',
address_zip: '30163',
address_country: 'DE',
address_full_country: 'DE',
main_phone: '+49 511 123456'
},
connection: {deleted: true},
provider_device_id: '42',
provider_device_type: 'string',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/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/event/smart_lock/42"
payload = { "data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": { "deleted": True },
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": True
} }
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/event/smart_lock/42', [
'body' => '{"data":{"type":"string","base_bookable":{"address_street":"Jakobistr. 39","address_city":"Hannover","address_zip":"30163","address_country":"DE","address_full_country":"DE","main_phone":"+49 511 123456"},"connection":{"deleted":true},"provider_device_id":"42","provider_device_type":"string","deleted":true}}',
'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/event/smart_lock/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
{
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\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/event/smart_lock/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/event/smart_lock/42"
payload := strings.NewReader("{\"data\":{\"type\":\"string\",\"base_bookable\":{\"address_street\":\"Jakobistr. 39\",\"address_city\":\"Hannover\",\"address_zip\":\"30163\",\"address_country\":\"DE\",\"address_full_country\":\"DE\",\"main_phone\":\"+49 511 123456\"},\"connection\":{\"deleted\":true},\"provider_device_id\":\"42\",\"provider_device_type\":\"string\",\"deleted\":true}}")
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/event/smart_lock/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"type": "string",
"base_bookable": {
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456"
},
"connection": {
"deleted": true
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"type": "string",
"base_bookable": {
"id": 42,
"require_booking_title": true,
"address_street": "Jakobistr. 39",
"address_city": "Hannover",
"address_zip": "30163",
"address_country": "DE",
"address_full_country": "DE",
"main_phone": "+49 511 123456",
"main_email": "lena.hartmann@example.org",
"name": "Beispiel"
},
"employment_contracts": [
{
"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
}
],
"employment_contract_groups": [
{
"id": 42,
"name": "Beispiel",
"staged_absence_approval": true,
"shift_booking_sync": true,
"week_total_hours": 1.5,
"week_total_days": 1.5,
"year_vacation_days": 1.5,
"month_vacation_days": 1.5,
"year_vacation_weeks": 1.5,
"monday_hours": 1.5
}
],
"connection": {
"id": 42,
"ha_webhook_url": "https://vynst.de",
"name": "Beispiel",
"provider": "string",
"mode": "string",
"bridge_host": "string",
"bridge_port": 1,
"loqed_lock_id": "42",
"ha_instance_id": "42",
"scan_device_ids": "string"
},
"provider_device_id": "42",
"provider_device_type": "string",
"deleted": true
}Locks the entry.
POST/api/event/smart_lock/{identifier}/lock
Path parameters
identifierrequiredstring |
Responses
default
curl --request POST \
--url https://your-instance.iw-erp.de/api/event/smart_lock/42/lock \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/42/lock', 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/event/smart_lock/42/lock"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, 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/event/smart_lock/42/lock', [
'headers' => [
'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/event/smart_lock/42/lock"),
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/event/smart_lock/42/lock")
.post(null)
.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/event/smart_lock/42/lock"
req, _ := http.NewRequest("POST", 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/smart_lock_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 SmartLockController.lock('42');
if (result.success) {
print(result.data);
}Unlocks the entry.
POST/api/event/smart_lock/{identifier}/unlock
Path parameters
identifierrequiredstring |
Responses
default
curl --request POST \
--url https://your-instance.iw-erp.de/api/event/smart_lock/42/unlock \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/42/unlock', 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/event/smart_lock/42/unlock"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, 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/event/smart_lock/42/unlock', [
'headers' => [
'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/event/smart_lock/42/unlock"),
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/event/smart_lock/42/unlock")
.post(null)
.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/event/smart_lock/42/unlock"
req, _ := http.NewRequest("POST", 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/smart_lock_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 SmartLockController.unlock('42');
if (result.success) {
print(result.data);
}Returns the current status.
GET/api/event/smart_lock/{identifier}/status
Path parameters
identifierrequiredstring |
Responses
default
curl --request GET \
--url https://your-instance.iw-erp.de/api/event/smart_lock/42/status \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/42/status', 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/event/smart_lock/42/status"
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/event/smart_lock/42/status', [
'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/event/smart_lock/42/status"),
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/event/smart_lock/42/status")
.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/event/smart_lock/42/status"
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/smart_lock_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 SmartLockController.status('42');
if (result.success) {
print(result.data);
}Issues a code that opens a Comydo or QRLock smart lock for {@see SmartLockAccessCodeService::VALID_SECONDS} seconds; the app shows it as QR code at the scanner.
POST/api/event/smart_lock/{identifier}/access_code
Path parameters
identifierrequiredstring |
Responses
200The access codeobject
Show fields (3)
codestringvalid_untilstring (date-time)valid_secondsinteger
curl --request POST \
--url https://your-instance.iw-erp.de/api/event/smart_lock/42/access_code \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/event/smart_lock/42/access_code', 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/event/smart_lock/42/access_code"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, 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/event/smart_lock/42/access_code', [
'headers' => [
'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/event/smart_lock/42/access_code"),
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/event/smart_lock/42/access_code")
.post(null)
.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/event/smart_lock/42/access_code"
req, _ := http.NewRequest("POST", 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/smart_lock_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 SmartLockController.accessCode('42');
if (result.success) {
print(result.data);
}{
"code": "string",
"valid_until": "2026-10-15T09:30:00+02:00",
"valid_seconds": 1
}