---
title: "Create a placement for a worker, to work at a client company"
method: POST
path: "/public/placement/v1/create-placement"
tags: ["Placement"]
---

# Create a placement for a worker, to work at a client company

`POST /public/placement/v1/create-placement`

Create a placement for a worker. This includes the creation of an employment contract (if no active contract
exists). The contract is auto-signed, so a signed framework agreement (see /framework-agreement) must be present
The created contract has a duration of four weeks. This can be shortened: see /change-end-date. if the client
company invokes the agency clause (Dutch: uitzendbeding).

## Request body

- PlacementCreationRequestV1 — Under construction. Lots of additional properties will be added in the future.
  - `workerId` string, uuid, required — The unique id of the worker, as returned from the /create-worker endpoint.
  - `companyId` string, uuid, required — The unique id of the client company.
  - `departmentId` string, uuid — Optional. The unique id of the client company's department at which the worker will work. If not provided, the first department of the client company is used.
  - `locationId` string, uuid, required — The unique id of the client company's location at which the worker will work.
  - `contactId` string, uuid, required — The unique id of the client company's contact person (who will be mentioned in the contract).
  - `startDate` string, date, required — The start date of the placement's contract, in ISO 8601 calendar date (YYYY-MM-DD).
  - `endDate` string, date, required — The end date of the placement's contract, in ISO 8601 calendar date (YYYY-MM-DD).
  - `shiftStartDateTime` string, date-time, required — The timestamp when the shift connected to the placement starts. Format: ISO 8601, must be in UTC. example: '2024-09-25T15:30:00Z'
  - `shiftEndDateTime` string, date-time, required — The timestamp when the shift connected to the placement ends. Format: ISO 8601, must be in UTC. example: '2024-09-25T18:30:00Z'
  - `collectiveLabourAgreementNumber` integer, required — Number for this placement's collective labour agreement, as published by Centraal Bureau voor de Statistiek. Must be one of the collective labour agreements that are already registered for the given companyId
  - `functionId` string, uuid, required — The function applicable to the worker's activities for this placement. The id must be a value returned from the collective-labour-agreement API. Must be compatible with the collectiveLabourAgreementNumber.
  - `functionType` string — The function type applicable to the worker's activities for this placement. Must be a value returned from the collective-labour-agreement API. Must be compatible with the functionId.
  - `functionLevel` string, required — The function level applicable to the worker's activities for this placement. Must be a value returned from the collective-labour-agreement API. Must be compatible with the functionId.
  - `education` string — The education level applicable to the worker's activities for this placement. Must be a value returned from the collective-labour-agreement API. Must be compatible with the collectiveLabourAgreementNumber, functionType, functionLevel, and worker's age.
  - `wageStep` string — The wage step applicable to the worker for this placement. Must be a value returned from the collective-labour-agreement API. Must be compatible with the collectiveLabourAgreementNumber, functionType, functionLevel, worker's age, education, and placement start date.
  - `baseHourlyWage` number, required — The hourly wage the worker will earn for this placement, excluding surcharges, holiday allowance, etc. Must be compatible with the collective labour agreement-related properties, such as functionLevel, education, and wageStep.
  - `hoursPerWeek` number, required — The number of hours the worker will work per week for this placement. The maximum comes from https://www.rijksoverheid.nl/onderwerpen/werktijden/vraag-en-antwoord/wettelijke-regels-werktijden-en-rusttijden
  - `billingProfile` BillingProfileV1 — The billing profile applicable to the worker for this placement. All placements with the same billingProfile will be on a separate invoice. When empty, all registrations of all placements will end up on the same invoice.
    - `billingProfileId` string, uuid, required — Uuid to group all registrations on the same invoice
    - `description` string, required — Description of the billing profile, will be visible on the invoice

## Response `200`

Successfully created the placement

- PlacementV1
  - `workerDocumentId` string, uuid, required — The unique id of the auto-signed placement contract document.
  - `placementId` string, uuid, required — The unique id of the placement.
  - `startDate` string, date, required — The start date of the placement's contract.
  - `endDate` string, date, required — The end date of the placement's contract. The contract runs up to and including this date.

## Other responses

- `400` — The request could not be processed. This could be due to a number of reasons: * The request does not have all required data. * Data in the request is invalid. * Data in the request is inconsistent. * The operation is not allowed given the current state of the data.
- `401` — The request did not contain credentials identifying the caller, or the provided credentials were invalid.
- `403` — The data that the request referred to is inaccessible to the caller.

---

[API](https://skmtc.net/maqqie/apis/maqqie-public-api.md) · [All operations](https://skmtc.net/maqqie/apis/maqqie-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/maqqie/maqqie-public-api/revisions/41e5cd97d4d7/schema)
