> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Create a new contract

POST https://api.letsdeel.com/rest/contracts
Content-Type: application/json

Creates a new contractor contract and returns it with its assigned `id`. After creation, invite the contractor to sign via `POST /contracts/{contract_id}/invitations`.

**Token scopes**: `contracts:write`

Reference: https://developer.deel.com/api/endpoints/contracts/create-ic-contract

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Body (application/json)

This endpoint expects an object.

- `data` (ContractsPostRequestBodyContentApplicationJsonSchemaData, required)

## Response

### 201

Successful operation.

- `data` (ContractsPostResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

Bad Request - Validation error or invalid parameters

- `errors` (list of ContractsPostResponsesContentApplicationJsonSchemaErrorsItems, required) — Error messages
- `request` (ContractsPostResponsesContentApplicationJsonSchemaRequest, optional) — Error request details

### 401 Unauthorized Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 403 Forbidden Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 404 Not Found Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 500 Internal Server Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

## Types

### ContractsPostRequestBodyContentApplicationJsonSchemaData

### ContractsPostResponsesContentApplicationJsonSchemaData

- `id` (string, required) — The public id of the object
- `type` (enum, required) — Type of a contract
  - Allowed values: `ongoing_time_based`, `milestones`, `time_based`, `pay_as_you_go_time_based`, `commission`, `payg_milestones`, `payg_tasks`, `eor`, `unknown`, `employee`, `global_payroll`, `shield_msa`, `hris_direct_employee`
- `title` (string, required) — Title of a contract
- `client` (ContractsPostResponsesContentApplicationJsonSchemaDataClient, required, nullable) — Client details associated with the contract.
- `status` (enum, required) — Status of a contract in Deel workflow
  - Allowed values: `new`, `under_review`, `waiting_for_employee_contract`, `waiting_for_client_sign`, `processing_payment`, `waiting_for_contractor_sign`, `waiting_for_eor_sign`, `waiting_for_employee_sign`, `awaiting_deposit_payment`, `in_progress`, `completed`, `cancelled`, `user_cancelled`, `rejected`, `waiting_for_client_payment`
- `worker` (ContractsPostResponsesContentApplicationJsonSchemaDataWorker, required, nullable) — Worker details associated with the contract.
- `job_title` (string, required) — Job title associated with the contract.
- `created_at` (string, required, nullable) — Long date-time format following ISO-8601
- `signatures` (ContractsPostResponsesContentApplicationJsonSchemaDataSignatures, required) — List of signatures recorded for this contract.
- `start_date` (string, required, nullable) — Long date-time format following ISO-8601
- `invitations` (ContractsPostResponsesContentApplicationJsonSchemaDataInvitations, required) — List of signature invitations sent for this contract.
- `is_archived` (boolean, required) — Flag to indicate if the contract is archived
- `special_clause` (string, required) — Special clause for the contract
- `termination_date` (ContractsPostResponsesContentApplicationJsonSchemaDataTerminationDate, required) — Contract termination date. When present, it is a date-time string in ISO-8601 format.
- `work_statement_id` (string, required) — The public unique identifier of the work statement
- `employment_details` (ContractsPostResponsesContentApplicationJsonSchemaDataEmploymentDetails, required) — Employment-related details for the contract, when applicable.
- `compensation_details` (ContractsPostResponsesContentApplicationJsonSchemaDataCompensationDetails, required) — Compensation configuration and payment schedule details for the contract.
- `quote` (ContractsPostResponsesContentApplicationJsonSchemaDataQuote, optional) — EOR quote approved by Deel
- `seniority` (ContractsPostResponsesContentApplicationJsonSchemaDataSeniority, optional, nullable) — Seniority describes level of expertise at a job e.g. junior
- `external_id` (string, optional, nullable) — A unique identifier for the object provided by an external system.
- `who_reports` (enum, optional) — Flag to indicate who is supposed to provide regular reports
  - Allowed values: `both`, `client`, `contractor`, ``
- `custom_fields` (list of ContractsPostResponsesContentApplicationJsonSchemaDataCustomFieldsItems, optional) — Custom fields attached to the contract.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `scope_of_work` (string, optional, nullable) — Scope of work for the contract
- `platform_payment_type` (enum, optional) — Whether the contract is paid through Deel (`STANDARD`) or outside Deel (`OFF_PLATFORM`). Applies to IC contracts only.
  - Allowed values: `STANDARD`, `OFF_PLATFORM`

### ContractsPostResponsesContentApplicationJsonSchemaErrorsItems

- `message` (string, required) — Error response

### ContractsPostResponsesContentApplicationJsonSchemaRequest

Error request details

- `method` (string, optional) — Method of the API
- `status` (double, optional) — Status of API response

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

### ContractsPostRequestBodyContentApplicationJsonSchemaData0

Details of contract to create

- `meta` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Meta, required) — Additional custom info about a contract
- `title` (string, required) — The title of the contract.
- `client` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Client, required) — Client details for the contract, including the legal entity and team.
- `type` (enum, required) — Type of contract
  - Allowed values: `pay_as_you_go_time_based`
