Planbition REST API (v1)

Download OpenAPI specification:

Planbition Support: support@planbition.com

Global

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.

Authorisation

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.

Loading order

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.

Step Load these entities Prerequisites (from the endpoint checklists)
1 BlockBedReason, ContractEmploymentType, ContractEndReason, ContractPhase, ContractType, CostCenter, Country, CustomerStatus, EmployeeType, HouseGroup, Industry, OrganisationStructure, TransportBike, TransportCar, UserRole -
2 AbsencePresence, AvailabilityBlock, CustomFieldsEmployee, Customer, House, Qualification, TransportBikeOrganisation, TransportCarOrganisation Country, CustomerStatus, Industry, OrganisationStructure, TransportBike, TransportCar
3 CustomerStructure, Room Country, Customer, House, OrganisationStructure
4 BlockBed, Employee, Shift BlockBedReason, Country, Customer, CustomerStructure, EmployeeType, House, OrganisationStructure, Room
5 Contract, CustomerQualification, EmployeeCustomField, EmployeeHousing, EmployeeQualification, PersonHousing, ShiftQualificationDemand, UserEmployee ContractEmploymentType, ContractEndReason, ContractPhase, ContractType, CostCenter, CustomFieldsEmployee, Customer, CustomerStructure, Employee, House, OrganisationStructure, Qualification, Shift, UserRole
6 ContractAssignment, EmployeeAvailability, EmployeeBed, EmployeeClock, HouseLandlord, Occupation, PlanningAssignment, PlanningRequest, RealisedHours, ScheduleEmployeeAbsencePresence, ScheduleEmployeeShiftDemand, ShiftQualification AbsencePresence, AvailabilityBlock, Contract, ContractEmploymentType, ContractEndReason, ContractPhase, ContractType, CostCenter, Customer, CustomerStructure, Employee, House, OrganisationStructure, PersonHousing, Room, Shift, ShiftQualificationDemand

Pagination

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.

  • PageSize: This parameter defines the number of results to be returned per page. It is also a positive integer and determines how many items will be included in each page of results. For example, if PageSize is set to 75, each page will contain up to 75 results. Adjusting the PageSize allows control over the volume of data returned in a single request. The default page size is 50. The maximum page size is 100.

Filters

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

  • Contains
  • Syntax: contains(propertyName, 'value')
  • Example: To filter entities where the Name property contains the value "John":
    GET /api/entities?filter=contains(Name, 'John')
  • Equals
  • Syntax: propertyName eq 'value'
  • Example: To filter entities where the Status property equals "Active":
    GET /api/entities?filter=Status eq 'Active'
  • Not Equals
  • Syntax: propertyName ne 'value'
  • Example: To filter entities where the Category property is not "Electronics":
    GET /api/entities?filter=Category ne 'Electronics'
  • Greater Than
  • Syntax: propertyName gt value
  • Example: To filter entities where the Price property is greater than 100:
    GET /api/entities?filter=Price gt 100
  • Greater Than or Equal
  • Syntax: propertyName ge value
  • Example: To filter entities where the Rating property is greater than or equal to 4.5:
    GET /api/entities?filter=Rating ge 4.5
  • Less Than
  • Syntax: propertyName lt value
  • Example: To filter entities where the Stock property is less than 50:
    GET /api/entities?filter=Stock lt 50
  • Less Than or Equal
  • Syntax: propertyName le value
  • Example: To filter entities where the Age property is less than or equal to 30:
    GET /api/entities?filter=Age le 30 Combining Filters

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

Exception handling

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

Authenticate

Logging in

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:

Authenticates a user with this instance of the API.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "Key": "string",
  • "UserName": "string",
  • "Password": "string"
}

Response samples

Content type
No sample

Employee

Functional description

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.

Checklist

To make this endpoint Employee usable, check the following things:

Gets Employees matching given request parameters.

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
email 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)
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Creates a Employee.

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
email 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
  • organisationStructureId, customerId OR customerStructureId is required.

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.

Authorizations:
Bearer
Request Body schema:

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
email
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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "title": "string",
  • "employeeTypeId": "string",
  • "organisationStructureId": "string",
  • "accountType": 0,
  • "isActive": true,
  • "nationality": "string"
}

Response samples

Content type
No sample

Updates a Employee with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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
email
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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "title": "string",
  • "employeeTypeId": "string",
  • "organisationStructureId": "string",
  • "accountType": 0,
  • "isActive": true,
  • "nationality": "string"
}

Response samples

Content type
No sample

Partially updates an Employee with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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
email
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

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "title": "string",
  • "employeeTypeId": "string",
  • "organisationStructureId": "string",
  • "accountType": 0,
  • "isActive": true,
  • "nationality": "string"
}

Response samples

Content type
No sample

Deletes a Employee with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Employee to delete.

Responses

Response samples

Content type
No sample

Creates or updates a list of Employees.

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.

