---
title: "Create a new phase B/C employment contract for a worker"
method: POST
path: "/public/employment-contract/v1/create-employment-contract"
tags: ["EmploymentContract"]
---

# Create a new phase B/C employment contract for a worker

`POST /public/employment-contract/v1/create-employment-contract`

## Request

- Base URL: `https://api.maqqie.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.maqqie.app/public/employment-contract/v1/create-employment-contract`
- Auth: OAuth 2
  - Client credentials
  - Token URL: `https://maqqie.app/auth/realms/maqqie/protocol/openid-connect/token`

Create an employment contract for a worker. The contract needs to be signed by the worker before it becomes
active.

## Request body

- EmploymentContractCreationRequestV1: 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.
  - `type` 'PHASE_B' | 'PHASE_C', required: The type of the employment contract
  - `hoursPerWeek` number, required: The number of hours the worker will work per week for this employment contract. The maximum comes from https://www.rijksoverheid.nl/onderwerpen/werktijden/vraag-en-antwoord/wettelijke-regels-werktijden-en-rusttijden
  - `isPayrollTaxReduction` boolean, required: Whether the payroll tax reduction applies to this employment contract.
  - `duration` EmploymentContractDurationV1, required
    - `type` 'WEEKS_STARTING_AFTER_FRAMEWORK_AGREEMENT' | 'START_END_DATE' | 'START_DATE_INDEFINITE_END_DATE', required: The type of how the duration of the employment contract is specified
    - `durationInWeeks` integer: The duration of the employment contract in weeks. Is required when type is WEEKS_STARTING_AFTER_FRAMEWORK_AGREEMENT.
    - `startDate` string, date: The start date of the employment contract. Is required when type is START_END_DATE or START_DATE_INDEFINITE_END_DATE.
    - `endDate` string, date: The end date of the employment contract. Is required when duration type is START_END_DATE.

## Response `200`

Successfully created the employment contract

- EmploymentContractCreationResponseV1
  - `employmentContractId` string, uuid, required: The unique id of the created employment contract.
  - `signingUrl` string, uri, required: A URL to sign the employment contract
  - `signingUrlExpirationTimestamp` string, date-time, required: The timestamp (UTC) at which the signing URL will expire.

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

## Changes

- **2026-09-29** `f9510f3f4b22`: 8 breaking, 5 info
  - added the new required request property `duration`
  - added the new required request property `hoursPerWeek`
  - added the new required request property `isPayrollTaxReduction`
  - added the new required request property `type`
  - …9 more
- **2026-09-29** `3352b56bb8fe`: 7 breaking, 6 warning
  - the request's body type changed from `object` to no type
  - the response's body type changed from `object` to no type for status `200`
  - the response's body type changed from `object` to no type for status `400`
  - removed the required property `employmentContractId` from the response with the `200` status
  - …9 more
- **2026-09-16** `ccf9834e5006`: 8 breaking, 5 info
  - added the new required request property `duration`
  - added the new required request property `hoursPerWeek`
  - added the new required request property `isPayrollTaxReduction`
  - added the new required request property `type`
  - …9 more
- **2026-09-15** `8085d4c1ab80`: 7 breaking, 6 warning
  - the request's body type changed from `object` to no type
  - the response's body type changed from `object` to no type for status `200`
  - the response's body type changed from `object` to no type for status `400`
  - removed the required property `employmentContractId` from the response with the `200` status
  - …9 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/maqqie/apis/maqqie-public-api/changes/public/employment-contract/v1/create-employment-contract/post.md)

---

[API](https://skmtc.dev/maqqie/apis/maqqie-public-api.md) - [All operations](https://skmtc.dev/maqqie/apis/maqqie-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/maqqie/apis/maqqie-public-api/revisions/13ed331da2b2?raw)