- `start_date` (string, required) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `compensation_details` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0CompensationDetails, required) — Compensation and invoicing configuration for the contract.
- `worker` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Worker, optional, nullable) — Worker properties
- `job_title` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0JobTitle, optional) — Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.
- `seniority` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Seniority, optional, nullable) — Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.
- `state_code` (string, optional, nullable) — The state or province code. Use country lookup endpoint to retrieve state codes.
- `citizenship` (string, optional, nullable) — ISO 3166-1 alpha-2 country code of the worker's citizenship.
- `external_id` (string, optional, nullable) — External Id.
- `who_reports` (enum, optional) — Flag to indicate who is supposed to provide regular reports
  - Allowed values: `both`, `client`, `contractor`
- `country_code` (string, optional) — Country code.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `scope_of_work` (string, optional, nullable) — Describe the work to be performed.
- `special_clause` (string, optional, nullable) — Enter any special clause you may have.
- `scope_of_work_id` (string, optional, nullable) — Existing scope of work public id
- `termination_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `contract_template_id` (string, optional, nullable) — Contract Template Id.
- `platform_payment_type` (enum, optional) — Whether the contract is paid through Deel (`STANDARD`) or outside Deel (`OFF_PLATFORM`). Applies to IC contracts only.
  - Allowed values: `STANDARD`, `OFF_PLATFORM`

### ContractsPostRequestBodyContentApplicationJsonSchemaData1

Details of contract to create

- `meta` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Meta, required) — Additional custom info about a contract
- `title` (string, required) — The title of the contract.
- `client` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Client, required) — Client details for the contract, including the legal entity and team.
- `type` (enum, required) — Type of contract
  - Allowed values: `payg_tasks`
- `start_date` (string, required) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `compensation_details` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1CompensationDetails, required) — Compensation and invoicing configuration for the contract.
- `worker` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Worker, optional, nullable) — Worker properties
- `job_title` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1JobTitle, optional) — Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.
- `seniority` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Seniority, optional, nullable) — Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.
- `state_code` (string, optional, nullable) — The state or province code. Use country lookup endpoint to retrieve state codes.
- `citizenship` (string, optional, nullable) — ISO 3166-1 alpha-2 country code of the worker's citizenship.
- `external_id` (string, optional, nullable) — External Id.
- `who_reports` (enum, optional) — Flag to indicate who is supposed to provide regular reports
  - Allowed values: `both`, `client`, `contractor`
- `country_code` (string, optional) — Country code.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `scope_of_work` (string, optional, nullable) — Describe the work to be performed.
- `special_clause` (string, optional, nullable) — Enter any special clause you may have.
- `scope_of_work_id` (string, optional, nullable) — Existing scope of work public id
- `termination_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `contract_template_id` (string, optional, nullable) — Contract Template Id.

### ContractsPostRequestBodyContentApplicationJsonSchemaData2

Details of contract to create

- `meta` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Meta, required) — Additional custom info about a contract
- `title` (string, required) — The title of the contract.
- `client` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Client, required) — Client details for the contract, including the legal entity and team.
- `type` (enum, required) — Type of contract
  - Allowed values: `payg_milestones`
- `compensation_details` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2CompensationDetails, required) — Compensation and invoicing configuration for the contract.
- `worker` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Worker, optional, nullable) — Worker properties
- `job_title` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2JobTitle, optional) — Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.
- `seniority` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Seniority, optional, nullable) — Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.
- `state_code` (string, optional, nullable) — The state or province code. Use country lookup endpoint to retrieve state codes.
- `citizenship` (string, optional, nullable) — ISO 3166-1 alpha-2 country code of the worker's citizenship.
- `external_id` (string, optional, nullable) — External Id.
- `who_reports` (enum, optional) — Flag to indicate who is supposed to provide regular reports
  - Allowed values: `both`, `client`, `contractor`
- `country_code` (string, optional) — Country code.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `scope_of_work` (string, optional, nullable) — Describe the work to be performed.
- `special_clause` (string, optional, nullable) — Enter any special clause you may have.
- `scope_of_work_id` (string, optional, nullable) — Existing scope of work public id
- `termination_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `contract_template_id` (string, optional, nullable) — Contract Template Id.
- `start_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.

### ContractsPostRequestBodyContentApplicationJsonSchemaData3

Details of contract to create

- `meta` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Meta, required) — Additional custom info about a contract
- `title` (string, required) — The title of the contract.
- `client` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Client, required) — Client details for the contract, including the legal entity and team.
- `type` (enum, required) — Type of contract
  - Allowed values: `ongoing_time_based`
- `start_date` (string, required) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `compensation_details` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3CompensationDetails, required) — Compensation and invoicing configuration for the contract.
- `worker` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Worker, optional, nullable) — Worker properties
- `job_title` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3JobTitle, optional) — Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.
- `seniority` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Seniority, optional, nullable) — Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.
- `state_code` (string, optional, nullable) — The state or province code. Use country lookup endpoint to retrieve state codes.
- `citizenship` (string, optional, nullable) — ISO 3166-1 alpha-2 country code of the worker's citizenship.
- `external_id` (string, optional, nullable) — External Id.
- `who_reports` (enum, optional) — Flag to indicate who is supposed to provide regular reports
  - Allowed values: `both`, `client`, `contractor`
