The goal is to provide every Planbition (database) entity in the REST API. Every entity will have an ExternalRestID. This ExternalRestID is an unique identifier in the whole instance of the Planbition for that specific entity. The ExternalRestID should be known in the system that's providing or fetching the data. For every endpoint/entity, we go in more depth where how this ExternalRestID is maintained.
Composite ExternalRestIds. For entities whose id is computed from other ids (for example {Contract.ExternalRestId}_{ShiftQualificationDemand.ExternalRestId}_{StartTime}), the parts are joined with a separator. By default this is an underscore ('_'), and every formula in this document is written with that default.
Configurable separator. The separator can be set per environment (database) by Planbition (setting ExternalRestIdSeparator). Allowed values: exactly one of _ . ~ ! $ , Any other value (including '-' and '/') is ignored with a warning in the log and '_' is used. The value must be set once, before go-live: changing it changes every computed id that the API returns and accepts. A client-supplied ExternalRestId can never contain the active separator, '/' or ''.
Employee identifier per REST user. An employee can have two ids: ExternalRestId and ExternalRestId2. Which one a REST user works with is a setting of that REST user (IdentifierMode, managed in the admin module in Infinity): 0 = ExternalRestId (the default for every REST user) or 1 = ExternalRestId2. A REST user with IdentifierMode 1 sends and receives ExternalRestId2 everywhere an employee id appears: the id of an Employee, every personId/employeeId field in other endpoints, filtering and sorting on those fields, and every computed ExternalRestId that contains an employee id (for example the EmployeeQualification id {Employee.ExternalRestId}_{Qualification.ExternalRestId} is then built with ExternalRestId2). The field names in requests and responses do not change.
A REST user only sees employees that have a value in the id column of its own IdentifierMode, and only the data linked to those employees: a REST user with IdentifierMode 1 does not see employees without an ExternalRestId2, and a REST user with IdentifierMode 0 does not see employees without an ExternalRestId. An employee created through the API only gets the id of the calling REST user's IdentifierMode. Both ids are unique within an environment.
Planbition REST API has its own authorisation based on the REST Users. These authorisations are managed through the admin module in Infinity.
There are two different user types:
Administrator: user has rights to all data from all organisations.
Organisation: user has rights to all data from specific organisations.
The REST user has CRUD rights for the existing REST API endpoints.
Planbition can feature flag on/off specific endpoints.
Calling the API starts with logging in: see Authenticate.
Entities refer to each other by ExternalRestId, so an entity can only be created once the entities it refers to exist (and have an ExternalRestId). Work through the steps from top to bottom; according to their checklists, entities in the same step do not depend on each other. Each endpoint's Checklist lists its own prerequisites in detail.
GET requests employ pagination by default, iterating through all results for that request and only returning a specific amount and subset as defined by the following query parameters:
PageNumber: This parameter specifies which page of results to retrieve. It is a positive integer starting from 1. The value indicates the position in the sequence of pages of results. For example, if PageNumber is set to 1, the first set of results will be returned; if set to 2, the second set of results will be returned, and so on.
The API supports dynamic filtering on GET-requests, enabling users to refine their search results based on specific criteria. This powerful feature allows for granular control over the data returned by the API.
Filter Query
The Filter query parameter allows users to specify filtering conditions directly in the query string. The syntax for this parameter follows a logical structure, enabling various operations such as "contains", "equals", and comparison operators.
Supported Operations
Multiple filters can be combined using the logical operator and. Each filter condition must be separated by the keyword and.
Example
To filter entities where the Category is "Books" and the Price is less than 50:
GET /api/entities?filter=Category eq 'Books' and Price lt 50
Handling Invalid Filters
If the API encounters an invalid filter format, it will return a 400 Bad Request status code along with an error message indicating the nature of the issue.
Dynamic Filtering Example
Consider an example where we want to retrieve a list of products that are in the "Electronics" category, have a rating of 4 or higher, and are in stock.
GET /api/products?filter=Category eq 'Electronics' and Rating ge 4 and Stock gt 0
Filtering and Pagination
Filtering can be combined with pagination parameters (PageNumber and PageSize) to refine the results further and manage the amount of data returned to each request.
Example
To retrieve the first page of products with the filters and a page size of 20:
GET /api/products?filter=Category eq 'Electronics' and Rating ge 4 and Stock gt 0&PageNumber=1&PageSize=20
The API has a robust exception handling mechanism in place to handle various types of exceptions that may occur during the execution of requests. This mechanism ensures that appropriate HTTP status codes and error messages are returned to the user, providing clear information about the nature of the error.
Exception Table
This table lists all handled exceptions, conditions in which they occur, the HTTP status code returned upon occurrence, and the associated error message.
| Exception | Condition | HTTP Status code | Error message | To do |
|---|---|---|---|---|
| ApplicationException | Invalid token | 403 Forbidden | Invalid token | Check your token or do a re-authenticate |
| ApplicationException | Other application exceptions | 400 Bad request | Error message from the exception | Check your request for invalid formats |
| AuthenticateApiException | Any exception in Authenticate API | 500 Internal server error | Something went wrong in the AuthenticateApi | Check your token or do a re-authenticate |
| InvalidFormatException | Any invalid format exception | 400 Bad request | Error message from the exception | Check your request for invalid formats |
| KeyNotFoundException | Key not found | 404 Not found | Error message from the exception | Check your request URL |
| NotAuthorizedException | Not authorized | 403 Forbidden | Error message from the exception | Check your token or do a re-authenticate |
| ValidationException | Request data validation exception | 422 Unprocessable entity | Error message from the exception | Check your request for missing fields |
| Default | Any other unhandled exception | 500 Internal server error | Internal server errors. Check logs. | Contact Planbition support |
Planbition REST API is issuing JWT tokens as part of the authentication process.
Calling the Authenticate endpoint (/authenticate/login) successfully, will result in a JWT token returning from the REST API.
Request body for the login endpoint (/authenticate/login):
{
"Key": "string", // A unique secret key, provided by Planbition. Not to be shared with other organisations
"UserName": "string", // Username for the REST user
"Password": "string" // Password for the REST user
}
When the request was valid the following format will come back from the API, like the example below:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRJZCI6IjcxNjg4ZDVmLTQxZjItNDE2Mi05YWY1LWUxMjI1NGFjM2I2ZSIsInVzZXJJZCI6IjI1IiwiZE5hbWUiOiJ3b1UzakN5b0p3enlhSTh5Tmh1WlMvZjRDNzdPK2dhaGYvbFcvZjJveTVrPSIsImRVc2VyIjoibFhyekw1RjFCa2dWUUtVQzdIN29WZz09IiwiZEtleSI6ImlLVDQzTHRRMGFIV2RyK1VacmhWdXc9PSIsInJlc3RVc2VyVHlwZUlkIjoiMSIsIm5iZiI6MTc1MDMxNDY0MiwiZXhwIjoxNzUwMzE4MjQyLCJpYXQiOjE3NTAzMTQ2NDJ9.sLSlODiKo6RY9VN6G2qxWL97f0qXCDPJVz2P5yRMr0k",
"tokenExpireMinutes": 60,
"success": true,
"error": ""
}
The token value has an expiration time of 60 minutes.
The token has to be added as a bearer token in every other API Request.
Example of a request containing a Bearer token:
POST /api/Employee HTTP/1.1
Host: api.planbition.nl
Content-Type: application/json
Accept: text/plain
Authorization: Bearer ey12345678...
Content-Length: 652
# Request Body
...
Or with POSTMAN for example:
A PlanbitionRestApi.DTO.Authenticate.LoginRequest containing a credential used to authenticate with the API.
| Key required | string non-empty |
| UserName required | string non-empty |
| Password required | string non-empty |
{- "Key": "string",
- "UserName": "string",
- "Password": "string"
}The Employees can be managed in the HRM module.
An Employee has an EmployeeType, can have 0..* Contracts and belongs to an OrganisationStructure.
Employee is needed for the schedule module, to schedule employees on shifts.
EmployeeType can be used to filter on in reports and a default EmployeeType can be set in the admin module per organisation. If this default EmployeeType is present, EmployeeType is optional in the Employee POST endpoint.
To be able to use the Employee in the REST API, the ExternalRestID should be filled.
Keep in mind that all Employees without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with OrganisationStructure, EmployeeType, Nationality.
To make this endpoint Employee usable, check the following things:
This endpoint will fetch all Employees with an ExternalRestID provided and based on the REST user authorization.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Employee | 0bdd221d-084a-4f7d-9c86-8460266ceaa9 |
| country | Text (200) | Optional | Name of the country | Netherlands |
| employeeType | Text (200) | Optional | Name of the EmployeeType for this Employee | Own Employee |
| organisationStructureName | Text (300) | Required | Name of the OrganisationStructure for this Employee | Planbition |
| firstName | Text (300) | Required | Firstname of this Employee | Jan |
| insertion | Text (50) | Optional | Insertion of this Employee | van |
| lastName | Text (300) | Required | Lastname of this Employee | Janssen |
| street | Text (300) | Optional | Address street of this Employee | Kerkstraat |
| number | Text (100) | Optional | Address streetnumber of this Employee | 1 |
| numberAddition | Text (50) | Optional | Address streetnumber addition of this Employee | A |
| postalCode | Text (100) | Optional | Address postalcode of this Employee | 1234AB |
| city | Text (100) | Optional | Address city of this Employee | Helmond |
| county | Text (100) | Optional | Address county of this Employee | Noord-Brabant |
| countryIsoCode | Text (2) | Optional | Address country ISO2 of this Employee | NL |
| telephone1 | Text (50) | Optional | Telephone Home of this Employee | 0493123456 |
| telephone2 | Text (50) | Optional | Phone number of this Employee | 06123456789 |
| Text (300) | Required | Emailaddress of this Employee | employee@example.com | |
| gender | Text (1) | Required | Gender of this Employee (M, F, U) | M |
| employeeNumber | Text (200) | Required | Unique employeenumber of this Employee | 123456789 |
| externalId | Text (50) | Optional | Extra externalId of this Employee (legacy integration purposes) | UUID123456789 |
| birthDate | DateObject | Optional | Birthdate of this Employee | { "year": 1954, "month": 12, "day": 1 } |
| title | Text (100) | Optional | Title of this Employee | Dhr. |
| employeeTypeId | Text (100) | Required | ExternalRestId of the EmployeeType for this Employee | OwnEmployee |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure for this Employee | e63f07a4-a1bc-482b-a35c-e314ba290cca |
| accountType | Number | Required | Account of the Employee (0: Default, 1: Azure, 2: Auth0, 3: Okta) | 0 |
| isActive | Boolean | Required | Active state of the Employee | true |
| nationality | Text (2) | Optional | ISO2 of Nationality | NL |
| addedOn | DateObject | Optional | Date the Employee was added (read-only) |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
This endpoint will create an Employee in the database. The REST user can only insert employees into organisations that the REST user is authorized for.
The Rest user is able to insert employees on Customer level, OrganisationStructure level or CustomerStructureLevel.
Organisation level: The employee will be assigned directly to the given ExternalRestId of the OrganisationStructure. Use organisationStructureId in request.
CustomerStructure level: The employee will be assigned on the connected OrganisationStructure from the give CustomerStructure ExternalRestID. Use customerStructureId in request.
Customer level: The employee will be assigned on the connected OrganisationStructure from the give Customer ExternalRestID, based on the root CustomerStructure of that Customer. Use customerId in request.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Employee | 0bdd221d-084a-4f7d-9c86-8460266ceaa9 |
| customerId | Text (100) | Required * | ExternalRestId of Customer | bd3e70ad-0fb6-41b8-b383-f747bf9d45c7 |
| customerStructureId | Text (100) | Required * | ExternalRestId of CustomerStructure | bd3e70ad-0fb6-41b8-b383-f747bf9d45c7 |
| organisationStructureId | Text (100) | Required * | ExternalRestId of OrganisationStructure | bd3e70ad-0fb6-41b8-b383-f747bf9d45c7 |
| firstName | Text (300) | Required | Firstname of this Employee | Jan |
| insertion | Text (50) | Optional | Insertion of this Employee | Van |
| lastName | Text (300) | Required | Lastname of this Employee | Janssen |
| street | Text (300) | Optional | Address street of this Employee | Kerkstraat |
| number | Text (100) | Optional | Address streetnumber of this Employee | 1 |
| numberAddition | Text (50) | Optional | Address streetnumber addition of this Employee | A |
| postalCode | Text (100) | Optional | Address postalcode of this Employee | 1234AB |
| city | Text (100) | Optional | Address city of this Employee | Helmond |
| county | Text (100) | Optional | Address county of this Employee | Noord-Brabant |
| countryIsoCode | Text (2) | Optional | Address country ISO2 of this Employee | NL |
| telephone1 | Text (50) | Optional | Telephone Home of this Employee | 0493123293 |
| telephone2 | Text (50) | Optional | Phone number of this Employee | 0612345678 |
| Text (300) | Optional | Emailaddress of this Employee. Email validation is in place. If empty,– is applied. | employee@example.com | |
| gender | Text (1) | Required | Gender of this Employee (M, F, U) | M |
| employeeNumber | Text (200) | Required | Unique employeenumber of this Employee | 123456789 |
| externalId | Text (50) | Optional | Extra externalId of this Employee (legacy integration purposes) | UUID123456789 |
| birthDate | DateObject | Optional | Birthdate of this Employee | { "year": 1965, "month": 1, "day": 22 } |
| title | Text (100) | Optional | Title of this Employee | Dhr. |
| employeeTypeId | Text (100) | Optional | ExternalRestId of the EmployeeType for this Employee | Own Employee |
| accountType | Number | Optional | Account of the Employee (0: Default, 1: Azure, 2: Auth0, 3: Okta). Default 0. | 0 |
| isActive | Boolean | Required | Active state of the Employee | true |
| nationality | Text (2) | Optional | ISO2 of Nationality | NL |
Response
If the response was successful, the REST user will get an inserted Employee back, like described in GET.
See Exception handling for unsuccessful responses.
A Employee to create and persist.
| id required | string [ 1 .. 100 ] characters |
| customerId | string or null <= 50 characters |
| customerStructureId | string or null <= 50 characters |
| firstName required | string non-empty |
| insertion | string or null <= 50 characters |
| lastName required | string non-empty |
| street | string or null |
| number | string or null |
| numberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| gender | string or null <= 1 characters |
| employeeNumber required | string non-empty |
| externalId | string or null <= 50 characters |
object (DateObject) | |
| title | string or null |
| employeeTypeId | string or null <= 50 characters |
| organisationStructureId | string or null <= 50 characters |
| accountType | integer <int64> |
| isActive required | boolean |
| nationality | string or null |
{- "id": "string",
- "customerId": "string",
- "customerStructureId": "string",
- "firstName": "string",
- "insertion": "string",
- "lastName": "string",
- "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "gender": "s",
- "employeeNumber": "string",
- "externalId": "string",
- "birthDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "title": "string",
- "employeeTypeId": "string",
- "organisationStructureId": "string",
- "accountType": 0,
- "isActive": true,
- "nationality": "string"
}This endpoint will update an Employee in the database. The REST user can only update employees on organisations that the REST user is authorized for.
Request
See specs in POST
Response
If the response was successful, the REST user will get an updated Employee back, like described in GET.
See Exception handling for unsuccessful responses.
A Employee to synchronize the current matching Employee with.
| id required | string [ 1 .. 100 ] characters |
| customerId | string or null <= 50 characters |
| customerStructureId | string or null <= 50 characters |
| firstName required | string non-empty |
| insertion | string or null <= 50 characters |
| lastName required | string non-empty |
| street | string or null |
| number | string or null |
| numberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| gender | string or null <= 1 characters |
| employeeNumber required | string non-empty |
| externalId | string or null <= 50 characters |
object (DateObject) | |
| title | string or null |
| employeeTypeId | string or null <= 50 characters |
| organisationStructureId | string or null <= 50 characters |
| accountType | integer <int64> |
| isActive required | boolean |
| nationality | string or null |
{- "id": "string",
- "customerId": "string",
- "customerStructureId": "string",
- "firstName": "string",
- "insertion": "string",
- "lastName": "string",
- "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "gender": "s",
- "employeeNumber": "string",
- "externalId": "string",
- "birthDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "title": "string",
- "employeeTypeId": "string",
- "organisationStructureId": "string",
- "accountType": 0,
- "isActive": true,
- "nationality": "string"
}This endpoint will partially update a Employee in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated Employee back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| customerId | string or null <= 50 characters |
| customerStructureId | string or null <= 50 characters |
| firstName required | string non-empty |
| insertion | string or null <= 50 characters |
| lastName required | string non-empty |
| street | string or null |
| number | string or null |
| numberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| gender | string or null <= 1 characters |
| employeeNumber required | string non-empty |
| externalId | string or null <= 50 characters |
object (DateObject) | |
| title | string or null |
| employeeTypeId | string or null <= 50 characters |
| organisationStructureId | string or null <= 50 characters |
| accountType | integer <int64> |
| isActive required | boolean |
| nationality | string or null |
{- "id": "string",
- "customerId": "string",
- "customerStructureId": "string",
- "firstName": "string",
- "insertion": "string",
- "lastName": "string",
- "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "gender": "s",
- "employeeNumber": "string",
- "externalId": "string",
- "birthDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "title": "string",
- "employeeTypeId": "string",
- "organisationStructureId": "string",
- "accountType": 0,
- "isActive": true,
- "nationality": "string"
}This endpoint will delete the Employee (hard-delete) from the database. Including all referenced data, like schedule data, contracts, and user authorization. The id is passed in the URL: DELETE /api/Employee/{id}.
The REST User can only delete employees which it is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Employee | bd3e70ad-0fb6-41b8-b383-f747bf9d45c7 |
| id required | string The ID value of the Employee to delete. |
This endpoint creates or updates multiple Employee records in a single request (POST /api/Employee/InsertUpdateBulk). Each item has the fields of POST and is matched on its id: an existing Employee is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
A list of Employees to create or update.
| id required | string [ 1 .. 100 ] characters |
| customerId | string or null <= 50 characters |
| customerStructureId | string or null <= 50 characters |
| firstName required | string non-empty |
| insertion | string or null <= 50 characters |
| lastName required | string non-empty |
| street | string or null |
| number | string or null |
| numberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| gender | string or null <= 1 characters |
| employeeNumber required | string non-empty |
| externalId | string or null <= 50 characters |
object (DateObject) | |
| title | string or null |
| employeeTypeId | string or null <= 50 characters |
| organisationStructureId | string or null <= 50 characters |
| accountType | integer <int64> |
| isActive required | boolean |
| nationality | string or null |
[- {
- "id": "string",
- "customerId": "string",
- "customerStructureId": "string",
- "firstName": "string",
- "insertion": "string",
- "lastName": "string",
- "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "gender": "s",
- "employeeNumber": "string",
- "externalId": "string",
- "birthDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "title": "string",
- "employeeTypeId": "string",
- "organisationStructureId": "string",
- "accountType": 0,
- "isActive": true,
- "nationality": "string"
}
]The contracts for employees can be managed in the HRM module
Based on Contracts, Employees are scheduled onto shifts.
To be able to use the Contracts in the REST API, the ExternalRestID should be filled.
Keep in mind that all Contracts without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with Contract: Employee, OrganisationStructure, ContractType, ContractEndReason, ContractEmploymentType, ContractPhase, ContractAssignment, ScheduleEmployeeShiftDemand
To make this endpoint Contract usable, check the following things:
This endpoint will fetch all Contracts with an ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Contract | 4dbc4645-7be7-465a-8d6a-ce834d51763d |
| personName | Text (600) | Required | Full name for the Employee of the Contract. | Jan van Janssen |
| employeeNumber | Text (200) | Required | Employeenumber for the Employee of the Contract. | 123456789 |
| organisationStructureName | Text (200) | Required | Name for the OrganisationStructure of the Contract | Planbition |
| contractTypeName | Text (200) | Optional | Name for the ContractType of the Contract | Full contract |
| employmentTypeName | Text (200) | Optional | Name for the ContractEmploymentType of the Contract | EmploymentType 1 |
| endReasonName | Text (200) | Optional | Name for the ContractEndReason of the Contract | Terminated |
| phaseName | Text (200) | Optional | Name for the ContractPhase of the Contract | Phase A |
| personId | Text (100) | Required | ExternalRestId for the Employee of the Contract | 4f96437c-54a4-45fd-8574-ea524c26157a |
| organisationStructureId | Text (100) | Required | ExternalRestId for the OrganisationStructure of the Contract | 96179c90-a332-4aa0-96c2-859ef56a4a7f |
| contractTypeId | Text (100) | Optional | ExternalRestId for the ContractType of the Contract | FullContract |
| employmentTypeId | Text (100) | Optional | ExternalRestId for the ContractEmploymentType of the Contract | EmployeeType1 |
| endReasonId | Text (100) | Optional | ExternalRestId for the ContractEndReason of the Contract | Terminated |
| phaseId | Text (100) | Optional | ExternalRestId for the ContractPhase of the Contract | PhaseA |
| workingHours | Number | Optional | Workinghours of the Contract | 40 |
| hourlyWage | Number | Optional | HourlyWage of the Contract | 14.54 |
| preferredHours | Number | Optional | PreferredHours of the Contract | 32 |
| rate | Number | Optional | Rate of the Contract | 5.56 |
| travelCost | Number | Optional | TravelCost of the Contract | 10.43 |
| startDate | DateObject | Required | Startdate of the Contract | { "year": 2024, "month": 1, "day": 22 } |
| endDate | DateObject | Required | Enddate of the Contract | { "year": 2025, "month": 12, "day": 1 } |
| externalId | Text (50) | Optional | Extra ExternalId of the Contract | 987654321 |
| externalDescription | Text (300) | Optional | Extra description of the contract | Heftruckdriver |
| clrId | Text (100) | Optional | ExternalRestId of the CLR (collective labour agreement) referenced by the Contract. Returns null when no CLR is set. | Esther |
| workingHoursMax | Number | Optional | Maximum working hours of the Contract. Empty (null) when the Contract has no maximum. | 38 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personName": "string",
- "employeeNumber": "string",
- "organisationStructureName": "string",
- "contractTypeName": "string",
- "employmentTypeName": "string",
- "endReasonName": "string",
- "phaseName": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a Contract in the database. The REST user can only insert contracts on organisations that the REST user is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Contract | 4dbc4645-7be7-465a-8d6a-ce834d51763d |
| personId | Text (100) | Required | ExternalRestId for the Employee of the Contract | 4f96437c-54a4-45fd-8574-ea524c26157a |
| organisationStructureId | Text (100) | Required | ExternalRestId for the OrganisationStructure of the Contract | 96179c90-a332-4aa0-96c2-859ef56a4a7f |
| contractTypeId | Text (100) | Optional | ExternalRestId for the ContractType of the Contract | FullContract |
| employmentTypeId | Text (100) | Optional | ExternalRestId for the ContractEmploymentType of the Contract | EmploymentType |
| endReasonId | Text (100) | Optional | ExternalRestId for the ContractEndReason of the Contract | Terminated |
| phaseId | Text (100) | Optional | ExternalRestId for the ContractPhase of the Contract | PhaseA |
| workingHours | Number | Optional | Workinghours of the Contract | 32 |
| hourlyWage | Number | Optional | HourlyWage of the Contract | 12.34 |
| preferredHours | Number | Optional | PreferredHours of the Contract | 24 |
| rate | Number | Optional | Rate of the Contract | 5.67 |
| travelCost | Number | Optional | TravelCost of the Contract | 8.9 |
| startDate | DateObject | Required | Startdate of the Contract | { "year": 2024, "month": 1, "day": 22 } |
| endDate | DateObject | Required | Enddate of the Contract | { "year": 2025, "month": 5, "day": 22 } |
| externalId | Text (50) | Optional | Extra ExternalId of the Contract | 987654321 |
| externalDescription | Text (300) | Optional | Extra description of the contract | Heftruckdriver |
| clrId | Text (100) | Optional | Reference to the CLR's ExternalRestId. Defaults to the organisation's default CLR when omitted; an unknown value is rejected. | Esther |
| workingHoursMax | Number | Optional | Maximum working hours of the Contract. Must be 0 or higher; empty (null) means no maximum. On PUT an empty value clears the stored maximum; on PATCH the stored value is kept unless the field is sent. | 38 |
Response
If the response was successful, the REST user will get an inserted Contract back, like described in GET.
See Exception handling for unsuccessful responses.
A Contract to create and persist.
| id required | string [ 1 .. 100 ] characters |
| personId required | string [ 1 .. 100 ] characters |
| organisationStructureId required | string [ 1 .. 100 ] characters |
| contractTypeId | string or null <= 100 characters |
| employmentTypeId | string or null <= 100 characters |
| endReasonId | string or null <= 100 characters |
| phaseId | string or null <= 100 characters |
| workingHours | number <double> |
| workingHoursMax | number or null <double> |
| hourlyWage | number <double> |
| preferredHours | number <double> |
| rate | number or null <double> |
| travelCost | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| externalId | string or null |
| externalDescription | string or null |
| clrId | string or null |
{- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}
}This endpoint will update a Contract in the database. The REST user can only update contracts on organisations that the REST user is authorized for.
Request
See specs in POST.
Response
If the response was successful, the REST user will get an updated Contract back, like described in GET.
See Exception handling for unsuccessful responses.
A Contract to synchronize the current matching Contract with.
| id required | string [ 1 .. 100 ] characters |
| personId required | string [ 1 .. 100 ] characters |
| organisationStructureId required | string [ 1 .. 100 ] characters |
| contractTypeId | string or null <= 100 characters |
| employmentTypeId | string or null <= 100 characters |
| endReasonId | string or null <= 100 characters |
| phaseId | string or null <= 100 characters |
| workingHours | number <double> |
| workingHoursMax | number or null <double> |
| hourlyWage | number <double> |
| preferredHours | number <double> |
| rate | number or null <double> |
| travelCost | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| externalId | string or null |
| externalDescription | string or null |
| clrId | string or null |
{- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}
}This endpoint will partially update a Contract in the database. Unlike PUT, only the fields provided in the request body will be updated; omitted fields remain unchanged. The REST user can only update contracts on organisations that the REST user is authorized for.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated Contract back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| personId required | string [ 1 .. 100 ] characters |
| organisationStructureId required | string [ 1 .. 100 ] characters |
| contractTypeId | string or null <= 100 characters |
| employmentTypeId | string or null <= 100 characters |
| endReasonId | string or null <= 100 characters |
| phaseId | string or null <= 100 characters |
| workingHours | number <double> |
| workingHoursMax | number or null <double> |
| hourlyWage | number <double> |
| preferredHours | number <double> |
| rate | number or null <double> |
| travelCost | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| externalId | string or null |
| externalDescription | string or null |
| clrId | string or null |
{- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}
}This endpoint will delete the Contract (hard-delete) from the database. Including all referenced data, like schedule data and assignments. The id is passed in the URL: DELETE /api/Contract/{id}.
The REST User can only delete contracts which it is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Contract | 4dbc4645-7be7-465a-8d6a-ce834d51763d |
| id required | string The ID value of the Contract to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "contractTypeId": "string",
- "employmentTypeId": "string",
- "endReasonId": "string",
- "phaseId": "string",
- "workingHours": 0.1,
- "workingHoursMax": 0.1,
- "hourlyWage": 0.1,
- "preferredHours": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "externalId": "string",
- "externalDescription": "string",
- "clrId": "string"
}
}The contractAssignments for employees can be managed in the HRM module
Assignments are coming in from the back office into Planbition. Based on the assignments employees will get paid. By using the SETU timecard solution.
Assignment checks can also be done in the schedule assistant and during self-scheduling in the app.
To be able to use the ContractAssignments in the REST API, the ExternalRestID of the connected Contract should be filled.
Keep in mind that all ContractAssignments without an ExternalRestID on the Contract cannot be used in the REST API. This will include the entities that have a (in)direct relationship with ContractAssignment: Contract, Employee, OrganisationStructure, ContractType, ContractEndReason, ContractEmploymentType, ContractPhase, CustomerStructure, Customer
The id (externalRestId) of the ContractAssignment is computed and cannot be physically set in Infinity.
It's based on {Contract.ExternalRestId}{separator}{ContractAssignment.AssignmentNumber}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint ContractAssignment usable, check the following things:
This endpoint will fetch all ContractsAssignments with a Contract ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (300) | Required | Computed ExternalRestId of the ContractAssignment | dc9a3da8-d426-4e4d-8ddf-ede901bd638b_987654321 |
| employeeNumber | Text (200) | Required | Employeenumber for the Employee of the ContractAssignment. | 123456789 |
| customerId | Text (100) | Required | ExternalRestId for the Customer of the ContractAssignment | fa86043b-784f-4e44-827e-d8b1b84dc74a |
| customerName | Text (100) | Required | Name for the Customer of the ContractAssignment | Planbition |
| customerStructureName | Text (100) | Required | Name for the CustomerStructure of the ContractAssignment | Planbition IT |
| contractId | Text (100) | Required | ExternalRestId for the Contract of the ContractAssignment | dc9a3da8-d426-4e4d-8ddf-ede901bd638b |
| customerStructureId | Text (100) | Required | ExternalRestId for the CustomerStructure of the Contract | fe22d732-f814-4988-b217-6f7686447d23 |
| description | Text (300) | Optional | Description of the ContractAssignment | Description |
| workingHours | Number | Optional | Workinghours of the Contract | 40 |
| hourlyWage | Number | Optional | HourlyWage of the Contract | 12.34 |
| rate | Number | Optional | Rate of the Contract | 5.67 |
| travelCost | Number | Optional | TravelCost of the Contract | 8.9 |
| startDate | DateObject | Required | Startdate of the Contract | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the Contract | { "year": 2025, "month": 1, "day": 31 } |
| assignmentNumber | Text (200) | Required | Unique Assignmentnumber of the ContractAssignment | 987654321 |
| assignmentDescription | Text | Optional | Description of the assignment for the employee (SETU: function description) | Forklift driver |
| clrId | Text (100) | Optional | ExternalRestId of the CLR referenced by the ContractAssignment. Returns null when no CLR is set. | Esther |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
This endpoint will create a ContractAssigment in the database. The REST user can only insert contractAssignments on organisations/customerstructures that the REST user is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| personId | Text (100) | Optional * | ExternalRestId of the Employee. Use exactly one of contractId or personId. | 777a4230-e9a2-4764-b6da-e341b3364954 |
| contractId | Text (100) | Optional * | ExternalRestId of the Contract. Use exactly one of contractId or personId. | dc9a3da8-d426-4e4d-8ddf-ede901bd638b |
| customerStructureId | Text (100) | Required | ExternalRestId for the CustomerStructure of the ContractAssignment | fe22d732-f814-4988-b217-6f7686447d23 |
| description | Text (300) | Optional | Description of the ContractAssignment | Description |
| workingHours | Number | Optional | Workinghours of the ContractAssignment | 40 |
| hourlyWage | Number | Optional | HourlyWage of the ContractAssignment | 12.34 |
| rate | Number | Optional | Rate of the Contract | 5.67 |
| travelCost | Number | Optional | TravelCost of the ContractAssignment | 8.9 |
| startDate | DateObject | Required | Startdate of the ContractAssignment | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the ContractAssignment | { "year": 2025, "month": 1, "day": 31 } |
| assignmentNumber | Text (200) | Required | Unique Assignmentnumber of the ContractAssignment | 987654321 |
| assignmentDescription | Text | Optional | Description of the assignment for the employee (SETU: function description) | Forklift driver |
| contractTypeId | Text (100) | Optional | Only with personId: ExternalRestId of the ContractType for the employee's contract. An unknown id creates a new ContractType with this id as its name. | Temporary |
| clrId | Text (100) | Optional | Reference to the CLR's ExternalRestId. Defaults to the organisation's default CLR when omitted; an unknown value is rejected. | Esther |
Use exactly one of contractId or personId (both or neither is rejected). customerStructureId is always required.
When an assignment is inserted with personId and the person has no contract for that organisation yet, a new contract is created with a generated GUID as its id. An existing contract for the same person and organisation is reused; its id is never changed.
Response
If the response was successful, the REST user will get the inserted ContractAssignment back, like described in GET.
See Exception handling for unsuccessful responses.
A ContractAssignment to create and persist.
| id | string or null |
| contractId required | string [ 1 .. 100 ] characters |
| customerStructureId required | string [ 1 .. 100 ] characters |
| description | string or null |
| workingHours required | number <double> |
| hourlyWage required | number <double> |
| rate required | number <double> |
| travelCost required | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| assignmentNumber required | string non-empty |
| assignmentDescription | string or null |
| personId | string or null <= 100 characters |
| contractTypeId | string or null |
| clrId | string or null |
{- "id": "string",
- "contractId": "string",
- "customerStructureId": "string",
- "description": "string",
- "workingHours": 0.1,
- "hourlyWage": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "assignmentNumber": "string",
- "assignmentDescription": "string",
- "personId": "string",
- "contractTypeId": "string",
- "clrId": "string"
}This endpoint will update a ContractAssignment in the database. The REST user can only update contractAssignments on organisations/customerstructures that the REST user is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (300) | Required | Computed ExternalRestId of the ContractAssignment | dc9a3da8-d426-4e4d-8ddf-ede901bd638b_987654321 |
| contractId | Text (100) | Optional * | ExternalRestId of the Contract. Use exactly one of contractId or personId. | dc9a3da8-d426-4e4d-8ddf-ede901bd638b |
| personId | Text (100) | Optional * | ExternalRestId of the Employee. Use exactly one of contractId or personId. | 777a4230-e9a2-4764-b6da-e341b3364954 |
| customerStructureId | Text (100) | Required | ExternalRestId for the CustomerStructure of the ContractAssignment | fe22d732-f814-4988-b217-6f7686447d23 |
| description | Text (300) | Optional | Description of the ContractAssignment | Description |
| workingHours | Number | Optional | Workinghours of the ContractAssignment | 40 |
| hourlyWage | Number | Optional | HourlyWage of the ContractAssignment | 12.34 |
| rate | Number | Optional | Rate of the Contract | 5.67 |
| travelCost | Number | Optional | TravelCost of the ContractAssignment | 8.9 |
| startDate | DateObject | Required | Startdate of the ContractAssignment | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the ContractAssignment | { "year": 2024, "month": 1, "day": 31 } |
| assignmentNumber | Text (200) | Required | Unique Assignmentnumber of the ContractAssignment | 987654321 |
| assignmentDescription | Text | Optional | Description of the assignment for the employee (SETU: function description) | Forklift driver |
| contractTypeId | Text (100) | Optional | Only with personId: ExternalRestId of the ContractType for the employee's contract. An unknown id creates a new ContractType with this id as its name. | Temporary |
| clrId | Text (100) | Optional | Reference to the CLR's ExternalRestId. Persisted as-is on PUT, including null (clears the CLR). | Esther |
Response
If the response was successful, the REST user will get an updated ContractAssignment back, like described in GET.
See Exception handling for unsuccessful responses.
A ContractAssignment to synchronize the current matching ContractAssignment with.
| id | string or null |
| contractId required | string [ 1 .. 100 ] characters |
| customerStructureId required | string [ 1 .. 100 ] characters |
| description | string or null |
| workingHours required | number <double> |
| hourlyWage required | number <double> |
| rate required | number <double> |
| travelCost required | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| assignmentNumber required | string non-empty |
| assignmentDescription | string or null |
| personId | string or null <= 100 characters |
| contractTypeId | string or null |
| clrId | string or null |
{- "id": "string",
- "contractId": "string",
- "customerStructureId": "string",
- "description": "string",
- "workingHours": 0.1,
- "hourlyWage": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "assignmentNumber": "string",
- "assignmentDescription": "string",
- "personId": "string",
- "contractTypeId": "string",
- "clrId": "string"
}This endpoint will partially update a ContractAssignment in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated ContractAssignment back, like described in GET.
See Exception handling for unsuccessful responses.
| id | string or null |
| contractId required | string [ 1 .. 100 ] characters |
| customerStructureId required | string [ 1 .. 100 ] characters |
| description | string or null |
| workingHours required | number <double> |
| hourlyWage required | number <double> |
| rate required | number <double> |
| travelCost required | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| assignmentNumber required | string non-empty |
| assignmentDescription | string or null |
| personId | string or null <= 100 characters |
| contractTypeId | string or null |
| clrId | string or null |
{- "id": "string",
- "contractId": "string",
- "customerStructureId": "string",
- "description": "string",
- "workingHours": 0.1,
- "hourlyWage": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "assignmentNumber": "string",
- "assignmentDescription": "string",
- "personId": "string",
- "contractTypeId": "string",
- "clrId": "string"
}This endpoint will delete the ContractAssignment (hard-delete) from the database. The id is passed in the URL: DELETE /api/ContractAssignment/{id}.
The REST User can only delete contractAssignments which it is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ContractAssignment. | dc9a3da8-d426-4e4d-8ddf-ede901bd638b_987654321 |
| id required | string The ID value of the ContractAssignment to delete. |
This endpoint creates or updates multiple ContractAssignments in a single request (POST /api/ContractAssignment/InsertUpdateBulk). Each item uses the fields of POST:
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
A list of ContractAssignments to create or update.
| id | string or null |
| contractId required | string [ 1 .. 100 ] characters |
| customerStructureId required | string [ 1 .. 100 ] characters |
| description | string or null |
| workingHours required | number <double> |
| hourlyWage required | number <double> |
| rate required | number <double> |
| travelCost required | number <double> |
required | object (DateObject) |
required | object (DateObject) |
| assignmentNumber required | string non-empty |
| assignmentDescription | string or null |
| personId | string or null <= 100 characters |
| contractTypeId | string or null |
| clrId | string or null |
[- {
- "id": "string",
- "contractId": "string",
- "customerStructureId": "string",
- "description": "string",
- "workingHours": 0.1,
- "hourlyWage": 0.1,
- "rate": 0.1,
- "travelCost": 0.1,
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "assignmentNumber": "string",
- "assignmentDescription": "string",
- "personId": "string",
- "contractTypeId": "string",
- "clrId": "string"
}
]The qualifications for employees can be managed in the HRM module.
EmployeeQualifications can be check against the ShiftQualifications in the schedule assistant, during scheduling and during self-scheduling in the app.
To be able to use the EmployeeQualifications in the REST API, the ExternalRestID of the connected Employee and Qualification should be filled.
Keep in mind that all EmployeeQualifications without an ExternalRestID on the Employee or Qualification cannot be used in the REST API. This will include the entities that have a (in)direct relationship with EmployeeQualifications: Employee, Qualification
The id (externalRestId) of the EmployeeQualification is computed and cannot be physically set in Infinity.
It's based on {Employee.ExternalRestId}{separator}{Qualification.ExternalRestId}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint EmployeeQualification usable, check the following things:
This endpoint will fetch all EmployeeQualifications with an Employee and Qualification ExternalRestId provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the EmployeeQualification | 123456789 |
| employeeNumber | Text (100) | Required | Employeenumber for the Employee of the EmployeeQualification. | 123456789 |
| qualificationName | Text (200) | Required | Name for the Qualification of the EmployeeQualification | Picken |
| personId | Text (100) | Required | ExternalRestId for the Employee of the EmployeeQualification | 5cd11294-2180-4a7f-bf2d-7986822ad8a5 |
| qualificationId | Text (100) | Required | ExternalRestId for the Qualification of the EmployeeQualification | 01Picken |
| startDate | DateObject | Optional | Startdate of the EmployeeQualification | { "year": 2024, "month": 1, "day": 22 } |
| endDate | DateObject | Optional | Enddate of the EmployeeQualification | { "year": 2030, "month": 1, "day": 22 } |
| priority | Number | Required | Priority of the EmployeeQualification | 1 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "employeeNumber": "string",
- "qualificationName": "string",
- "personId": "string",
- "qualificationId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create an EmployeeQualification in the database. The REST user can only insert EmployeeQualifications on organisations that the REST user is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| personId | Text (100) | Required | ExternalRestId for the Employee of the EmployeeQualification | 5cd11294-2180-4a7f-bf2d-7986822ad8a5 |
| qualificationId | Text (100) | Required | ExternalRestId for the Qualification of the EmployeeQualification | 01Picken |
| startDate | DateObject | Optional | Startdate of the EmployeeQualification | { "year": 2024, "month": 1, "day": 22 } |
| endDate | DateObject | Optional | Enddate of the EmployeeQualification | { "year": 2025, "month": 1, "day": 22 } |
| priority | Number | Required | Priority of the EmployeeQualification | 1 |
Response
If the response was successful, the REST user will get an inserted EmployeeQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A EmployeeQualification to create and persist.
| id | string or null |
| personId required | string [ 1 .. 100 ] characters |
| qualificationId required | string [ 1 .. 100 ] characters |
object (DateObject) | |
object (DateObject) | |
| priority | integer <int32> |
{- "id": "string",
- "personId": "string",
- "qualificationId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}
}This endpoint will update an EmployeeQualification in the database. The REST user can only update EmployeeQualifications on organisations that the REST user is authorized for.
QualificationId and personId cannot be changed when updating an EmployeeQualification.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the EmployeeQualification (personId_qualificationId) | 123456789 |
| startDate | DateObject | Optional | Startdate of the EmployeeQualification | { "year": 2024, "month": 1, "day": 22 } |
| endDate | DateObject | Optional | Enddate of the EmployeeQualification | { "year": 2025, "month": 1, "day": 22 } |
| priority | Number | Required | Priority of the EmployeeQualification | 1 |
Response
If the response was successful, the REST user will get an updated EmployeeQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A EmployeeQualification to synchronize the current matching EmployeeQualification with.
| id required | string [ 1 .. 100 ] characters |
object (DateObject) | |
object (DateObject) | |
| priority | integer <int32> |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}
}This endpoint will partially update a EmployeeQualification in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated EmployeeQualification back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
object (DateObject) | |
object (DateObject) | |
| priority | integer <int32> |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}
}This endpoint will delete the EmployeeQualification (hard-delete) from the database. The id is passed in the URL: DELETE /api/EmployeeQualification/{id}.
The REST User can only delete EmployeeQualifications which it is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the EmployeeQualification. | 123456789 |
| id required | string The ID value of the EmployeeQualification to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0
}
}The EmployeeClock (punches) can be viewed in the TRS module
EmployeeClocks are connected to Employees. The EmployeeClock can be connected to CostCenter or ShiftQualificationDemand.
Keep in mind that all EmployeeClocks have a direct relationship with Employee, CostCenter/ShiftQualificationDemand. It's required that these entities have externalRestIds.
The id (externalRestId) of the EmployeeClock is computed and cannot be physically set in Infinity.
It's based on {Employee.ExternalRestId}{separator}{clockTime:ddMMyyyyHHmmssfff}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint EmployeeClock usable, check the following things:
This endpoint will fetch all EmployeeClock where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the EmployeeClock |
| personId | Text (100) | Required | ExternalRestId for the Employee |
| employeeNumber | Text (MAX) | Required | EmployeeNumber for the Employee |
| shiftQualificationDemandId | Text (100) | Optional | ExternalRestId for the ShiftQualificationDemand |
| shiftQualificationDemandName | Text (MAX) | Optional | Name for the ShiftQualificationDemand |
| shiftId | Text (100) | Optional | ExternalRestId for the Shift |
| shiftName | Text (MAX) | Optional | Name for the Shift |
| customerStructureId | Text (100) | Optional | ExternalRestId for the CustomerStructure |
| customerStructureName | Text (MAX) | Optional | Name for the CustomerStructure |
| customerId | Text (100) | Optional | ExternalRestId for the Customer |
| customerName | Text (MAX) | Optional | Name for the Customer |
| clockTime | DateTimeObject | Required | Raw clocktime of the EmployeeClock |
| clockType | Integer | Required | 1 (IN), 2 (OUT), 3 (CHANGE), -1 (BREAK) |
| costCenterId | Text (100) | Optional | ExternalRestId for the CostCenter |
| costCenterName | Text (MAX) | Optional | Name for the CostCenter |
| terminalSerial | Text (MAX) | Required | SerialNumber of the registered terminal |
| badgeNumber | Text (MAX) | Text | BadgeNumber of clocked employee |
| receivedOn | DateTimeObject | Required | Received on date |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personId": "string",
- "clockTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "clockType": 0,
- "costCenterId": "string",
- "costCenterName": "string",
- "employeeNumber": "string",
- "badgeNumber": "string",
- "shiftQualificationDemandId": "string",
- "shiftQualificationDemandName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "terminalSerial": "string",
- "receivedOn": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create an EmployeeClock in the database.
ShiftQualificationDemandId or CostCenterId are required when posting EmployeeClock.
Duplicate entries (uniqueness based on personId and clockTime) cannot be processed.
The REST API cannot process EmployeeClocks within less than 1 minute of each other.
The REST API cannot process EmployeeClocks from 24 hours in the future.
| Field | Type | Required | Description |
|---|---|---|---|
| personId | Text (100) | Required | ExternalRestId for the Employee |
| shiftQualificationDemandId | Text (100) | Optional | ExternalRestId for the ShiftQualificationDemand |
| clockTime | DateTimeObject | Required | Raw clocktime of the EmployeeClock |
| clockType | Integer | Required | 1 (IN), 2 (OUT), 3 (CHANGE), -1 (BREAK) |
| costCenterId | Text (100) | Optional | ExternalRestId for the CostCenter |
| terminalSerial | Text (MAX) | Required | SerialNumber of the registered terminal |
A EmployeeClock to create and persist.
| personId required | string [ 1 .. 100 ] characters |
| shiftQualificationDemandId | string or null <= 100 characters |
| terminalSerial required | string [ 1 .. 50 ] characters |
required | object (DateTimeObject) |
| clockType required | integer <int32> |
| costCenterId | string or null <= 100 characters |
{- "personId": "string",
- "shiftQualificationDemandId": "string",
- "terminalSerial": "string",
- "clockTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "clockType": 0,
- "costCenterId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "clockTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "clockType": 0,
- "costCenterId": "string",
- "costCenterName": "string",
- "employeeNumber": "string",
- "badgeNumber": "string",
- "shiftQualificationDemandId": "string",
- "shiftQualificationDemandName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "terminalSerial": "string",
- "receivedOn": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
}The shiftQualificationDemands can be managed in the Maintain shift demand feature in Infinity.
ShiftQualificationDemands are actually shifts on which employees are scheduled. They are below Shifts (ShiftGroups) and have configurable ShiftDemandDayOccupations (Default occupations) per dayType (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday). It's possible to manage the ShiftQualificationDemand and ShiftDemandDayOccupations (including breaks) combined in this endpoint.
It's not possible to delete ShiftDemandDayOccupations from a ShiftQualificationDemand.
You have the possibility to use fixed breaks or variable breaks. This can be configured in the admin module.
It's possible to delete breaks from the ShiftDemandDayOccupations. You can have up to 3 breaks per ShiftDemandDayOccupation, like the UI in Infinity.
To be able to use the ShiftQualificationDemand in the REST API, the ExternalRestID should be filled.
Keep in mind that all ShiftQualificationDemands without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ShiftQualificationDemand: CustomerStructure, Customer, OrganisationStructure, Shift
To make this endpoint ShiftQualificationDemand usable, check the following things:
This endpoint will fetch all ShiftQualificationDemand with an ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | SCH01_Ochtend |
| customerName | Text (200) | Required | Name for the Customer of the ShiftQualificationDemand. | Planbition |
| customerStructureName | Text (200) | Required | Name for the CustomerStructure of the ShiftQualificationDemand | Planbition Helmond |
| shiftName | Text (200) | Required | Name for the Shift of the ShiftQualificationDemand | Schoonmaken |
| shiftShortCode | Text (50) | Required | Shortcode for the Shift of the ShiftQualificationDemand | SCH01 |
| name | Text (200) | Required | Name of the ShiftQualificationDemand | Schoonmaken ochtend |
| occupationType | Number | Required | OccupationType of the ShiftQualificationDemand 1 (DayDemand), 2 (HourDemand) | 1 |
| shortCode | Text (50) | Required | Shortcode of the ShiftQualificationDemand | SCH01_Ochtend |
| description | Text (300) | Optional | Description of the ShiftQualificationDemand | Schoonmaken van kantoor in Helmond |
| startDate | DateObject | Optional | Startdate of the ShiftQualificationDemand | { "year": 2025, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the ShiftQualificationDemand | { "year": 2025, "month": 12, "day": 31 } |
| remark | Text (300) | Optional | Remark of the ShiftQualificationDemand | remark |
| checkCustomerQualification | Boolean | Required | CustomerQualification check enabled for the ShiftQualificationDemand | true |
| checkAssignments | Boolean | Required | Assignment check enabled for the ShiftQualificationDemand | true |
| costCenterId | Text (100) | Optional | ExternalRestId for the CostCenter of the ShiftQualificationDemand | Costcenter1 |
| priority | Number | Optional, default 0. Non-negative | Priority of the ShiftQualificationDemand | 1 |
| shiftId | Text (100) | Required | ExternalRestId for the OrganisationStructure of the ShiftQualificationDemand | SCH01 |
| customerId | Text (100) | Required | ExternalRestId for the Customer of the ShiftQualificationDemand | d8536029-c5db-4175-a745-455be3ff33cc |
| customerStructureId | Text (100) | Required | ExternalRestId for the CustomerStructure of the ShiftQualificationDemand | d8536029-c5db-4175-a745-455be3ff33cc |
| shiftDemandDayOccupations | Array | Optional | Array of ShiftDemandDayOccupations (Default occupation) for the ShiftQualificationDemand | |
| shiftDemandDayOccupations/demandDayType | Tekst (50) | Required | Day type of the ShiftDemandDayOccupation. Duplicate daytypes per ShiftQualificationDemand are not possible. Possible options: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday | Monday |
| shiftDemandDayOccupations/startTime | TimeObject | Required | Starttime of the ShiftDemandDayOccupation | { "hour": 11, "minute": 0 } |
| shiftDemandDayOccupations/endTime | TimeObject | Required | Endtime of the ShiftDemandDayOccupation | { "hour": 19 "minute": 30 } |
| shiftDemandDayOccupations/optimal | number | Required, non-negative number | Demand amount of the ShiftDemandDayOccupation | 3 |
| shiftDemandDayOccupations/breaks | Array | Optional | Array of Breaks | |
| shiftDemandDayOccupations/breaks/startTime | TimeObject | Required, only when using fixed breaks | Starttime of the fixed break | { "hour": 13, "minute": 0 } |
| shiftDemandDayOccupations/breaks/endTime | TimeObject | Required, only when using fixed breaks | Endtime of the fixed break | { "hour": 13, "minute": 30 } |
| shiftDemandDayOccupations/breaks/afterHours | Decimal | Required, only when using variable breaks | X hours after start shift, the break will start. Variable break. | 0 |
| shiftDemandDayOccupations/breaks/breakLength | Decimal | Required, only when using variable breaks | Duration of the variable break. | 0 |
| shiftDemandDayOccupations/breaks/paid | Boolean | Required | Break is already paid | true |
| extendShift | Boolean | - | Only used on PUT, see PUT. | false |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
This endpoint will create a ShiftQualificationDemand in the database. The REST user can only insert shiftQualificationDemands on organisations that the REST user is authorized for.
When there's no existing shift found with ExternalRestId (provided as shiftId), a shift will be created from scratch. This can only happen when a customerStructureId is provided.
The shift will take the period of the to be inserted ShiftQualificationDemand.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | SCH01_Ochtend |
| name | Text (200) | Required | Name of the ShiftQualificationDemand | Schoonmaken ochtend |
| occupationType | Number | Required | OccupationType of the ShiftQualificationDemand 1 (DayDemand), 2 (HourDemand) | 1 |
| shortCode | Text (50) | Required | Shortcode of the ShiftQualificationDemand | SCH01_Ochtend |
| description | Text (300) | Optional | Description of the ShiftQualificationDemand | Schoonmaken van kantoor in Helmond |
| startDate | DateObject | Optional | Startdate of the ShiftQualificationDemand | { "year": 2025, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the ShiftQualificationDemand | { "year": 2025, "month": 12, "day": 31 } |
| remark | Text (300) | Optional | Remark of the ShiftQualificationDemand | remark |
| checkCustomerQualification | Boolean | Required | CustomerQualification check enabled for the ShiftQualificationDemand | true |
| checkAssignments | Boolean | Required | Assignment check enabled for the ShiftQualificationDemand | true |
| costCenterId | Text (100) | Optional | ExternalRestId for the CostCenter of the ShiftQualificationDemand | Costcenter1 |
| priority | Number | Optional, default 0. Non-negative | Priority of the ShiftQualificationDemand | 1 |
| customerStructureId | Text (100) | Optional | ExternalRestId for the CustomerStructure of the Shift | d8536029-c5db-4175-a745-455be3ff33cc |
| shiftId | Text (100) | Required | ExternalRestId for the OrganisationStructure or the ShiftQualificationDemand | SCH01 |
| extendShift | Boolean | Optional | When extendShift = true (not defined is false), the existing shift period should be extended based on the inserted ShiftQualificationDemand. When extendShift = false (or not defined), the existing shift period should not be extended. Instead the API throws a validation exception "ShiftQualificationDemand trying to insert is outside of the Shift period." | true |
| shiftDemandDayOccupations | Array | Optional | Array of ShiftDemandDayOccupations (Default occupation) for the ShiftQualificationDemand | |
| shiftDemandDayOccupations/demandDayType | Text (50) | Required | Day type of the ShiftDemandDayOccupation. Duplicate daytypes per ShiftQualificationDemand are not possible. Possible options: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday | Monday |
| shiftDemandDayOccupations/startTime | TimeObject | Required | Starttime of the ShiftDemandDayOccupation | { "hour": 11, "minute": 0 } |
| shiftDemandDayOccupations/endTime | TimeObject | Required | Endtime of the ShiftDemandDayOccupation | { "hour": 19 "minute": 30 } |
| shiftDemandDayOccupations/optimal | number | Required, non-negative number | Demand amount of the ShiftDemandDayOccupation | 3 |
| shiftDemandDayOccupations/breaks | Array | Optional | Array of Breaks | |
| shiftDemandDayOccupations/breaks/startTime | TimeObject | Required, only when using fixed breaks | Starttime of the fixed break | { "hour": 13, "minute": 0 } |
| shiftDemandDayOccupations/breaks/endTime | TimeObject | Required, only when using fixed breaks | Endtime of the fixed break | { "hour": 13, "minute": 30 } |
| shiftDemandDayOccupations/breaks/afterHours | Decimal | Required, only when using variable breaks | X hours after start shift, the break will start. Variable break. | 0 |
| shiftDemandDayOccupations/breaks/breakLength | Decimal | Required, only when using variable breaks | Duration of the variable break. | 0 |
| shiftDemandDayOccupations/breaks/paid | Boolean | Required | Break is already paid | true |
| shiftName | Text (400) | Optional | Name for the shift group when this request creates it; defaults to shiftId. | Evening shift |
Response
If the response was successful, the REST user will get an inserted ShiftQualificationDemand back, like described in GET.
See Exception handling for unsuccessful responses.
A ShiftQualificationDemand to create and persist.
| id required | string [ 1 .. 100 ] characters |
| occupationType required | integer <int32> |
| customerStructureId | string or null <= 100 characters |
| shiftId required | string [ 1 .. 100 ] characters |
| extendShift | boolean |
| costCenterId | string or null <= 100 characters |
| shiftName | string or null <= 400 characters |
| name required | string [ 1 .. 200 ] characters |
| shortCode required | string [ 1 .. 50 ] characters |
| description | string or null <= 200 characters |
required | object (DateObject) |
required | object (DateObject) |
| priority | integer <int32> |
| remark | string or null <= 200 characters |
| checkCustomerQualification required | boolean |
| checkAssignments required | boolean |
Array of objects or null (ShiftQualificationDayOccupationDto) |
{- "id": "string",
- "occupationType": 0,
- "customerStructureId": "string",
- "shiftId": "string",
- "extendShift": true,
- "costCenterId": "string",
- "shiftName": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0,
- "remark": "string",
- "checkCustomerQualification": true,
- "checkAssignments": true,
- "shiftDemandDayOccupations": [
- {
- "demandDayType": "Monday",
- "optimal": 0,
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "breaks": [
- {
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "afterHours": 0.1,
- "breakLength": 0.1,
- "paid": true
}
]
}
]
}This endpoint will update a ShiftQualificationDemand in the database. The REST user can only update ShiftQualificationDemand on organisations that the REST user is authorized for.
Request
It is not possible to change the occupationType after creation.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | SCH01_Ochtend |
| name | Text (200) | Required | Name of the ShiftQualificationDemand | Schoonmaken ochtend |
| shortCode | Text (50) | Required | Shortcode of the ShiftQualificationDemand | SCH01_Ochtend |
| description | Text (300) | Optional | Description of the ShiftQualificationDemand | Schoonmaken van kantoor in Helmond |
| startDate | DateObject | Optional | Startdate of the ShiftQualificationDemand | { "year": 2025, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Enddate of the ShiftQualificationDemand | { "year": 2025, "month": 12, "day": 31 } |
| remark | Text (300) | Optional | Remark of the ShiftQualificationDemand | remark |
| checkCustomerQualification | Boolean | Required | CustomerQualification check enabled for the ShiftQualificationDemand | true |
| checkAssignments | Boolean | Required | Assignment check enabled for the ShiftQualificationDemand | true |
| costCenterId | Text (100) | Optional | ExternalRestId for the CostCenter of the ShiftQualificationDemand | Costcenter1 |
| priority | Number | Optional, default 0. Non-negative | Priority of the ShiftQualificationDemand | 1 |
| extendShift | Boolean | Optional | When extendShift = true (not defined is false), the existing shift period should be extended based on the inserted ShiftQualificationDemand. When extendShift = false (or not defined), the existing shift period should not be extended. Instead the API throws a validation exception "ShiftQualificationDemand trying to insert is outside of the Shift period." | true |
| shiftDemandDayOccupations | Array | Optional | Array of ShiftDemandDayOccupations (Default occupation) for the ShiftQualificationDemand | |
| shiftDemandDayOccupations/demandDayType | Text (50) | Required | Day type of the ShiftDemandDayOccupation. Duplicate daytypes per ShiftQualificationDemand are not possible. Possible options: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday | Monday |
| shiftDemandDayOccupations/startTime | TimeObject | Required | Starttime of the ShiftDemandDayOccupation | { "hour": 11, "minute": 0 } |
| shiftDemandDayOccupations/endTime | TimeObject | Required | Endtime of the ShiftDemandDayOccupation | { "hour": 19 "minute": 30 } |
| shiftDemandDayOccupations/optimal | number | Required, non-negative number | Demand amount of the ShiftDemandDayOccupation | 3 |
| shiftDemandDayOccupations/breaks | Array | Optional | Array of Breaks | |
| shiftDemandDayOccupations/breaks/startTime | TimeObject | Required, only when using fixed breaks | Starttime of the fixed break | { "hour": 13, "minute": 0 } |
| shiftDemandDayOccupations/breaks/endTime | TimeObject | Required, only when using fixed breaks | Endtime of the fixed break | { "hour": 13, "minute": 30 } |
| shiftDemandDayOccupations/breaks/afterHours | Decimal | Required, only when using variable breaks | X hours after start shift, the break will start. Variable break. | 0 |
| shiftDemandDayOccupations/breaks/breakLength | Decimal | Required, only when using variable breaks | Duration of the variable break. | 0 |
| shiftDemandDayOccupations/breaks/paid | Boolean | Required | Break is already paid | true |
| shiftName | Text (400) | Optional | Name for the shift group when this request creates it; defaults to shiftId. | Evening shift |
Response
If the response was successful, the REST user will get an updated ShiftQualificationDemand back, like described in GET.
See Exception handling for unsuccessful responses.
A ShiftQualificationDemand to synchronize the current matching ShiftQualificationDemand with.
| id required | string [ 1 .. 100 ] characters |
| extendShift | boolean |
| costCenterId | string or null <= 100 characters |
| shiftName | string or null <= 400 characters |
| name required | string [ 1 .. 200 ] characters |
| shortCode required | string [ 1 .. 50 ] characters |
| description | string or null <= 200 characters |
required | object (DateObject) |
required | object (DateObject) |
| priority | integer <int32> |
| remark | string or null <= 200 characters |
| checkCustomerQualification required | boolean |
| checkAssignments required | boolean |
Array of objects or null (ShiftQualificationDayOccupationDto) |
{- "id": "string",
- "extendShift": true,
- "costCenterId": "string",
- "shiftName": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0,
- "remark": "string",
- "checkCustomerQualification": true,
- "checkAssignments": true,
- "shiftDemandDayOccupations": [
- {
- "demandDayType": "Monday",
- "optimal": 0,
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "breaks": [
- {
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "afterHours": 0.1,
- "breakLength": 0.1,
- "paid": true
}
]
}
]
}This endpoint will partially update a ShiftQualificationDemand in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated ShiftQualificationDemand back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| extendShift | boolean |
| costCenterId | string or null <= 100 characters |
| shiftName | string or null <= 400 characters |
| name required | string [ 1 .. 200 ] characters |
| shortCode required | string [ 1 .. 50 ] characters |
| description | string or null <= 200 characters |
required | object (DateObject) |
required | object (DateObject) |
| priority | integer <int32> |
| remark | string or null <= 200 characters |
| checkCustomerQualification required | boolean |
| checkAssignments required | boolean |
Array of objects or null (ShiftQualificationDayOccupationDto) |
{- "id": "string",
- "extendShift": true,
- "costCenterId": "string",
- "shiftName": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "priority": 0,
- "remark": "string",
- "checkCustomerQualification": true,
- "checkAssignments": true,
- "shiftDemandDayOccupations": [
- {
- "demandDayType": "Monday",
- "optimal": 0,
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "breaks": [
- {
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "afterHours": 0.1,
- "breakLength": 0.1,
- "paid": true
}
]
}
]
}This endpoint will delete the ShiftQualificationDemand (hard-delete) from the database. Including all referenced data, like schedule data and the ShiftDemandDayOccupations. The id is passed in the URL: DELETE /api/ShiftQualificationDemand/{id}.
The REST User can only delete shiftQualificationDemands which it is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | SCH01_Ochtend |
| id required | string The ID value of the ShiftQualificationDemand to delete. |
The Occupation is maintained in the Shift Schedule in Infinity.
Every shift has a possible default occupation (ShiftDemandDayOccupation) per dayType (Monday till Sunday). For every specific scheduleDate this default occupation can be adjusted, a.k.a. Occupation.
It's not possible to add an Occupation without a default Occupation present.
To be able to use the Occupation in the REST API, the ExternalRestID of the connected ShiftQualificationDemand should be filled.
Keep in mind that all Occupation without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with Occupation: ShiftQualificationDemand, Shift, CustomerStructure, Customer, OrganisationStructure.
The id (externalRestId) of the Occupation is computed and cannot be physically set in Infinity.
It's based on {ShiftQualificationDemand.ExternalRestId}{separator}{ScheduleDate:ddMMyyyy }Examples: Shift1_01062025 Shift1_29052026
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint Occupation usable, check the following things:
This endpoint will fetch all Occupations where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (150) | Required | Computed ExternalRestId of the Occupation | |
| customerId | Text (100) | Required | ExternalRestId of the Customer | |
| customerName | Text (200) | Required | Name of the Customer | |
| customerStructureId | Text (100) | Required | ExternalRestId of the CustomerStructure | |
| customerStructureName | Text (200) | Required | Name of the CustomerStructure | |
| shiftId | Text (100) | Required | ExternalRestId of the Shift | |
| shiftName | Text (200) | Required | Name of the Shift | |
| shiftShortCode | Text (50) | Required | ShortCode of the Shift | |
| shiftQualificationDemandId | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | |
| shiftQualificationDemandName | Text (200) | Required | Name of the ShiftQualificationDemand | |
| shiftQualificationDemandShortCode | Text (50) | Required | ShortCode of the ShiftQualificationDemand | |
| scheduleDate | DateObject | Required | ScheduleDate of the Occupation | |
| startTime | TimeObject | Required | Starttime of the Occupation | |
| endTime | TimeObject | Required | EndTime of the Occupation | |
| optimal | Number | Required, non-negative | Demand amount of the Occupation | |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner Public of the Occupation | |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner Private of the Occupation | |
| customerRemark | Text (200) | Optional | CustomerRemark of the Occupation | |
| maximal | Number | Optional | Maximum demand amount of the Occupation | 5 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "scheduleDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create an Occupation in the database.
When there's no existing ShiftDemandDayOccupation (Default occupation) found or the existing ShiftDemandDayOccupation is -1, it's not possible to add an Occupation on the specific scheduleDate.
For example: Shift does not have a default occupation on Sunday and trying to add an Occupation on 13-07-2025 (a Sunday). This is not possible
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| shiftQualificationDemandId | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand | |
| scheduleDate | DateObject | Required | ScheduleDate of the Occupation | |
| startTime | TimeObject | Required | Starttime of the Occupation | |
| endTime | TimeObject | Required | EndTime of the Occupation | |
| optimal | Number | Required, non-negative | Demand amount of the Occupation | |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner Public of the Occupation | |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner Private of the Occupation | |
| customerRemark | Text (MAX) | Optional | CustomerRemark of the Occupation | |
| maximal | Number | Optional, non-negative | Maximum demand amount of the Occupation. Defaults to -1 when omitted | 5 |
Response
If the response was successful, the REST user will get an inserted Occupation back, like described in GET.
See Exception handling for unsuccessful responses.
A Occupation to create and persist.
| shiftQualificationDemandId required | string [ 1 .. 100 ] characters |
object (DateObject) | |
object (TimeObject) | |
object (TimeObject) | |
| optimal | number or null <double> |
| maximal | number or null <double> |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| customerRemark | string or null <= 200 characters |
{- "shiftQualificationDemandId": "string",
- "scheduleDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "scheduleDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}
}This endpoint will update an Occupation in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the Occupation | |
| startTime | TimeObject | Required | Starttime of the Occupation | |
| endTime | TimeObject | Required | EndTime of the Occupation | |
| optimal | Number | Required, non-negative | Demand amount of the Occupation | |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner Public of the Occupation | |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner Private of the Occupation | |
| customerRemark | Text (MAX) | Optional | CustomerRemark of the Occupation | |
| maximal | Number | Optional, non-negative | Maximum demand amount of the Occupation. Defaults to -1 when omitted | 5 |
Response
If the response was successful, the REST user will get an updated Occupation back, like described in GET.
See Exception handling for unsuccessful responses.
A Occupation to synchronize the current matching Occupation with.
| id required | string [ 1 .. 100 ] characters |
object (TimeObject) | |
object (TimeObject) | |
| optimal | number or null <double> |
| maximal | number or null <double> |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| customerRemark | string or null <= 200 characters |
{- "id": "string",
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "scheduleDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}
}This endpoint will partially update a Occupation in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated Occupation back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
object (TimeObject) | |
object (TimeObject) | |
| optimal | number or null <double> |
| maximal | number or null <double> |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| customerRemark | string or null <= 200 characters |
{- "id": "string",
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "scheduleDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "optimal": 0.1,
- "maximal": 0.1,
- "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "customerRemark": "string"
}
}The CustomerQualifications can be managed in the HRM module
CustomerQualifications are connected to CustomerStructures and Employees.
Keep in mind that all CustomerQualifications have a direct relationship with CustomerStructure and Employee. It's required that both the CustomerStructure and the Employee have an externalRestId.
The id (externalRestId) of the CustomerQualification is computed and cannot be physically set in Infinity.
It's based on {CustomerStructure.ExternalRestId}{separator}{Employee.ExternalRestId}{separator}{startDate:ddMMyyyy}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint CustomerQualification usable, check the following things:
This endpoint will fetch all CustomerQualifications where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text | Required | Computed ExternalRestId of the CustomerQualification |
| customerStructureId | Text | Required | ExternalRestId for the CustomerStructure |
| customerStructureName | Text | Required | Name for the CustomerStructure |
| personId | Text | Required | ExternalRestId for the Employee |
| employeeNumber | Text | Required | EmployeeNumber for the Employee |
| startDate | DateObject | Required | StartDate of the CustomerQualification |
| endDate | DateObject | Required | EndDate of the CustomerQualification |
| unsuited | boolean | Is Employee unsuited (true) or suited (false) | |
| placementNumber | Text (50) | Optional | Placement number of the CustomerQualification |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "employeeNumber": "string",
- "customerStructureName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a CustomerQualification in the database.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| customerStructureId | Text (100) | Required | ExternalRestId for the CustomerStructure |
| personId | Text (100) | Required | ExternalRestId for the Employee |
| startDate | DateObject | Required | StartDate of the CustomerQualification |
| endDate | DateObject | Required | EndDate of the CustomerQualification |
| unsuited | boolean | Required | Is Employee unsuited (true) or suited (false) |
| placementNumber | Text (50) | Optional | Placement number of the CustomerQualification |
Response
If the response was successful, the REST user will get an inserted CustomerQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A CustomerQualification to create and persist.
required | object (DateObject) |
object (DateObject) | |
| customerStructureId required | string [ 1 .. 100 ] characters |
| personId required | string [ 1 .. 100 ] characters |
| unsuited required | boolean |
| placementNumber | string or null |
{- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "employeeNumber": "string",
- "customerStructureName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}
}This endpoint will update a CustomerQualification in the database. It's not possible to change the personId, the customerStructureId or the startdate of an existing CustomerQualification.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the CustomerQualification |
| endDate | DateObject | Required | EndDate of the CustomerQualification |
| unsuited | boolean | Required | Is Employee unsuited (true) or suited (false) |
| placementNumber | Text (50) | Optional | Placement number of the CustomerQualification |
Response
If the response was successful, the REST user will get an updated CustomerQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A CustomerQualification to create and persist.
| id required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
| unsuited required | boolean |
| placementNumber | string or null |
{- "id": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "unsuited": true,
- "placementNumber": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "employeeNumber": "string",
- "customerStructureName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}
}This endpoint will partially update a CustomerQualification in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated CustomerQualification back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
| unsuited required | boolean |
| placementNumber | string or null |
{- "id": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "unsuited": true,
- "placementNumber": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "employeeNumber": "string",
- "customerStructureName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}
}This endpoint will delete the CustomerQualification (hard-delete) from the database. The id is passed in the URL: DELETE /api/CustomerQualification/{id}.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text | Required | Computed externalRestId of the CustomerQualification |
| id required | string The ID value of the Customer Qualification to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "employeeNumber": "string",
- "customerStructureName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "customerStructureId": "string",
- "personId": "string",
- "unsuited": true,
- "placementNumber": "string"
}
}The ShiftQualifications are maintained in maintain shift demand.
Every ShiftQualificationDemand can have multiple ShiftQualifications.
| filters.qualificationType | filters.operator |
|---|---|
| Employee_BirthDate | equal, not equal, contains, isGreaterThanOrEqualTo, isLesserThanOrEqualTo, |
| Employee_EmployeeNumber | equal, not equal, contains |
| EmployeeType_Description | equal, not equal, contains |
| Hrm_Person_City | equal, not Equal, contains |
| Hrm_Person_Gender | equal, not equal, contains |
| Hrm_Person_PostalCode | equal, not equal, contains |
| Qualification_Description | equal, not equal, contains |
| Qualification_Name | equal, not equal, contains |
| Qualification_ShortCode | equal, not equal, contains |
| QualificationGroup_Description | equal, not equal, contains |
| QualificationGroup_Name | equal, not equal, contains |
To be able to use the ShiftQualification in the REST API, the ExternalRestID of the connected ShiftQualificationDemand should be filled.
The id (externalRestId) of the ShiftQualification is computed and cannot be physically set in Infinity.
It's based on {ShiftQualificationDemand.ExternalRestId}{separator}{ScheduleAssistant.Name}Examples: Shift1_Picken Shift1_Heftruckdriver
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint ShiftQualification usable, check the following things:
This endpoint will fetch all ShiftQualifications where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text | Required | Computed ExternalRestId of the ShiftQualification |
| customerId | Text | Required | ExternalRestId of the Customer |
| customerName | Text | Required | Name of the Customer |
| customerStructureId | Text | Required | ExternalRestId of the CustomerStructure |
| customerStructureName | Text | Required | Name of the CustomerStructure |
| shiftId | Text | Required | ExternalRestId of the Shift |
| shiftName | Text | Required | Name of the Shift |
| shiftShortCode | Text | Required | ShortCode of the Shift |
| shiftQualificationDemandId | Text | Required | ExternalRestId of the ShiftQualificationDemand |
| shiftQualificationDemandName | Text | Required | Name of the ShiftQualificationDemand |
| shiftQualificationDemandShortCode | Text | Required | ShortCode of the ShiftQualificationDemand |
| name | Text | Required | Name of the ScheduleAssistant |
| description | Text | Optional | Description of the ScheduleAssistant |
| defaultSelected | Boolean | Required | ScheduleAssistant is default enabled in ScheduleAssistant Infinity |
| operator | Text | Required | AND or OR |
| isNegative | Boolean | Required | Logic is inversed. Example: Logic: Age > 18 Actual: Age <= 18 |
| filters | Array | Optional | List of shift filters |
| filters/operator | Text | Required | equal, not equal, contains, isGreaterThanOrEqualTo, isLesserThanOrEqualTo, |
| filters/value | Text | Required | Compare value to check |
| filters/qualificationType | Text | Required | Type of ShiftFilter Options: Qualification_Name Qualification_ShortCode Qualification_Description QualificationGroup_Description QualificationGroup_Name Hrm_Person_City Hrm_Person_Gender Hrm_Person_PostalCode EmployeeType_Description Employee_EmployeeNumber Employee_BirthDate |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a ShiftQualification in the database.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| shiftQualificationDemandId | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand |
| name | Text (MAX) | Required | Name of the ScheduleAssistant (read-only; set on POST only, cannot be updated via PUT) |
| description | Text (MAX) | Optional | Description of the ScheduleAssistant |
| defaultSelected | Boolean | Required | ScheduleAssistant is default enabled in ScheduleAssistant Infinity |
| operator | Text (MAX) | Required | AND or OR |
| isNegative | Boolean | Required | Logic is inversed. Example: Logic: Age > 18 Actual: Age <= 18 |
| filters | Array | Optional | List of shift filters |
| filters/operator | Text (MAX) | Required | equal, not equal, contains, isGreaterThanOrEqualTo, isLesserThanOrEqualTo, |
| filters/value | Text (MAX) | Required | Compare value to check |
| filters/qualificationType | Text (MAX) | Required | Type of ShiftFilter Options: Qualification_Name Qualification_ShortCode Qualification_Description QualificationGroup_Description QualificationGroup_Name Hrm_Person_City Hrm_Person_Gender Hrm_Person_PostalCode EmployeeType_Description Employee_EmployeeNumber Employee_BirthDate |
Response
If the response was successful, the REST user will get an inserted ShiftQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A ShiftQualification to create and persist.
| shiftQualificationDemandId required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 200 ] characters |
| description | string or null <= 300 characters |
| defaultSelected required | boolean |
| operator required | string [ 1 .. 50 ] characters |
| isNegative required | boolean |
Array of objects or null (ShiftFilterDto) |
{- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}
}This endpoint will update a ShiftQualification in the database.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ShiftQualification |
| description | Text (MAX) | Optional | Description of the ScheduleAssistant |
| defaultSelected | Boolean | Required | ScheduleAssistant is default enabled in ScheduleAssistant Infinity |
| operator | Text (MAX) | Required | AND or OR |
| isNegative | Boolean | Required | Logic is inversed. Example: Logic: Age > 18 Actual: Age <= 18 |
| filters | Array | Optional | List of shift filters |
| filters/operator | Text (MAX) | Required | equal, not equal, contains, isGreaterThanOrEqualTo, isLesserThanOrEqualTo, |
| filters/value | Text (MAX) | Required | Compare value to check |
| filters/qualificationType | Text (MAX) | Required | Type of ShiftFilter Options: Qualification_Name Qualification_ShortCode Qualification_Description QualificationGroup_Description QualificationGroup_Name Hrm_Person_City Hrm_Person_Gender Hrm_Person_PostalCode EmployeeType_Description Employee_EmployeeNumber Employee_BirthDate |
Response
If the response was successful, the REST user will get an updated ShiftQualification back, like described in GET.
See Exception handling for unsuccessful responses.
A ShiftQualification to update and persist.
| id required | string [ 1 .. 100 ] characters |
| description | string or null <= 300 characters |
| defaultSelected required | boolean |
| operator required | string [ 1 .. 50 ] characters |
| isNegative required | boolean |
Array of objects or null (ShiftFilterDto) |
{- "id": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}
}This endpoint will partially update a ShiftQualification in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated ShiftQualification back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| description | string or null <= 300 characters |
| defaultSelected required | boolean |
| operator required | string [ 1 .. 50 ] characters |
| isNegative required | boolean |
Array of objects or null (ShiftFilterDto) |
{- "id": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}
}This endpoint will delete the ShiftQualification (hard-delete) from the database. The id is passed in the URL: DELETE /api/ShiftQualification/{id}.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text | Required | Computed ExternalRestId of the ShiftQualification |
| id required | string The ID value of the Shift Qualification to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureId": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftShortCode": "string",
- "shiftQualificationDemandName": "string",
- "shiftQualificationDemandShortCode": "string",
- "shiftQualificationDemandId": "string",
- "name": "string",
- "description": "string",
- "defaultSelected": true,
- "operator": "string",
- "isNegative": true,
- "filters": [
- {
- "operator": "string",
- "value": "string",
- "qualificationType": "string"
}
]
}
}The CostCenters can be managed in the Admin Common settings.
CostCenters are connected to ShiftQualificationDemands and can be connected to incoming punches from Datafox or Nedap terminals.
It's not possible to delete CostCenters that are already used.
To be able to use the CostCenter in the REST API, the ExternalRestID should be filled.
Keep in mind that all CostCenter without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ShiftQualificationDemand
To make this endpoint CostCenter usable, check the following things:
This endpoint will fetch all CostCenter with an ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the CostCenter | a3ccd97e-b7e7-4193-a27a-63d1af9fd41b |
| name | Text (200) | Required | Name for the CostCenter | Costcenter1 |
| code | Text (200) | Required | Code of the CostCenter | Cost1 |
| description | Text (200) | Optional | Description of the CostCenter | CostCenter1 description |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a CostCenter in the database.
Request
See specs GET.
Response
If the response was successful, the REST user will get an inserted CostCenter back, like described in GET.
See Exception handling for unsuccessful responses.
A Cost Center to create and persist.
| id required | string [ 1 .. 100 ] characters |
| name | string or null |
| code | string or null |
| description | string or null |
{- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}
}This endpoint will update a CostCenter in the database.
Request
See specs GET.
Response
If the response was successful, the REST user will get an updated CostCenter back, like described in GET.
See Exception handling for unsuccessful responses.
A Cost Center to synchronize the current matching Cost Center with.
| id required | string [ 1 .. 100 ] characters |
| name | string or null |
| code | string or null |
| description | string or null |
{- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}
}This endpoint will partially update a CostCenter in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated CostCenter back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| name | string or null |
| code | string or null |
| description | string or null |
{- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}
}This endpoint will delete the CostCenter (hard-delete) from the database. A CostCenter cannot be deleted when it's in use (connected to a ShiftQualificationDemand). The id is passed in the URL: DELETE /api/CostCenter/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the CostCenter | a3ccd97e-b7e7-4193-a27a-63d1af9fd41b |
| id required | string The ID value of the Contract to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "code": "string",
- "description": "string"
}
}A PlanningAssignment represents the assignment of a worker to a planning request. It is identified by a unique ID and contains details about the supplier, customer, assigned worker, position profile, and planning lines.
Referral to the SETU website.
To make this endpoint PlanningAssignment usable, check the following things:
This endpoint fetches a single PlanningAssignment by its unique ID.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | String | Required | Unique ID of the PlanningAssignment to retrieve (path parameter) |
Response
{
"documentId": {
"value": "ae0af537-ce35-4443-b48b-825956ed188e",
"schemeAgencyId": "Customer"
},
"customer": {
"id": [
{
"value": "Customer.ExternalRestId",
"schemeAgencyId": "Supplier"
}
]
},
"assignedWorker": {
"assignedStatus": false,
"workerId": {
"value": "Employee.ExternalRestId",
"schemeAgencyId": "Supplier"
}
},
"positionProfile": {
"positionId": {
"value": "ShiftQualificationDemand.ExternalRestId"
},
"positionTask": {
"id": {
"value": "Shift.ExternalRestId "
}
},
"standByIndicator": false,
"positionLocation": {
"item": {
"id": [
{
"value": "CustomerStructure.ExternalRestId",
"schemeAgencyId": "Supplier"
}
],
"name": "CustomerStructure.Name"
}
},
"travelDistance": 0
},
"singlePlanningLine": [
{
"lineId": {
"value": "UniqueIdentifierSchedule_NotMapped",
"schemeAgencyId": "Supplier"
},
"planningLineName": "ShiftQualificationDemand.Name",
"singlePlanningType": "Occasional",
"startDateTime": "2026-02-25T17:30:00Z",
"endDateTime": "2026-02-26T01:00:00Z",
"hours": 7
}
]
}
| id required | string A Id used to select the Planning assignment. |
This endpoint updates an existing PlanningAssignment. The ID is supplied as a path parameter.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Unique ID of the PlanningAssignment to update (path parameter) |
The path parameter id identifies the record to update.
Same as GET.
Response
If successful, the REST user will receive the updated PlanningAssignment back with status 201. See Exception handling for unsuccessful responses.
| id required | string Unique ID of PlanningAssignment message |
A Planning assignment to synchronize the current matching Planning assignment with.
object (DocumentIdDto) | |
| actionCode | string or null Enum: "DELETE" "GET" "POST" "PUT" |
object (PartyDto) | |
object (PartyDto) | |
object (AssignedWorkerDto) | |
object (PositionProfileDto) | |
object (PlanningRequestReferenceDto) | |
Array of objects or null (PeriodicPlanningLineDto) | |
Array of objects or null (SinglePlanningLineDto) |
{- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "supplier": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "customer": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "assignedWorker": {
- "assignedStatus": true,
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "person": {
- "name": {
- "formattedName": "string"
}, - "birthDate": "2019-08-24T14:15:22Z",
- "legalIds": [
- {
- "value": "string",
- "schemeAgencyId": "KvK"
}
], - "maritalStatus": "string"
}, - "workAssignments": {
- "item": {
- "id": {
- "value": "string",
- "schemeAgencyId": "Supplier"
}
}
}
}, - "positionProfile": {
- "positionId": {
- "value": "string"
}, - "positionTitle": "string",
- "positionTask": {
- "id": {
- "value": "string"
}, - "description": {
- "value": "string"
}
}, - "standByIndicator": true,
- "positionLocation": {
- "item": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "line": "string",
- "countryCode": {
- "value": "string"
}, - "city": "string",
- "postalCode": "string",
- "name": "string"
}
}, - "positionOrganizations": {
- "item": [
- {
- "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}, - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "responsibilityCode": {
- "value": "string"
}, - "id": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "name": "string"
}
]
}, - "positionPeriod": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "workingPeriods": {
- "item": [
- {
- "workDuration": {
- "value": 0.1,
- "unitCode": {
- "value": "Days"
}
}, - "baseDuration": {
- "value": 0.1,
- "unitCode": {
- "value": "Daily"
}
}
}
]
}, - "shiftDescription": "string",
- "travelDistance": 0.1,
- "costAllocationRef": {
- "item": {
- "costCenter": {
- "name": "string",
- "code": "string"
}, - "project": {
- "code": "string"
}
}
}
}, - "planningRequestReference": {
- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "periodicPlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "planningLineName": "string",
- "planningPeriod": "Monday",
- "startTime": "string",
- "endTime": "string",
- "hours": 0.1,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startTime": "string",
- "endTime": "string",
- "breakTrigger": {
- "hours": 0.1,
- "breakDuration": "string"
}
}
], - "relatedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "relatedWorkerType": "Preferred"
}
]
}
], - "singlePlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "planningLineName": "string",
- "singlePlanningType": "Exception",
- "periodicPlanningLineReference": {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "hours": 0.1,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "breakTrigger": {
- "hours": 0.1,
- "breakDuration": "string"
}
}
], - "relatedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "relatedWorkerType": "Preferred"
}
]
}
]
}This endpoint deletes a PlanningAssignment by its unique ID. The id is passed in the URL: DELETE /api/PlanningAssignment/{id}.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Unique ID of the PlanningAssignment to delete (path parameter) |
Response
If successful, the server returns HTTP 200 OK. See Exception handling for unsuccessful responses.
| id required | string The ID value of the Planning assignment to delete. |
This endpoint creates a new PlanningAssignment in the system.
Request
Same as GET.
Response
If successful, the REST user will receive the created PlanningAssignment back with status 200. A response header "Location" will be sent as well, containing the URL for PUT/DELETE for this specific PlanningAssignment.
See Exception handling for unsuccessful responses.
A Planning assignment to create and persist.
object (DocumentIdDto) | |
| actionCode | string or null Enum: "DELETE" "GET" "POST" "PUT" |
object (PartyDto) | |
object (PartyDto) | |
object (AssignedWorkerDto) | |
object (PositionProfileDto) | |
object (PlanningRequestReferenceDto) | |
Array of objects or null (PeriodicPlanningLineDto) | |
Array of objects or null (SinglePlanningLineDto) |
{- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "supplier": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "customer": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "assignedWorker": {
- "assignedStatus": true,
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "person": {
- "name": {
- "formattedName": "string"
}, - "birthDate": "2019-08-24T14:15:22Z",
- "legalIds": [
- {
- "value": "string",
- "schemeAgencyId": "KvK"
}
], - "maritalStatus": "string"
}, - "workAssignments": {
- "item": {
- "id": {
- "value": "string",
- "schemeAgencyId": "Supplier"
}
}
}
}, - "positionProfile": {
- "positionId": {
- "value": "string"
}, - "positionTitle": "string",
- "positionTask": {
- "id": {
- "value": "string"
}, - "description": {
- "value": "string"
}
}, - "standByIndicator": true,
- "positionLocation": {
- "item": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "line": "string",
- "countryCode": {
- "value": "string"
}, - "city": "string",
- "postalCode": "string",
- "name": "string"
}
}, - "positionOrganizations": {
- "item": [
- {
- "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}, - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "responsibilityCode": {
- "value": "string"
}, - "id": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "name": "string"
}
]
}, - "positionPeriod": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "workingPeriods": {
- "item": [
- {
- "workDuration": {
- "value": 0.1,
- "unitCode": {
- "value": "Days"
}
}, - "baseDuration": {
- "value": 0.1,
- "unitCode": {
- "value": "Daily"
}
}
}
]
}, - "shiftDescription": "string",
- "travelDistance": 0.1,
- "costAllocationRef": {
- "item": {
- "costCenter": {
- "name": "string",
- "code": "string"
}, - "project": {
- "code": "string"
}
}
}
}, - "planningRequestReference": {
- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "periodicPlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "planningLineName": "string",
- "planningPeriod": "Monday",
- "startTime": "string",
- "endTime": "string",
- "hours": 0.1,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startTime": "string",
- "endTime": "string",
- "breakTrigger": {
- "hours": 0.1,
- "breakDuration": "string"
}
}
], - "relatedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "relatedWorkerType": "Preferred"
}
]
}
], - "singlePlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "actionCode": "DELETE",
- "planningLineName": "string",
- "singlePlanningType": "Exception",
- "periodicPlanningLineReference": {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "hours": 0.1,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "breakTrigger": {
- "hours": 0.1,
- "breakDuration": "string"
}
}
], - "relatedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "relatedWorkerType": "Preferred"
}
]
}
]
}A PlanningRequest is used to submit a staffing request from a Customer to a Supplier. It contains position details, planning lines, and references to organisations involved.
Referral to the SETU website.
To make this endpoint PlanningRequest usable, check the following things:
This endpoint fetches one planning request by its documentId. The id is passed in the URL: GET /api/PlanningRequest/{id}.
The response contains a message and the planning request (entity) in the SETU format, with one single planning line per day: lineId, start and end time, hours and positionQuantity. A planning request that does not exist, or that the REST user is not authorized for, returns 404.
| id required | string The Setu documentId of the PlanningRequest. |
This endpoint updates the times and quantities of an existing planning request. The id is passed in the URL: PUT /api/PlanningRequest/{id}; the documentId in the body must be the same.
Only startDateTime, endDateTime and positionQuantity of the single planning lines can change. Each line is matched on its date. positionId, the shift (positionTask.id) and the location (positionLocation) cannot be changed; "n/a" for the shift or the location means "unchanged". A change of one of these is rejected; see Exception handling. A planning request that does not exist returns 404.
If the response was successful, the REST user will get the planning request back, like described in GET.
| id required | string The Setu documentId of the PlanningRequest. |
The PlanningRequest with the new quantity/times.
required | object (RequestKindPlanningRequestValueSchemaDto) |
object (PlanningRequestBusinessPartnerDto) | |
required | object (PlanningRequestBusinessPartnerDto) |
required | object (PlanningRequestPositionProfileDto) |
object (StringPlanningRequestItemWrapper) | |
Array of objects or null (PlanningRequestPeriodicPlanningLineDto) | |
Array of objects or null (PlanningRequestSinglePlanningLineDto) |
{- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "supplier": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "customer": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "positionProfile": {
- "positionId": {
- "value": "string"
}, - "positionTitle": "string",
- "positionTask": {
- "id": {
- "value": "string"
}, - "description": {
- "value": "string"
}
}, - "standByIndicator": true,
- "positionLocation": {
- "item": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "line": "string",
- "countryCode": {
- "value": "string"
}, - "city": "string",
- "postalCode": "string",
- "name": "string"
}
}, - "requestedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "person": {
- "name": {
- "formattedName": "string"
}
}
}
], - "positionOrganizations": {
- "item": [
- {
- "id": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}, - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "responsibilityCode": {
- "value": "string"
}
}
]
}, - "positionQualifications": {
- "item": {
- "positionCompetencies": {
- "item": [
- {
- "competencyIds": {
- "item": [
- {
- "value": null,
- "schemeAgencyId": null
}
]
}, - "competencyName": "string"
}
]
}, - "licenses": [
- {
- "name": "string",
- "issuingAuthority": {
- "name": "string"
}
}
]
}
}, - "positionPeriod": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "workingPeriods": {
- "item": [
- {
- "workDuration": {
- "value": 0,
- "unitCode": {
- "value": "Days"
}
}, - "baseDuration": {
- "value": 0,
- "unitCode": {
- "value": "Daily"
}
}
}
]
}, - "shiftDescription": "string",
- "costAllocationRef": {
- "item": {
- "costCenter": {
- "name": "string",
- "code": "string"
}, - "project": {
- "code": "string"
}
}
}
}, - "requestComments": {
- "item": "string"
}, - "periodicPlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "planningLineName": "string",
- "planningPeriod": "Friday",
- "startTime": "14:15:22Z",
- "endTime": "14:15:22Z",
- "hours": 0,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startTime": "14:15:22Z",
- "endTime": "14:15:22Z",
- "breakTrigger": {
- "hours": 0,
- "breakDuration": "14:15:22Z"
}
}
], - "positionQuantity": 0
}
], - "singlePlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "planningLineName": "string",
- "singlePlanningType": "Exception",
- "periodicPlanningLineReference": {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "hours": 0,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "breakTrigger": {
- "hours": 0,
- "breakDuration": "14:15:22Z"
}
}
], - "positionQuantity": 0
}
]
}This endpoint removes a planning request. The id is passed in the URL: DELETE /api/PlanningRequest/{id}.
The occupation per day that the planning request created is removed as well, unless another planning request still uses it. A planning request that does not exist returns 404; on success the response is 204 No Content.
| id required | string The Setu documentId of the PlanningRequest. |
This endpoint creates a new PlanningRequest in the system.
Request
{
"documentId": {
"schemeAgencyId": "Customer",
"value": "6f8c3cbc-2e47-48e3-bedb-dc9b6e6a92b2"
},
"supplier": {
"id": [
{
"value": "n/a",
"schemeAgencyId": "Customer"
}
]
},
"customer": {
"id": [
{
"schemeAgencyId": "Customer",
"value": "ExampleCustomer"
}
]
},
"positionProfile": {
"positionId": {
"value": "ShiftQualificationDemand.ExternalRestId"
},
"positionLocation": {
"item": {
"name": "n/a",
"id": [
{
"schemeAgencyId": "Customer",
"value": "CustomerStructure.ExternalRestId"
}
]
}
},
"positionTask": {
"id": {
"value": "Shift.ExternalRestId "
},
"description": {
"value": "n/a"
}
},
"positionQualifications": {
"item": {
"positionCompetencies": {
"item": [
{
"competencyName": "n/a",
"competencyIds": {
"item": [
{
"value": "n/a",
"schemeAgencyId": "Customer"
}
]
}
}
]
}
}
}
},
"requestComments": {
"item": "PlannerRemarkPrivate"
},
"singlePlanningLine": [
{
"planningLineName": "ShiftQualificationDemand.Name",
"positionQuantity": 5,
"singlePlanningType": "Occasional",
"startDateTime": "2026-02-25T17:30:00Z",
"endDateTime": "2026-02-26T01:00:00Z",
"hours": 7,
"lineId": {
"schemeAgencyId": "Customer",
"value": "n/a"
}
}
]
}
Response
If successful, the REST user will receive the created PlanningRequest back with status 201. See Exception handling for unsuccessful responses.
A PlanningRequest to create and persist.
required | object (RequestKindPlanningRequestValueSchemaDto) |
object (PlanningRequestBusinessPartnerDto) | |
required | object (PlanningRequestBusinessPartnerDto) |
required | object (PlanningRequestPositionProfileDto) |
object (StringPlanningRequestItemWrapper) | |
Array of objects or null (PlanningRequestPeriodicPlanningLineDto) | |
Array of objects or null (PlanningRequestSinglePlanningLineDto) |
{- "documentId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "supplier": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "customer": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}
}, - "positionProfile": {
- "positionId": {
- "value": "string"
}, - "positionTitle": "string",
- "positionTask": {
- "id": {
- "value": "string"
}, - "description": {
- "value": "string"
}
}, - "standByIndicator": true,
- "positionLocation": {
- "item": {
- "id": [
- {
- "value": "string",
- "schemeAgencyId": "Customer"
}
], - "line": "string",
- "countryCode": {
- "value": "string"
}, - "city": "string",
- "postalCode": "string",
- "name": "string"
}
}, - "requestedWorker": [
- {
- "workerId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "person": {
- "name": {
- "formattedName": "string"
}
}
}
], - "positionOrganizations": {
- "item": [
- {
- "id": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "taxId": {
- "value": "string",
- "schemeAgencyId": "BTW"
}, - "legalId": {
- "value": "string",
- "schemeAgencyId": "KvK"
}, - "responsibilityCode": {
- "value": "string"
}
}
]
}, - "positionQualifications": {
- "item": {
- "positionCompetencies": {
- "item": [
- {
- "competencyIds": {
- "item": [
- {
- "value": null,
- "schemeAgencyId": null
}
]
}, - "competencyName": "string"
}
]
}, - "licenses": [
- {
- "name": "string",
- "issuingAuthority": {
- "name": "string"
}
}
]
}
}, - "positionPeriod": {
- "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z"
}, - "workingPeriods": {
- "item": [
- {
- "workDuration": {
- "value": 0,
- "unitCode": {
- "value": "Days"
}
}, - "baseDuration": {
- "value": 0,
- "unitCode": {
- "value": "Daily"
}
}
}
]
}, - "shiftDescription": "string",
- "costAllocationRef": {
- "item": {
- "costCenter": {
- "name": "string",
- "code": "string"
}, - "project": {
- "code": "string"
}
}
}
}, - "requestComments": {
- "item": "string"
}, - "periodicPlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "planningLineName": "string",
- "planningPeriod": "Friday",
- "startTime": "14:15:22Z",
- "endTime": "14:15:22Z",
- "hours": 0,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startTime": "14:15:22Z",
- "endTime": "14:15:22Z",
- "breakTrigger": {
- "hours": 0,
- "breakDuration": "14:15:22Z"
}
}
], - "positionQuantity": 0
}
], - "singlePlanningLine": [
- {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}, - "planningLineName": "string",
- "singlePlanningType": "Exception",
- "periodicPlanningLineReference": {
- "lineId": {
- "value": "string",
- "schemeAgencyId": "Customer"
}
}, - "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "hours": 0,
- "breaks": [
- {
- "paidOrUnpaid": "Paid",
- "startDateTime": "2019-08-24T14:15:22Z",
- "endDateTime": "2019-08-24T14:15:22Z",
- "breakTrigger": {
- "hours": 0,
- "breakDuration": "14:15:22Z"
}
}
], - "positionQuantity": 0
}
]
}The ScheduleEmployeeShiftDemands are the scheduled employees on shifts.
Administrative components
The possibility to add/update/delete administrative components on the schedule. An administrative component start or end time cannot be outside of the schedule start and end time.
Overlap check
An overlap check will be performed when importing schedules through this endpoint. When a schedule/absence overlap is found, that specific schedule will not be imported. The feedback will be given back from the REST API.
Update (PUT)
When doing a PUT, you can only change the following values: startTime (only time), endTime (only time), plannerRemarkPublic, plannerRemarkPrivate, employeeRemark and administrative components.
Communication status
When inserting a schedule, a communication status 'added' will be created with remark 'Created by REST API {username}'.
When updating a schedule, a communication status 'updated' will be created with remark 'Updated by REST API {username}'.
When deleting a schedule, a communication status 'deleted' will be created with remark 'Deleted by REST API {username}'.
The id (externalRestId) of the ScheduleEmployeeShiftDemand is computed and cannot be physically set in Infinity.
It's based on {Contract.ExternalRestId}{separator}{ShiftQualificationDemand.ExternalRestId}{separator}{StartTime:ddMMyyyyHHmm}
{separator} is the id separator configured for your environment (default _), see Global.
Examples: Contract1_Shift1_051220250610
To make this endpoint ScheduleEmployeeShiftDemand usable, check the following things:
This endpoint will fetch all ScheduleEmployeeShiftDemands where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ScheduleEmployeeShiftDemand |
| employeeNumber | Text (MAX) | Required | EmployeeNumber of scheduled employee. |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure |
| organisationStructureName | Text (MAX) | Required | Name of the OrganisationStructure |
| customerId | Text (100) | Required | ExternalRestId of the Customer |
| customerName | Text (MAX) | Required | Name of the Customer |
| customerStructureName | Text (MAX) | Required | Name of the CustomerStructure |
| shiftId | Text (100) | Required | ExternalRestId of the Shift |
| shiftName | Text (MAX) | Required | Name of the Shift |
| shiftQualificationDemandId | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand |
| shiftQualificationDemandName | Text (MAX) | Required | Name of the ShiftQualificationDemand |
| startTime | DateTimeObject | Required | StartTime of the employee shift |
| endTime | DateTimeObject | Required | EndTime of the employee shift |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner public of ScheduleEmployeeShiftDemand |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner private of ScheduleEmployeeShiftDemand |
| employeeRemark | Text (200) | Optional | EmployeeRemark of ScheduleEmployeeShiftDemand |
| personId | Text (100) | Required | ExternalRestId of the scheduled Employee |
| timestamp | DateTimeObject | Required | Timestamp of the ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents | Array | Optional | List of administrative component on ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents/id | Number | Required | Unique scheduled ID |
| scheduleEmployeeAdministrativeComponents/administrativeComponentName | Text (MAX) | Required | Name of administrative component |
| scheduleEmployeeAdministrativeComponents/administrativeComponentId | Text (100) | Required | ExternalRestId of administrative component |
| scheduleEmployeeAdministrativeComponents/startTime | DateTimeObject | Required | startTime of scheduled administrative component |
| scheduleEmployeeAdministrativeComponents/endTime | DateTimeObject | Required | endTime of scheduled administrative component |
| scheduleEmployeeAdministrativeComponents/plannerRemarkPublic | Text (MAX) | Optional | Planner public remark of the administrative component |
| scheduleEmployeeAdministrativeComponents/plannerRemarkPrivate | Text (MAX) | Optional | Planner private remark of the administrative component |
| scheduleEmployeeAdministrativeComponents/employeeRemark | Text (MAX) | Optional | Employee remark of the administrative component |
| isPublished | Boolean | Optional | Whether the shift demand is published |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "employeeNumber": "string",
- "personId": "string",
- "organisationStructureId": "string",
- "organisationStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "customerStructureName": "string",
- "shiftId": "string",
- "shiftName": "string",
- "shiftQualificationDemandId": "string",
- "shiftQualificationDemandName": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentName": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a ScheduleEmployeeShiftDemand in the database.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ScheduleEmployeeShiftDemand |
| personId | Text (100) | Required | ExternalRestId of scheduled employee. |
| organisationStructureId | Text (100) | Required * | ExternalRestId of the OrganisationStructure |
| contractId | Text (100) | Required * | ExternalRestId of the Contract |
| customerStructureId | Text (100) | Required * | ExternalRestId of the CustomerStructure |
| shiftQualificationDemandId | Text (100) | Required | ExternalRestId of the ShiftQualificationDemand |
| startTime | DateTimeObject | Required | StartTime of the employee shift |
| endTime | DateTimeObject | Required | EndTime of the employee shift |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner public of ScheduleEmployeeShiftDemand |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner private of ScheduleEmployeeShiftDemand |
| employeeRemark | Text (200) | Optional | EmployeeRemark of ScheduleEmployeeShiftDemand |
| timestamp | DateTimeObject | Optional | Timestamp of the ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents | Array | Optional | List of administrative component on ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents/id | Number | Required | Unique scheduled ID |
| scheduleEmployeeAdministrativeComponents/administrativeComponentName | Text (MAX) | Required | Name of administrative component |
| scheduleEmployeeAdministrativeComponents/administrativeComponentId | Text (100) | Required | ExternalRestId of administrative component |
| scheduleEmployeeAdministrativeComponents/startTime | DateTimeObject | Required | startTime of scheduled administrative component |
| scheduleEmployeeAdministrativeComponents/endTime | DateTimeObject | Required | endTime of scheduled administrative component |
| isPublished | Boolean | Optional | Whether the shift demand is published. Defaults to false when omitted |
** contractId or organisationStructureId or customerStructureId should be supplied.*
Response
If the response was successful, the REST user will get an inserted ScheduleEmployeeShiftDemand back, like described in GET.
See Exception handling for unsuccessful responses.
A ScheduleEmployeeShiftDemand to create and persist.
| id | string or null |
| personId required | string [ 1 .. 100 ] characters |
| contractId | string or null <= 100 characters |
| organisationStructureId | string or null <= 100 characters |
| customerStructureId | string or null <= 100 characters |
| shiftQualificationDemandId required | string [ 1 .. 100 ] characters |
Array of objects or null (ScheduleEmployeeAdministrativeComponentDto) | |
required | object (DateTimeObject) |
required | object (DateTimeObject) |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| employeeRemark | string or null <= 200 characters |
object (DateTimeObject) | |
| isPublished | boolean |
{- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
}This endpoint will update a ScheduleEmployeeShiftDemand in the database.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ScheduleEmployeeShiftDemand |
| startTime | DateTimeObject | Required | StartTime of the employee shift |
| endTime | DateTimeObject | Required | EndTime of the employee shift |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner public of ScheduleEmployeeShiftDemand |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner private of ScheduleEmployeeShiftDemand |
| employeeRemark | Text (200) | Optional | EmployeeRemark of ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents | Array | Optional | List of administrative component on ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents/id | Number | Required | Unique scheduled ID |
| scheduleEmployeeAdministrativeComponents/administrativeComponentName | Text (MAX) | Required | Name of administrative component |
| scheduleEmployeeAdministrativeComponents/administrativeComponentId | Text (100) | Required | ExternalRestId of administrative component |
| scheduleEmployeeAdministrativeComponents/startTime | DateTimeObject | Required | startTime of scheduled administrative component |
| scheduleEmployeeAdministrativeComponents/endTime | DateTimeObject | Required | endTime of scheduled administrative component |
| isPublished | Boolean | Optional | Whether the shift demand is published |
| timestamp | DateTimeObject | Optional | Set by the API to the moment of the change; a value that is sent is ignored. |
Response
If the response was successful, the REST user will get an updated ScheduleEmployeeShiftDemand back, like described in GET.
See Exception handling for unsuccessful responses.
A ScheduleEmployeeShiftDemand to synchronize the current matching ScheduleEmployeeShiftDemand with.
| id | string or null |
Array of objects or null (ScheduleEmployeeAdministrativeComponentDto) | |
required | object (DateTimeObject) |
required | object (DateTimeObject) |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| employeeRemark | string or null <= 200 characters |
object (DateTimeObject) | |
| isPublished | boolean |
{- "id": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
}This endpoint performs a partial update of a ScheduleEmployeeShiftDemand. Only the fields supplied in the request are merged; omitted fields retain their current values. The same restrictions as PUT apply: only startTime (time only), endTime (time only), plannerRemarkPublic, plannerRemarkPrivate, employeeRemark and administrative components can be changed.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ScheduleEmployeeShiftDemand |
| startTime | DateTimeObject | Optional | StartTime of the employee shift - updated only if supplied |
| endTime | DateTimeObject | Optional | EndTime of the employee shift - updated only if supplied |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner public of ScheduleEmployeeShiftDemand - updated only if supplied |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner private of ScheduleEmployeeShiftDemand - updated only if supplied |
| employeeRemark | Text (200) | Optional | EmployeeRemark of ScheduleEmployeeShiftDemand - updated only if supplied |
| scheduleEmployeeAdministrativeComponents | Array | Optional | List of administrative component on ScheduleEmployeeShiftDemand - updated only if supplied |
| isPublished | Boolean | Optional | Whether the shift demand is published - updated only if supplied |
| timestamp | DateTimeObject | Optional | Set by the API to the moment of the change; a value that is sent is ignored. |
If the response was successful, the REST user will get the updated ScheduleEmployeeShiftDemand back, like described in GET.
See Exception handling for unsuccessful responses.
| id | string or null |
Array of objects or null (ScheduleEmployeeAdministrativeComponentDto) | |
required | object (DateTimeObject) |
required | object (DateTimeObject) |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| employeeRemark | string or null <= 200 characters |
object (DateTimeObject) | |
| isPublished | boolean |
{- "id": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
}This endpoint will delete the ScheduleEmployeeShiftDemand (hard-delete) from the database. The id is passed in the URL: DELETE /api/ScheduleEmployeeShiftDemand/{id}.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the ScheduleEmployeeShiftDemand |
| id required | string The ID value of the ScheduleEmployeeShiftDemand to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
}This endpoint creates or updates multiple ScheduleEmployeeShiftDemands in a single request (POST /api/ScheduleEmployeeShiftDemand/InsertUpdateBulk). Each item without an id is created using the same resolution rules as POST. Each item with a supplied id updates the matching existing record using the same rules as PUT (only startTime, endTime, remarks and administrative components are applied - the resolver fields are ignored for updates). Items that fail validation or business rules are reported in the failed items and do not affect the rest of the batch.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Optional | Computed ExternalRestId of an existing ScheduleEmployeeShiftDemand to update. Omit to create a new one. |
| personId | Text (100) | Required for new items | ExternalRestId of scheduled employee. |
| organisationStructureId | Text (100) | Required for new items * | ExternalRestId of the OrganisationStructure |
| contractId | Text (100) | Required for new items * | ExternalRestId of the Contract |
| customerStructureId | Text (100) | Required for new items * | ExternalRestId of the CustomerStructure |
| shiftQualificationDemandId | Text (100) | Required for new items | ExternalRestId of the ShiftQualificationDemand |
| startTime | DateTimeObject | Required | StartTime of the employee shift |
| endTime | DateTimeObject | Required | EndTime of the employee shift |
| plannerRemarkPublic | Text (200) | Optional | Remark Planner public of ScheduleEmployeeShiftDemand |
| plannerRemarkPrivate | Text (200) | Optional | Remark Planner private of ScheduleEmployeeShiftDemand |
| employeeRemark | Text (200) | Optional | EmployeeRemark of ScheduleEmployeeShiftDemand |
| scheduleEmployeeAdministrativeComponents | Array | Optional | List of administrative component on ScheduleEmployeeShiftDemand (see POST) |
| isPublished | Boolean | Optional | Whether the shift demand is published |
| timestamp | DateTimeObject | Optional | Set by the API to the moment of the change; a value that is sent is ignored. |
The response contains insertedItems, updatedItems and failedItems, each holding the affected ScheduleEmployeeShiftDemand (like described in GET) plus a message.
See Exception handling for unsuccessful responses.
The collection of ScheduleEmployeeShiftDemands to create or update.
| id | string or null |
| personId required | string [ 1 .. 100 ] characters |
| contractId | string or null <= 100 characters |
| organisationStructureId | string or null <= 100 characters |
| customerStructureId | string or null <= 100 characters |
| shiftQualificationDemandId required | string [ 1 .. 100 ] characters |
Array of objects or null (ScheduleEmployeeAdministrativeComponentDto) | |
required | object (DateTimeObject) |
required | object (DateTimeObject) |
| plannerRemarkPublic | string or null <= 200 characters |
| plannerRemarkPrivate | string or null <= 200 characters |
| employeeRemark | string or null <= 200 characters |
object (DateTimeObject) | |
| isPublished | boolean |
[- {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "organisationStructureId": "string",
- "customerStructureId": "string",
- "shiftQualificationDemandId": "string",
- "scheduleEmployeeAdministrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "isPublished": true
}, - "message": "string"
}
]
}The customer within Infinity can be found in the CRM module.
This is also the customer to which the customerStructure is assigned.
To be able to use the Customer in the REST API, the ExternalRestID should be filled.Keep in mind that all Customers without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with Customer: Industry, OrganisationStructure, CustomerStructure, CustomerStatus
ProvisionalAssignmentLevel controls at which level provisional assignments are sent to the ERP: Customer or Department. Defaults to Customer when omitted.
To make this endpoint Customer usable, check the following things:
This endpoint will fetch all Customers with an ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Customer | 556cafc5-f46b-4d5b-afca-c83d7c064339 |
| customerStatusName | Text (200) | Optional | Name of the CustomerStatus for this Customer | Active |
| customerStatusId | Text (100) | Optional | ExternalRestId of the CustomerStatus for this Customer | Active |
| industryName | Text (200) | Optional | Name of the Industry for this Customer | IT |
| industryId | Text (100) | Optional | ExternalRestId of the Industry for this Customer | IT |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure for this Customer | e63f07a4-a1bc-482b-a35c-e314ba290cca |
| customerType | Text | Required | Type of the Customer | Customer |
| name | Text (200) | Required | Name for this Customer | Planbition |
| startDate | DateObject | Required | StartDate for this Customer | {"year": 2020,"month": 12,"day": 3} |
| endDate | DateObject | Required | EndDate for this Customer | {"year": 2024,"month": 1,"day": 22} |
| isActive | Boolean | Required | Active state for this Customer | true |
| externalCustomerId | Text (200) | Optional | ExternalId for other legacy interfaces like SETU (Legacy) | PlanbitionIT |
| useSetuAssignments | Boolean | Required | Customer makes use of assignments (SETU) | true |
| provisionalAssignmentLevel | Text (15) | Required | Level at which provisional assignments are sent to the ERP (Customer or Department). Defaults to Customer when omitted. | Customer |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "customerStatusName": "string",
- "industryName": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a Customer in the database. The REST user can only insert customers into organisations that the REST user is authorized for.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Customer | 556cafc5-f46b-4d5b-afca-c83d7c064339 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure for this Customer | e63f07a4-a1bc-482b-a35c-e314ba290cca |
| customerType | Text | Optional | Type of the Customer. Defaults to Customer when omitted. | Customer |
| customerStatusId | Text (100) | Optional | ExternalRestId of the CustomerStatus for this Customer | Active |
| industryId | Text (100) | Optional | ExternalRestId of the Industry for this Customer | IT |
| name | Text (200) | Required | Name for this Customer | Planbition |
| startDate | DateObject | Required | StartDate for this Customer | {"year": 2024,"month": 1,"day": 1} |
| endDate | DateObject | Required | EndDate for this Customer | {"year": 2030,"month": 12,"day": 31} |
| isActive | Boolean | Required | Active state for this Customer | true |
| externalCustomerId | Text (200) | Optional | ExternalId for other legacy interfaces like SETU (Legacy) | PlanbitionIT |
| useSetuAssignments | Boolean | Required | Customer makes use of assignments (SETU) | false |
| provisionalAssignmentLevel | Text (15) | Optional | Level at which provisional assignments are sent to the ERP: Customer or Department. Defaults to Customer when omitted. | Department |
| countryIsoCode | Text (2) | Required | ISO2 country code for the Customer address. Must be sent, but is not stored. | NL |
| customerStructureTypeId | Text (100) | Optional | Not used: accepted, but not stored. | Store |
| street | Text (50) | Optional | Not used: accepted, but not stored. | Example Street |
| streetNumber | Text (50) | Optional | Not used: accepted, but not stored. | 1 |
| streetNumberAddition | Text (50) | Optional | Not used: accepted, but not stored. | A |
| postalCode | Text (50) | Optional | Not used: accepted, but not stored. | 1234AB |
| city | Text | Optional | Not used: accepted, but not stored. | Exampletown |
| county | Text | Optional | Not used: accepted, but not stored. | Example County |
| telephone1 | Text (50) | Optional | Not used: accepted, but not stored. | 0100000000 |
| telephone2 | Text (50) | Optional | Not used: accepted, but not stored. | 0100000001 |
| Text | Optional | Not used: accepted, but not stored. | info@example.com | |
| http | Text (100) | Optional | Not used: accepted, but not stored. | https://www.example.com |
A new Customer also gets a CustomerStructure with the same name, with its address left empty ("-"); maintain the address with CustomerStructure.
If the response was successful, the REST user will get an inserted Customer back, like described in GET.
See Exception handling for unsuccessful responses.
A Customer to create and persist.
| id required | string [ 1 .. 100 ] characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| customerStructureTypeId | string or null <= 100 characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| http | string or null <= 100 characters |
| organisationStructureId | string or null |
| customerType | string or null Enum: "Customer" "Prospect" |
| customerStatusId | string or null |
| industryId | string or null |
| name | string or null |
object (DateObject) | |
object (DateObject) | |
| isActive | boolean or null |
| externalCustomerId | string or null <= 200 characters |
| useSetuAssignments | boolean |
| provisionalAssignmentLevel | string or null |
{- "id": "string",
- "countryIsoCode": "st",
- "customerStructureTypeId": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "http": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}
}This endpoint will update a Customer in the database. The REST user can only update customers on organisations that the REST user is authorized for.
Request
See specs in POST.
Response
If the response was successful, the REST user will get an updated Customer back, like described in GET.
See Exception handling for unsuccessful responses.
A Customer to synchronize the current matching Customer with.
| id required | string [ 1 .. 100 ] characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| customerStructureTypeId | string or null <= 100 characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| http | string or null <= 100 characters |
| organisationStructureId | string or null |
| customerType | string or null Enum: "Customer" "Prospect" |
| customerStatusId | string or null |
| industryId | string or null |
| name | string or null |
object (DateObject) | |
object (DateObject) | |
| isActive | boolean or null |
| externalCustomerId | string or null <= 200 characters |
| useSetuAssignments | boolean |
| provisionalAssignmentLevel | string or null |
{- "id": "string",
- "countryIsoCode": "st",
- "customerStructureTypeId": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "http": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}
}This endpoint will partially update a Customer in the database. Unlike PUT, only the fields provided in the request will be updated. The REST user can only update customers on organisations that the REST user is authorized for.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated Customer back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| customerStructureTypeId | string or null <= 100 characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null |
| county | string or null |
| telephone1 | string or null <= 50 characters |
| telephone2 | string or null <= 50 characters |
string or null | |
| http | string or null <= 100 characters |
| organisationStructureId | string or null |
| customerType | string or null Enum: "Customer" "Prospect" |
| customerStatusId | string or null |
| industryId | string or null |
| name | string or null |
object (DateObject) | |
object (DateObject) | |
| isActive | boolean or null |
| externalCustomerId | string or null <= 200 characters |
| useSetuAssignments | boolean |
| provisionalAssignmentLevel | string or null |
{- "id": "string",
- "countryIsoCode": "st",
- "customerStructureTypeId": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "http": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}
}This endpoint will delete the Customer from the database. The REST User can only delete customers which it is authorized for. The id is passed in the URL: DELETE /api/Customer/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Customer | 556cafc5-f46b-4d5b-afca-c83d7c064339 |
| id required | string The ID value of the Customer to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}
}This endpoint partially updates multiple existing Customers in a single request (POST /api/Customer/InsertUpdateBulk). Each item is matched by ExternalRestId; only the fields provided are merged into the existing record. Unlike other domains' bulk endpoints, this does not insert new Customers — an item whose id does not match an existing Customer is reported in the failed items.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the existing Customer to patch | 556cafc5-f46b-4d5b-afca-c83d7c064339 |
| name | Text (200) | Optional | Name for this Customer - updated only if supplied | Planbition |
| customerStatusId | Text (100) | Optional | ExternalRestId of the CustomerStatus - updated only if supplied | Active |
| industryId | Text (100) | Optional | ExternalRestId of the Industry - updated only if supplied | IT |
| startDate | DateObject | Optional | StartDate for this Customer - updated only if supplied | {"year": 2024,"month": 1,"day": 1} |
| endDate | DateObject | Optional | EndDate for this Customer - updated only if supplied | {"year": 2030,"month": 12,"day": 31} |
| isActive | Boolean | Optional | Active state for this Customer - updated only if supplied | true |
| externalCustomerId | Text (200) | Optional | ExternalId for legacy interfaces - updated only if supplied | PlanbitionIT |
| useSetuAssignments | Boolean | Optional | Customer makes use of assignments (SETU) - updated only if supplied | true |
| provisionalAssignmentLevel | Text (15) | Optional | Level at which provisional assignments are sent to the ERP - updated only if supplied | Department |
A list of partial Customer payloads; each must include id.
[- null
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "customerType": "Customer",
- "customerStatusId": "string",
- "industryId": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "isActive": true,
- "externalCustomerId": "string",
- "useSetuAssignments": true,
- "provisionalAssignmentLevel": "string"
}, - "message": "string"
}
]
}Cars are registered and maintained in the Transport schedule module of Infinity.
To be able to use the TransportCar in the REST API, the ExternalRestID should be filled.
To make this endpoint TransportCar usable, check the following things:
This endpoint will fetch cars.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Car | 21-BH-HB |
| brand | Text (50) | Required | Brand of the Car | Toyota |
| model | Text (50) | Required | Model of the Car | Yaris |
| licensePlate | Text (50) | Required | License plate of the Car | 21-BH-HB |
| capacity | Number | Required | Capacity of the Car | 5 |
| isActive | Boolean | Required | Active state of the Car | true |
| leaseCompany | Text (100) | Optional | Lease company of the Car | Ayvens |
| leaseAmount | Number | Optional | Lease amount of the Car | 500 |
| kmPerYear | Number | Optional | Km per year on contract | 10000 |
| apkDate | DateObject | Optional | Mandatory periodic technical inspection of the Car | { "year": 2024, "month": 1, "day": 1 } |
| serviceDate | DateObject | Optional | Next service date of the Car | { "year": 2024, "month": 2, "day": 12 } |
| serviceKm | Number | Optional | Kms till next service | 5000 |
| fuelType | Text (50) | Optional | Options: Petrol, Diesel, Hybrid, Electric | Hybrid |
| modelType | Text (50) | Optional | Options: Car, Minivan, Bus | Car |
| remark | Text (300) | Optional | Remark | Remark |
| contractNumber | Text (50) | Optional | Contract number | C123454 |
| contractType | Text (50) | Optional | Options: Lease, Rental | Rental |
| contractStartDate | DateObject | Required | Lease contract start date | { "year": 2024, "month": 1, "day": 1 } |
| contractEndDate | DateObject | Required | Lease contract end date | { "year": 2024, "month": 12, "day": 31 } |
| organisations | Array | Optional | List of assigned organisationStructures of Car. See more spec TransportCarOrganisation GET. | "organisations": [ { "id": "21-BH-HB_20260101", "transportCarLicensePlate": "21-BH-HB", "organisationName": " Planbition ", "endDate": { "year": 2026, "month": 1, "day": 31 }, "organisationId": "Planbition", "transportCarId": "21-BH-HB", "startDate": { "year": 2026, "month": 1, "day": 1 } } ], |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create TransportCar in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Car | 21-BH-HB |
| brand | Text (50) | Required | Brand of the Car | Toyota |
| model | Text (50) | Required | Model of the Car | Yaris |
| licensePlate | Text (50) | Required | License plate of the Car | 21-BH-HB |
| capacity | Number | Required | Capacity of the Car | 5 |
| isActive | Boolean | Required | Active state of the Car | true |
| leaseCompany | Text (100) | Optional | Lease company of the Car | Ayvens |
| leaseAmount | Number | Optional | Lease amount of the Car | 500 |
| kmPerYear | Number | Optional | Km per year on contract | 10000 |
| apkDate | DateObject | Optional | Mandatory periodic technical inspection of the Car | { "year": 2024, "month": 1, "day": 1 } |
| serviceDate | DateObject | Optional | Next service date of the Car | { "year": 2024, "month": 2, "day": 12 } |
| serviceKm | Number | Optional | Kms till next service | 5000 |
| fuelType | Text (50) | Optional | Options: Petrol, Diesel, Hybrid, Electric | Hybrid |
| modelType | Text (50) | Optional | Options: Car, Minivan, Bus | Car |
| remark | Text (300) | Optional | Remark | Remark |
| contractNumber | Text (50) | Optional | Contract number | C123454 |
| contractType | Text (50) | Optional | Options: Lease, Rental | Rental |
| contractStartDate | DateObject | Required | Lease contract start date | { "year": 2024, "month": 1, "day": 1 } |
| contractEndDate | DateObject | Required | Lease contract end date | { "year": 2024, "month": 12, "day": 31 } |
Response
If the response was successful, the REST user will get an inserted TransportCar back, like described in GET.
See Exception handling for unsuccessful responses.
A Transport car to create and persist.
| id required | string [ 1 .. 100 ] characters |
| brand required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| licensePlate required | string [ 1 .. 50 ] characters |
| capacity required | integer <int32> |
| isActive required | boolean |
| leaseCompany | string or null <= 100 characters |
| leaseAmount | integer or null <int32> |
| kmPerYear | integer or null <int32> |
object (DateObject) | |
object (DateObject) | |
| serviceKm | integer or null <int32> |
| fuelType | string or null |
| modelType | string or null |
| remark | string or null <= 300 characters |
| contractNumber | string or null <= 50 characters |
| contractType | string or null |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will update a TransportCar in the database.
Request
See specs in POST.
Response
If the response was successful, the REST user will get an updated TransportCar back, like described in GET.
See Exception handling for unsuccessful responses.
A Transport car to synchronize the current matching Customer with.
| id required | string [ 1 .. 100 ] characters |
| brand required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| licensePlate required | string [ 1 .. 50 ] characters |
| capacity required | integer <int32> |
| isActive required | boolean |
| leaseCompany | string or null <= 100 characters |
| leaseAmount | integer or null <int32> |
| kmPerYear | integer or null <int32> |
object (DateObject) | |
object (DateObject) | |
| serviceKm | integer or null <int32> |
| fuelType | string or null |
| modelType | string or null |
| remark | string or null <= 300 characters |
| contractNumber | string or null <= 50 characters |
| contractType | string or null |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will partially update a TransportCar in the database. Unlike PUT, only the fields provided in the request body will be updated; omitted fields remain unchanged. The REST user can only update TransportCars which it is authorized for.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated TransportCar back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| brand required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| licensePlate required | string [ 1 .. 50 ] characters |
| capacity required | integer <int32> |
| isActive required | boolean |
| leaseCompany | string or null <= 100 characters |
| leaseAmount | integer or null <int32> |
| kmPerYear | integer or null <int32> |
object (DateObject) | |
object (DateObject) | |
| serviceKm | integer or null <int32> |
| fuelType | string or null |
| modelType | string or null |
| remark | string or null <= 300 characters |
| contractNumber | string or null <= 50 characters |
| contractType | string or null |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will delete a TransportCar from the database. The id is passed in the URL: DELETE /api/TransportCar/{id}.
Cars cannot be deleted, when there is existing scheduled data (TransportScheduleEmployeeOnCar) connecting to this Car.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Car | 21-BH-HB |
| id required | string The ID value of the Transport car to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "brand": "string",
- "model": "string",
- "licensePlate": "string",
- "capacity": 0,
- "isActive": true,
- "leaseCompany": "string",
- "leaseAmount": 0,
- "kmPerYear": 0,
- "apkDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "serviceKm": 0,
- "fuelType": "string",
- "modelType": "string",
- "remark": "string",
- "contractNumber": "string",
- "contractType": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}These are the organisations assigned to the car over a period maintained in the transport schedule module of Infinity.
Keep in mind that all TransportCarOrganisation have a direct relationship with OrganisationStructures and TransportCars. It's required that these entities have externalRestIds.
TransportCarOrganisation has a computed externalRestId, based on {TransportCar.ExternalRestId}{separator}{TransportCarOrganisation.StartDate:ddMMyyyy}.
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint TransportCarOrganisation usable, check the following things:
This endpoint will fetch all assigned organisations for all cars.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed externalrestid of Assigned Organisation Car | 21-BH-HB_20241231 |
| transportCarLicensePlate | Text (50) | Required | Name of the Car | 21-BH-HB |
| transportCarId | Text (100) | Required | ExternalRestId of Car | 21-BH-HB |
| organisationName | Text (300) | Required | Name of Organisation | Planbition |
| organisationId | Text (100) | Required | ExternalRestId of Organisation | Planbition |
| startDate | DateObject | Required | Start date of period organisation assignment to Car | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date of period organisation assignment to Car | { "year": 2024, "month": 12, "day": 31 } |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create TransportCarOrganisation in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| organisationId | Text (100) | Required | ExternalRestId of Organisation | Planbition |
| transportCarId | Text (100) | Required | ExternalRestId of Car | 21-BH-HB |
| startDate | DateObject | Required | Start date of period organisation assignment to Car | { "year": 2025, "month": 1, "day": 22 } |
Response
If the response was successful, the REST user will get an inserted TransportCarOrganisation back, like described in GET.
See Exception handling for unsuccessful responses.
A Transport Car Organisation to create and persist.
| organisationId required | string [ 1 .. 100 ] characters |
| transportCarId required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
{- "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "transportCarLicensePlate": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportCarId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}The CustomerStructure within Infinity can be found in the CRM module, assigned to the customers. CustomerStructures represent organizational nodes (departments, locations) belonging to a customer, arranged in a parent-child tree hierarchy.
CustomerStructures contain everything related to maintaining shift demand (shift information). Also the ContractAssignments are connected to a CustomerStructure.
To be able to use the CustomerStructure in the REST API, the ExternalRestId should be filled. Keep in mind that all CustomerStructures without an ExternalRestId cannot be used in the REST API. This will include the entities that have a direct relationship with CustomerStructure: CustomerStructureType, Customer, OrganisationStructure, ContractAssignment, Country, Shift.
To make this endpoint CustomerStructure usable, check the following things:
The CustomerStructureTypes for customerStructures can be managed in the admin module, in the organisation view. customerStructureTypes are configured on tenant level, which means every organisation has the same CustomerStructureType information.
To be able to use the CustomerStructureType in the REST API, the ExternalRestID should be filled.
Keep in mind that all CustomerStructureTypes without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with CustomerStructureType: CustomerStructure
To make this endpoint CustomerStructureType usable, check the following things:
This endpoint will fetch all CustomerStructure records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | - | REST identifier (ExternalRestId) | CS-001 |
| customerId | Text (100) | - | ExternalRestId of the Customer this structure belongs to | CUST-001 |
| customerName | Text | - | Name of the customer | Acme Corp |
| parentId | Text (100) | - | ExternalRestId of the parent CustomerStructure; null for root elements | CS-PARENT-001 |
| organisationStructureId | Text (100) | - | ExternalRestId of the OrganisationStructure | ORG-001 |
| organisationStructureName | Text | - | Name of the organisation structure | Head Office |
| customerStructureTypeId | Text (100) | - | ExternalRestId of the CustomerStructureType; null if not set | TYPE-001 |
| customerStructureTypeName | Text | - | Name of the customer structure type; null if not set | Location |
| name | Text | - | Name of the customer structure | Head Office |
| description | Text | - | Free-text description; may be null | Main office location |
| startDate | DateObject | - | Start date of the customer structure | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | - | End date of the customer structure; may be null | { "year": 2030, "month": 12, "day": 31 } |
| street | Text | - | Street name | Main Street |
| number | Text | - | House number | 1 |
| numberAddition | Text (50) | - | House number addition; may be null | A |
| postalCode | Text (50) | - | Postal code | 1000AA |
| city | Text | - | City name | Amsterdam |
| county | Text | - | County / province; may be null | Noord-Holland |
| countryIsoCode | Text (2) | - | ISO-3166 country code | NL |
| telephone1 | Text (50) | - | Primary phone number | 0201234567 |
| telephone2 | Text (50) | - | Secondary phone number; may be null | 0207654321 |
| Text | - | Email address; may be null | info@example.com | |
| website | Text | - | Website URL; may be null | https://www.example.com |
| isActive | Boolean | - | Whether the customer structure is active | true |
| externalCostCenter | Text | - | External cost center reference; may be null | CC-001 |
| externalCustomerStructureId | Text | - | External system's own identifier; may be null | EXT-001 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a CustomerStructure in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Underscore (_) is forbidden on POST. | CS-001 |
| customerId | Text (100) | Required | ExternalRestId of the Customer this structure belongs to. Immutable after creation. | CUST-001 |
| parentId | Text (100) | Optional | ExternalRestId of the parent CustomerStructure. Must belong to the same customer. | CS-PARENT-001 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure | ORG-001 |
| customerStructureTypeId | Text (100) | Optional | ExternalRestId of the CustomerStructureType | TYPE-001 |
| name | Text | Required | Name of the customer structure | Head Office |
| description | Text | Optional | Free-text description | Main office location |
| startDate | DateObject | Required | Start date of the customer structure | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | End date; must be on/after startDate | { "year": 2030, "month": 12, "day": 31 } |
| street | Text | Required | Street name | Main Street |
| number | Text | Required | House number | 1 |
| numberAddition | Text (50) | Optional | House number addition | A |
| postalCode | Text (50) | Required | Postal code | 1000AA |
| city | Text | Required | City name | Amsterdam |
| county | Text | Optional | County / province | Noord-Holland |
| countryIsoCode | Text (2) | Required | ISO-3166 country code; must match an existing Country | NL |
| telephone1 | Text (50) | Required | Primary phone number. Parentheses are not allowed. | 0201234567 |
| telephone2 | Text (50) | Optional | Secondary phone number. Parentheses are not allowed. | 0207654321 |
| Text | Optional | Email address | info@example.com | |
| website | Text | Optional | Website URL | https://www.example.com |
| isActive | Boolean | Required | Whether the customer structure is active | true |
| externalCostCenter | Text | Optional | External cost center reference | CC-001 |
| externalCustomerStructureId | Text | Optional | External system's own identifier | EXT-001 |
If the response was successful, the REST user will get the CustomerStructure back, see GET.
A CustomerStructure to create and persist.
| id | string or null |
| customerId | string or null |
| parentId | string or null |
| organisationStructureId | string or null |
| customerStructureTypeId | string or null |
| name | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| street | string or null |
| number | string or null |
| numberAddition | string or null |
| postalCode | string or null |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null |
| telephone2 | string or null |
string or null | |
| website | string or null |
| isActive | boolean or null |
| externalCostCenter | string or null |
| externalCustomerStructureId | string or null |
{- "id": "string",
- "customerId": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
}This endpoint will update a CustomerStructure in the database. The customerId is immutable and cannot be changed.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId - lookup key; the value is immutable | CS-001 |
| parentId | Text (100) | Optional | ExternalRestId of the parent CustomerStructure. Root elements (no existing parent) cannot be moved. | CS-PARENT-001 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure | ORG-001 |
| customerStructureTypeId | Text (100) | Optional | ExternalRestId of the CustomerStructureType | TYPE-001 |
| name | Text | Required | Name of the customer structure | Head Office (updated) |
| description | Text | Optional | Free-text description | Main office location |
| startDate | DateObject | Required | Start date of the customer structure | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | End date; must be on/after startDate | { "year": 2030, "month": 12, "day": 31 } |
| street | Text | Required | Street name | Main Street |
| number | Text | Required | House number | 1 |
| numberAddition | Text (50) | Optional | House number addition | A |
| postalCode | Text (50) | Required | Postal code | 1000AA |
| city | Text | Required | City name | Amsterdam |
| county | Text | Optional | County / province | Noord-Holland |
| countryIsoCode | Text (2) | Required | ISO-3166 country code; must match an existing Country | NL |
| telephone1 | Text (50) | Required | Primary phone number. Parentheses are not allowed. | 0201234567 |
| telephone2 | Text (50) | Optional | Secondary phone number. Parentheses are not allowed. | 0207654321 |
| Text | Optional | Email address | info@example.com | |
| website | Text | Optional | Website URL | https://www.example.com |
| isActive | Boolean | Required | Whether the customer structure is active | true |
| externalCostCenter | Text | Optional | External cost center reference | CC-001 |
| externalCustomerStructureId | Text | Optional | External system's own identifier | EXT-001 |
If the response was successful, the REST user will get the CustomerStructure back, see GET.
A CustomerStructure to synchronize the current matching CustomerStructure with.
| id | string or null |
| parentId | string or null |
| organisationStructureId | string or null |
| customerStructureTypeId | string or null |
| name | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| street | string or null |
| number | string or null |
| numberAddition | string or null |
| postalCode | string or null |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null |
| telephone2 | string or null |
string or null | |
| website | string or null |
| isActive | boolean or null |
| externalCostCenter | string or null |
| externalCustomerStructureId | string or null |
{- "id": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
}This endpoint performs a partial update of a CustomerStructure. Only fields supplied in the request body are updated; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the record to patch | CS-001 |
| parentId | Text (100) | Optional | ExternalRestId of the parent CustomerStructure. Root elements (no existing parent) cannot be moved. - updated only if supplied | CS-PARENT-001 |
| organisationStructureId | Text (100) | Optional | ExternalRestId of the OrganisationStructure - updated only if supplied | ORG-001 |
| customerStructureTypeId | Text (100) | Optional | ExternalRestId of the CustomerStructureType - updated only if supplied | TYPE-001 |
| name | Text | Optional | Name of the customer structure - updated only if supplied | Head Office (updated) |
| description | Text | Optional | Free-text description - updated only if supplied | Main office location |
| startDate | DateObject | Optional | Start date of the customer structure - updated only if supplied | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | End date; must be on/after startDate - updated only if supplied | { "year": 2030, "month": 12, "day": 31 } |
| street | Text | Optional | Street name - updated only if supplied | Main Street |
| number | Text | Optional | House number - updated only if supplied | 1 |
| numberAddition | Text (50) | Optional | House number addition - updated only if supplied | A |
| postalCode | Text (50) | Optional | Postal code - updated only if supplied | 1000AA |
| city | Text | Optional | City name - updated only if supplied | Amsterdam |
| county | Text | Optional | County / province - updated only if supplied | Noord-Holland |
| countryIsoCode | Text (2) | Optional | ISO-3166 country code; must match an existing Country - updated only if supplied | NL |
| telephone1 | Text (50) | Optional | Primary phone number. Parentheses are not allowed. - updated only if supplied | 0201234567 |
| telephone2 | Text (50) | Optional | Secondary phone number. Parentheses are not allowed. - updated only if supplied | 0207654321 |
| Text | Optional | Email address - updated only if supplied | info@example.com | |
| website | Text | Optional | Website URL - updated only if supplied | https://www.example.com |
| isActive | Boolean | Optional | Whether the customer structure is active - updated only if supplied | true |
| externalCostCenter | Text | Optional | External cost center reference - updated only if supplied | CC-001 |
| externalCustomerStructureId | Text | Optional | External system's own identifier - updated only if supplied | EXT-001 |
| id | string or null |
| parentId | string or null |
| organisationStructureId | string or null |
| customerStructureTypeId | string or null |
| name | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| street | string or null |
| number | string or null |
| numberAddition | string or null |
| postalCode | string or null |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null |
| telephone2 | string or null |
string or null | |
| website | string or null |
| isActive | boolean or null |
| externalCostCenter | string or null |
| externalCustomerStructureId | string or null |
{- "id": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
}This endpoint will delete a CustomerStructure from the database. The id is passed in the URL: DELETE /api/CustomerStructure/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the CustomerStructure to delete | CS-001 |
| id required | string The ID value of the CustomerStructure to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
}This endpoint creates or updates multiple CustomerStructure records in a single request (POST /api/CustomerStructure/InsertUpdateBulk). Each item is matched by ExternalRestId: existing records are updated, new ones are inserted.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Underscore (_) is forbidden on POST. | CS-001 |
| customerId | Text (100) | Required | ExternalRestId of the Customer this structure belongs to. Immutable after creation. | CUST-001 |
| parentId | Text (100) | Optional | ExternalRestId of the parent CustomerStructure. Must belong to the same customer. | CS-PARENT-001 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructure | ORG-001 |
| customerStructureTypeId | Text (100) | Optional | ExternalRestId of the CustomerStructureType | TYPE-001 |
| name | Text | Required | Name of the customer structure | Head Office |
| description | Text | Optional | Free-text description | Main office location |
| startDate | DateObject | Required | Start date of the customer structure | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | End date; must be on/after startDate | { "year": 2030, "month": 12, "day": 31 } |
| street | Text | Required | Street name | Main Street |
| number | Text | Required | House number | 1 |
| numberAddition | Text (50) | Optional | House number addition | A |
| postalCode | Text (50) | Required | Postal code | 1000AA |
| city | Text | Required | City name | Amsterdam |
| county | Text | Optional | County / province | Noord-Holland |
| countryIsoCode | Text (2) | Required | ISO-3166 country code; must match an existing Country | NL |
| telephone1 | Text (50) | Required | Primary phone number. Parentheses are not allowed. | 0201234567 |
| telephone2 | Text (50) | Optional | Secondary phone number. Parentheses are not allowed. | 0207654321 |
| Text | Optional | Email address | info@example.com | |
| website | Text | Optional | Website URL | https://www.example.com |
| isActive | Boolean | Required | Whether the customer structure is active | true |
| externalCostCenter | Text | Optional | External cost center reference | CC-001 |
| externalCustomerStructureId | Text | Optional | External system's own identifier | EXT-001 |
The list of CustomerStructures to create or update.
| id | string or null |
| customerId | string or null |
| parentId | string or null |
| organisationStructureId | string or null |
| customerStructureTypeId | string or null |
| name | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| street | string or null |
| number | string or null |
| numberAddition | string or null |
| postalCode | string or null |
| city | string or null |
| county | string or null |
| countryIsoCode | string or null |
| telephone1 | string or null |
| telephone2 | string or null |
string or null | |
| website | string or null |
| isActive | boolean or null |
| externalCostCenter | string or null |
| externalCustomerStructureId | string or null |
[- {
- "id": "string",
- "customerId": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "customerId": "string",
- "customerName": "string",
- "organisationStructureName": "string",
- "customerStructureTypeName": "string",
- "parentId": "string",
- "organisationStructureId": "string",
- "customerStructureTypeId": "string",
- "name": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "street": "string",
- "number": "string",
- "numberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryIsoCode": "string",
- "telephone1": "string",
- "telephone2": "string",
- "email": "string",
- "website": "string",
- "isActive": true,
- "externalCostCenter": "string",
- "externalCustomerStructureId": "string"
}, - "message": "string"
}
]
}Bikes are registered and maintained in the Transport schedule module of Infinity.
To be able to use the TransportBike in the REST API, the ExternalRestID should be filled.
To make this endpoint TransportBike usable, check the following things:
This endpoint will fetch bikes.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Bike | Batavus34025 |
| name | Text (50) | Required | Name of the Bike | Batavus |
| model | Text (100) | Required | Options: Men's bicycle Ladies bicycle Electric men's bicycle Electric ladies bicycle | Ladies bicycle |
| isActive | Boolean | Required | Active state of the Bike | true |
| remark | Text (300) | Optional | Remark | Remark |
| contractStartDate | DateObject | Required | Contract start date | { "year": 2024, "month": 1, "day": 1 } |
| contractEndDate | DateObject | Required | Contract end date | { "year": 2024, "month": 12, "day": 31 } |
| organisations | Array | Optional | List of assigned organisationStructures of Bike. See more spec TransportBikeOrganisation GET. | "organisations": [ { "id": " Batavus34025_20260101", "transportBikeName": "Batavus", "organisationName": "Planbition", "endDate": { "year": 2026, "month": 1, "day": 31 }, "organisationId": "Planbition", "transportBikeId": " Batavus34025", "startDate": { "year": 2026, "month": 1, "day": 1 } } ], |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create TransportBike in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of Bike | Batavus34025 |
| name | Text (50) | Required | Name of the Bike | Batavus |
| model | Text (100) | Required | Options: Men's bicycle Ladies bicycle Electric men's bicycle Electric ladies bicycle | Ladies bicycle |
| isActive | Boolean | Required | Active state of the Bike | true |
| remark | Text (300) | Optional | Remark | Remark |
| contractStartDate | DateObject | Required | Contract start date | { "year": 2024, "month": 1, "day": 1 } |
| contractEndDate | DateObject | Required | Contract end date | { "year": 2024, "month": 12, "day": 31 } |
Response
If the response was successful, the REST user will get an inserted TransportBike back, like described in GET.
See Exception handling for unsuccessful responses.
A Transport Bike to create and persist.
| id required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| isActive required | boolean |
| remark | string or null <= 300 characters |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will update a TransportBike in the database.
Request
See specs in POST.
Response
If the response was successful, the REST user will get an updated TransportBike back, like described in GET.
See Exception handling for unsuccessful responses.
A House to synchronize the current matching Transport Bike with.
| id required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| isActive required | boolean |
| remark | string or null <= 300 characters |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will partially update a TransportBike in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated TransportBike back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 50 ] characters |
| model required | string [ 1 .. 50 ] characters |
| isActive required | boolean |
| remark | string or null <= 300 characters |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will delete a TransportBike from the database. The id is passed in the URL: DELETE /api/TransportBike/{id}.
Bikes cannot be deleted, when there is existing scheduled data (TransportScheduleEmployeeOnBike) connecting to this Bike.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the TransportBike | Batavus34025 |
| id required | string The ID value of the Transport Bike to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "organisations": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "name": "string",
- "model": "string",
- "isActive": true,
- "remark": "string",
- "contractStartDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "contractEndDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}These are the organisations assigned to the bike over a period maintained in the Transport schedule module of Infinity.
Keep in mind that all TransportBikeOrganisation have a direct relationship with OrganisationStructures and TransportBikes. It's required that these entities have externalRestIds.
TransportBikeOrganisation has a computed externalRestId, based on {TransportBike.ExternalRestId}{separator}{TransportBikeOrganisation.StartDate:ddMMyyyy}.
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint TransportBikeOrganisation usable, check the following things:
This endpoint will fetch all assigned organisations for all bikes.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed externalrestid of Assigned Organisation Bike | Batavus34025_20241231 |
| transportBikeName | Text (50) | Required | Name of the Bike | Batavus |
| transportBikeId | Text (100) | Required | ExternalRestId of Bike | Batavus34025 |
| organisationName | Text (300) | Required | Name of Organisation | Planbition |
| organisationId | Text (100) | Required | ExternalRestId of Organisation | Planbition |
| startDate | DateObject | Required | Start date of period organisation assignment to Bike | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date of period organisation assignment to Bike | { "year": 2024, "month": 12, "day": 31 } |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create TransportBikeOrganisation in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| organisationId | Text (100) | Required | ExternalRestId of Organisation | Planbition |
| transportBikeId | Text (100) | Required | ExternalRestId of Bike | Batavus34025 |
| startDate | DateObject | Required | Start date of period organisation assignment to Bike | { "year": 2025, "month": 1, "day": 22 } |
Response
If the response was successful, the REST user will get an inserted TransportBikeOrganisation back, like described in GET.
See Exception handling for unsuccessful responses.
A Transport Bike Organisation to create and persist.
| organisationId required | string [ 1 .. 100 ] characters |
| transportBikeId required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
{- "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "transportBikeName": "string",
- "organisationName": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "organisationId": "string",
- "transportBikeId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}The EmployeeCustomFields table stores the actual values of custom fields per employee/person. The custom field definitions (name, type, lookup values, etc.) live in CustomFieldsEmployee. This endpoint exposes CRUD + PATCH + Bulk operations so API consumers can read and write custom field values for employees, with validation against the field type, mandatory flag, and lookup options.
The ExternalRestId is computed server-side: it is based on Employee ExternalRestId + '_' + CustomFieldsEmployee ExternalRestId.
To make this endpoint EmployeeCustomField usable, check the following things:
This endpoint will fetch all EmployeeCustomField records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Computed | Composite ExternalRestId: Employee ExternalRestId + '_' + CustomFieldsEmployee ExternalRestId | emp123_cf456 |
| personId | Text (100) | Read-only | ExternalRestId of the Employee | emp123 |
| customFieldId | Text (100) | Read-only | ExternalRestId of the custom field definition (CustomFieldsEmployee) | cf456 |
| value | Text | Optional | The stored custom field value | 42 |
| customFieldName | Text | Read-only | Name of the custom field definition | Contract Type |
| customFieldGroupName | Text | Optional | Group name of the custom field definition | HR Data |
| organisationStructureId | Text (100) | - | ExternalRestId of the OrganisationStructure of the custom field (read-only) | ORG-001 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a EmployeeCustomField in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Optional | ExternalRestId auto-computed on POST; underscore (_) is not allowed in consumer-supplied value | |
| personId | Text (100) | Required | ExternalRestId of the employee | emp123 |
| customFieldId | Text (100) | Required | ExternalRestId of the custom field definition (CustomFieldsEmployee) | cf456 |
| value | Text | Optional | The value to store; required if IsMandatory = true on the field definition | 42 |
If the response was successful, the REST user will get the EmployeeCustomField back, see GET.
An EmployeeCustomField to create and persist.
| id | string or null |
| personId | string or null |
| customFieldId | string or null |
| value | string or null |
{- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}
}This endpoint will update a EmployeeCustomField in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId identifying the record to update | emp123_cf456 |
| value | Text | Optional | The updated value; required if IsMandatory = true on the field definition | 42 |
If the response was successful, the REST user will get the EmployeeCustomField back, see GET.
An EmployeeCustomField to synchronize the current matching EmployeeCustomField with.
| id | string or null |
| value | string or null |
{- "id": "string",
- "value": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}
}This endpoint performs a partial update of a EmployeeCustomField. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId identifying the record; must always be supplied | emp123_cf456 |
| value | Text | Optional | If supplied, updates the value; if omitted, retains the current value | 42 |
| id | string or null |
| value | string or null |
{- "id": "string",
- "value": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}
}This endpoint will delete a EmployeeCustomField from the database. The id is passed in the URL: DELETE /api/EmployeeCustomField/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the EmployeeCustomField | emp123_cf456 |
| id required | string The composite ID value (personId_customFieldId) of the employee custom field to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}
}This endpoint creates or updates multiple EmployeeCustomField records in a single request (POST /api/EmployeeCustomField/bulk). Each item has the fields of POST and is matched on the combination of employee (personId) and custom field (customFieldId): an existing EmployeeCustomField is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
A list of employee custom fields to insert or update.
| id | string or null |
| personId | string or null |
| customFieldId | string or null |
| value | string or null |
[- {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "customFieldId": "string",
- "value": "string",
- "customFieldName": "string",
- "customFieldGroupName": "string",
- "organisationStructureId": "string"
}, - "message": "string"
}
]
}This endpoint exposes full CRUD and Bulk operations over the ScheduleEmployeeAbsenceAndPresence table, which records planned employee absences and presences in the schedule. External API consumers (integrations) can now read, create, update, patch, delete, and bulk-insert these schedule entries — operations previously only available through the Infinity UI.
The id (ExternalRestId) is computed by the API: {Contract.ExternalRestId}{separator}{AbsencePresence.ExternalRestId}{separator}{StartTime formatted as ddMMyyyyHHmm}. Note: when StartTime is changed via PUT, the id in the response will differ from the id sent in the request. API consumers must use the new id returned in the response.
{separator} is the id separator configured for your environment (default _), see Global.
Note: When a ScheduleEmployeeAbsencePresence record is created or updated, any overlapping ScheduleEmployeeShiftDemand records for the same employee will automatically be split by the system to accommodate the absence or presence period.
To make this endpoint ScheduleEmployeeAbsencePresence usable, check the following things:
This endpoint will fetch all ScheduleEmployeeAbsencePresence records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text | n/a | Computed ExternalRestId: {contractId}{separator}{absencePresenceId}{separator}{startTime ddMMyyyyHHmm} | TEST-CONTR-001_TEST-ABS-001_150720260800 |
| personId | Text (100) | n/a | Employee ExternalRestId | TEST-EMP-001 |
| employeeNumber | Text | n/a | Employee number (GET-only) | 12345 |
| contractId | Text (100) | n/a | ExternalRestId of the Contract | TEST-CONTR-001 |
| absencePresenceId | Text (100) | n/a | AbsenceAndPresence ExternalRestId | TEST-ABS-001 |
| absencePresenceName | Text | n/a | AbsenceAndPresence name (GET-only) | Sick leave |
| startTime | DateTimeObject | n/a | Start date and time | { "year": 2026, "month": 7, "day": 15, "hour": 8, "minute": 0, "second": 0 } |
| endTime | DateTimeObject | n/a | End date and time | { "year": 2026, "month": 7, "day": 15, "hour": 16, "minute": 0, "second": 0 } |
| plannerRemarkPublic | Text | n/a | Public planner remark (nullable) | Approved |
| plannerRemarkPrivate | Text | n/a | Private planner remark (nullable) | Internal note |
| employeeRemark | Text | n/a | Employee remark (nullable) | Feeling unwell |
| timestamp | DateTimeObject | n/a | Last write timestamp (GET-only, nullable) | { "year": 2026, "month": 7, "day": 15, "hour": 10, "minute": 0, "second": 0 } |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a ScheduleEmployeeAbsencePresence in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | No | Leave empty on POST - computed by API | |
| personId | Text (100) | Required | Employee ExternalRestId | TEST-EMP-001 |
| contractId | Text (100) | Required | ExternalRestId of the Contract | TEST-CONTR-001 |
| absencePresenceId | Text (100) | Required | AbsenceAndPresence ExternalRestId | TEST-ABS-001 |
| startTime | DateTimeObject | Required | Start date and time (must be before endTime) | { "year": 2026, "month": 7, "day": 15, "hour": 8, "minute": 0, "second": 0 } |
| endTime | DateTimeObject | Required | End date and time | { "year": 2026, "month": 7, "day": 15, "hour": 16, "minute": 0, "second": 0 } |
| plannerRemarkPublic | Text | Optional | Public planner remark | Approved |
| plannerRemarkPrivate | Text | Optional | Private planner remark | Internal note |
| employeeRemark | Text | Optional | Employee remark | Feeling unwell |
If the response was successful, the REST user will get the ScheduleEmployeeAbsencePresence back, see GET.
A ScheduleEmployeeAbsencePresence record to create and persist.
| id | string or null |
| personId | string or null |
| contractId | string or null |
| absencePresenceId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| plannerRemarkPublic | string or null |
| plannerRemarkPrivate | string or null |
| employeeRemark | string or null |
{- "id": "string",
- "personId": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
}This endpoint will update a ScheduleEmployeeAbsencePresence in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId from GET response | TEST-CONTR-001_TEST-ABS-001_150720260800 |
| personId | Text (100) | Required | Employee ExternalRestId (cannot be changed after creation) | TEST-EMP-001 |
| contractId | Text (100) | Required | ExternalRestId of the Contract (cannot be changed after creation) | TEST-CONTR-001 |
| absencePresenceId | Text (100) | Required | AbsenceAndPresence ExternalRestId (cannot be changed after creation) | TEST-ABS-001 |
| startTime | DateTimeObject | Required | Start date and time (mutable - changes the id) | { "year": 2026, "month": 7, "day": 15, "hour": 8, "minute": 0, "second": 0 } |
| endTime | DateTimeObject | Required | End date and time | { "year": 2026, "month": 7, "day": 15, "hour": 16, "minute": 0, "second": 0 } |
| plannerRemarkPublic | Text | Optional | Public planner remark | Approved |
| plannerRemarkPrivate | Text | Optional | Private planner remark | Internal note |
| employeeRemark | Text | Optional | Employee remark | Feeling unwell |
If the response was successful, the REST user will get the ScheduleEmployeeAbsencePresence back, see GET.
A ScheduleEmployeeAbsencePresence record to synchronize the current matching record with.
| id | string or null |
| personId | string or null |
| contractId | string or null |
| absencePresenceId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| plannerRemarkPublic | string or null |
| plannerRemarkPrivate | string or null |
| employeeRemark | string or null |
{- "id": "string",
- "personId": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
}This endpoint performs a partial update of a ScheduleEmployeeAbsencePresence. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId from GET response | TEST-CONTR-001_TEST-ABS-001_150720260800 |
| personId | Text (100) | Optional | Employee ExternalRestId (cannot be changed after creation) | TEST-EMP-001 |
| contractId | Text (100) | Optional | ExternalRestId of the Contract (cannot be changed after creation) | TEST-CONTR-001 |
| absencePresenceId | Text (100) | Optional | AbsenceAndPresence ExternalRestId (cannot be changed after creation) | TEST-ABS-001 |
| startTime | DateTimeObject | Optional | Start date and time (mutable - changes the id) | { "year": 2026, "month": 7, "day": 15, "hour": 8, "minute": 0, "second": 0 } |
| endTime | DateTimeObject | Optional | End date and time | { "year": 2026, "month": 7, "day": 15, "hour": 16, "minute": 0, "second": 0 } |
| plannerRemarkPublic | Text | Optional | Public planner remark | Approved |
| plannerRemarkPrivate | Text | Optional | Private planner remark | Internal note |
| employeeRemark | Text | Optional | Employee remark | Feeling unwell |
| id | string or null |
| personId | string or null |
| contractId | string or null |
| absencePresenceId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| plannerRemarkPublic | string or null |
| plannerRemarkPrivate | string or null |
| employeeRemark | string or null |
{- "id": "string",
- "personId": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
}This endpoint will delete a ScheduleEmployeeAbsencePresence from the database. The id is passed in the URL: DELETE /api/ScheduleEmployeeAbsencePresence/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the ScheduleEmployeeAbsencePresence | TEST-CONTR-001_TEST-ABS-001_150720260800 |
| id required | string The ID value of the ScheduleEmployeeAbsencePresence record to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
}This endpoint creates multiple ScheduleEmployeeAbsencePresence records in a single request (POST /api/ScheduleEmployeeAbsencePresence/InsertUpdateBulk). Each item has the fields of POST and is created exactly as with POST, including splitting overlapping shifts. Existing records are not updated by this endpoint; use PUT or PATCH for that.
An item that fails is reported in the result with its error; the other items are still processed.
The list of ScheduleEmployeeAbsencePresence records to create.
| id | string or null |
| personId | string or null |
| contractId | string or null |
| absencePresenceId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| plannerRemarkPublic | string or null |
| plannerRemarkPrivate | string or null |
| employeeRemark | string or null |
[- {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "contractId": "string",
- "absencePresenceId": "string",
- "absencePresenceName": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "plannerRemarkPublic": "string",
- "plannerRemarkPrivate": "string",
- "employeeRemark": "string"
}, - "message": "string"
}
]
}Besides the basic house data, a House carries groupId, costPerBed, keyLocation and nightRegistry, and a nested rentalInformation object with the landlord and rental contact details of the house (one per house).
The rentalInformation object is null in the response when no rental information is registered for a house. On POST/PUT, if rentalInformation is provided, the record is upserted; if null or omitted, the existing rental information is left unchanged.
To make this endpoint House usable, check the following things:
This endpoint will fetch all House records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text | Yes | Unique external identifier of the House | house-ext-001 |
| name | Text | Yes | Name of the house | Villa Rosa |
| parentId | Text (100) | No | ExternalRestId of the parent House when this house is part of another house; null otherwise. | house-ext-000 |
| street | Text | No | Street name | Hoofdstraat |
| streetNumber | Text | No | Street number | 42 |
| streetNumberAddition | Text | No | Street number addition | A |
| postalCode | Text | No | Postal code | 1234 AB |
| city | Text | No | City name | Amsterdam |
| countryIsoCode | Text | No | ISO 3166-1 alpha-2 country code | NL |
| longitude | Decimal | No | Longitude coordinate | 4.9041 |
| latitude | Decimal | No | Latitude coordinate | 52.3676 |
| description | Text | No | Description of the house | Large house with garden |
| isAvailable | Boolean | Yes | Whether the house is available for residents | true |
| startDate | DateObject | Yes | Start date of availability | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Yes | End date of availability | { "year": 2030, "month": 12, "day": 31 } |
| groupId | Text | No | ExternalRestId of the HouseGroup this house belongs to. Null if not assigned. | group-ext-001 |
| costPerBed | Decimal | No | Cost per bed per period | 250.00 |
| keyLocation | Text | No | Description of where the house key can be found | Front desk, drawer 3 |
| nightRegistry | Boolean | Yes | Whether night registry is required for this house | false |
| rentalInformation | Object | No | Landlord and rental contact information. Null if not configured. | See sub-fields below |
| rentalInformation.name | Text | No | Name of the landlord or rental contact | Landlord BV |
| rentalInformation.street | Text | No | Street of the landlord | Kerkstraat |
| rentalInformation.streetNumber | Text | No | Street number of the landlord | 10 |
| rentalInformation.streetNumberAddition | Text | No | Street number addition of the landlord | B |
| rentalInformation.postalCode | Text | No | Postal code of the landlord | 5678 CD |
| rentalInformation.city | Text | No | City of the landlord | Rotterdam |
| rentalInformation.countryId | Text | No | ExternalRestId of the landlord country | country-ext-nl |
| rentalInformation.telephone | Text | No | General telephone number of the landlord | 0612345678 |
| rentalInformation.telephoneMaintenance | Text | No | Maintenance telephone number | 0698765432 |
| rentalInformation.noticePeriod | Text | No | Notice period description | 3 months |
| rentalInformation.snf | Text | No | SNF registration number | SNF-12345 |
| rentalInformation.informis | Text | No | Informis reference | informis-ref |
| rentalInformation.email | Text | No | Email address of the landlord | landlord@example.com |
| children | Array | No | Child houses with the same structure (recursive) | [] |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "children": [
- { }
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a House in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Optional | Unique external identifier. Auto-generated if omitted. Cannot contain underscore on POST. | house-ext-001 |
| name | Text (100) | Required | Name of the house | Villa Rosa |
| parentId | Text (100) | Optional | ExternalRestId of the parent House when this house is part of another house. Must exist and must differ from the house's own id. | house-ext-000 |
| street | Text (50) | Optional | Street name | Hoofdstraat |
| streetNumber | Text (50) | Optional | Street number | 42 |
| streetNumberAddition | Text (50) | Optional | Street number addition | A |
| postalCode | Text (50) | Optional | Postal code | 1234 AB |
| city | Text (100) | Optional | City name | Amsterdam |
| countryIsoCode | Text (2) | Required | ISO 3166-1 alpha-2 country code | NL |
| longitude | Decimal | Optional | Longitude coordinate | 4.9041 |
| latitude | Decimal | Optional | Latitude coordinate | 52.3676 |
| description | Text (600) | Optional | Description of the house | Large house with garden |
| isAvailable | Boolean | Required | Whether the house is available | true |
| startDate | DateObject | Required | Start date of availability | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date. Must be after startDate and within 10 years. | { "year": 2030, "month": 12, "day": 31 } |
| groupId | Text | Optional | ExternalRestId of the HouseGroup. The HouseGroup must exist if provided. | group-ext-001 |
| costPerBed | Decimal | Optional | Cost per bed | 250.00 |
| keyLocation | Text (700) | Optional | Location where the house key can be found | Front desk, drawer 3 |
| nightRegistry | Boolean | Optional | Night registry required. Defaults to false. | false |
| rentalInformation | Object | Optional | Landlord/rental contact. If provided, rentalInformation.name is required. | See sub-fields below |
| rentalInformation.name | Text (50) | Required if rentalInformation is provided | Name of the landlord or rental contact | Landlord BV |
| rentalInformation.street | Text (50) | Optional | Street of the landlord | Kerkstraat |
| rentalInformation.streetNumber | Text (50) | Optional | Street number of the landlord | 10 |
| rentalInformation.streetNumberAddition | Text (50) | Optional | Street number addition | B |
| rentalInformation.postalCode | Text (50) | Optional | Postal code of the landlord | 5678 CD |
| rentalInformation.city | Text (50) | Optional | City of the landlord | Rotterdam |
| rentalInformation.countryId | Text | Optional | ExternalRestId of the landlord country. Country must exist if provided. | country-ext-nl |
| rentalInformation.telephone | Text (100) | Optional | General telephone number | 0612345678 |
| rentalInformation.telephoneMaintenance | Text (100) | Optional | Maintenance telephone number | 0698765432 |
| rentalInformation.noticePeriod | Text (300) | Optional | Notice period description | 3 months |
| rentalInformation.snf | Text (50) | Optional | SNF registration number | SNF-12345 |
| rentalInformation.informis | Text (300) | Optional | Informis reference | informis-ref |
| rentalInformation.email | Text (300) | Optional | Email of the landlord | landlord@example.com |
If the response was successful, the REST user will get the House back, see GET.
A House to create and persist.
| id required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
object (DateObject) | |
| parentId required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 100 ] characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null <= 100 characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| longitude | string or null |
| latitude | string or null |
| isAvailable required | boolean |
| description | string or null |
| groupId | string or null |
| keyLocation | string or null |
| costPerBed | number or null <double> |
| nightRegistry | boolean |
object (HouseRentalInformationDto) |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "children": [
- { }
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}
}This endpoint will update a House in the database. The startDate cannot be changed after creation.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Unique external identifier of the House to update. | house-ext-001 |
| name | Text (100) | Required | Name of the house | Villa Rosa |
| parentId | Text (100) | Optional | ExternalRestId of the parent House when this house is part of another house. Must exist and must differ from the house's own id. | house-ext-000 |
| street | Text (50) | Optional | Street name | Hoofdstraat |
| streetNumber | Text (50) | Optional | Street number | 42 |
| streetNumberAddition | Text (50) | Optional | Street number addition | A |
| postalCode | Text (50) | Optional | Postal code | 1234 AB |
| city | Text (100) | Optional | City name | Amsterdam |
| countryIsoCode | Text (2) | Required | ISO 3166-1 alpha-2 country code | NL |
| longitude | Decimal | Optional | Longitude coordinate | 4.9041 |
| latitude | Decimal | Optional | Latitude coordinate | 52.3676 |
| description | Text (600) | Optional | Description of the house | Large house with garden |
| isAvailable | Boolean | Required | Whether the house is available | true |
| endDate | DateObject | Required | End date. Must be after startDate and within 10 years. | { "year": 2030, "month": 12, "day": 31 } |
| groupId | Text | Optional | ExternalRestId of the HouseGroup. The HouseGroup must exist if provided. | group-ext-001 |
| costPerBed | Decimal | Optional | Cost per bed | 250.00 |
| keyLocation | Text (700) | Optional | Location where the house key can be found | Front desk, drawer 3 |
| nightRegistry | Boolean | Optional | Night registry required. Defaults to false. | false |
| rentalInformation | Object | Optional | Landlord/rental contact. If provided, rentalInformation.name is required. If null/omitted, existing rental info is left unchanged. | See sub-fields below |
| rentalInformation.name | Text (50) | Required if rentalInformation is provided | Name of the landlord or rental contact | Landlord BV |
| rentalInformation.street | Text (50) | Optional | Street of the landlord | Kerkstraat |
| rentalInformation.streetNumber | Text (50) | Optional | Street number of the landlord | 10 |
| rentalInformation.streetNumberAddition | Text (50) | Optional | Street number addition | B |
| rentalInformation.postalCode | Text (50) | Optional | Postal code of the landlord | 5678 CD |
| rentalInformation.city | Text (50) | Optional | City of the landlord | Rotterdam |
| rentalInformation.countryId | Text | Optional | ExternalRestId of the landlord country. Country must exist if provided. | country-ext-nl |
| rentalInformation.telephone | Text (100) | Optional | General telephone number | 0612345678 |
| rentalInformation.telephoneMaintenance | Text (100) | Optional | Maintenance telephone number | 0698765432 |
| rentalInformation.noticePeriod | Text (300) | Optional | Notice period description | 3 months |
| rentalInformation.snf | Text (50) | Optional | SNF registration number | SNF-12345 |
| rentalInformation.informis | Text (300) | Optional | Informis reference | informis-ref |
| rentalInformation.email | Text (300) | Optional | Email of the landlord | landlord@example.com |
If the response was successful, the REST user will get the House back, see GET.
A House to synchronize the current matching House with.
| id required | string [ 1 .. 100 ] characters |
| parentId required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 100 ] characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null <= 100 characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| longitude | string or null |
| latitude | string or null |
| isAvailable required | boolean |
| description | string or null |
object (DateObject) | |
| groupId | string or null |
| keyLocation | string or null |
| costPerBed | number or null <double> |
| nightRegistry | boolean |
object (HouseRentalInformationDto) |
{- "id": "string",
- "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "children": [
- { }
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}
}This endpoint performs a partial update of a House. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the House to partially update | house-ext-001 |
| name | Text (100) | Optional | Name of the house | Villa Rosa |
| parentId | Text (100) | Optional | ExternalRestId of the parent House when this house is part of another house. Must exist and must differ from the house's own id. | house-ext-000 |
| street | Text (50) | Optional | Street name | Hoofdstraat |
| streetNumber | Text (50) | Optional | Street number | 42 |
| streetNumberAddition | Text (50) | Optional | Street number addition | A |
| postalCode | Text (50) | Optional | Postal code | 1234 AB |
| city | Text (100) | Optional | City name | Amsterdam |
| countryIsoCode | Text (2) | Optional | ISO 3166-1 alpha-2 country code | NL |
| longitude | Decimal | Optional | Longitude coordinate | 4.9041 |
| latitude | Decimal | Optional | Latitude coordinate | 52.3676 |
| description | Text (600) | Optional | Description of the house | Large house with garden |
| isAvailable | Boolean | Optional | Whether the house is available | true |
| endDate | DateObject | Optional | End date of availability | { "year": 2030, "month": 12, "day": 31 } |
| groupId | Text | Optional | ExternalRestId of the HouseGroup | group-ext-001 |
| costPerBed | Decimal | Optional | Cost per bed | 250.00 |
| keyLocation | Text (700) | Optional | Location where the house key can be found | Front desk, drawer 3 |
| nightRegistry | Boolean | Optional | Night registry required | false |
| rentalInformation | Object | Optional | Partial update of rental/landlord contact information | See sub-fields below |
| rentalInformation.name | Text (50) | Optional | Name of the landlord or rental contact | Landlord BV |
| rentalInformation.street | Text (50) | Optional | Street of the landlord | Kerkstraat |
| rentalInformation.streetNumber | Text (50) | Optional | Street number of the landlord | 10 |
| rentalInformation.streetNumberAddition | Text (50) | Optional | Street number addition | B |
| rentalInformation.postalCode | Text (50) | Optional | Postal code | 5678 CD |
| rentalInformation.city | Text (50) | Optional | City of the landlord | Rotterdam |
| rentalInformation.countryId | Text | Optional | ExternalRestId of the landlord country | country-ext-nl |
| rentalInformation.telephone | Text (100) | Optional | General telephone number | 0612345678 |
| rentalInformation.telephoneMaintenance | Text (100) | Optional | Maintenance telephone number | 0698765432 |
| rentalInformation.noticePeriod | Text (300) | Optional | Notice period description | 3 months |
| rentalInformation.snf | Text (50) | Optional | SNF registration number | SNF-12345 |
| rentalInformation.informis | Text (300) | Optional | Informis reference | informis-ref |
| rentalInformation.email | Text (300) | Optional | Email of the landlord | landlord@example.com |
| id required | string [ 1 .. 100 ] characters |
| parentId required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 100 ] characters |
| street | string or null <= 50 characters |
| streetNumber | string or null <= 50 characters |
| streetNumberAddition | string or null <= 50 characters |
| postalCode | string or null <= 50 characters |
| city | string or null <= 100 characters |
| countryIsoCode required | string [ 1 .. 2 ] characters |
| longitude | string or null |
| latitude | string or null |
| isAvailable required | boolean |
| description | string or null |
object (DateObject) | |
| groupId | string or null |
| keyLocation | string or null |
| costPerBed | number or null <double> |
| nightRegistry | boolean |
object (HouseRentalInformationDto) |
{- "id": "string",
- "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "children": [
- { }
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}
}This endpoint will delete a House from the database. The id is passed in the URL: DELETE /api/House/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the House to delete | house-ext-001 |
| id required | string The ID value of the House to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "children": [
- { }
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "parentId": "string",
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryIsoCode": "st",
- "longitude": "string",
- "latitude": "string",
- "isAvailable": true,
- "description": "string",
- "groupId": "string",
- "keyLocation": "string",
- "costPerBed": 0.1,
- "nightRegistry": true,
- "rentalInformation": {
- "name": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "city": "string",
- "countryId": "string",
- "telephone": "string",
- "telephoneMaintenance": "string",
- "noticePeriod": "string",
- "snf": "string",
- "informis": "string",
- "email": "string"
}
}
}A HouseGroup is a category for houses (e.g. "North region", "Temporary housing"). A House refers to its HouseGroup with groupId. This endpoint reads, creates, updates (also partially, with PATCH), deletes and bulk-upserts HouseGroups.
To make this endpoint HouseGroup usable, check the following things:
This endpoint will fetch all HouseGroup records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | - | REST identifier (ExternalRestId) | hg-001 |
| name | Text (100) | - | Name of the house group | North region |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "name": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a HouseGroup in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Underscore (_) is forbidden on POST. | hg-001 |
| name | Text (100) | Required | Name of the house group. Must be unique. | North region |
If the response was successful, the REST user will get the HouseGroup back, see GET.
A HouseGroup to create and persist.
| id | string or null |
| name | string or null |
{- "id": "string",
- "name": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string"
}
}This endpoint will update a HouseGroup in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId - lookup key; the value is immutable | hg-001 |
| name | Text (100) | Required | Name of the house group. Must remain unique, excluding self. | North region (updated) |
If the response was successful, the REST user will get the HouseGroup back, see GET.
A HouseGroup to synchronize the current matching HouseGroup with.
| id | string or null |
| name | string or null |
{- "id": "string",
- "name": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string"
}
}This endpoint performs a partial update of a HouseGroup. Only fields supplied in the request body are updated; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the record to patch | hg-001 |
| name | Text (100) | Optional | Name of the house group - updated only if supplied. Must remain unique, excluding self. | North region (renamed) |
| id | string or null |
| name | string or null |
{- "id": "string",
- "name": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string"
}
}This endpoint will delete a HouseGroup from the database. The delete is rejected if the group is still referenced by any House.GroupId. The id is passed in the URL: DELETE /api/HouseGroup/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the HouseGroup to delete | hg-001 |
| id required | string The ID value of the HouseGroup to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string"
}
}This endpoint creates or updates multiple HouseGroup records in a single request (POST /api/HouseGroup/InsertUpdateBulk). Each item is matched by ExternalRestId: existing records are updated, new ones are inserted.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Existing records are updated; new ones are inserted. Underscore (_) is forbidden on insert. | hg-001 |
| name | Text (100) | Required | Name of the house group | North region |
The list of HouseGroups to create or update.
| id | string or null |
| name | string or null |
[- {
- "id": "string",
- "name": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "name": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "name": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "name": "string"
}, - "message": "string"
}
]
}This is a period for which the employee needs a housing.
The id (externalRestId) of the PersonHousing is computed and cannot be physically set in Infinity.
It's based on {Employee.ExternalRestId}{separator}{PersonHousing.StartDate: ddMMyyyy}
{separator} is the id separator configured for your environment (default _), see Global.
Examples: Employee01_05122025
To make this endpoint PersonHousing usable, check the following things:
This endpoint will fetch all personHousings for employees you are authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the PersonHousing | Employee01_01012024 |
| personId | Text (100) | Required | ExternalRestId of the Employee | Employee01 |
| employeeNumber | Text (200) | Required | EmployeeNumber of the Employee | E00001 |
| startDate | DateObject | Required | Startperiod of the PersonHousing | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Endperiod of the PersonHousing | { "year": 2024, "month": 8, "day": 3 } |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a PersonHousing in the database. Overlap with another PersonHousing for this employee is not possible.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| personId | Text (100) | Required | ExternalRestId of the Employee | Employee01 |
| startDate | DateObject | Required | Startperiod of the PersonHousing | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Endperiod of the PersonHousing | { "year": 2024, "month": 8, "day": 3 } |
Response
If the response was successful, the REST user will get an inserted PersonHousing back, like described in GET.
See Exception handling for unsuccessful responses.
A PersonHousing to create and persist.
| personId required | string [ 1 .. 50 ] characters |
required | object (DateObject) |
required | object (DateObject) |
{- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will update a PersonHousing in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the PersonHousing | Employee01_01012024 |
| startDate | DateObject | Required | Startperiod of the PersonHousing | { "year": 2024, "month": 1, "day": 1 } |
| endDate | DateObject | Required | Endperiod of the PersonHousing | { "year": 2024, "month": 8, "day": 3 } |
Response
If the response was successful, the REST user will get an updated PersonHousing back, like described in GET.
See Exception handling for unsuccessful responses.
A PersonHousing to synchronize the current matching PersonHousing with.
| id required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will partially update a PersonHousing in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated PersonHousing back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
required | object (DateObject) |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will delete a PersonHousing from the database. Only PersonHousings without scheduled data can be removed from the database. The id is passed in the URL: DELETE /api/PersonHousing/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (200) | Required | Computed ExternalRestId of the PersonHousing | Employee01_01012024 |
| id required | string The ID value of the PersonHousing to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}The Room can be managed in the Residence Schedule Admin module underneath houses.
Rooms are connected to houses. Rooms can have 0 to unlimited beds.
The rooms cannot have a period outside of the house period.
The maximum enddate of a room is 31-12-currentYear+10.
Rooms cannot be added on houses which have child-houses.
The beds cannot have a period outside of the room's period.
To be able to use the Room in the REST API, the ExternalRestID should be filled. Keep in mind that all Rooms have a direct relationship with Houses. It's required that these entities have externalRestIds.
Bed has a computed externalRestId, based on {House.ExternalRestId}{separator}{Room.ExternalRestId}{separator}{bed.ID}.
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint Room usable, check the following things:
This endpoint will fetch all Rooms with all their beds.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Room | f2a06c16-0da7-4ae6-9344-97e1ff2dce47 |
| houseId | Text (100) | Required | Connected House of this Room | 99a59e94-bfad-4866-b7e6-b018fe99c735 |
| name | Text (200) | Required | Name of the Room | Room01 |
| description | Text (600) | Optional | Description of the Room | House description |
| startDate | DateObject | Required | Start period of the Room | { "year": 2023, "month": 1, "day": 22 } |
| endDate | DateObject | Required | End period of the Room | { "year": 2026, "month": 3, "day": 11 } |
| remark | Text (600) | Optional | Remark of the Room | Extra space available |
| costPerBed | Decimal, non-negative | Optional | Cost per bed of the Room. Needed of PKS calculation. | 3.5 |
| pksValue | Decimal, non-negative | Optional | Calculated PKS value of this Room. | 135 |
| beds | Array | Optional | Array of beds | |
| beds.id | Number, non-negative | Required | Bedidentifier, computed ExternalRestId {RoomName}{separator}{BedId} | 1 |
| beds.name | Text (50) | Required | Bed name | Bed 1 |
| beds.StartDate | DateObject | Required | Start period of the Bed | { "year": 2023, "month": 1, "day": 22 } |
| beds.EndDate | DateObject | Required | End period of the Bed | { "year": 2026, "month": 3, "day": 11 } |
| houseName | Text | - | Name of the House of the Room (read-only) | Villa Rosa |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a Room, with beds, in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Room | f2a06c16-0da7-4ae6-9344-97e1ff2dce47 |
| houseId | Text (100) | Required | Connected House of this Room | 99a59e94-bfad-4866-b7e6-b018fe99c735 |
| name | Text (200) | Required | Name of the Room | Room01 |
| description | Text (600) | Optional | Description of the Room | House description |
| startDate | DateObject | Required | Start period of the Room | { "year": 2023, "month": 1, "day": 22 } |
| endDate | DateObject | Required | End period of the Room | { "year": 2026, "month": 3, "day": 11 } |
| remark | Text (600) | Optional | Remark of the Room | Extra space available |
| costPerBed | Decimal, non-negative | Optional | Cost per bed of the Room. Needed of PKS calculation. | 3.5 |
| pksValue | Decimal, non-negative | Optional | PKS value of the Room. Only stored when greater than 0; otherwise the stored value is left unchanged. | 135 |
| beds | Array | Optional | Array of beds | |
| beds.id | Number, non-negative | Required | Bedidentifier, computed ExternalRestId | Room01_1 |
| beds.name | Text (50) | Required | Bed name | Bed 1 |
| beds.StartDate | DateObject | Required | Start period of the Bed | { "year": 2023, "month": 1, "day": 22 } |
| beds.EndDate | DateObject | Required | End period of the Bed | { "year": 2026, "month": 3, "day": 11 } |
Response
If the response was successful, the REST user will get an inserted Room back, like described in GET.
See Exception handling for unsuccessful responses.
A Room to create and persist.
| id required | string [ 1 .. 100 ] characters |
| houseId required | string [ 1 .. 100 ] characters |
required | object (DateObject) |
object (DateObject) | |
| name required | string [ 1 .. 200 ] characters |
| description | string or null <= 600 characters |
| remark | string or null <= 600 characters |
| costPerBed | number <double> |
| pksValue | number <double> |
Array of objects or null (BedDto) |
{- "id": "string",
- "houseId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1,
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1
}
}This endpoint will update a Room, with beds, in the database.
The startdate of the Room and Bed cannot be changed and is not part of the datamodel passed on to this endpoint.
Beds cannot be deleted when there is existing scheduled data (BlockBed, EmployeeBed) connecting to this bed.
Request
See specs in POST.
Response
If the response was successful, the REST user will get an updated Room back, like described in GET.
See Exception handling for unsuccessful responses.
A Room to synchronize the current matching Room with.
| id required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 200 ] characters |
| description | string or null <= 600 characters |
object (DateObject) | |
| remark | string or null <= 600 characters |
| costPerBed | number <double> |
| pksValue | number <double> |
Array of objects or null (BedDto) |
{- "id": "string",
- "name": "string",
- "description": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1,
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1
}
}This endpoint will partially update a Room in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated Room back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 100 ] characters |
| name required | string [ 1 .. 200 ] characters |
| description | string or null <= 600 characters |
object (DateObject) | |
| remark | string or null <= 600 characters |
| costPerBed | number <double> |
| pksValue | number <double> |
Array of objects or null (BedDto) |
{- "id": "string",
- "name": "string",
- "description": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1,
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1
}
}This endpoint will delete a Room from the database. The id is passed in the URL: DELETE /api/Room/{id}.
Rooms cannot be deleted, when there is existing scheduled data (BlockBed, EmployeeBed) connecting to this room beds.
Request
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text | Required | ExternalRestId of the Room |
| id required | string The ID value of the Room to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "beds": [
- {
- "id": "string",
- "name": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "name": "string",
- "description": "string",
- "remark": "string",
- "costPerBed": 0.1,
- "pksValue": 0.1
}
}This is an employee scheduled on a bed for a period.
The id (externalRestId) of the EmployeeBed is computed and cannot be physically set in Infinity.
It's based on {Bed Computed ExternalRestId}{separator}{PersonHousing Computed ExternalRestId}{separator}{StartDate: ddMMyyyy}
{separator} is the id separator configured for your environment (default _), see Global.
Examples: House1_Room1_1_Employee01_01012024_05122025
To make this endpoint EmployeeBed usable, check the following things:
This endpoint will fetch all scheduled employees on beds.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the EmployeeBed | House1_Room1_1_Employee01_01012024_22012025 |
| bedId | Text (400) | Required | Computed ExternalRestId of the Bed | House1_Room1_1 |
| bedName | Text (50) | Required | Name of the Bed | Bed01 |
| roomId | Text (100) | Required | ExternalRestId of the Room | Room01 |
| roomName | Text (200) | Required | Name of the Room | Room 1 |
| houseId | Text (100) | Required | ExternalRestId of the House | House01 |
| houseName | Text (50) | Required | Name of the House | House 1 |
| personHousingId | Text (200) | Required | Computed ExternalRestId of the personHousing | Employee01_01012024 |
| personId | Text (100) | Optional | ExternalRestId of the scheduled Employee | |
| employeeNumber | Text (200) | Required | EmployeeNumber of the scheduled Employee | 000001 |
| startDate | DateObject | Required | Startperiod of the EmployeeBed | { "year": 2025, "month": 1, "day": 22 } |
| endDate | DateObject | Required | Endperiod of the EmployeeBed | { "year": 2025, "month": 12, "day": 22 } |
| remarks | Text (200) | Optional | Remark of the EmployeeBed | Remark |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "personHousingId": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create an EmployeeBed in the database.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| bedId | Text (400) | Required | Computed ExternalRestId of the Bed | House1_Room1_1 |
| personHousingId | Text (200) | Required | Computed ExternalRestId of the personHousing | Employee01_01012024 |
| startDate | DateObject | Required | Startperiod of the EmployeeBed | { "year": 2025, "month": 1, "day": 22 } |
| endDate | DateObject | Required | Endperiod of the EmployeeBed | { "year": 2025, "month": 12, "day": 22 } |
| remarks | Text (200) | Optional | Remark of the EmployeeBed | Remark |
Response
If the response was successful, the REST user will get an inserted EmployeeBed back, like described in GET.
See Exception handling for unsuccessful responses.
A EmployeeBed to create and persist.
| bedId required | string [ 1 .. 200 ] characters |
| personHousingId required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remarks | string or null |
{- "bedId": "string",
- "personHousingId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "personHousingId": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}
}This endpoint will update an EmployeeBed in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the EmployeeBed | House1_Room1_1_Employee01_01012024_22012025 |
| startDate | DateObject | Required | Startperiod of the EmployeeBed | { "year": 2025, "month": 1, "day": 22 } |
| endDate | DateObject | Required | Endperiod of the EmployeeBed | { "year": 2025, "month": 12, "day": 22 } |
| remarks | Text (200) | Optional | Remark of the EmployeeBed | Remark |
Response
If the response was successful, the REST user will get an updated EmployeeBed back, like described in GET.
See Exception handling for unsuccessful responses.
A EmployeeBed to synchronize the current matching EmployeeBed with.
| id required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remarks | string or null |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "personHousingId": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}
}This endpoint will partially update a EmployeeBed in the database. Unlike PUT, only the fields provided in the request will be updated.
Request
See specs in PUT. Only include the fields that need to be updated.
Response
If the response was successful, the REST user will get the updated EmployeeBed back, like described in GET.
See Exception handling for unsuccessful responses.
| id required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remarks | string or null |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "personHousingId": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}
}This endpoint will delete an EmployeeBed from the database. The id is passed in the URL: DELETE /api/EmployeeBed/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | Computed ExternalRestId of the EmployeeBed | House1_Room1_1_Employee01_01012024_22012025 |
| id required | string The ID value of the EmployeeBed to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "personHousingId": "string",
- "personId": "string",
- "employeeNumber": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remarks": "string"
}
}The residence module allows beds to be temporarily blocked for maintenance, deep cleaning, unavailability, or other non-person reasons. A blocked bed prevents employee housing assignments (EmployeeBed) from being created on the same bed during the same period.
The id (ExternalRestId) of the BlockBed is computed and cannot be physically filled in Planbition.
It's based on {Bed.ExternalRestId}{separator}{Reason.ExternalRestId}{separator}{StartDate}
Where Bed.ExternalRestId = {Room.ExternalRestId}{separator}{Bed.Id}, so the full format is:
{Room.ExternalRestId}{separator}{Bed.Id}{separator}{Reason.ExternalRestId}{separator}{StartDate (ddMMyyyy)}
Example: Room01_42_maintenance_01012026
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint BlockBed usable, check the following things:
This endpoint will fetch all blocked beds.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the BlockBed | Room01_42_maintenance_01012026 |
| bedId | Text (400) | Required | Computed ExternalRestId of the Bed | Room01_42 |
| bedName | Text (50) | Required | Name of the Bed | Bed01 |
| reasonId | Text (200) | Required | ExternalRestId of the BlockBedReason | maintenance |
| reasonName | Text (200) | Required | Name of the BlockBedReason | Maintenance |
| roomId | Text (100) | Required | ExternalRestId of the Room | Room01 |
| roomName | Text (200) | Required | Name of the Room | Room 1 |
| houseId | Text (100) | Required | ExternalRestId of the House | House01 |
| houseName | Text (50) | Required | Name of the House | House 1 |
| startDate | DateObject | Required | Start date of the BlockBed | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date of the BlockBed | { "year": 2026, "month": 1, "day": 31 } |
| remark | Text (600) | Optional | Remark of the BlockBed | Cleaning |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a BlockBed in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| bedId | Text (400) | Required | Computed ExternalRestId of the Bed | Room01_42 |
| reasonId | Text (200) | Required | ExternalRestId of the BlockBedReason | maintenance |
| startDate | DateObject | Required | Start date of the BlockBed | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date of the BlockBed | { "year": 2026, "month": 1, "day": 31 } |
| remark | Text (600) | Optional | Remark of the BlockBed | Cleaning |
Response
If the response was successful, the REST user will get an inserted BlockBed back, see GET.
See Exception handling for unsuccessful responses.
A BlockBed to create and persist.
| bedId required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remark | string or null <= 600 characters |
| reasonId required | string [ 1 .. 200 ] characters |
{- "bedId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
}This endpoint will update a BlockBed in the database. Note: bedId is immutable after creation.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the BlockBed | Room01_42_maintenance_01012026 |
| reasonId | Text (200) | Required | ExternalRestId of the BlockBedReason | maintenance |
| startDate | DateObject | Required | Start date of the BlockBed | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date of the BlockBed | { "year": 2026, "month": 1, "day": 31 } |
| remark | Text (600) | Optional | Remark of the BlockBed | Cleaning |
Response
If the response was successful, the REST user will get an updated BlockBed back, see GET.
See Exception handling for unsuccessful responses.
A BlockBed to synchronize the current matching BlockBed with.
| id required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remark | string or null <= 600 characters |
| reasonId required | string [ 1 .. 200 ] characters |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
}This endpoint performs a partial update of a BlockBed. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the BlockBed | Room01_42_maintenance_01012026 |
| reasonId | Text (200) | Optional | ExternalRestId of the BlockBedReason | maintenance |
| startDate | DateObject | Optional | Start date of the BlockBed | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | End date of the BlockBed | { "year": 2026, "month": 1, "day": 31 } |
| remark | Text (600) | Optional | Remark of the BlockBed | Cleaning |
| id required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remark | string or null <= 600 characters |
| reasonId required | string [ 1 .. 200 ] characters |
{- "id": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
}This endpoint will delete a BlockBed from the database. The id is passed in the URL: DELETE /api/BlockBed/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId of the BlockBed | Room01_42_maintenance_01012026 |
| id required | string The ID value of the BlockBed to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
}This endpoint creates or updates multiple BlockBed records in a single request (POST /api/BlockBed/InsertUpdateBulk). Each item has the fields of POST and is matched on its id (computed from the bed, the reason and the start date, see Functional description): an existing BlockBed is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
The collection of BlockBeds to create or update.
| bedId required | string [ 1 .. 200 ] characters |
required | object (DateObject) |
required | object (DateObject) |
| remark | string or null <= 600 characters |
| reasonId required | string [ 1 .. 200 ] characters |
[- {
- "bedId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "bedId": "string",
- "bedName": "string",
- "reasonName": "string",
- "roomId": "string",
- "roomName": "string",
- "houseId": "string",
- "houseName": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "remark": "string",
- "reasonId": "string"
}, - "message": "string"
}
]
}Realised hours are the hours actually worked, registered in the Time Registration module: per employee per shift demand, together with breaks, administrative components and the current approval status of the workflow. This endpoint reads and manages them, for example for integration with external payroll and HR systems.
The ExternalRestId is computed as: {Contract.ExternalRestId}{separator}{ShiftQualificationDemand.ExternalRestId}{separator}{StartTime (format: ddMMyyyyHHmm)}.
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint RealisedHours usable, check the following things:
This endpoint will fetch all RealisedHours records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Computed | ExternalRestId: {ContractExtId}{separator}{SQDExtId}{separator}{StartTime ddMMyyyyHHmmss} | CTR001_SQD001_01062024080000 |
| personId | Text (100) | Yes | Employee.ExternalRestId | EMP001 |
| contractId | Text (100) | Yes | ExternalRestId of the Contract | CTR001 |
| shiftQualificationDemandId | Text (100) | Yes | ShiftQualificationDemand.ExternalRestId | SQD001 |
| startTime | DateTimeObject | Yes | Shift start date and time | {"year":2024,"month":6,"day":1,"hour":8,"minute":0,"second":0,"millisecond":0} |
| endTime | DateTimeObject | Yes | Shift end date and time | {"year":2024,"month":6,"day":1,"hour":16,"minute":0,"second":0,"millisecond":0} |
| timestamp | DateTimeObject | No | Record timestamp (server-managed on insert) | {"year":2024,"month":6,"day":1,"hour":8,"minute":0,"second":0,"millisecond":0} |
| remark | Text (MAX) | No | Optional free-text remark | Night shift |
| latestWorkflowStatus | Text (50) | No | Name of the latest workflow status type; null if no status exists | Approved |
| latestWorkflowStatusTimeStamp | DateTimeObject | No | Timestamp of the latest workflow status; null if no status exists | {"year":2024,"month":6,"day":1,"hour":17,"minute":0,"second":0,"millisecond":0} |
| breaks | Collection | No | List of break periods. Each item: startTime (DateTimeObject), endTime (DateTimeObject) | |
| administrativeComponents | Collection | No | List of admin components. Each item: administrativeComponentId, name, startTime, endTime, timestamp |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a RealisedHours record in the database. A bulk variant is available at POST /api/realisedHours/InsertUpdateBulk; items with id present follow the update path, items without follow the insert path.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | No | Consumer-supplied ExternalRestId. On bulk: present = update path, absent = insert path | CTR001_SQD001_01062024080000 |
| personId | Text (100) | Yes (insert) | Employee.ExternalRestId | EMP001 |
| contractId | Text (100) | Yes (insert) | ExternalRestId of the Contract | CTR001 |
| shiftQualificationDemandId | Text (100) | Yes | ShiftQualificationDemand.ExternalRestId | SQD001 |
| startTime | DateTimeObject | Yes | Shift start date and time. Part of ExternalRestId computation | {"year":2024,"month":6,"day":1,"hour":8,"minute":0,"second":0,"millisecond":0} |
| endTime | DateTimeObject | Yes | Shift end date and time. Cannot be in the future | {"year":2024,"month":6,"day":1,"hour":16,"minute":0,"second":0,"millisecond":0} |
| remark | Text (MAX) | No | Optional free-text remark | Night shift |
| breaks[].startTime | DateTimeObject | Yes (if break) | Break start time. Must fall within parent shift range | {"year":2024,"month":6,"day":1,"hour":12,"minute":0,"second":0,"millisecond":0} |
| breaks[].endTime | DateTimeObject | Yes (if break) | Break end time. Must be strictly after startTime and within shift range | {"year":2024,"month":6,"day":1,"hour":12,"minute":30,"second":0,"millisecond":0} |
| administrativeComponents[].administrativeComponentId | Text (100) | Yes (if comp.) | ExternalRestId of the administrative component | AC001 |
| administrativeComponents[].startTime | DateTimeObject | Yes (if comp.) | Admin component start time. Must fall within parent shift range | {"year":2024,"month":6,"day":1,"hour":9,"minute":0,"second":0,"millisecond":0} |
| administrativeComponents[].endTime | DateTimeObject | Yes (if comp.) | Admin component end time. Must fall within parent shift range | {"year":2024,"month":6,"day":1,"hour":10,"minute":0,"second":0,"millisecond":0} |
If the response was successful, the REST user will get the RealisedHours back, see GET.
A RealisedHours record to create and persist.
| id | string or null |
| personId | string or null |
| contractId | string or null |
Array of objects or null (RealisedHoursBreakPostDto) | |
Array of objects or null (RealisedHoursAdminComponentPostDto) | |
| shiftQualificationDemandId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| remark | string or null |
{- "id": "string",
- "personId": "string",
- "contractId": "string",
- "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
}This endpoint will update a RealisedHours record in the database. Child breaks and administrative components are fully replaced on every PUT. personId and contractId cannot be changed after creation.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Yes | ExternalRestId of the record to update | CTR001_SQD001_01062024080000 |
| shiftQualificationDemandId | Text (100) | Yes | ShiftQualificationDemand.ExternalRestId | SQD001 |
| startTime | DateTimeObject | Yes | Shift start date and time | {"year":2024,"month":6,"day":1,"hour":8,"minute":0,"second":0,"millisecond":0} |
| endTime | DateTimeObject | Yes | Shift end date and time. Cannot be in the future | {"year":2024,"month":6,"day":1,"hour":17,"minute":0,"second":0,"millisecond":0} |
| remark | Text (MAX) | No | Optional free-text remark | Updated remark |
| breaks[].startTime | DateTimeObject | Yes (if break) | Break start time. Child collection is fully replaced on PUT | {"year":2024,"month":6,"day":1,"hour":12,"minute":0,"second":0,"millisecond":0} |
| breaks[].endTime | DateTimeObject | Yes (if break) | Break end time | {"year":2024,"month":6,"day":1,"hour":12,"minute":30,"second":0,"millisecond":0} |
| administrativeComponents[].administrativeComponentId | Text (100) | Yes (if comp.) | ExternalRestId of the administrative component | AC001 |
| administrativeComponents[].startTime | DateTimeObject | Yes (if comp.) | Admin component start time | {"year":2024,"month":6,"day":1,"hour":9,"minute":0,"second":0,"millisecond":0} |
| administrativeComponents[].endTime | DateTimeObject | Yes (if comp.) | Admin component end time | {"year":2024,"month":6,"day":1,"hour":10,"minute":0,"second":0,"millisecond":0} |
If the response was successful, the REST user will get the RealisedHours back, see GET.
A RealisedHours record to synchronize the current matching record with.
| id | string or null |
Array of objects or null (RealisedHoursBreakPostDto) | |
Array of objects or null (RealisedHoursAdminComponentPostDto) | |
| shiftQualificationDemandId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| remark | string or null |
{- "id": "string",
- "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
}This endpoint performs a partial update of a RealisedHours record. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the record to patch | CTR001_SQD001_01062024080000 |
| shiftQualificationDemandId | Text (100) | Optional | ShiftQualificationDemand.ExternalRestId | SQD001 |
| startTime | DateTimeObject | Optional | Shift start date and time | {"year":2024,"month":6,"day":1,"hour":8,"minute":0,"second":0,"millisecond":0} |
| endTime | DateTimeObject | Optional | Shift end date and time. Cannot be in the future | {"year":2024,"month":6,"day":1,"hour":17,"minute":0,"second":0,"millisecond":0} |
| remark | Text (MAX) | Optional | Optional free-text remark | Updated remark |
| breaks | Collection | Optional | When supplied, replaces all breaks of the record; same items as in PUT. When omitted, the breaks stay as they are. | |
| administrativeComponents | Collection | Optional | When supplied, replaces all administrative components of the record; same items as in PUT. When omitted, they stay as they are. |
| id | string or null |
Array of objects or null (RealisedHoursBreakPostDto) | |
Array of objects or null (RealisedHoursAdminComponentPostDto) | |
| shiftQualificationDemandId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| remark | string or null |
{- "id": "string",
- "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
}This endpoint will delete a RealisedHours record from the database. All child breaks and administrative components are deleted first. The id is passed in the URL: DELETE /api/RealisedHours/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the record to delete | CTR001_SQD001_01062024080000 |
| id required | string The ID value of the RealisedHours record to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
}This endpoint creates or updates multiple RealisedHours records in a single request (POST /api/RealisedHours/InsertUpdateBulk). Each item has the fields of POST and is matched on its id (computed from the contract, the shift demand and the start time, see Functional description): an existing RealisedHours is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
A list of RealisedHours records to create or update.
| id | string or null |
| personId | string or null |
| contractId | string or null |
Array of objects or null (RealisedHoursBreakPostDto) | |
Array of objects or null (RealisedHoursAdminComponentPostDto) | |
| shiftQualificationDemandId | string or null |
object (DateTimeObject) | |
object (DateTimeObject) | |
| remark | string or null |
[- {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "personId": "string",
- "contractId": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "latestWorkflowStatus": "string",
- "latestWorkflowStatusTimeStamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "breaks": [
- {
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "administrativeComponents": [
- {
- "id": "string",
- "name": "string",
- "timestamp": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "administrativeComponentId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}
}
], - "shiftQualificationDemandId": "string",
- "startTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "endTime": {
- "year": 0,
- "month": 0,
- "day": 0,
- "hour": 0,
- "minute": 0,
- "second": 0,
- "millisecond": 0
}, - "remark": "string"
}, - "message": "string"
}
]
}EmployeeHousing is a read-only endpoint. It provides a paginated view of employees per housing location.
The endpoint combines the bed assignments of an employee per house, showing arrival date, planned departure date, and last availability date.
Supports an optional fromDate query parameter to filter records where the planned departure date is on or after the given date.
The id (externalRestId) of the EmployeeHousing is computed and cannot be physically set in Infinity.
It is based on {Employee.ExternalRestId}{separator}{House.ExternalRestId}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint EmployeeHousing usable, check the following things:
This endpoint will fetch all EmployeeHousing records (per employee per house) where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Computed ExternalRestId: {Employee.ExternalRestId}{separator}{House.ExternalRestId} | emp01_house01 |
| houseId | Text (100) | Required | ExternalRestId of the House | house01 |
| houseName | Text (50) | Required | Name of the House | Main House |
| street | Text (MAX) | Optional | Street of the House | Main Street |
| streetNumber | Text (MAX) | Optional | Street number of the House | 42 |
| streetNumberAddition | Text (MAX) | Optional | Street number addition | A |
| postalCode | Text (MAX) | Optional | Postal code of the House | 1234AB |
| countryId | Text (100) | Optional | ExternalRestId of the Country | NL |
| firstName | Text (MAX) | Required | First name of the Employee | John |
| lastName | Text (MAX) | Required | Last name of the Employee | Doe |
| employeeId | Text (100) | Required | ExternalRestId of the Employee | emp01 |
| employeeNumber | Text (MAX) | Required | Employee number | E001 |
| Text (MAX) | Required | Email of the Employee | john.doe@example.com | |
| lastAvailabilityDate | DateObject | Required | MAX(Contract.EndDate); 0001-01-01 when no contracts | {"year": 2026, "month": 12, "day": 31} |
| arrivalDate | DateObject | Required | MIN(EmployeeBed.StartDate) for this employee+house | {"year": 2026, "month": 1, "day": 1} |
| plannedDepartureDate | DateObject | Required | MAX(EmployeeBed.EndDate) for this employee+house | {"year": 2026, "month": 12, "day": 31} |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
| fromDate | string <date> Optional: only return records where plannedDepartureDate is on or after this date. |
{- "items": [
- {
- "id": "string",
- "houseId": "string",
- "houseName": "string",
- "street": "string",
- "streetNumber": "string",
- "streetNumberAddition": "string",
- "postalCode": "string",
- "countryId": "string",
- "firstName": "string",
- "lastName": "string",
- "employeeId": "string",
- "employeeNumber": "string",
- "email": "string",
- "lastAvailabilityDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "arrivalDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "plannedDepartureDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}The Shift table stores shift groups in the OPM (planning) module. Each shift belongs to a CustomerStructure and transitively to a Customer. This REST endpoint enables external systems to manage shifts: read, create, update, partially update, delete, and bulk upsert (POST /api/shift/InsertUpdateBulk).
Each shift optionally carries a ShiftLocation (alternative work address, only available when alternative locations are enabled for your environment) and a ShiftPosition (geo-coordinates: longitude, latitude, range). Both objects appear in GET responses, POST/PUT/PATCH request bodies. ShiftLocation is null in GET when UseAlternativeLocations = false for the organisation. ShiftPosition is deleted on PUT when longitude=0, latitude=0, range=null.
To make this endpoint Shift usable, check the following things:
This endpoint will fetch all Shift records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Shift ExternalRestId | SHIFT-001 |
| customerStructureId | Text (500) | Read-only | ExternalRestId of the CustomerStructure | CS-001 |
| customerStructureName | Text (500) | Read-only | Name of the CustomerStructure | Main Structure |
| customerId | Text (500) | Read-only | ExternalRestId of the Customer | CUST-001 |
| customerName | Text (500) | Read-only | Name of the Customer | Planbition BV |
| name | Text (500) | Read-only | Name of the shift | Morning shift |
| shortCode | Text (50) | Read-only | Short code identifier | MORN |
| description | Text | Optional | Optional description | |
| startDate | DateObject | Read-only | Start date of the shift | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Read-only | End date of the shift | { "year": 2026, "month": 12, "day": 31 } |
| color | Number | Read-only | Color integer value | 65280 |
| remark | Text | Optional | Optional remark | |
| shiftLocation.street | Text | Optional | Street (null when UseAlternativeLocations=false) | Main Street |
| shiftLocation.number | Text | Optional | Street number | 1 |
| shiftLocation.postalCode | Text (50) | Optional | Postal code | 1234AB |
| shiftLocation.city | Text | Optional | City | Amsterdam |
| shiftLocation.county | Text | Optional | County / province | Noord-Holland |
| shiftLocation.countryId | Text | Optional | ExternalRestId of the Country | NL |
| shiftLocation.telephone1 | Text (50) | Optional | Phone number 1 | 0612345678 |
| shiftLocation.telephone2 | Text (50) | Optional | Phone number 2 | |
| shiftLocation.eMail | Text | Optional | Email address | info@example.com |
| shiftPosition.longitude | Decimal | Optional | Longitude geo-coordinate | 4.9041 |
| shiftPosition.latitude | Decimal | Optional | Latitude geo-coordinate | 52.3676 |
| shiftPosition.range | Number | Optional | Geo-fence range in metres | 500 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a Shift in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | Consumer-supplied ExternalRestId (no underscore) | SHIFT-001 |
| customerStructureId | Text (500) | Required | ExternalRestId of CustomerStructure | CS-001 |
| name | Text (500) | Required | Name of the shift | Morning shift |
| shortCode | Text (50) | Required | Short code identifier | MORN |
| description | Text | Optional | Optional description | |
| startDate | DateObject | Required | Start date; must be within CustomerStructure period | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date >= startDate; within CustomerStructure period | { "year": 2026, "month": 12, "day": 31 } |
| color | Number | Required | Color integer value | 65280 |
| remark | Text | Optional | Optional remark | |
| shiftLocation | Object | Optional | Alternative location; 422 if UseAlternativeLocations=false | |
| shiftLocation.street | Text | Optional | Street name | Main Street |
| shiftLocation.number | Text | Optional | Street number | 1 |
| shiftLocation.postalCode | Text (50) | Optional | Postal code | 1234AB |
| shiftLocation.city | Text | Optional | City | Amsterdam |
| shiftLocation.county | Text | Optional | County / province | Noord-Holland |
| shiftLocation.countryId | Text | Optional | ExternalRestId of the Country; 422 if not found | NL |
| shiftLocation.telephone1 | Text (50) | Optional | Phone number 1 | 0612345678 |
| shiftLocation.telephone2 | Text (50) | Optional | Phone number 2 | |
| shiftLocation.eMail | Text | Optional | Email address | info@example.com |
| shiftPosition | Object | Optional | Geo-coordinate position | |
| shiftPosition.longitude | Decimal | Optional | Longitude | 4.9041 |
| shiftPosition.latitude | Decimal | Optional | Latitude | 52.3676 |
| shiftPosition.range | Number | Optional | Geo-fence range in metres | 500 |
If the response was successful, the REST user will get the Shift back, see GET.
A Shift to create and persist.
| id | string or null |
object (ShiftLocationDto) | |
object (ShiftPositionDto) | |
| customerStructureId | string or null |
| name | string or null |
| shortCode | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| color | integer <int64> |
| remark | string or null |
{- "id": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
}This endpoint will update a Shift in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId — immutable; used for lookup | SHIFT-001 |
| customerStructureId | Text (500) | Required | ExternalRestId of CustomerStructure | CS-001 |
| name | Text (500) | Required | Name of the shift | Morning shift |
| shortCode | Text (50) | Required | Short code identifier | MORN |
| description | Text | Optional | Optional description | |
| startDate | DateObject | Required | Start date; must be within CustomerStructure period | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Required | End date >= startDate; within CustomerStructure period | { "year": 2026, "month": 12, "day": 31 } |
| color | Number | Required | Color integer value | 65280 |
| remark | Text | Optional | Optional remark | |
| shiftLocation | Object | Optional | Full replace of ShiftLocation row; 422 if UseAlternativeLocations=false | |
| shiftLocation.street | Text | Optional | Street name | |
| shiftLocation.number | Text | Optional | Street number | |
| shiftLocation.postalCode | Text (50) | Optional | Postal code | |
| shiftLocation.city | Text | Optional | City | |
| shiftLocation.county | Text | Optional | County / province | |
| shiftLocation.countryId | Text | Optional | ExternalRestId of the Country | |
| shiftLocation.telephone1 | Text (50) | Optional | Phone number 1 | |
| shiftLocation.telephone2 | Text (50) | Optional | Phone number 2 | |
| shiftLocation.eMail | Text | Optional | Email address | |
| shiftPosition | Object | Optional | Send {longitude:0, latitude:0, range:null} to delete the row | |
| shiftPosition.longitude | Decimal | Optional | Longitude; 0 + 0 + null range deletes position row | |
| shiftPosition.latitude | Decimal | Optional | Latitude | |
| shiftPosition.range | Number | Optional | Geo-fence range in metres |
If the response was successful, the REST user will get the Shift back, see GET.
A Shift to synchronize the current matching Shift with.
| id | string or null |
object (ShiftLocationDto) | |
object (ShiftPositionDto) | |
| customerStructureId | string or null |
| name | string or null |
| shortCode | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| color | integer <int64> |
| remark | string or null |
{- "id": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
}This endpoint performs a partial update of a Shift. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the Shift to patch | SHIFT-001 |
| name | Text (500) | Optional | Patch: name | Evening shift |
| shortCode | Text (50) | Optional | Patch: shortCode | EVN |
| color | Number | Optional | Patch: color | 255 |
| shiftLocation | Object | Optional | Patch: replace ShiftLocation nested object | |
| shiftPosition | Object | Optional | Patch: replace ShiftPosition nested object | |
| customerStructureId | Text (100) | Optional | Patch: ExternalRestId of the CustomerStructure | CS-001 |
| description | Text | Optional | Patch: description | Evening shift for the warehouse |
| startDate | DateObject | Optional | Patch: start date | { "year": 2026, "month": 1, "day": 1 } |
| endDate | DateObject | Optional | Patch: end date | { "year": 2026, "month": 12, "day": 31 } |
| remark | Text | Optional | Patch: remark | Check the loading dock |
| id | string or null |
object (ShiftLocationDto) | |
object (ShiftPositionDto) | |
| customerStructureId | string or null |
| name | string or null |
| shortCode | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| color | integer <int64> |
| remark | string or null |
{- "id": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}{- "message": "string",
- "entity": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
}This endpoint will delete a Shift from the database. ShiftLocation and ShiftPosition child rows are deleted in the same transaction. The id is passed in the URL: DELETE /api/Shift/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (500) | Required | ExternalRestId of the Shift to delete | SHIFT-001 |
| id required | string The ID value of the Shift to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
}This endpoint creates or updates multiple Shift records in a single request (POST /api/Shift/InsertUpdateBulk). Each item has the fields of POST and is matched on its id: an existing Shift is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
A list of Shifts to create or update.
| id | string or null |
object (ShiftLocationDto) | |
object (ShiftPositionDto) | |
| customerStructureId | string or null |
| name | string or null |
| shortCode | string or null |
| description | string or null |
object (DateObject) | |
object (DateObject) | |
| color | integer <int64> |
| remark | string or null |
[- {
- "id": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "customerStructureName": "string",
- "customerId": "string",
- "customerName": "string",
- "shiftLocation": {
- "street": "string",
- "number": "string",
- "postalCode": "string",
- "city": "string",
- "county": "string",
- "countryId": "string",
- "telephone1": "string",
- "telephone2": "string",
- "eMail": "string"
}, - "shiftPosition": {
- "longitude": 0.1,
- "latitude": 0.1,
- "range": 0
}, - "customerStructureId": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "color": 0,
- "remark": "string"
}, - "message": "string"
}
]
}The contractEmploymentTypes for contracts can be managed in the admin module, in the organisation view. ContractEmploymentTypes are configured on tenant level, which means every organisation has the same contractEmploymentTypes information.
To be able to use the ContractEmploymentTypes in the REST API, the ExternalRestID should be filled.
Keep in mind that all ContractEmploymentTypes without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ContractEmploymentType: Contract.
To make this endpoint ContractEmploymentType usable, check the following things:
This endpoint will fetch all ContractEmploymentTypes with an ExternalRestID provided.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ContractEmploymentType | ContractEmploymentType |
| name | Text (200) | Required | Name of the ContractEmploymentType | ContractEmploymentType |
| description | Text (300) | Optional | Description of the ContractEmploymentType | Description |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The contractEndReasons for contracts can be managed in the admin module, in the organisation view. ContractEndReasons are configured on tenant level, which means every organisation has the same contractEndReasons information.
To be able to use the ContractEndReasons in the REST API, the ExternalRestID should be filled.
Keep in mind that all ContractEndReasons without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ContractEndReason: Contract.
To make this endpoint ContractEndReason usable, check the following things:
This endpoint will fetch all ContractEndReasons with an ExternalRestID provided.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ContractEndReason | Termination |
| name | Text (200) | Required | Name of the ContractEndReason | Termination of contract |
| description | Text (300) | Optional | Description of the ContractEndReason | Termination of contract |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The ContractPhases for contracts can be managed in the admin module, in the organisation view. ContractPhases are configured on tenant level, which means every organisation has the same ContractPhases information.
To be able to use the ContractPhases in the REST API, the ExternalRestID should be filled.
Keep in mind that all ContractPhases without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ContractPhase: Contract.
To make this endpoint ContractPhase usable, check the following things:
This endpoint will fetch all ContractPhases with an ExternalRestID provided.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ContractPhase | FaseA |
| name | Text (200) | Required | Name of the ContractPhase | Fase A |
| description | Text (300) | Optional | Description of the ContractPhase | Fase A |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The contractTypes for contracts can be managed in the admin module, in the organisation view. ContractTypes are configured on tenant level, which means every organisation has the same ContractTypes information.
To be able to use the ContractType in the REST API, the ExternalRestID should be filled.
Keep in mind that all ContractTypes without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with ContractType: Contract.
To make this endpoint ContractType usable, check the following things:
This endpoint will fetch all ContractTypes with an ExternalRestID provided.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the ContractType | FullContract |
| name | Text (200) | Required | Name of the ContractType | Full contract |
| description | Text (300) | Optional | Description of the ContractType | Full contract |
| wabCheck | Boolean | Required | is WAB contract | false |
| wttaCheck | Boolean | Required | is WTTA contract (Wet toelating terbeschikkingstelling arbeidskrachten) | false |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The countries can be managed in the admin module, within the common settings. Countries are configured on tenant level, which means every organisation has the same country information.
To be able to use the Countries in the REST API, the ISO2Code should be filled.
Keep in mind that all Countries without aISO2Codecannot be used in the REST API. This will include the entities that have a direct relationship with Country: Employee.
To make this endpoint Country usable, check the following things:
This endpoint will fetch all Countries.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| name | Text (200) | Required | Name of the Country | Netherlands |
| isoCode | Text (2) | Required | Iso2code of the Country | NL |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The CustomerStatus contains all available statuses that can be assigned to a Customer in the CRM module.
To be able to use the CustomerStatus in the REST API, the ExternalRestID should be filled.Keep in mind that all CustomerStatuses without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with CustomerStatus: Customer.
To make this endpoint CustomerStatus usable, check the following things:
This endpoint will fetch all CustomerStatuses. Supports optional filtering and ordering via query parameters.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the CustomerStatus | Active |
| name | Text (200) | Required | Name of the CustomerStatus | Active |
| description | Text (300) | Optional | Description of the CustomerStatus | Active customer |
| probabilityPercentage | Number (nullable) | Optional | Read-only likelihood percentage associated with this status; no write path exists for CustomerStatus | 75.5 |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The AvailabilityBlocks can be managed in the admin organization module.
To be able to use the AvailabilityBlock in the REST API, the ExternalRestID should be filled.
Keep in mind that all AvailabilityBlocks without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with AvailabilityBlock: OrganisationStructure
To make this endpoint AvailabilityBlock usable, check the following things:
This endpoint will fetch all valid AvailabilityBlocks per OrganisationStructure where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the AvailabilityBlock |
| organisationStructureId | Text (100) | Required | ExternalRestId of the OrganisationStructureId |
| availabilityId | Number | Required | 2 (Available), 3 (Not Available) |
| name | Text (200) | Required | Name of the AvailabilityBlock |
| shortCode | Text (50) | Required | Shortcode for the AvailabilityBlock |
| description | Text (200) | Optional | Description for the AvailabilityBlock |
| startDate | DateObject | Required | Startdate of the AvailabilityBlock |
| endDate | DateObject | Required | Enddate of the AvailabilityBlock |
| startTime | TimeObject | Required | Starttime of the AvailabilityBlock |
| endTime | TimeObject | Required | Endtime of the AvailabilityBlock |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "organisationStructureId": "string",
- "availabilityId": 0,
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}The Users can be managed in the admin module.
This endpoint is based on users for employees, not for contactpersons.
To be able to use the UserEmployee in the REST API, the ExternalRestID should be filled.
Keep in mind that all UserEmployee have a direct relationship with Employee and Userrole. It's required that these entities have externalRestIds.
To make this endpoint UserEmployee usable, check the following things:
This endpoint will fetch all Users.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Employee |
| userName | Text (300) | Required | Unique username of the user. |
| language | Text (6) | Required | Culturecode of the language of the User |
| userRoleName | Text (MAX) | Optional | Name of the Userrole |
| userRoleId | Text (100) | Optional | ExternalRestId of the Userrole |
| Text (MAX) | Required | Emailaddress of User | |
| accountType | Integer | Required | 0 Default, 1 Azure, 2 Auth0, 3 Okta |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
When doing a PUT the username should be unique in the whole database.
Possible languages used within Planbition: de-DE (German), en-GB (English UK), en-US (English US), es-ES (Spanish), fr-FR (French), it-IT (Italian), nl-NL (Dutch), pl-PL (Polish), pt-PT (Portuguese), se-SE (Swedish)
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Employee | d8536029-c5db-4175-a745-455be3ff33cc |
| userName | Text (300) | Required | Unique username of the user. | JJanssen |
| language | Text (6) | Required | Culturecode of the language of the User | nl-NL |
| userRoleId | Text (100) | Optional | ExternalRestId of the Userrole |
A User employee to synchronize the current matching User employee with.
| id required | string [ 1 .. 100 ] characters |
| userName required | string [ 1 .. 300 ] characters |
| language required | string [ 4 .. 6 ] characters |
| userRoleId | string or null <= 100 characters |
{- "id": "string",
- "userName": "string",
- "language": "string",
- "userRoleId": "string"
}The Userroles can be managed in the admin module.
To be able to use the Userrole in the REST API, the ExternalRestID should be filled.
To make this endpoint Userrole usable, check the following things:
This endpoint will fetch all Userroles.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Userrole |
| name | Text (MAX) | Required | Name of the Userrole |
| description | Text (MAX) | Optional | Description of the Userrole |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The EmployeeAvailabilities can be managed in the EmployeeSchedule by the planner and through the Planbition ESS App by the Employee.
EmployeeAvailability are connected to Employees and Contracts. The EmployeeAvailability can be connected to an AvailabilityBlock.
Keep in mind that all EmployeeAvailability have a direct relationship with Employee, Contract and possibly AvailabilityBlock. It's required that these entities have externalRestIds.
The id (externalRestId) of the EmployeeAvailability is computed and cannot be physically set in Infinity.
It's based on {Employee.ExternalRestId}{separator}{Contract.ExternalRestId}{separator}{EmployeeAvailability.Starttime:ddMMyyyyHHmm}
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint EmployeeAvailability usable, check the following things:
This endpoint will fetch all EmployeeAvailabilities where the REST user is authorized for.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | Computed externalRestId of the EmployeeAvailability |
| personId | Text (100) | Required | ExternalRestId of the Employee |
| employeeNumber | Text (MAX) | Required | EmployeeNumber of the Employee |
| contractId | Text (100) | Required | ExternalRestId of the Contract |
| contractOrganisationStructureName | Text (MAX) | Required | Name for the organisationStructure of the Contract |
| availabilityId | Number | Required | 2 (Available), 3 (Not Available) |
| availabilityBlockId | Text (100) | Optional | ExternalRestId of the AvailabilityBlock. Null when the EmployeeAvailability is not connected to an AvailabilityBlock |
| availabilityBlockName | Text (MAX) | Optional | Name of the AvailabilityBlock. Null when the EmployeeAvailability is not connected to an AvailabilityBlock |
| startTime | DateTimeObject | Required | Starttime of the EmployeeAvailability |
| endTime | DateTimeObject | Required | Endtime of the EmployeeAvailability |
| plannerRemarkPublic | Text (200) | Optional | Public planner remark of the EmployeeAvailability |
| plannerRemarkPrivate | Text (200) | Optional | Private planner remark of the EmployeeAvailability |
| employeeRemark | Text (200) | Optional | Employee remark of the EmployeeAvailability |
| timestamp | DateTimeObject | Optional | Read-only, server-managed; set automatically on create/update (nullable) |
Filtering on availabilityBlockId is supported. Sorting on availabilityBlockId or availabilityBlockName only returns the EmployeeAvailabilities that are connected to an AvailabilityBlock.
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The EmployeeType endpoint manages company-specific employee classification types (e.g. "Full-time", "Part-time", "Contractor"). A partial GET-only implementation already existed using a legacy pattern; this upgrade delivers full CRUD, PATCH partial update, and Bulk upsert with dedicated DTOs, proper authorization via a dedicated ApiEndPoint.EmployeeType entry, and deletion guards (cannot delete if the type is assigned to any employee or is set as the default in HRM General Settings).
To make this endpoint EmployeeType usable, check the following things:
This endpoint will fetch all EmployeeType records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | - | REST identifier (ExternalRestId) | full-time-001 |
| name | Text (MAX) | - | Employee type name (maps to the Description database column) | Full-time |
| color | Number (nullable) | - | Display colour as a 32-bit integer (e.g. 16711680 = red) | 16711680 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "name": "string",
- "color": 0
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a EmployeeType in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Underscore (_) is forbidden on POST. | full-time-001 |
| name | Text (MAX) | Required | Employee type name | Full-time |
| color | Number | Required | Display colour as a 32-bit integer | 16711680 |
If the response was successful, the REST user will get the EmployeeType back, see GET.
An EmployeeType to create and persist.
| id | string or null |
| name | string or null |
| color | integer or null <int64> |
{- "id": "string",
- "name": "string",
- "color": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "color": 0
}
}This endpoint will update a EmployeeType in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId - lookup key; the value is immutable | full-time-001 |
| name | Text (MAX) | Required | Employee type name | Full-time Updated |
| color | Number | Required | Display colour as a 32-bit integer | 255 |
If the response was successful, the REST user will get the EmployeeType back, see GET.
An EmployeeType to synchronize the current matching EmployeeType with.
| id | string or null |
| name | string or null |
| color | integer or null <int64> |
{- "id": "string",
- "name": "string",
- "color": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "color": 0
}
}This endpoint performs a partial update of a EmployeeType. Only fields supplied in the request body are updated; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the record to patch | full-time-001 |
| name | Text (MAX) | Optional | Employee type name - updated only if supplied | Patched Name |
| color | Number | Optional | Display colour - updated only if supplied | 255 |
| id | string or null |
| name | string or null |
| color | integer or null <int64> |
{- "id": "string",
- "name": "string",
- "color": 0
}{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "color": 0
}
}This endpoint will delete a EmployeeType from the database. The delete is rejected if the type is assigned to any employee or is set as the default in HRM General Settings. The id is passed in the URL: DELETE /api/EmployeeType/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the EmployeeType to delete | full-time-001 |
| id required | string The ID value of the EmployeeType to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "name": "string",
- "color": 0
}
}This endpoint creates or updates multiple EmployeeType records in a single request (POST /api/EmployeeType/InsertUpdateBulk). Each item is matched by ExternalRestId: existing records are updated, new ones are inserted.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId. Existing records are updated; new ones are inserted. Underscore (_) is forbidden on insert. | full-time-001 |
| name | Text (MAX) | Required | Employee type name | Full-time |
| color | Number | Required | Display colour as a 32-bit integer | 16711680 |
The list of EmployeeTypes to create or update.
| id | string or null |
| name | string or null |
| color | integer or null <int64> |
[- {
- "id": "string",
- "name": "string",
- "color": 0
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "name": "string",
- "color": 0
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "name": "string",
- "color": 0
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "name": "string",
- "color": 0
}, - "message": "string"
}
]
}The industries for customers can be managed in the admin module, in the organisation view. Industries are configured on tenant level, which means every organisation has the same industry information.
Industry can be used to differentiate customers within premium pay differentiations.
To be able to use the Industry in the REST API, the ExternalRestID should be filled.
Keep in mind that all Industries without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with Industry: Customer.
To make this endpoint Industry usable, check the following things:
This endpoint will fetch all Industries with an ExternalRestID provided.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Industry | IT |
| name | Text (200) | Required | Name of the Industry | IT |
| description | Text (300) | Optional | Description of the Industry | Planbition IT branch |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
[- {
- "id": "string",
- "name": "string",
- "description": "string"
}
]The organisation within Infinity can be found in the admin module.
This is also the organisation to which the employee and its contract are assigned to.
Furthermore, it also contains all configurations for the features within Infinity and the app.
To be able to use the OrganisationStructure in the REST API, the ExternalRestID should be filled.
Keep in mind that all OrganisationStructures without an ExternalRestID cannot be used in the REST API. This will include the entities that have a relationship with OrganisationStructure: Contract, Employee, CustomerStructure, Shift, ShiftQualificationDemand, ScheduleEmployeeShiftDemand, Customer, ShiftDemandDayOccupation
To make this endpoint OrganisationStructure usable, check the following things:
Because of the complexity of the OrganisationStructure the REST API is only providing a GET endpoint.
This endpoint will fetch all OrganisationStructures with an ExternalRestID provided and where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the OrganisationStructure | 962a2e4e-81bb-4795-ae8e-f48b70364926 |
| name | Text (300) | Required | Name of the OrganisationStructure | Planbition |
| children | Array | Optional | Recursive OrganisationStructures | |
| children.id | Text (100) | Required | ExternalRestId of the OrganisationStructure (Child) | a198d019-a2f8-4bff-8aa5-533592b1a042 |
| children.name | Text | Required | Name of the OrganisationStructure (Child) | Planbition Helmond |
| children. children | Array | Optional | Recursive OrganisationStructures (Child) |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The qualifications for contracts can be managed in the admin module, in the common settings. Qualifications can be specific for organisationStructures or globally scoped.
To be able to use the Qualifications in the REST API, the ExternalRestID should be filled.
Keep in mind that all Qualifications without an ExternalRestID cannot be used in the REST API. This will include the entities that have a direct relationship with Qualification: OrganisationStructure.
To make this endpoint Qualification usable, check the following things:
This endpoint will fetch all qualifications with an ExternalRestID provided and for the specific organisationStructure qualifications the REST user authorization is checked.
Qualifications can be organisationstructure specific or globally defined.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the Qualification | 01Picken |
| organisationStructureId | Text (100) | Optional | ExternalRestId of the OrganisationStructure for this Qualification | b866d06d-42af-4ffa-88fc-c749efc872a2 |
| organisationStructureName | Text (200) | Optional | Name of the OrganisationStructure for this Qualification | Planbition |
| qualificationLevelId | Number | Optional | QualificationLevel of the Qualification | 1 |
| name | Text (300) | Required | Name of the Qualification | Picken |
| shortCode | Text (50) | Optional | Shortcode of the Qualification | Picken |
| description | Text (300) | Optional | Description of the Qualification | Picken |
| isShiftQualification | Boolean | Required | --Obsolete-- | |
| isTaskQualification | Boolean | Required | --Obsolete-- | |
| expirationDays | Number | Optional | Expiration in days for the Qualification | 50 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The BlockBedReasons can be managed in the admin module in a future version of Infinity.
To be able to use the BlockBedReason in the REST API, the ExternalRestID should be filled.
To make this endpoint BlockBedReason usable, check the following things:
This endpoint will fetch all BlockBedReasons.
Response
| Field | Type | Required | Description |
|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the BlockBedReason |
| name | Text (MAX) | Required | Name of the BlockBedReason |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
The AbsencePresence endpoint exposes absence and presence type configuration data per organisation unit. Only records where IsValid = true are returned. This read-only endpoint provides the types of absences and presences that can be scheduled, including classification flags such as IsAbsence, IsWorkingTime, IsLeisure, and IsReserve.
To make this endpoint AbsencePresence usable, check the following things:
This endpoint will fetch all AbsencePresence records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text | n/a | ExternalRestId (database ID as string) | 42 |
| name | Text | n/a | Absence/presence type name | Sick leave |
| shortCode | Text | n/a | Short code | SL |
| description | Text | n/a | Description | Sick leave for employees |
| wageComponent | Text | n/a | Wage component code (nullable) | STD |
| organisationStructureId | Text (100) | n/a | Organisation structure ExternalRestId | ORG-001 |
| organisationStructureName | Text | n/a | Organisation structure name | Main Office |
| isWorkingTime | Boolean | n/a | Whether this counts as working time | true |
| isAbsence | Boolean | n/a | Whether this is an absence type | true |
| isLeisure | Boolean | n/a | Whether this is leisure time | false |
| isReserve | Boolean | n/a | Whether this is reserve time | false |
| startTime | TimeObject | n/a | Optional start time (nullable) | { "hour": 8, "minute": 0 } |
| endTime | TimeObject | n/a | Optional end time (nullable) | { "hour": 16, "minute": 0 } |
| color | Number | n/a | Color code | 12345678 |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "name": "string",
- "shortCode": "string",
- "description": "string",
- "wageComponent": "string",
- "organisationStructureId": "string",
- "organisationStructureName": "string",
- "isWorkingTime": true,
- "isAbsence": true,
- "isLeisure": true,
- "isReserve": true,
- "startTime": {
- "hour": 0,
- "minute": 0
}, - "endTime": {
- "hour": 0,
- "minute": 0
}, - "color": 0
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}The CustomFieldsEmployee endpoint exposes custom field definitions for employee records. Organisations configure additional data-capture fields (of various types) on employee profiles. Each field may optionally carry a list of allowed lookup values (when Type = "Lookup"). A full CRUD + PATCH + Bulk REST API is provided so client systems can manage these configurations programmatically.
To make this endpoint CustomFieldsEmployee usable, check the following things:
This endpoint will fetch all CustomFieldsEmployee records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | ExternalRestId of the custom field definition | CFE-001 | |
| organisationStructureId | Text (100) | ExternalRestId of the linked organisation structure | ORG-001 | |
| name | Text | Name of the custom field | Employee Level | |
| type | Text (50) | Field type: Boolean, Date, DateTime, Decimal, Integer, String, Time, Lookup | String | |
| isMandatory | Boolean | Whether the field is mandatory on the employee profile | false | |
| isGroupStart | Boolean | Whether this field is the start of a display group | false | |
| groupName | Text | Optional display group name; null when IsGroupStart is false | Personal Info | |
| sequence | Integer | Display order within the organisation | 1 | |
| lookupValues | List | Allowed values when type is Lookup; null or empty for all other types | [] |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a CustomFieldsEmployee in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Consumer-supplied ExternalRestId; underscores are not allowed | CFE-001 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the organisation structure | ORG-001 |
| name | Text | Required | Name of the custom field | Employee Level |
| type | Text (50) | Required | Field type: Boolean, Date, DateTime, Decimal, Integer, String, Time, Lookup | String |
| isMandatory | Boolean | Optional | Whether the field is mandatory | false |
| isGroupStart | Boolean | Optional | Whether this field starts a display group | false |
| groupName | Text | Optional | Display group name | Personal Info |
| sequence | Integer | Required | Display order (>= 0). If > 0, existing records in same org with Sequence >= this value are shifted up by 1 before insert | 0 |
| lookupValues | List | Required if Type=Lookup | List of allowed lookup values; required and non-empty when type is Lookup | [] |
If the response was successful, the REST user will get the CustomFieldsEmployee back, see GET.
A CustomFieldsEmployee to create and persist.
| id required | string [ 1 .. 100 ] characters |
| organisationStructureId | string or null |
| name | string or null |
| type | string or null |
| isMandatory | boolean |
| isGroupStart | boolean |
| groupName | string or null |
| sequence | integer <int32> |
Array of objects or null (CustomFieldsEmployeeLookupValueDto) |
{- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
}This endpoint will update a CustomFieldsEmployee in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the field to update (immutable - used as lookup key) | CFE-001 |
| organisationStructureId | Text (100) | Required | ExternalRestId of the organisation structure (immutable after creation) | ORG-001 |
| name | Text | Required | Name of the custom field | Employee Level |
| type | Text (50) | Required | Field type. Changing away from Lookup deletes all existing lookup rows | String |
| isMandatory | Boolean | Optional | Whether the field is mandatory | false |
| isGroupStart | Boolean | Optional | Whether this field starts a display group | false |
| groupName | Text | Optional | Display group name | Personal Info |
| sequence | Integer | Required | Display order (>= 0) | 0 |
| lookupValues | List | Required if Type=Lookup | Fully replaces existing lookup rows when type is Lookup; delete all + re-insert | [] |
If the response was successful, the REST user will get the CustomFieldsEmployee back, see GET.
A CustomFieldsEmployee to synchronize the current matching CustomFieldsEmployee with.
| id required | string [ 1 .. 100 ] characters |
| organisationStructureId | string or null |
| name | string or null |
| type | string or null |
| isMandatory | boolean |
| isGroupStart | boolean |
| groupName | string or null |
| sequence | integer <int32> |
Array of objects or null (CustomFieldsEmployeeLookupValueDto) |
{- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
}This endpoint performs a partial update of a CustomFieldsEmployee. Only supplied fields are merged; omitted fields retain their current values.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the field to patch | CFE-001 |
| name | Text | Optional | Name of the custom field | Employee Level |
| type | Text (50) | Optional | Field type | String |
| isMandatory | Boolean | Optional | Whether the field is mandatory | false |
| isGroupStart | Boolean | Optional | Whether this field starts a display group | false |
| groupName | Text | Optional | Display group name | Personal Info |
| sequence | Integer | Optional | Display order (>= 0) | 0 |
| lookupValues | List | Optional | Lookup values; required non-empty if type is Lookup | [] |
| organisationStructureId | Text (100) | Optional | ExternalRestId of the OrganisationStructure the custom field belongs to | ORG-001 |
| id required | string [ 1 .. 100 ] characters |
| organisationStructureId | string or null |
| name | string or null |
| type | string or null |
| isMandatory | boolean |
| isGroupStart | boolean |
| groupName | string or null |
| sequence | integer <int32> |
Array of objects or null (CustomFieldsEmployeeLookupValueDto) |
{- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
}This endpoint will delete a CustomFieldsEmployee from the database. The id is passed in the URL: DELETE /api/CustomFieldsEmployee/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | ExternalRestId of the custom field to delete | CFE-001 |
| id required | string The ID value of the CustomFieldsEmployee to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
}This endpoint creates or updates multiple CustomFieldsEmployee records in a single request (POST /api/CustomFieldsEmployee/InsertUpdateBulk). Each item has the fields of POST and is matched on its id: an existing CustomFieldsEmployee is updated, otherwise a new one is created.
Every item is checked with the same rules as POST. An item that fails is reported in the result with its error; the other items are still processed.
The collection of CustomFieldsEmployees to create or update.
| id required | string [ 1 .. 100 ] characters |
| organisationStructureId | string or null |
| name | string or null |
| type | string or null |
| isMandatory | boolean |
| isGroupStart | boolean |
| groupName | string or null |
| sequence | integer <int32> |
Array of objects or null (CustomFieldsEmployeeLookupValueDto) |
[- {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "organisationStructureId": "string",
- "name": "string",
- "type": "string",
- "isMandatory": true,
- "isGroupStart": true,
- "groupName": "string",
- "sequence": 0,
- "lookupValues": [
- {
- "value": "string"
}
]
}, - "message": "string"
}
]
}A house landlord is the on-site "landlord" (caretaker/contact person) of a house: the employee who is assigned to a house from a given start date. The assignment links a House to an Employee who is housed (has a PersonHousing period) on that start date. The assignment runs until the next landlord of the same house starts, or until the house's end date.
This is not the same as the rentalInformation of a House: rentalInformation holds the landlord company's contact details (name, address, phone, email), while a house landlord records which employee is assigned as landlord for a house, and from when.
The id is computed by the API from the house's id and the start date: {houseId}{separator}{startDate}, with the start date written as ddMMyyyy and the separator configured for your environment (default _), for example h1-001_01062026. It cannot be supplied on POST.
{separator} is the id separator configured for your environment (default _), see Global.
To make this endpoint HouseLandlord usable, check the following things:
This endpoint will fetch all HouseLandlord records where the REST user is authorized for.
Response
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | - | Computed REST identifier: houseId + separator + startDate (ddMMyyyy) | h1-001_01062026 |
| houseId | Text (100) | - | ExternalRestId of the House. Immutable after creation. | h1-001 |
| houseName | Text (100) | - | Name of the house (read-only) | Test House |
| personId | Text (100) | - | ExternalRestId of the Employee assigned as landlord | emp-001 |
| employeeNumber | Text (100) | - | Employee number of the landlord (read-only) | EMP001 |
| startDate | DateObject | - | Start date of the landlord assignment | { "year": 2026, "month": 6, "day": 1 } |
| endDate | DateObject | - | Calculated end date (read-only): the next landlord's startDate for the same House, or the House's endDate if this is the current/last landlord. | { "year": 2026, "month": 7, "day": 1 } |
| PageNumber | integer <int32> This parameter specifies which page of results with a given number to return. |
| PageSize | integer <int32> This parameter specifies the size of the page to return. |
| OrderBy | string This parameter specifies a property to order by. Example: Id desc |
| Filter | string This parameter specifies conditions on properties to filter by. Example: 'contains(email, planbition) and lastname eq groot' |
{- "items": [
- {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
], - "currentPage": 0,
- "totalPages": 0,
- "pageSize": 0,
- "totalCount": 0,
- "hasPrevious": true,
- "hasNext": true
}This endpoint will create a HouseLandlord in the database.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| houseId | Text (100) | Required | ExternalRestId of the House | h1-001 |
| personId | Text (100) | Required | ExternalRestId of the Employee. The Employee must have a PersonHousing period that contains startDate. | emp-001 |
| startDate | DateObject | Required | Start date of the assignment. Must fall within both the House's active period and the Employee's PersonHousing period. No other HouseLandlord of the same house may have the same startDate. | { "year": 2026, "month": 6, "day": 1 } |
If the response was successful, the REST user will get the HouseLandlord back, see GET. A request that breaks one of the rules above is rejected; see Exception handling.
A HouseLandlord to create and persist.
| id | string or null |
| houseId | string or null |
| personId | string or null |
object (DateObject) |
{- "id": "string",
- "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will update a HouseLandlord in the database. houseId cannot be changed after creation.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | Computed id of the HouseLandlord to update. Because startDate is part of the id, changing startDate changes the id returned in the response. | h1-001_01062026 |
| houseId | Text (100) | Required | ExternalRestId of the House. Rejected if it differs from the existing record's houseId. | h1-001 |
| personId | Text (100) | Required | ExternalRestId of the Employee. Can be changed; the same PersonHousing-period check as on POST applies. | emp-001 |
| startDate | DateObject | Required | Can be changed; the same house-period and uniqueness checks as on POST apply. | { "year": 2026, "month": 6, "day": 15 } |
If the response was successful, the REST user will get the HouseLandlord back, see GET.
A HouseLandlord to synchronize the current matching HouseLandlord with.
| id | string or null |
| houseId | string or null |
| personId | string or null |
object (DateObject) |
{- "id": "string",
- "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}{- "message": "string",
- "entity": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint will delete a HouseLandlord from the database. The id is passed in the URL: DELETE /api/HouseLandlord/{id}.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Required | Computed id of the HouseLandlord (in the URL) | h1-001_01062026 |
| id required | string The ID value of the HouseLandlord to delete. |
{- "message": "string",
- "entity": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
}This endpoint creates or updates multiple HouseLandlord records in a single request (POST /api/HouseLandlord/InsertUpdateBulk). For each item:
Every item is checked with the same rules as POST and PUT. An item that fails is reported in the result with its error; the other items are still processed.
Request
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| id | Text (100) | Optional | Computed id of an existing HouseLandlord to update | h1-001_01062026 |
| houseId | Text (100) | Required | ExternalRestId of the House | h1-001 |
| personId | Text (100) | Required | ExternalRestId of the Employee. The Employee must have a PersonHousing period that contains startDate. | emp-001 |
| startDate | DateObject | Required | Start date of the assignment. Must fall within both the House's active period and the Employee's PersonHousing period. | { "year": 2026, "month": 6, "day": 1 } |
The list of HouseLandlords to create or update.
| id | string or null |
| houseId | string or null |
| personId | string or null |
object (DateObject) |
[- {
- "id": "string",
- "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}
]{- "message": "string",
- "insertedItems": [
- {
- "item": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}, - "message": "string"
}
], - "updatedItems": [
- {
- "item": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}, - "message": "string"
}
], - "failedItems": [
- {
- "item": {
- "id": "string",
- "houseName": "string",
- "employeeNumber": "string",
- "endDate": {
- "year": 0,
- "month": 0,
- "day": 0
}, - "houseId": "string",
- "personId": "string",
- "startDate": {
- "year": 0,
- "month": 0,
- "day": 0
}
}, - "message": "string"
}
]
}