Authorizations:
Bearer
Request Body schema:

A list of Employees to create or update.

Array
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
email
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
No sample

Contract

Functional description

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

Checklist

To make this endpoint Contract usable, check the following things:

Gets Contracts matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Contract.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "endDate": {
    },
  • "externalId": "string",
  • "externalDescription": "string",
  • "clrId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Contract with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "endDate": {
    },
  • "externalId": "string",
  • "externalDescription": "string",
  • "clrId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Patches a Contract with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "endDate": {
    },
  • "externalId": "string",
  • "externalDescription": "string",
  • "clrId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Contract with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Contract to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

ContractAssignment

Functional description

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.

Checklist

To make this endpoint ContractAssignment usable, check the following things:

Gets ContractAssignments matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Creates a ContractAssignment.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "contractId": "string",
  • "customerStructureId": "string",
  • "description": "string",
  • "workingHours": 0.1,
  • "hourlyWage": 0.1,
  • "rate": 0.1,
  • "travelCost": 0.1,
  • "startDate": {
    },
  • "endDate": {
    },
  • "assignmentNumber": "string",
  • "assignmentDescription": "string",
  • "personId": "string",
  • "contractTypeId": "string",
  • "clrId": "string"
}

Response samples

Content type
No sample

Updates a ContractAssignment with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "contractId": "string",
  • "customerStructureId": "string",
  • "description": "string",
  • "workingHours": 0.1,
  • "hourlyWage": 0.1,
  • "rate": 0.1,
  • "travelCost": 0.1,
  • "startDate": {
    },
  • "endDate": {
    },
  • "assignmentNumber": "string",
  • "assignmentDescription": "string",
  • "personId": "string",
  • "contractTypeId": "string",
  • "clrId": "string"
}

Response samples

Content type
No sample

Partially updates a Contract Assignment with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "contractId": "string",
  • "customerStructureId": "string",
  • "description": "string",
  • "workingHours": 0.1,
  • "hourlyWage": 0.1,
  • "rate": 0.1,
  • "travelCost": 0.1,
  • "startDate": {
    },
  • "endDate": {
    },
  • "assignmentNumber": "string",
  • "assignmentDescription": "string",
  • "personId": "string",
  • "contractTypeId": "string",
  • "clrId": "string"
}

Response samples

Content type
No sample

Deletes a ContractAssignment with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the ContractAssignment to delete.

Responses

Response samples

Content type
No sample

Creates or updates a list of ContractAssignments.

This endpoint creates or updates multiple ContractAssignments in a single request (POST /api/ContractAssignment/InsertUpdateBulk). Each item uses the fields of POST:

  • with contractId: the item is matched on contract + assignmentNumber; an existing ContractAssignment is updated, otherwise a new one is created;
  • with personId: the item is matched on assignmentNumber; the employee's contract is found or created as described in 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.

Authorizations:
Bearer
Request Body schema:

A list of ContractAssignments to create or update.

Array
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
No sample

EmployeeQualification

Functional description

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.

Checklist

To make this endpoint EmployeeQualification usable, check the following things:

Gets EmployeeQualifications matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a EmployeeQualification.

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.

Authorizations:
Bearer
Request Body schema:

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>

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "qualificationId": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a EmployeeQualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

A EmployeeQualification to synchronize the current matching EmployeeQualification with.

id
required
string [ 1 .. 100 ] characters
object (DateObject)
object (DateObject)
priority
integer <int32>

Responses

Request samples

Content type
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates an Employee Qualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 100 ] characters
object (DateObject)
object (DateObject)
priority
integer <int32>

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a EmployeeQualification with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the EmployeeQualification to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

EmployeeClock

Functional description

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.

Checklist

To make this endpoint EmployeeClock usable, check the following things:

Gets EmployeeClocks matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a EmployeeClock.

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
Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "personId": "string",
  • "shiftQualificationDemandId": "string",
  • "terminalSerial": "string",
  • "clockTime": {
    },
  • "clockType": 0,
  • "costCenterId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

ShiftQualificationDemand

Functional description

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

Checklist

To make this endpoint ShiftQualificationDemand usable, check the following things:

Gets ShiftQualificationDemands matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Creates a ShiftQualificationDemand.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "occupationType": 0,
  • "customerStructureId": "string",
  • "shiftId": "string",
  • "extendShift": true,
  • "costCenterId": "string",
  • "shiftName": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0,
  • "remark": "string",
  • "checkCustomerQualification": true,
  • "checkAssignments": true,
  • "shiftDemandDayOccupations": [
    ]
}

Response samples

Content type
No sample

Updates a ShiftQualificationDemand with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "extendShift": true,
  • "costCenterId": "string",
  • "shiftName": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0,
  • "remark": "string",
  • "checkCustomerQualification": true,
  • "checkAssignments": true,
  • "shiftDemandDayOccupations": [
    ]
}

Response samples

Content type
No sample