- `country_code` (string, optional) — Country code.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `scope_of_work` (string, optional, nullable) — Describe the work to be performed.
- `special_clause` (string, optional, nullable) — Enter any special clause you may have.
- `scope_of_work_id` (string, optional, nullable) — Existing scope of work public id
- `termination_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `contract_template_id` (string, optional, nullable) — Contract Template Id.

### ContractsPostResponsesContentApplicationJsonSchemaDataClient

Client details associated with the contract.

- `team` (ContractsPostResponsesContentApplicationJsonSchemaDataClientTeam, required) — Team information for the client organization.
- `legal_entity` (ContractsPostResponsesContentApplicationJsonSchemaDataClientLegalEntity, required, nullable) — Legal entity information for the client organization.
- `id` (string, optional) — Unique identifier of this resource.
- `email` (string, optional, nullable) — User's email address.
- `full_name` (string, optional) — User's full name.

### ContractsPostResponsesContentApplicationJsonSchemaDataWorker

Worker details associated with the contract.

- `id` (string, optional, nullable) — A unique identifier for this resource.
- `email` (string, optional, nullable) — User's email address.
- `image` (string, optional) — URL to worker's image
- `country` (string, optional, nullable) — Worker's country (location not nationality)
- `full_name` (string, optional) — Worker's full name.
- `last_name` (string, optional, nullable) — Worker's last name
- `first_name` (string, optional, nullable) — Worker's first name
- `nationality` (string, optional, nullable) — Worker's nationality.
- `legal_entity` (ContractsPostResponsesContentApplicationJsonSchemaDataWorkerLegalEntity, optional) — Worker legal entity information, if applicable.
- `date_of_birth` (string, optional, nullable) — Long date-time format following ISO-8601
- `expected_email` (string, optional, nullable) — Worker's email address.
- `alternate_email` (list of ContractsPostResponsesContentApplicationJsonSchemaDataWorkerAlternateEmailItems, optional) — List of alternate email addresses.

### ContractsPostResponsesContentApplicationJsonSchemaDataSignatures

List of signatures recorded for this contract.

- `signed_at` (string, required, nullable) — Long date-time format following ISO-8601
- `client_signature` (string, required) — normally name of client is used as signature
- `client_signed_at` (string, required, nullable) — Long date-time format following ISO-8601
- `worker_signature` (string, required) — Signatures of client representative.
- `worker_signed_at` (string, required, nullable) — Long date-time format following ISO-8601

### ContractsPostResponsesContentApplicationJsonSchemaDataInvitations

List of signature invitations sent for this contract.

- `client_email` (string, optional, nullable) — User's email address.
- `worker_email` (string, optional, nullable) — User's email address.

### ContractsPostResponsesContentApplicationJsonSchemaDataTerminationDate

Contract termination date. When present, it is a date-time string in ISO-8601 format.

### ContractsPostResponsesContentApplicationJsonSchemaDataEmploymentDetails

Employment-related details for the contract, when applicable.

- `type` (string, required) — Employment type classification for the contract.
- `days_per_week` (double, required) — Number of days per week
- `hours_per_day` (double, required) — Number of hours per day
- `probation_period` (double, required, nullable) — Number of days for probation period
- `paid_vacation_days` (double, required) — Number of paid vacation days
- `state` (string, optional, nullable) — State code.
- `country` (string, optional) — Country code.

### ContractsPostResponsesContentApplicationJsonSchemaDataCompensationDetails

Compensation configuration and payment schedule details for the contract.

- `scale` (string, required) — Scale of compensation
- `amount` (string, required, nullable) — Amount of compensation
- `frequency` (string, required) — Frequency of compensation
- `currency_code` (string, required) — Currency code.
- `first_payment` (string, required, nullable) — First payment
- `first_payment_date` (string, required, nullable) — Long date-time format following ISO-8601
- `gross_annual_salary` (string, required, nullable) — Gross annual salary
- `gross_signing_bonus` (string, required, nullable) — Gross signing bonus
- `gross_variable_bonus` (string, required, nullable) — Gross variable bonus

### ContractsPostResponsesContentApplicationJsonSchemaDataQuote

EOR quote approved by Deel

- `benefits` (list of ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBenefitsItems, optional) — Array of benefits
- `currency` (string, optional) — Currency code.
- `cba_total` (double, optional) — Total CBA in local currency
- `created_at` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `updated_at` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `salary_total` (double, optional) — Total salary in local currency
- `annual_salary` (double, optional) — Annual Salary in local currency
- `cba_total_usd` (double, optional) — Total CBA in USD
- `breakdown_costs` (ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCosts, optional) — Cost breakdown for the quote, grouped by billing cadence (e.g., monthly).
- `salary_total_usd` (double, optional) — Total salary in USD
- `gross_salary_total` (double, optional) — Total gross salary in local currency
- `mobility_fee_total` (double, optional) — Total mobility fee in local currency
- `monthly_cost_total` (double, optional) — Total monthly cost in local currency
- `platform_fee_total` (double, optional) — Total platform fee in local currency
- `employer_cost_total` (double, optional) — Total employer cost in local currency
- `gross_salary_total_usd` (double, optional) — Total gross salary in USD
- `mobility_fee_total_usd` (double, optional) — Total mobility fee in USD
- `monthly_cost_total_usd` (double, optional) — Total monthly cost in USD
- `platform_fee_total_usd` (double, optional) — Total platform fee in USD
- `employer_cost_total_usd` (double, optional) — Total employer cost in USD
- `severance_accrual_total` (double, optional) — Total severance accrual in local currency
- `recurring_allowance_total` (double, optional) — Total recurring allowance in local currency
- `severance_accrual_total_usd` (double, optional) — Total severance accrual in USD
- `recurring_allowance_total_usd` (double, optional) — Total recurring allowance in USD

### ContractsPostResponsesContentApplicationJsonSchemaDataSeniority

Seniority describes level of expertise at a job e.g. junior

- `id` (double, required) — Unique identifier of this resource.
- `name` (string, required) — Name of seniority level e.g. Mid (Individual Contributor Level 2)
- `level` (double, optional, nullable) — Level of seniority level e.g. 2

### ContractsPostResponsesContentApplicationJsonSchemaDataCustomFieldsItems

Customized attributes on contracts (Employee ID, Project code, etc).

- `name` (string, optional) — Custom field property name.
- `value` (string, optional) — Custom field property value.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Meta

Additional custom info about a contract

- `documents_required` (boolean, required) — Require the contractor to upload necessary compliance documents as per their country’s labor laws.
- `is_main_income` (boolean, optional) — Flag to indicate if the contract is the main income for the contractor.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Client

Client details for the contract, including the legal entity and team.

- `team` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientTeam, required) — Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.
- `legal_entity` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientLegalEntity, required) — Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0CompensationDetails

Compensation and invoicing configuration for the contract.

- `amount` (double, required) — Amount to be paid. This field can be excluded when creating a Pay-as-you-go task-based or Milestone contracts.
- `currency_code` (string, required) — Currency code.
- `scale` (enum, required) — Defines the scale at which the amount is paid. For example, enter 'hourly' to define the amount per hour. This field can be excluded when creating a Pay-as-you-go task-based or Milestone contracts.
  - Allowed values: `hourly`, `daily`, `weekly`, `monthly`, `biweekly`, `semimonthly`, `custom`
- `cycle_end` (double, optional) — Date invoice cycle ends.
- `frequency` (enum, optional) — Scale of the invoice cycle.
  - Allowed values: `weekly`, `monthly`, `biweekly`, `semimonthly`, `calendar-month`
- `first_payment` (double, optional, default: 0) — First payment amount.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `cycle_end_type` (enum, optional) — Cycle end can be weekly 1-7 (Monday = 1) or monthly 1-31.
  - Allowed values: `DAY_OF_WEEK`, `DAY_OF_LAST_WEEK`, `DAY_OF_MONTH`
- `payment_due_days` (double, optional) — Number of days to pay the invoice.
- `payment_due_type` (enum, optional, default: REGULAR) — Type of payment due. If the payment is due on the last day of month, enter 'WITHIN_MONTH'. If the payment is due some days after the end of the month, enter 'AFTER_MONTH'. If the payment is due before the end of the invoice cycle, enter 'BEFORE_CYCLE_END'.
  - Allowed values: `REGULAR`, `WITHIN_MONTH`, `AFTER_MONTH`, `BEFORE_CYCLE_END`
- `payment_policy_id` (string, optional) — ID of a pre-configured payment policy. When provided, the payment schedule is derived from the policy and the individual payment fields (frequency, cycle_end, cycle_end_type, payment_due_type, payment_due_days, pay_before_weekends) must be omitted. Mutually exclusive with those individual fields.
- `first_payment_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `pay_before_weekends` (boolean, optional) — If the payment due is on a weekend, pay on Friday.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Worker

