Calendar & Working Times
The calendar endpoints allow you to manage working time calendars, regular working times, days off (e.g. holidays, company shutdowns), and contact-specific non-working times (vacations, parental leave, etc.). This data is used for resource planning and capacity calculation in InLoox.
Each contact and each planning element can be assigned to its own calendar. The default calendar is used for all contacts and planning elements without an individual assignment.
Calendar
The Calendar entity represents a working time calendar. Calendars define the regular working times and can be assigned to different contacts.
Data Model
| Property | Type | Description |
|---|---|---|
CalendarId | guid | Unique ID of the calendar. |
Name | string | Name of the calendar. |
Imported | bool? | Whether the calendar was imported. |
VisibleInPlanning | bool | Whether the calendar is visible in planning. |
VisibleInContact | bool | Whether the calendar is visible in the contact view. |
SystemTimeZoneId | string | System time zone ID. An IANA time zone ID (e.g. "Europe/Berlin", "America/New_York"). |
Endpoints
CRUD Operations
List all calendars
/odata/CalendarSupports OData query options.
Get a calendar by ID
/odata/Calendar({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CalendarId. |
Create a new calendar
/odata/Calendar| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiCalendar> | ✅ | JSON object with the calendar properties. |
Update a calendar
/odata/Calendar({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CalendarId. |
Body | Delta<ApiCalendar> | ✅ | JSON object with the fields to update. |
Delete a calendar
/odata/Calendar({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CalendarId. |
Deleting a calendar also removes all associated working times and days off. Make sure that no contact or planning element is still assigned to this calendar, as otherwise recalculations will be performed.
Returns 204 No Content on success.
Calendar Functions
Calculate working time between two points in time
/Calendar/CalculateWorkBetweenCalculates the effective working time between two points in time, taking the specified calendar into account.
Use this function to determine the actual working time for resource planning and effort calculation. Weekends and holidays are automatically excluded.
Get the calendar time zone or default time zone
/odata/Calendar({key})/GetCalendarTimeZoneOrDefault()| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The CalendarId. |
Returns the configured time zone of the calendar. If no specific time zone is set, the default time zone is returned.
WorkingTime
The WorkingTime entity defines the regular working times of a calendar. Each entry represents a working time block (e.g. Monday 08:00–17:00).
Data Model
| Property | Type | Description |
|---|---|---|
WorkingTimeId | guid | Unique ID of the working time. |
CalendarId | guid | ID of the associated calendar. |
StartTime | DateTimeOffset | Start of the working time. |
EndTime | DateTimeOffset | End of the working time. |
IsAllDay | bool | Whether this is an all-day entry. |
IsWorkDay | bool | Whether this is a work day. |
OrdinalPosition | int? | Deprecated. |
Endpoints
List all working times of all calendars
/odata/WorkingTimeSupports OData query options.
Get a working time by ID
/odata/WorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeId. |
Create a new working time
/odata/WorkingTime| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiWorkingTime> | ✅ | JSON object with the working time properties. |
Update a working time
/odata/WorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeId. |
Body | Delta<ApiWorkingTime> | ✅ | JSON object with the fields to update. |
Delete a working time
/odata/WorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeId. |
Deleting a working time is permanent and cannot be undone.
Returns 204 No Content on success.
WorkingTimeDayOff
The WorkingTimeDayOff entity defines holidays and days off in a calendar. These days are taken into account for capacity calculation and planning.
Data Model
| Property | Type | Description |
|---|---|---|
WorkingTimeDayOffId | guid | Unique ID of the day off. |
CalendarId | guid | ID of the associated calendar. |
Name | string | Label (e.g. Christmas, Independence Day). |
StartTime | DateTimeOffset | Start of the day off period. |
EndTime | DateTimeOffset | End of the day off period. |
IsGlobal | bool | Whether the day off applies to all calendars. |
Endpoints
List all days off of all calendars
/odata/WorkingTimeDayOffSupports OData query options.
Get a day off by ID
/odata/WorkingTimeDayOff({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeDayOffId. |
Create a new day off
/odata/WorkingTimeDayOff| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiWorkingTimeDayOff> | ✅ | JSON object with the day off properties. |
Update a day off
/odata/WorkingTimeDayOff({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeDayOffId. |
Body | Delta<ApiWorkingTimeDayOff> | ✅ | JSON object with the fields to update. |
Delete a day off
/odata/WorkingTimeDayOff({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The WorkingTimeDayOffId. |
Deleting a day off is permanent and cannot be undone.
Returns 204 No Content on success.
ContactNonWorkingTime
The ContactNonWorkingTime entity manages the individual non-working time of a contact (e.g. vacation, sick leave). These times are taken into account for resource planning.
Data Model
| Property | Type | Description |
|---|---|---|
ContactNonWorkingTimeId | guid | Unique ID of the non-working time entry. |
ContactId | guid | ID of the affected contact. |
Name | string | Label of the non-working time (e.g. Vacation, Sick Leave). |
StartTime | DateTimeOffset | Start of the non-working time. |
EndTime | DateTimeOffset | End of the non-working time. |
Endpoints
List all non-working times of all contacts
/odata/ContactNonWorkingTimeSupports OData query options.
Get a non-working time by ID
/odata/ContactNonWorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The ContactNonWorkingTimeId. |
Create a new non-working time
/odata/ContactNonWorkingTime| Parameter | Type | Required | Description |
|---|---|---|---|
Body | Delta<ApiContactNonWorkingTime> | ✅ | JSON object with the non-working time properties. |
Update a non-working time
/odata/ContactNonWorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The ContactNonWorkingTimeId. |
Body | Delta<ApiContactNonWorkingTime> | ✅ | JSON object with the fields to update. |
Delete a non-working time
/odata/ContactNonWorkingTime({key})| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The ContactNonWorkingTimeId. |
Deleting a non-working time is permanent and cannot be undone.
Returns 204 No Content on success.
Delete all non-working times
/odata/ContactNonWorkingTime/DeleteAllRemoves all non-working time entries.
This action deletes all non-working time entries in the system and cannot be undone. Use this endpoint with extreme caution.
OData Query Examples
List calendars
GET /odata/Calendar?$orderby=Name
Create a calendar
POST /odata/Calendar
Content-Type: application/json
{
"Name": "Standard Calendar NRW",
"VisibleInPlanning": true,
"VisibleInContact": true,
"SystemTimeZoneId": "W. Europe Standard Time"
}
Rename a calendar
PATCH /odata/Calendar({key})
Content-Type: application/json
{
"Name": "Calendar Region 3"
}
Calculate working time between two points in time
POST /Calendar/CalculateWorkBetween
Content-Type: application/json
{
"CalendarId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Start": "2025-01-06T08:00:00Z",
"End": "2025-01-10T17:00:00Z"
}
Get working times of a calendar
GET /odata/WorkingTime?$filter=CalendarId eq {calendarId}&$orderby=OrdinalPosition
Create a working time
POST /odata/WorkingTime
Content-Type: application/json
{
"CalendarId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"StartTime": "2025-01-06T08:00:00Z",
"EndTime": "2025-01-06T17:00:00Z",
"IsAllDay": false,
"IsWorkDay": true,
"OrdinalPosition": 1
}
Update a working time
PATCH /odata/WorkingTime({key})
Content-Type: application/json
{
"EndTime": "2025-01-06T16:00:00Z"
}
Get days off of a calendar
GET /odata/WorkingTimeDayOff?$filter=CalendarId eq {calendarId}&$orderby=StartTime
Create a day off
POST /odata/WorkingTimeDayOff
Content-Type: application/json
{
"CalendarId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Name": "Independence Day",
"StartTime": "2025-10-03T00:00:00Z",
"EndTime": "2025-10-03T23:59:59Z",
"IsGlobal": false
}
Rename a day off
PATCH /odata/WorkingTimeDayOff({key})
Content-Type: application/json
{
"Name": "National Holiday"
}
Get non-working times of a contact
GET /odata/ContactNonWorkingTime?$filter=ContactId eq {contactId}&$orderby=StartTime
Create a non-working time
POST /odata/ContactNonWorkingTime
Content-Type: application/json
{
"ContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Name": "Vacation",
"StartTime": "2025-08-04T00:00:00Z",
"EndTime": "2025-08-15T23:59:59Z"
}
Extend a non-working time
PATCH /odata/ContactNonWorkingTime({key})
Content-Type: application/json
{
"EndTime": "2025-08-22T23:59:59Z"
}
Use $filter with CalendarId or ContactId to retrieve entries for a specific calendar or contact.