Partially updates a Shift Qualification Demand with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "extendShift": true,
  • "costCenterId": "string",
  • "shiftName": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "priority": 0,
  • "remark": "string",
  • "checkCustomerQualification": true,
  • "checkAssignments": true,
  • "shiftDemandDayOccupations": [
    ]
}

Response samples

Content type
No sample

Deletes a ShiftQualificationDemand with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the ShiftQualificationDemand to delete.

Responses

Response samples

Content type
No sample

Occupation

Functional description

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.

Checklist

To make this endpoint Occupation usable, check the following things:

Gets Occupations matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Occupation.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "shiftQualificationDemandId": "string",
  • "scheduleDate": {
    },
  • "startTime": {
    },
  • "endTime": {
    },
  • "optimal": 0.1,
  • "maximal": 0.1,
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "customerRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Occupation with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "optimal": 0.1,
  • "maximal": 0.1,
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "customerRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates an Occupation with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "optimal": 0.1,
  • "maximal": 0.1,
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "customerRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

CustomerQualification

Functional description

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.

Checklist

To make this endpoint CustomerQualification usable, check the following things:

Gets Customer Qualifications matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a CustomerQualification.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "startDate": {
    },
  • "endDate": {
    },
  • "customerStructureId": "string",
  • "personId": "string",
  • "unsuited": true,
  • "placementNumber": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a CustomerQualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

A CustomerQualification to create and persist.

id
required
string [ 1 .. 100 ] characters
required
object (DateObject)
unsuited
required
boolean
placementNumber
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "endDate": {
    },
  • "unsuited": true,
  • "placementNumber": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Customer Qualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 100 ] characters
required
object (DateObject)
unsuited
required
boolean
placementNumber
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "endDate": {
    },
  • "unsuited": true,
  • "placementNumber": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Customer Qualification matching the given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Customer Qualification to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

ShiftQualification

Functional description

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.

Checklist

To make this endpoint ShiftQualification usable, check the following things:

Gets Shift Qualifications matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a ShiftQualification.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "shiftQualificationDemandId": "string",
  • "name": "string",
  • "description": "string",
  • "defaultSelected": true,
  • "operator": "string",
  • "isNegative": true,
  • "filters": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a ShiftQualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "description": "string",
  • "defaultSelected": true,
  • "operator": "string",
  • "isNegative": true,
  • "filters": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Shift Qualification with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "description": "string",
  • "defaultSelected": true,
  • "operator": "string",
  • "isNegative": true,
  • "filters": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Shift Qualification matching the given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Shift Qualification to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

CostCenter

Functional description

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

Checklist

To make this endpoint CostCenter usable, check the following things:

Gets Cost Center matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Cost Center.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "code": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Cost Center with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "code": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Cost Center with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 100 ] characters
name
string or null
code
string or null
description
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "code": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Cost Center with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Contract to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

PlanningAssignment

Functional description

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.

Checklist

To make this endpoint PlanningAssignment usable, check the following things:

Gets a Planning assignment matching given ID.

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
        }
    ]
}
Authorizations:
Bearer
path Parameters
id
required
string

A Id used to select the Planning assignment.

Responses

Response samples

Content type
No sample

Updates a Planning assignment with an ID matching the value given in the body.

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.

Authorizations:
Bearer
path Parameters
id
required
string

Unique ID of PlanningAssignment message

Request Body schema:

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)

Responses

Request samples

Content type
{
  • "documentId": {
    },
  • "actionCode": "DELETE",
  • "supplier": {
    },
  • "customer": {
    },
  • "assignedWorker": {
    },
  • "positionProfile": {
    },
  • "planningRequestReference": {
    },
  • "periodicPlanningLine": [
    ],
  • "singlePlanningLine": [
    ]
}

Response samples

Content type
No sample

Deletes a Planning assignment with a given ID.

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.

Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Planning assignment to delete.

Responses

Creates a Planning assignment.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "documentId": {
    },
  • "actionCode": "DELETE",
  • "supplier": {
    },
  • "customer": {
    },
  • "assignedWorker": {
    },
  • "positionProfile": {
    },
  • "planningRequestReference": {
    },
  • "periodicPlanningLine": [
    ],
  • "singlePlanningLine": [
    ]
}

Response samples

Content type
No sample

PlanningRequest

Functional description

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.

Checklist

To make this endpoint PlanningRequest usable, check the following things:

Gets a PlanningRequest by its Setu documentId.

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.

Authorizations:
Bearer
path Parameters
id
required
string

The Setu documentId of the PlanningRequest.

Responses

Response samples

Content type
No sample

Updates the quantity and times of an existing 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.

Authorizations:
Bearer
path Parameters
id
required
string

The Setu documentId of the PlanningRequest.

Request Body schema:

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)

Responses

Request samples