Worker properties

- `first_name` (string, required, nullable) — Worker's first name
- `expected_email` (string, required, nullable) — Worker's email address.
- `last_name` (string, optional, nullable) — Worker's last name
- `work_email` (string, optional, nullable) — Worker's work email address.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0JobTitle

Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0JobTitleId, optional) — Unique identifier of this resource.
- `name` (string, optional, nullable) — Job title. Please leave it blank when entering an Id.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0Seniority

Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0SeniorityId, optional) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Meta

Additional custom info about a contract

- `documents_required` (boolean, required) — Require the contractor to upload necessary compliance documents as per their country’s labor laws.
- `is_main_income` (boolean, optional) — Flag to indicate if the contract is the main income for the contractor.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Client

Client details for the contract, including the legal entity and team.

- `team` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientTeam, required) — Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.
- `legal_entity` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientLegalEntity, required) — Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1CompensationDetails

Compensation and invoicing configuration for the contract.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Worker

Worker properties

- `first_name` (string, required, nullable) — Worker's first name
- `expected_email` (string, required, nullable) — Worker's email address.
- `last_name` (string, optional, nullable) — Worker's last name
- `work_email` (string, optional, nullable) — Worker's work email address.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1JobTitle

Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1JobTitleId, optional) — Unique identifier of this resource.
- `name` (string, optional, nullable) — Job title. Please leave it blank when entering an Id.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1Seniority

Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1SeniorityId, optional) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Meta

Additional custom info about a contract

- `documents_required` (boolean, required) — Require the contractor to upload necessary compliance documents as per their country’s labor laws.
- `is_main_income` (boolean, optional) — Flag to indicate if the contract is the main income for the contractor.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Client

Client details for the contract, including the legal entity and team.

