> 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/embedded/ic-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

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

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

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

### 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()
```