Content type
{
  • "documentId": {
    },
  • "supplier": {
    },
  • "customer": {
    },
  • "positionProfile": {
    },
  • "requestComments": {
    },
  • "periodicPlanningLine": [
    ],
  • "singlePlanningLine": [
    ]
}

Response samples

Content type
No sample

Deletes a PlanningRequest by its Setu documentId.

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.

Authorizations:
Bearer
path Parameters
id
required
string

The Setu documentId of the PlanningRequest.

Responses

Creates a 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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "documentId": {
    },
  • "supplier": {
    },
  • "customer": {
    },
  • "positionProfile": {
    },
  • "requestComments": {
    },
  • "periodicPlanningLine": [
    ],
  • "singlePlanningLine": [
    ]
}

Response samples

Content type
No sample

ScheduleEmployeeShiftDemand

Functional description

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

Checklist

To make this endpoint ScheduleEmployeeShiftDemand usable, check the following things:

Gets ScheduleEmployeeShiftDemands matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a ScheduleEmployeeShiftDemand.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "contractId": "string",
  • "organisationStructureId": "string",
  • "customerStructureId": "string",
  • "shiftQualificationDemandId": "string",
  • "scheduleEmployeeAdministrativeComponents": [
    ],
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string",
  • "timestamp": {
    },
  • "isPublished": true
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a ScheduleEmployeeShiftDemand with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "scheduleEmployeeAdministrativeComponents": [
    ],
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string",
  • "timestamp": {
    },
  • "isPublished": true
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Patches a ScheduleEmployeeShiftDemand with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "scheduleEmployeeAdministrativeComponents": [
    ],
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string",
  • "timestamp": {
    },
  • "isPublished": true
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a ScheduleEmployeeShiftDemand with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the ScheduleEmployeeShiftDemand to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a batch of ScheduleEmployeeShiftDemands in a single call.

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.
  • contractId or organisationStructureId or customerStructureId should be supplied for new items.

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.

Authorizations:
Bearer
Request Body schema:

The collection of ScheduleEmployeeShiftDemands to create or update.

Array
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

Customer

Functional description

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.

Checklist

To make this endpoint Customer usable, check the following things:

Gets Customers matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Customer.

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
email 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.

Authorizations:
Bearer
Request Body schema:

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
email
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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "endDate": {
    },
  • "isActive": true,
  • "externalCustomerId": "string",
  • "useSetuAssignments": true,
  • "provisionalAssignmentLevel": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Customer with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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
email
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

Responses

Request samples

Content type
{
  • "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": {
    },
  • "endDate": {
    },
  • "isActive": true,
  • "externalCustomerId": "string",
  • "useSetuAssignments": true,
  • "provisionalAssignmentLevel": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Customer with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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
email
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

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "endDate": {
    },
  • "isActive": true,
  • "externalCustomerId": "string",
  • "useSetuAssignments": true,
  • "provisionalAssignmentLevel": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Customer with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Customer to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates multiple Customers in a single request.

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
Authorizations:
Bearer
Request Body schema:

A list of partial Customer payloads; each must include id.

Array
any

Responses

Request samples

Content type
[
  • null
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

TransportCar

Functional description

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.

Checklist

To make this endpoint TransportCar usable, check the following things:

Gets Transport cars matching given request parameters.

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 } } ],
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Transport car.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "brand": "string",
  • "model": "string",
  • "licensePlate": "string",
  • "capacity": 0,
  • "isActive": true,
  • "leaseCompany": "string",
  • "leaseAmount": 0,
  • "kmPerYear": 0,
  • "apkDate": {
    },
  • "serviceDate": {
    },
  • "serviceKm": 0,
  • "fuelType": "string",
  • "modelType": "string",
  • "remark": "string",
  • "contractNumber": "string",
  • "contractType": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Transport car with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "brand": "string",
  • "model": "string",
  • "licensePlate": "string",
  • "capacity": 0,
  • "isActive": true,
  • "leaseCompany": "string",
  • "leaseAmount": 0,
  • "kmPerYear": 0,
  • "apkDate": {
    },
  • "serviceDate": {
    },
  • "serviceKm": 0,
  • "fuelType": "string",
  • "modelType": "string",
  • "remark": "string",
  • "contractNumber": "string",
  • "contractType": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Patches a Transport car with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "brand": "string",
  • "model": "string",
  • "licensePlate": "string",
  • "capacity": 0,
  • "isActive": true,
  • "leaseCompany": "string",
  • "leaseAmount": 0,
  • "kmPerYear": 0,
  • "apkDate": {
    },
  • "serviceDate": {
    },
  • "serviceKm": 0,
  • "fuelType": "string",
  • "modelType": "string",
  • "remark": "string",
  • "contractNumber": "string",
  • "contractType": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Transport car with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Transport car to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

TransportCarOrganisation

Functional description

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.

Checklist

To make this endpoint TransportCarOrganisation usable, check the following things:

Gets Transport Car Organisations matching given request parameters.

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 }
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Transport Car Organisation.

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.