- `team` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientTeam, required) — Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.
- `legal_entity` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientLegalEntity, required) — Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2CompensationDetails

Compensation and invoicing configuration for the contract.

- `cycle_end` (double, required) — Date invoice cycle ends.
- `frequency` (enum, required) — Scale of the invoice cycle.
  - Allowed values: `weekly`, `monthly`, `biweekly`, `semimonthly`, `calendar-month`
- `currency_code` (string, required) — Currency code.
- `cycle_end_type` (enum, required) — Cycle end can be weekly 1-7 (Monday = 1) or monthly 1-31.
  - Allowed values: `DAY_OF_WEEK`, `DAY_OF_LAST_WEEK`, `DAY_OF_MONTH`
- `payment_due_days` (double, required) — Number of days to pay the invoice.
- `payment_due_type` (enum, required, default: REGULAR) — Type of payment due. If the payment is due on the last day of month, enter 'WITHIN_MONTH'. If the payment is due some days after the end of the month, enter 'AFTER_MONTH'. If the payment is due before the end of the invoice cycle, enter 'BEFORE_CYCLE_END'.
  - Allowed values: `REGULAR`, `WITHIN_MONTH`, `AFTER_MONTH`, `BEFORE_CYCLE_END`
- `amount` (double, optional) — Amount to be paid. This field can be excluded when creating a Pay-as-you-go task-based or Milestone contracts.
- `first_payment` (double, optional, default: 0) — First payment amount.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `first_payment_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `pay_before_weekends` (boolean, optional) — If the payment due is on a weekend, pay on Friday.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Worker

Worker properties

- `first_name` (string, required, nullable) — Worker's first name
- `expected_email` (string, required, nullable) — Worker's email address.
- `last_name` (string, optional, nullable) — Worker's last name
- `work_email` (string, optional, nullable) — Worker's work email address.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2JobTitle

Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2JobTitleId, optional) — Unique identifier of this resource.
- `name` (string, optional, nullable) — Job title. Please leave it blank when entering an Id.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2Seniority

Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2SeniorityId, optional) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Meta

Additional custom info about a contract

- `documents_required` (boolean, required) — Require the contractor to upload necessary compliance documents as per their country’s labor laws.
- `is_main_income` (boolean, optional) — Flag to indicate if the contract is the main income for the contractor.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Client

Client details for the contract, including the legal entity and team.

- `team` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientTeam, required) — Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.
- `legal_entity` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientLegalEntity, required) — Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3CompensationDetails

Compensation and invoicing configuration for the contract.

- `amount` (double, required) — Amount to be paid. This field can be excluded when creating a Pay-as-you-go task-based or Milestone contracts.
- `currency_code` (string, required) — Currency code.
- `scale` (enum, required) — Defines the scale at which the amount is paid. For example, enter 'hourly' to define the amount per hour. This field can be excluded when creating a Pay-as-you-go task-based or Milestone contracts.
  - Allowed values: `hourly`, `daily`, `weekly`, `monthly`, `biweekly`, `semimonthly`, `custom`
- `cycle_end` (double, optional) — Date invoice cycle ends.
- `frequency` (enum, optional) — Scale of the invoice cycle.
  - Allowed values: `weekly`, `monthly`, `biweekly`, `semimonthly`, `calendar-month`
- `first_payment` (double, optional, default: 0) — First payment amount.
- `notice_period` (double, optional, default: 10) — Days before to notice the termination of contract for either party.
- `cycle_end_type` (enum, optional) — Cycle end can be weekly 1-7 (Monday = 1) or monthly 1-31.
  - Allowed values: `DAY_OF_WEEK`, `DAY_OF_LAST_WEEK`, `DAY_OF_MONTH`
- `payment_due_days` (double, optional) — Number of days to pay the invoice.
- `payment_due_type` (enum, optional, default: REGULAR) — Type of payment due. If the payment is due on the last day of month, enter 'WITHIN_MONTH'. If the payment is due some days after the end of the month, enter 'AFTER_MONTH'. If the payment is due before the end of the invoice cycle, enter 'BEFORE_CYCLE_END'.
  - Allowed values: `REGULAR`, `WITHIN_MONTH`, `AFTER_MONTH`, `BEFORE_CYCLE_END`
- `payment_policy_id` (string, optional) — ID of a pre-configured payment policy. When provided, the payment schedule is derived from the policy and the individual payment fields (frequency, cycle_end, cycle_end_type, payment_due_type, payment_due_days, pay_before_weekends) must be omitted. Mutually exclusive with those individual fields.
- `first_payment_date` (string, optional, nullable) — Short date in format ISO-8601 (YYYY-MM-DD). For example: 2022-12-31.
- `pay_before_weekends` (boolean, optional) — If the payment due is on a weekend, pay on Friday.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Worker

Worker properties

- `first_name` (string, required, nullable) — Worker's first name
- `expected_email` (string, required, nullable) — Worker's email address.
- `last_name` (string, optional, nullable) — Worker's last name
- `work_email` (string, optional, nullable) — Worker's work email address.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3JobTitle

Worker's job title. You can enter a custom job title or use a pre-defined job title using the Id retrieved in job-titles endpoint.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3JobTitleId, optional) — Unique identifier of this resource.
- `name` (string, optional, nullable) — Job title. Please leave it blank when entering an Id.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3Seniority

Job seniority level. Please use the seniority levels endpoint to retrieve the list of seniority levels.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3SeniorityId, optional) — Unique identifier of this resource.

### ContractsPostResponsesContentApplicationJsonSchemaDataClientTeam

Team information for the client organization.

- `id` (string, required) — Unique identifier of this resource.
- `name` (string, required) — Name of a team

### ContractsPostResponsesContentApplicationJsonSchemaDataClientLegalEntity

Legal entity information for the client organization.

- `id` (string, required) — Unique identifier of this resource.
- `name` (string, required) — Name of a legal entity
- `type` (enum, required) — Type of a legal entity
  - Allowed values: `individual`, `company`
- `email` (string, required, nullable) — User's email address.
- `subtype` (string, required) — Subtype of a legal entity
- `vat_number` (string, required) — VAT number of a legal entity
- `registration_number` (string, required) — Registration number of a legal entity

### ContractsPostResponsesContentApplicationJsonSchemaDataWorkerLegalEntity

Worker legal entity information, if applicable.

- `type` (enum, required) — Type of a legal entity
  - Allowed values: `individual`, `company`
- `personal_name` (string, required) — Name of a legal entity
- `registration_number` (string, required) — Registration number of a legal entity

### ContractsPostResponsesContentApplicationJsonSchemaDataWorkerAlternateEmailItems

- `email` (string, required, nullable) — User's email address.
- `isVerified` (boolean, required) — True if email has been verified

### ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBenefitsItems

- `fee` (double, optional) — Fee in local currency
- `name` (string, optional) — Benefit's name
- `plan` (string, optional) — Benefit's plan
- `price` (double, optional) — Price in local currency
- `fee_usd` (double, optional) — Fee in USD
- `currency` (string, optional) — Currency code.
- `price_usd` (double, optional) — Price in USD

### ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCosts

Cost breakdown for the quote, grouped by billing cadence (e.g., monthly).

- `monthly` (ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCostsMonthly, optional) — Monthly cost breakdown for the quote.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientTeam

Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientTeamId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientLegalEntity

Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientLegalEntityId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0JobTitleId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0SeniorityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientTeam

Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientTeamId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientLegalEntity

Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientLegalEntityId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1JobTitleId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1SeniorityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientTeam

Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientTeamId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientLegalEntity

Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientLegalEntityId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2JobTitleId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2SeniorityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientTeam

Choose the Deel team for this contract. Use teams endpoint to retrieve a list of teams in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientTeamId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientLegalEntity

Choose the Deel legal entity for this contract. Use legal entity endpoint to retrieve a list of legal entities in your organization.

- `id` (ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientLegalEntityId, required) — Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3JobTitleId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3SeniorityId

Unique identifier of this resource.

### ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCostsMonthly

Monthly cost breakdown for the quote.

- `costs` (list of ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCostsMonthlyCostsItems, optional) — List of individual monthly cost line items included in the quote.
- `total` (double, optional) — Total costs in local currency
- `total_usd` (double, optional) — Total costs in USD

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientTeamId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf0ClientLegalEntityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientTeamId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf1ClientLegalEntityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientTeamId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf2ClientLegalEntityId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientTeamId

Unique identifier of this resource.

### ContractsPostRequestBodyContentApplicationJsonSchemaDataOneOf3ClientLegalEntityId

Unique identifier of this resource.

### ContractsPostResponsesContentApplicationJsonSchemaDataQuoteBreakdownCostsMonthlyCostsItems

- `name` (string, optional) — Cost's name
- `total` (double, optional) — Total cost in local currency
- `currency` (string, optional) — Currency code.
- `total_usd` (double, optional) — Total cost in USD

## Examples

**Request**

```json
{
  "data": {
    "client": {
      "legal_entity": {
        "id": "string"
      },
      "team": {
        "id": "string"
      }
    },
    "compensation_details": {
      "amount": 100,
      "currency_code": "GBP",
      "cycle_end": 15,
      "cycle_end_type": "DAY_OF_MONTH",
      "first_payment": 500,
      "first_payment_date": "1999-12-31",
      "frequency": "monthly",
      "pay_before_weekends": true,
      "payment_due_days": 7,
      "payment_due_type": "REGULAR",
      "payment_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "scale": "daily"
    },
    "meta": {
      "documents_required": true
    },
    "start_date": "1999-12-31",
    "title": "Software Developer",
    "type": "pay_as_you_go_time_based"
  }
}
```

**Response**

```json
{
  "data": {
    "id": "5vrzvjn",
    "type": "time_based",
    "title": "Software Developer",
    "client": {
      "team": {
        "id": "00000000-0000-0000-0000-000000000000",
        "name": "Engineering"
      },
      "legal_entity": {
        "id": "00000000-0000-0000-0000-000000000000",
        "name": "John Doe",
        "type": "company",
        "email": "test@example.com",
        "subtype": "LLC",
        "vat_number": "12345678",
        "registration_number": "12345678"
      },
      "id": "00000000-0000-0000-0000-000000000000",
      "email": "test@example.com",
      "full_name": "John Doe"
    },
    "status": "new",
    "worker": {
      "id": "00000000-0000-0000-0000-000000000000",
      "email": "test@example.com",
      "image": "https://example.com/image.jpg",
      "country": "US",
      "full_name": "John Doe",
      "last_name": "Doe",
      "first_name": "John",
      "nationality": "US",
      "legal_entity": {
        "type": "company",
        "personal_name": "John Doe",
        "registration_number": "12345678"
      },
      "date_of_birth": "2022-05-24T09:38:46.235Z",
      "expected_email": "test@example.com",
      "alternate_email": [
        {
          "email": "test@example.com",
          "isVerified": true
        }
      ]
    },
    "job_title": "Software Developer",
    "created_at": "2022-05-24T09:38:46.235Z",
    "signatures": {
      "signed_at": "2022-05-24T09:38:46.235Z",
      "client_signature": "John Doe",
      "client_signed_at": "2022-05-24T09:38:46.235Z",
      "worker_signature": "John Doe",
      "worker_signed_at": "2022-05-24T09:38:46.235Z"
    },
    "start_date": "2022-05-24T09:38:46.235Z",
    "invitations": {
      "client_email": "test@example.com",
      "worker_email": "test@example.com"
    },
    "is_archived": false,
    "special_clause": "Special clause",
    "termination_date": "2022-05-24T09:38:46.235Z",
    "work_statement_id": "1597885e-c30d-4747-b665-d9ac4990e90a",
    "employment_details": {
      "type": "employee",
      "days_per_week": 5,
      "hours_per_day": 8,
      "probation_period": 30,
      "paid_vacation_days": 20,
      "state": "CO",
      "country": "US"
    },
    "compensation_details": {
      "scale": "hourly",
      "amount": "100.00",
      "frequency": "monthly",
      "currency_code": "GBP",
      "first_payment": "100.00",
      "first_payment_date": "2022-05-24T09:38:46.235Z",
      "gross_annual_salary": "100.00",
      "gross_signing_bonus": "100.00",
      "gross_variable_bonus": "100.00"
    },
    "quote": {
      "benefits": [
        {
          "fee": 100,
          "name": "Health Insurance",
          "plan": "Basic",
          "price": 100,
          "fee_usd": 100,
          "currency": "GBP",
          "price_usd": 100
        }
      ],
      "currency": "GBP",
      "cba_total": 900,
      "created_at": "1999-12-31",
      "updated_at": "1999-12-31",
      "salary_total": 900,
      "annual_salary": 900,
      "cba_total_usd": 900,
      "breakdown_costs": {
        "monthly": {
          "costs": [
            {
              "name": "Health Insurance",
              "total": 50,
              "currency": "GBP",
              "total_usd": 50
            }
          ],
          "total": 900,
          "total_usd": 900
        }
      },
      "salary_total_usd": 900,
      "gross_salary_total": 900,
      "mobility_fee_total": 900,
      "monthly_cost_total": 900,
      "platform_fee_total": 900,
      "employer_cost_total": 900,
      "gross_salary_total_usd": 900,
      "mobility_fee_total_usd": 900,
      "monthly_cost_total_usd": 900,
      "platform_fee_total_usd": 900,
      "employer_cost_total_usd": 900,
      "severance_accrual_total": 900,
      "recurring_allowance_total": 900,
      "severance_accrual_total_usd": 900,
      "recurring_allowance_total_usd": 900
    },
    "seniority": {
      "id": 123456,
      "name": "Mid (Individual Contributor Level 2)",
      "level": 2
    },
    "external_id": "00000000-0000-0000-0000-000000000000",
    "who_reports": "both",
    "custom_fields": [
      {
        "name": "Employee ID",
        "value": "54234"
      }
    ],
    "notice_period": 15,
    "scope_of_work": "Software development",
    "platform_payment_type": "STANDARD"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/contracts"

payload = { "data": {
        "client": {
            "legal_entity": { "id": "string" },
            "team": { "id": "string" }
        },
        "compensation_details": {
            "amount": 100,
            "currency_code": "GBP",
            "cycle_end": 15,
            "cycle_end_type": "DAY_OF_MONTH",
            "first_payment": 500,
            "first_payment_date": "1999-12-31",
            "frequency": "monthly",
            "pay_before_weekends": True,
            "payment_due_days": 7,
            "payment_due_type": "REGULAR",
            "payment_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "scale": "daily"
        },
        "meta": { "documents_required": True },
        "start_date": "1999-12-31",
        "title": "Software Developer",
        "type": "pay_as_you_go_time_based"
    } }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/contracts';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"client":{"legal_entity":{"id":"string"},"team":{"id":"string"}},"compensation_details":{"amount":100,"currency_code":"GBP","cycle_end":15,"cycle_end_type":"DAY_OF_MONTH","first_payment":500,"first_payment_date":"1999-12-31","frequency":"monthly","pay_before_weekends":true,"payment_due_days":7,"payment_due_type":"REGULAR","payment_policy_id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","scale":"daily"},"meta":{"documents_required":true},"start_date":"1999-12-31","title":"Software Developer","type":"pay_as_you_go_time_based"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/contracts"

	payload := strings.NewReader("{\n  \"data\": {\n    \"client\": {\n      \"legal_entity\": {\n        \"id\": \"string\"\n      },\n      \"team\": {\n        \"id\": \"string\"\n      }\n    },\n    \"compensation_details\": {\n      \"amount\": 100,\n      \"currency_code\": \"GBP\",\n      \"cycle_end\": 15,\n      \"cycle_end_type\": \"DAY_OF_MONTH\",\n      \"first_payment\": 500,\n      \"first_payment_date\": \"1999-12-31\",\n      \"frequency\": \"monthly\",\n      \"pay_before_weekends\": true,\n      \"payment_due_days\": 7,\n      \"payment_due_type\": \"REGULAR\",\n      \"payment_policy_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"scale\": \"daily\"\n    },\n    \"meta\": {\n      \"documents_required\": true\n    },\n    \"start_date\": \"1999-12-31\",\n    \"title\": \"Software Developer\",\n    \"type\": \"pay_as_you_go_time_based\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/contracts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"data\": {\n    \"client\": {\n      \"legal_entity\": {\n        \"id\": \"string\"\n      },\n      \"team\": {\n        \"id\": \"string\"\n      }\n    },\n    \"compensation_details\": {\n      \"amount\": 100,\n      \"currency_code\": \"GBP\",\n      \"cycle_end\": 15,\n      \"cycle_end_type\": \"DAY_OF_MONTH\",\n      \"first_payment\": 500,\n      \"first_payment_date\": \"1999-12-31\",\n      \"frequency\": \"monthly\",\n      \"pay_before_weekends\": true,\n      \"payment_due_days\": 7,\n      \"payment_due_type\": \"REGULAR\",\n      \"payment_policy_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"scale\": \"daily\"\n    },\n    \"meta\": {\n      \"documents_required\": true\n    },\n    \"start_date\": \"1999-12-31\",\n    \"title\": \"Software Developer\",\n    \"type\": \"pay_as_you_go_time_based\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.letsdeel.com/rest/contracts")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"client\": {\n      \"legal_entity\": {\n        \"id\": \"string\"\n      },\n      \"team\": {\n        \"id\": \"string\"\n      }\n    },\n    \"compensation_details\": {\n      \"amount\": 100,\n      \"currency_code\": \"GBP\",\n      \"cycle_end\": 15,\n      \"cycle_end_type\": \"DAY_OF_MONTH\",\n      \"first_payment\": 500,\n      \"first_payment_date\": \"1999-12-31\",\n      \"frequency\": \"monthly\",\n      \"pay_before_weekends\": true,\n      \"payment_due_days\": 7,\n      \"payment_due_type\": \"REGULAR\",\n      \"payment_policy_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"scale\": \"daily\"\n    },\n    \"meta\": {\n      \"documents_required\": true\n    },\n    \"start_date\": \"1999-12-31\",\n    \"title\": \"Software Developer\",\n    \"type\": \"pay_as_you_go_time_based\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/contracts', [
  'body' => '{
  "data": {
    "client": {
      "legal_entity": {
        "id": "string"
      },
      "team": {
        "id": "string"
      }
    },
    "compensation_details": {
      "amount": 100,
      "currency_code": "GBP",
      "cycle_end": 15,
      "cycle_end_type": "DAY_OF_MONTH",
      "first_payment": 500,
      "first_payment_date": "1999-12-31",
      "frequency": "monthly",
      "pay_before_weekends": true,
      "payment_due_days": 7,
      "payment_due_type": "REGULAR",
      "payment_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "scale": "daily"
    },
    "meta": {
      "documents_required": true
    },
    "start_date": "1999-12-31",
    "title": "Software Developer",
    "type": "pay_as_you_go_time_based"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/contracts");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"data\": {\n    \"client\": {\n      \"legal_entity\": {\n        \"id\": \"string\"\n      },\n      \"team\": {\n        \"id\": \"string\"\n      }\n    },\n    \"compensation_details\": {\n      \"amount\": 100,\n      \"currency_code\": \"GBP\",\n      \"cycle_end\": 15,\n      \"cycle_end_type\": \"DAY_OF_MONTH\",\n      \"first_payment\": 500,\n      \"first_payment_date\": \"1999-12-31\",\n      \"frequency\": \"monthly\",\n      \"pay_before_weekends\": true,\n      \"payment_due_days\": 7,\n      \"payment_due_type\": \"REGULAR\",\n      \"payment_policy_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"scale\": \"daily\"\n    },\n    \"meta\": {\n      \"documents_required\": true\n    },\n    \"start_date\": \"1999-12-31\",\n    \"title\": \"Software Developer\",\n    \"type\": \"pay_as_you_go_time_based\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["data": [
    "client": [
      "legal_entity": ["id": "string"],
      "team": ["id": "string"]
    ],
    "compensation_details": [
      "amount": 100,
      "currency_code": "GBP",
      "cycle_end": 15,
      "cycle_end_type": "DAY_OF_MONTH",
      "first_payment": 500,
      "first_payment_date": "1999-12-31",
      "frequency": "monthly",
      "pay_before_weekends": true,
      "payment_due_days": 7,
      "payment_due_type": "REGULAR",
      "payment_policy_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "scale": "daily"
    ],
    "meta": ["documents_required": true],
    "start_date": "1999-12-31",
    "title": "Software Developer",
    "type": "pay_as_you_go_time_based"
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/contracts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```