Authorizations:
Bearer
Request Body schema:

A Transport Car Organisation to create and persist.

organisationId
required
string [ 1 .. 100 ] characters
transportCarId
required
string [ 1 .. 100 ] characters
required
object (DateObject)

Responses

Request samples

Content type
{
  • "organisationId": "string",
  • "transportCarId": "string",
  • "startDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

CustomerStructure

Functional description

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.

Checklist

To make this endpoint CustomerStructure usable, check the following things:

CustomerStructureType

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

Checklist CustomerStructureType

To make this endpoint CustomerStructureType usable, check the following things:

Gets a paged list of customer structures.

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
email 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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a CustomerStructure.

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
email 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.

Authorizations:
Bearer
Request Body schema:

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
email
string or null
website
string or null
isActive
boolean or null
externalCostCenter
string or null
externalCustomerStructureId
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "customerId": "string",
  • "parentId": "string",
  • "organisationStructureId": "string",
  • "customerStructureTypeId": "string",
  • "name": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "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"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a CustomerStructure.

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
email 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.

Authorizations:
Bearer
Request Body schema:

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
email
string or null
website
string or null
isActive
boolean or null
externalCostCenter
string or null
externalCustomerStructureId
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "parentId": "string",
  • "organisationStructureId": "string",
  • "customerStructureTypeId": "string",
  • "name": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "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"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a CustomerStructure; must include `id`.

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
email 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
Authorizations:
Bearer
Request Body schema: application/json
required
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
email
string or null
website
string or null
isActive
boolean or null
externalCostCenter
string or null
externalCustomerStructureId
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "parentId": "string",
  • "organisationStructureId": "string",
  • "customerStructureTypeId": "string",
  • "name": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "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"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a CustomerStructure by ExternalRestId.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the CustomerStructure to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of CustomerStructures.

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
email 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
Authorizations:
Bearer
Request Body schema:

The list of CustomerStructures to create or update.

Array
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
email
string or null
website
string or null
isActive
boolean or null
externalCostCenter
string or null
externalCustomerStructureId
string or null

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

TransportBike

Functional description

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.

Checklist

To make this endpoint TransportBike usable, check the following things:

Gets Transport Bikes matching given request parameters.

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 } } ],
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Transport Bike.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "model": "string",
  • "isActive": true,
  • "remark": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Transport Bike with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "model": "string",
  • "isActive": true,
  • "remark": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Transport Bike with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "model": "string",
  • "isActive": true,
  • "remark": "string",
  • "contractStartDate": {
    },
  • "contractEndDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Transport Bike with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Transport Bike to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

TransportBikeOrganisation

Functional description

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.

Checklist

To make this endpoint TransportBikeOrganisation usable, check the following things:

Gets Transport Bike Organisations matching given request parameters.

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 }
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Transport Bike Organisation.

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.

Authorizations:
Bearer
Request Body schema:

A Transport Bike Organisation to create and persist.

organisationId
required
string [ 1 .. 100 ] characters
transportBikeId
required
string [ 1 .. 100 ] characters
required
object (DateObject)

Responses

Request samples

Content type
{
  • "organisationId": "string",
  • "transportBikeId": "string",
  • "startDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

EmployeeCustomField

Functional description

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.

Checklist

To make this endpoint EmployeeCustomField usable, check the following things:

Gets a paged list of employee custom fields.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a new employee custom field.

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.

Authorizations:
Bearer
Request Body schema:

An EmployeeCustomField to create and persist.

id
string or null
personId
string or null
customFieldId
string or null
value
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "customFieldId": "string",
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates an existing employee custom field.

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.

Authorizations:
Bearer
Request Body schema:

An EmployeeCustomField to synchronize the current matching EmployeeCustomField with.

id
string or null
value
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates an existing employee custom field.

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
Authorizations:
Bearer
Request Body schema: application/json
required
id
string or null
value
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "value": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes an employee custom field by composite id (personId_customFieldId).

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
Authorizations:
Bearer
path Parameters
id
required
string

The composite ID value (personId_customFieldId) of the employee custom field to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Inserts or updates multiple employee custom fields in bulk.

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.

Authorizations:
Bearer
Request Body schema:

A list of employee custom fields to insert or update.

Array
id
string or null
personId
string or null
customFieldId
string or null
value
string or null

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

ScheduleEmployeeAbsencePresence

Functional description

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.

Checklist

To make this endpoint ScheduleEmployeeAbsencePresence usable, check the following things:

Gets ScheduleEmployeeAbsencePresence records matching given request parameters.

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 }
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a ScheduleEmployeeAbsencePresence record.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "contractId": "string",
  • "absencePresenceId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a ScheduleEmployeeAbsencePresence record with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "contractId": "string",
  • "absencePresenceId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a ScheduleEmployeeAbsencePresence record; body must include `id`.

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
Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "personId": "string",
  • "contractId": "string",
  • "absencePresenceId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "plannerRemarkPublic": "string",
  • "plannerRemarkPrivate": "string",
  • "employeeRemark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a ScheduleEmployeeAbsencePresence record with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the ScheduleEmployeeAbsencePresence record to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates multiple ScheduleEmployeeAbsencePresence records in bulk.

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.

Authorizations:
Bearer
Request Body schema:

The list of ScheduleEmployeeAbsencePresence records to create.

Array
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

House

Functional description

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.

Checklist

To make this endpoint House usable, check the following things:

Gets Houses matching given request parameters.

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) []
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a House.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "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": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a House with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "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": {
    },
  • "groupId": "string",
  • "keyLocation": "string",
  • "costPerBed": 0.1,
  • "nightRegistry": true,
  • "rentalInformation": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a House with an ID matching the value given in the body.

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
Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "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": {
    },
  • "groupId": "string",
  • "keyLocation": "string",
  • "costPerBed": 0.1,
  • "nightRegistry": true,
  • "rentalInformation": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a House with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the House to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

HouseGroup

Functional description

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.

Checklist

To make this endpoint HouseGroup usable, check the following things:

  • Make sure REST user has access to the specific endpoint. See Authorisation.

Gets a paged list of house groups.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a HouseGroup.

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.

Authorizations:
Bearer
Request Body schema:

A HouseGroup to create and persist.

id
string or null
name
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a HouseGroup.

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.

Authorizations:
Bearer
Request Body schema:

A HouseGroup to synchronize the current matching HouseGroup with.

id
string or null
name
string or null

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a HouseGroup; must include `id`.

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)
Authorizations:
Bearer
Request Body schema: application/json
required
id
string or null
name
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a HouseGroup by ExternalRestId.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the HouseGroup to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of HouseGroups.

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
Authorizations:
Bearer
Request Body schema:

The list of HouseGroups to create or update.

Array
id
string or null
name
string or null

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

PersonHousing

Functional description

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

Checklist

To make this endpoint PersonHousing usable, check the following things:

Gets PersonHousings matching given request parameters.

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 }
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a PersonHousing.

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.

Authorizations:
Bearer
Request Body schema:

A PersonHousing to create and persist.

personId
required
string [ 1 .. 50 ] characters
required
object (DateObject)
required
object (DateObject)

Responses

Request samples

Content type
{
  • "personId": "string",
  • "startDate": {
    },
  • "endDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a PersonHousing with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

A PersonHousing to synchronize the current matching PersonHousing with.

id
required
string [ 1 .. 100 ] characters
required
object (DateObject)
required
object (DateObject)

Responses

Request samples

Content type
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Person Housing with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 100 ] characters
required
object (DateObject)
required
object (DateObject)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a PersonHousing with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the PersonHousing to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Room

Functional description

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.

Checklist

To make this endpoint Room usable, check the following things:

Gets Rooms matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Room.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "houseId": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "name": "string",
  • "description": "string",
  • "remark": "string",
  • "costPerBed": 0.1,
  • "pksValue": 0.1,
  • "beds": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Room with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "endDate": {
    },
  • "remark": "string",
  • "costPerBed": 0.1,
  • "pksValue": 0.1,
  • "beds": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Room with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "endDate": {
    },
  • "remark": "string",
  • "costPerBed": 0.1,
  • "pksValue": 0.1,
  • "beds": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Room with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Room to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

EmployeeBed

Functional description

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

Checklist

To make this endpoint EmployeeBed usable, check the following things:

Gets EmployeeBeds matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a EmployeeBed.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "bedId": "string",
  • "personHousingId": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remarks": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a EmployeeBed with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remarks": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates an Employee Bed with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 200 ] characters
required
object (DateObject)
required
object (DateObject)
remarks
string or null

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remarks": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a EmployeeBed with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the EmployeeBed to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

BlockBed

Functional description

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.

Checklist

To make this endpoint BlockBed usable, check the following things:

Gets BlockBeds matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a BlockBed.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "bedId": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remark": "string",
  • "reasonId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a BlockBed with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remark": "string",
  • "reasonId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Patches a BlockBed with an ID matching the value given in the body.

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
Authorizations:
Bearer
Request Body schema: application/json
required
id
required
string [ 1 .. 200 ] characters
required
object (DateObject)
required
object (DateObject)
remark
string or null <= 600 characters
reasonId
required
string [ 1 .. 200 ] characters

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "remark": "string",
  • "reasonId": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a BlockBed with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the BlockBed to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a batch of BlockBeds in a single call.

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.

Authorizations:
Bearer
Request Body schema:

The collection of BlockBeds to create or update.

Array
bedId
required
string [ 1 .. 200 ] characters
required
object (DateObject)
required
object (DateObject)
remark
string or null <= 600 characters
reasonId
required
string [ 1 .. 200 ] characters

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

RealisedHours

Functional description

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.

Checklist

To make this endpoint RealisedHours usable, check the following things:

  • Make sure REST user has access to the specific endpoint. See Authorisation.
  • Make sure the Employees have ExternalRestIds. See Checklist: Employee.
  • Make sure the contracts have ExternalRestIds. See Checklist: Contract.
  • Make sure the ShiftQualificationDemands have ExternalRestIds. See Checklist: ShiftQualificationDemand.
  • Make sure the administrative components have ExternalRestIds. They are maintained in Infinity; there is no endpoint for them.

Gets RealisedHours matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a RealisedHours record.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "personId": "string",
  • "contractId": "string",
  • "breaks": [
    ],
  • "administrativeComponents": [
    ],
  • "shiftQualificationDemandId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a RealisedHours record with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "breaks": [
    ],
  • "administrativeComponents": [
    ],
  • "shiftQualificationDemandId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a RealisedHours record with an ID found in the patch data.

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.
Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "breaks": [
    ],
  • "administrativeComponents": [
    ],
  • "shiftQualificationDemandId": "string",
  • "startTime": {
    },
  • "endTime": {
    },
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a RealisedHours record with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the RealisedHours record to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of RealisedHours records.

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.

Authorizations:
Bearer
Request Body schema:

A list of RealisedHours records to create or update.

Array
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

EmployeeHousing

Functional description

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.

Checklist

To make this endpoint EmployeeHousing usable, check the following things:

Gets EmployeeHousing records matching the given request parameters.

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
email 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}
Authorizations:
Bearer
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Shift

Functional description

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.

Checklist

To make this endpoint Shift usable, check the following things:

Gets Shifts matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a Shift.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "shiftLocation": {
    },
  • "shiftPosition": {
    },
  • "customerStructureId": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "color": 0,
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a Shift.

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.

Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "shiftLocation": {
    },
  • "shiftPosition": {
    },
  • "customerStructureId": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "color": 0,
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates a Shift.

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
Authorizations:
Bearer
Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "shiftLocation": {
    },
  • "shiftPosition": {
    },
  • "customerStructureId": "string",
  • "name": "string",
  • "shortCode": "string",
  • "description": "string",
  • "startDate": {
    },
  • "endDate": {
    },
  • "color": 0,
  • "remark": "string"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a Shift with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the Shift to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of Shifts.

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.

Authorizations:
Bearer
Request Body schema:

A list of Shifts to create or update.

Array
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

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

ContractEmploymentType

Functional description

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.

Checklist

To make this endpoint ContractEmploymentType usable, check the following things:

Gets Employment Types matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

ContractEndReason

Functional description

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.

Checklist

To make this endpoint ContractEndReason usable, check the following things:

Gets Contract end reasons matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

ContractPhase

Functional description

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.

Checklist

To make this endpoint ContractPhase usable, check the following things:

Gets Contract phases matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

ContractType

Functional description

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.

Checklist

To make this endpoint ContractType usable, check the following things:

Gets Contract types matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Country

Functional description

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.

Checklist

To make this endpoint Country usable, check the following things:

Gets Countries matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

CustomerStatus

Functional description

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.

Checklist

To make this endpoint CustomerStatus usable, check the following things:

  • Make sure REST user has access to the specific endpoint. See Authorisation.

Gets Customer status matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

AvailabilityBlock

Functional description

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

Checklist

To make this endpoint AvailabilityBlock usable, check the following things:

Gets EmployeeAvailabilityBlocks matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

UserEmployee

Functional description

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.

Checklist

To make this endpoint UserEmployee usable, check the following things:

Gets User employees matching given request parameters.

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
email Text (MAX) Required Emailaddress of User
accountType Integer Required 0 Default, 1 Azure, 2 Auth0, 3 Okta
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Updates a User employee with an ID matching the value given in the body.

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
Authorizations:
Bearer
Request Body schema:

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

Responses

Request samples

Content type
{
  • "id": "string",
  • "userName": "string",
  • "language": "string",
  • "userRoleId": "string"
}

Response samples

Content type
No sample

UserRole

Functional description

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.

Checklist

To make this endpoint Userrole usable, check the following things:

Gets User roles matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

EmployeeAvailability

Functional description

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.

Checklist

To make this endpoint EmployeeAvailability usable, check the following things:

Gets Employee availabilities matching given request parameters.

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.

Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

EmployeeType

Functional description

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).

Checklist

To make this endpoint EmployeeType usable, check the following things:

  • Make sure REST user has access to the specific endpoint. See Authorisation.

Gets a paged list of employee types.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates an EmployeeType.

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.

Authorizations:
Bearer
Request Body schema:

An EmployeeType to create and persist.

id
string or null
name
string or null
color
integer or null <int64>

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "color": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates an EmployeeType.

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.

Authorizations:
Bearer
Request Body schema:

An EmployeeType to synchronize the current matching EmployeeType with.

id
string or null
name
string or null
color
integer or null <int64>

Responses

Request samples

Content type
{
  • "id": "string",
  • "name": "string",
  • "color": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Partially updates an EmployeeType; must include `id`.

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
Authorizations:
Bearer
Request Body schema: application/json
required
id
string or null
name
string or null
color
integer or null <int64>

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "color": 0
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes an EmployeeType by ExternalRestId.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the EmployeeType to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of EmployeeTypes.

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
Authorizations:
Bearer
Request Body schema:

The list of EmployeeTypes to create or update.

Array
id
string or null
name
string or null
color
integer or null <int64>

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

Industry

Functional description

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.

Checklist

To make this endpoint Industry usable, check the following things:

Gets Industries matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
[
  • {
    }
]

OrganisationStructure

Functional description

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

Checklist

To make this endpoint OrganisationStructure usable, check the following things:

Gets Organisation structure matching given request parameters.

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)
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

Qualification

Functional description

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.

Checklist

To make this endpoint Qualification usable, check the following things:

Gets Qualifications matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

BlockBedReason

Functional description

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.

Checklist

To make this endpoint BlockBedReason usable, check the following things:

Gets Blocked bed reasons matching given request parameters.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
No sample

AbsencePresence

Functional description

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.

Checklist

To make this endpoint AbsencePresence usable, check the following things:

Gets a paged list of absence and presence types for the caller's organisation.

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
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

CustomFieldsEmployee

Functional description

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.

Checklist

To make this endpoint CustomFieldsEmployee usable, check the following things:

Gets CustomFieldsEmployees matching given request parameters.

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 []
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a CustomFieldsEmployee.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "organisationStructureId": "string",
  • "name": "string",
  • "type": "string",
  • "isMandatory": true,
  • "isGroupStart": true,
  • "groupName": "string",
  • "sequence": 0,
  • "lookupValues": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a CustomFieldsEmployee with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

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)

Responses

Request samples

Content type
{
  • "id": "string",
  • "organisationStructureId": "string",
  • "name": "string",
  • "type": "string",
  • "isMandatory": true,
  • "isGroupStart": true,
  • "groupName": "string",
  • "sequence": 0,
  • "lookupValues": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Patches a CustomFieldsEmployee with an ID matching the value given in the body.

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
Authorizations:
Bearer
Request Body schema: application/json
required
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)

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "organisationStructureId": "string",
  • "name": "string",
  • "type": "string",
  • "isMandatory": true,
  • "isGroupStart": true,
  • "groupName": "string",
  • "sequence": 0,
  • "lookupValues": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a CustomFieldsEmployee with a given ID.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the CustomFieldsEmployee to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a batch of CustomFieldsEmployees in a single call.

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.

Authorizations:
Bearer
Request Body schema:

The collection of CustomFieldsEmployees to create or update.

Array
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)

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}

HouseLandlord

Functional description

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.

Checklist

To make this endpoint HouseLandlord usable, check the following things:

Gets a paged list of house-landlord assignments.

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 }
Authorizations:
Bearer
query Parameters
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'

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "currentPage": 0,
  • "totalPages": 0,
  • "pageSize": 0,
  • "totalCount": 0,
  • "hasPrevious": true,
  • "hasNext": true
}

Creates a HouseLandlord.

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.

Authorizations:
Bearer
Request Body schema:

A HouseLandlord to create and persist.

id
string or null
houseId
string or null
personId
string or null
object (DateObject)

Responses

Request samples

Content type
{
  • "id": "string",
  • "houseId": "string",
  • "personId": "string",
  • "startDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Updates a HouseLandlord with an ID matching the value given in the body.

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.

Authorizations:
Bearer
Request Body schema:

A HouseLandlord to synchronize the current matching HouseLandlord with.

id
string or null
houseId
string or null
personId
string or null
object (DateObject)

Responses

Request samples

Content type
{
  • "id": "string",
  • "houseId": "string",
  • "personId": "string",
  • "startDate": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Deletes a HouseLandlord by ExternalRestId.

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
Authorizations:
Bearer
path Parameters
id
required
string

The ID value of the HouseLandlord to delete.

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "entity": {
    }
}

Creates or updates a list of HouseLandlords.

This endpoint creates or updates multiple HouseLandlord records in a single request (POST /api/HouseLandlord/InsertUpdateBulk). For each item:

  • with an id: that HouseLandlord is updated (the item fails when the id does not exist);
  • without an id: an existing HouseLandlord with the same houseId + startDate is updated, otherwise a new one is created.

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 }
Authorizations:
Bearer
Request Body schema:

The list of HouseLandlords to create or update.

Array
id
string or null
houseId
string or null
personId
string or null
object (DateObject)

Responses

Request samples

Content type
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "message": "string",
  • "insertedItems": [
    ],
  • "updatedItems": [
    ],
  • "failedItems": [
    ]
}