> 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://docs.deel.wtf/api/stable/llms.txt

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

# Create a Global Payroll (GP) contract

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

Creates a new Global Payroll contract. Country-specific fields required in the request body vary by country and must be retrieved in advance from `GET /forms/gp/worker-additional-fields/{country_code}`. Returns the created contract including its unique `id`.

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

Reference: https://docs.deel.wtf/api/endpoints/gp-hiring/create-gp-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.deel.training/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` (ContractsGpPostRequestBodyContentApplicationJsonSchemaData, required)

## Response

### 201

Successful operation.

- `data` (ContractsGpPostResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

Operation failed.

- `errors` (list of ContractsGpPostResponsesContentApplicationJsonSchemaErrorsItems, optional)

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

- `errors` (list of ContractsGpPostResponsesContentApplicationJsonSchemaErrorsItems, optional)

## Types

### ContractsGpPostRequestBodyContentApplicationJsonSchemaData

- `client` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClient, required)
- `employee` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployee, required)
- `job_title` (string, required) — Employee's official job title as stated in the employment agreement.
- `employment` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployment, required)
- `compensation_details` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataCompensationDetails, required)
- `work_location` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataWorkLocation, optional) — Work location details for the employee. Required for US legal entities.
- `invite_employee_to_app` (boolean, optional) — When true, the employee will receive an invitation to join the platform for onboarding.

### ContractsGpPostResponsesContentApplicationJsonSchemaData

- `id` (string, optional) — Id of the contract created.
- `type` (enum, optional) — 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`, `peo`
- `client` (ContractsGpPostResponsesContentApplicationJsonSchemaDataClient, optional)
- `status` (enum, optional) — 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`, `onboarding`
- `employee` (ContractsGpPostResponsesContentApplicationJsonSchemaDataEmployee, optional)
- `job_title` (string, optional) — Employee's job title.
- `created_at` (string, optional, nullable) — Long date-time format following ISO-8601.
- `employment` (ContractsGpPostResponsesContentApplicationJsonSchemaDataEmployment, optional)
- `compensation_details` (ContractsGpPostResponsesContentApplicationJsonSchemaDataCompensationDetails, optional)

### ContractsGpPostResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, optional) — Machine-readable error code
- `message` (string, optional) — Human-readable explanation of the error

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

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClient

- `team` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClientTeam, required)
- `legal_entity` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntity, required)
- `payroll_group_id` (string, optional) — Unique identifier of the payroll group the employee will be assigned to. Must be an active payroll group of the provided legal entity. Required when the legal entity has more than one active payroll group; when omitted, the single active payroll group of the legal entity is used.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployee

- `email` (string, required) — Employee's personal email address used for communication and onboarding.
- `address` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployeeAddress, required)
- `last_name` (string, required) — Employee's last name.
- `first_name` (string, required) — Employee's first name.
- `work_email` (string, required) — Employee's company email address associated with the client organization.
- `external_id` (string, optional, nullable) — A unique identifier for the employee provided by an external system. Once set, it can be used as a filter when listing contracts to directly look up Deel records from an external system.
- `nationality` (enum, optional) — Employee's nationality in ISO 3166-1 alpha-2 format.
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XA`, `XB`, `XC`, `XK`, `XX`, `YE`, `YT`, `ZA`, `ZM`, `ZW`
- `employee_number` (string, optional) — Internal employee identifier within the client organization.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployment

- `type` (enum, required) — Employment type indicating whether the employee works full-time or part-time.
  - Allowed values: `Full-time`, `Part-time`
- `holidays` (ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmploymentHolidays, required)
- `start_date` (string, required) — Employment start date in ISO-8601 format (YYYY-MM-DD).
- `fte` (double, optional, nullable, default: 1) — Full-time equivalent (FTE) percentage, expressed as a decimal between 0 and 1 with up to two decimal places (e.g. 1 = 100%, 0.5 = 50%). Required when `type` is `Part-time`; defaults to 1 (full-time) when omitted or null.
- `country` (enum, optional) — Country where the employee is employed, in ISO 3166-1 alpha-2 format. Used as the contract country. Falls back to employee address country if not provided.
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XA`, `XB`, `XC`, `XK`, `XX`, `YE`, `YT`, `ZA`, `ZM`, `ZW`

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataCompensationDetails

- `scale` (enum, required, default: YEAR) — Defines whether the salary amount represents yearly or monthly gross compensation.
  - Allowed values: `YEAR`, `MONTH`
- `salary` (double, required) — Gross salary amount based on the selected scale.
- `currency` (string, optional) — Three-letter ISO 4217 currency code representing the salary currency.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataWorkLocation

Work location details for the employee. Required for US legal entities.

- `is_wfh` (boolean, required) — Indicates whether the employee works remotely.
- `name` (string, optional) — Name of the registered entity address where the employee works. Use 'Remote' if applicable.
- `effective_date` (string, optional) — Date when the work location becomes effective (ISO-8601 YYYY-MM-DD).

### ContractsGpPostResponsesContentApplicationJsonSchemaDataClient

- `legal_entity` (ContractsGpPostResponsesContentApplicationJsonSchemaDataClientLegalEntity, optional)

### ContractsGpPostResponsesContentApplicationJsonSchemaDataEmployee

- `email` (string, optional) — Employee's email address.
- `last_name` (string, optional) — Employee's last name.
- `first_name` (string, optional) — Employee's first name.
- `employee_number` (string, optional, nullable) — Employee's number.

### ContractsGpPostResponsesContentApplicationJsonSchemaDataEmployment

- `type` (string, optional) — Is it a full-time contract or a part-time contract?
- `state` (string, optional, nullable) — State code of the state/province where this person will be employed.
- `country` (string, optional) — Country of employment.
- `end_date` (string, optional, nullable) — Long date-time format following ISO-8601.
- `holidays` (ContractsGpPostResponsesContentApplicationJsonSchemaDataEmploymentHolidays, optional)
- `start_date` (string, optional, nullable) — Long date-time format following ISO-8601.
- `work_visa_required` (boolean, optional) — Do you require Deel to apply for a work visa for this person?

### ContractsGpPostResponsesContentApplicationJsonSchemaDataCompensationDetails

- `scale` (string, optional) — Scale at which the salary is paid.
- `salary` (double, optional) — Gross annual/month salary.
- `currency` (string, optional) — Currency of gross annual/month salary.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClientTeam

- `id` (string, required) — Refers to Groups in the platform. Working groups that reflect the organization's structure.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntity

- `id` (string, required) — Unique identifier of the legal entity.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmployeeAddress

- `zip` (string, required) — Postal or ZIP code.
- `city` (string, required) — City of residence.
- `street` (string, required) — Street name and building number.
- `country` (enum, required) — ISO 3166-1 alpha-2 country code.
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XA`, `XB`, `XC`, `XK`, `XX`, `YE`, `YT`, `ZA`, `ZM`, `ZW`
- `state` (string, optional) — State or province code.

### ContractsGpPostRequestBodyContentApplicationJsonSchemaDataEmploymentHolidays

- `allowance` (double, required) — Number of paid holiday days allocated per year.
- `start_date` (string, required) — Date when the holiday entitlement becomes effective (ISO-8601 YYYY-MM-DD).

### ContractsGpPostResponsesContentApplicationJsonSchemaDataClientLegalEntity

- `name` (string, optional) — Legal entity name.

### ContractsGpPostResponsesContentApplicationJsonSchemaDataEmploymentHolidays

- `allowance` (double, optional) — Number of holidays.
- `start_date` (string, optional, nullable) — Long date-time format following ISO-8601.

## Examples

**Request**

```json
{
  "data": {
    "client": {
      "team": {
        "id": "00000000-0000-0000-0000-000000000000"
      },
      "legal_entity": {
        "id": "00000000-0000-0000-0000-000000000000"
      }
    },
    "employee": {
      "email": "jane.doe@example.com",
      "address": {
        "zip": "44000",
        "city": "Denver",
        "street": "Deel Street 500",
        "country": "US"
      },
      "last_name": "Doe",
      "first_name": "Jane",
      "work_email": "jane.doe@company.com"
    },
    "job_title": "Senior Software Engineer",
    "employment": {
      "type": "Full-time",
      "holidays": {
        "allowance": 20,
        "start_date": "2024-01-01"
      },
      "start_date": "2024-01-01"
    },
    "compensation_details": {
      "scale": "YEAR",
      "salary": 85000
    }
  }
}
```

**Response**

```json
{
  "data": {
    "id": "c9f8a1b2-1234-5678-9abc-1234567890ab",
    "type": "global_payroll",
    "client": {
      "legal_entity": {
        "name": "Acme Corporation Ltd."
      }
    },
    "status": "completed",
    "employee": {
      "email": "jane.doe@example.com",
      "last_name": "Doe",
      "first_name": "Jane",
      "employee_number": "EMP-1001"
    },
    "job_title": "Designer",
    "created_at": "2024-06-15T10:30:00.000Z",
    "employment": {
      "type": "Full-time",
      "state": "CA",
      "country": "US",
      "end_date": "2025-06-15T00:00:00.000Z",
      "holidays": {
        "allowance": 20,
        "start_date": "2024-01-01T00:00:00.000Z"
      },
      "start_date": "2024-01-01T00:00:00.000Z",
      "work_visa_required": true
    },
    "compensation_details": {
      "scale": "YEAR",
      "salary": 85000,
      "currency": "USD"
    }
  }
}
```

**SDK Code**

```python
import requests

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

payload = { "data": {
        "client": {
            "team": { "id": "00000000-0000-0000-0000-000000000000" },
            "legal_entity": { "id": "00000000-0000-0000-0000-000000000000" }
        },
        "employee": {
            "email": "jane.doe@example.com",
            "address": {
                "zip": "44000",
                "city": "Denver",
                "street": "Deel Street 500",
                "country": "US"
            },
            "last_name": "Doe",
            "first_name": "Jane",
            "work_email": "jane.doe@company.com"
        },
        "job_title": "Senior Software Engineer",
        "employment": {
            "type": "Full-time",
            "holidays": {
                "allowance": 20,
                "start_date": "2024-01-01"
            },
            "start_date": "2024-01-01"
        },
        "compensation_details": {
            "scale": "YEAR",
            "salary": 85000
        }
    } }
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/gp';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"client":{"team":{"id":"00000000-0000-0000-0000-000000000000"},"legal_entity":{"id":"00000000-0000-0000-0000-000000000000"}},"employee":{"email":"jane.doe@example.com","address":{"zip":"44000","city":"Denver","street":"Deel Street 500","country":"US"},"last_name":"Doe","first_name":"Jane","work_email":"jane.doe@company.com"},"job_title":"Senior Software Engineer","employment":{"type":"Full-time","holidays":{"allowance":20,"start_date":"2024-01-01"},"start_date":"2024-01-01"},"compensation_details":{"scale":"YEAR","salary":85000}}}'
};

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/gp"

	payload := strings.NewReader("{\n  \"data\": {\n    \"client\": {\n      \"team\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      },\n      \"legal_entity\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      }\n    },\n    \"employee\": {\n      \"email\": \"jane.doe@example.com\",\n      \"address\": {\n        \"zip\": \"44000\",\n        \"city\": \"Denver\",\n        \"street\": \"Deel Street 500\",\n        \"country\": \"US\"\n      },\n      \"last_name\": \"Doe\",\n      \"first_name\": \"Jane\",\n      \"work_email\": \"jane.doe@company.com\"\n    },\n    \"job_title\": \"Senior Software Engineer\",\n    \"employment\": {\n      \"type\": \"Full-time\",\n      \"holidays\": {\n        \"allowance\": 20,\n        \"start_date\": \"2024-01-01\"\n      },\n      \"start_date\": \"2024-01-01\"\n    },\n    \"compensation_details\": {\n      \"scale\": \"YEAR\",\n      \"salary\": 85000\n    }\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/gp")

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      \"team\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      },\n      \"legal_entity\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      }\n    },\n    \"employee\": {\n      \"email\": \"jane.doe@example.com\",\n      \"address\": {\n        \"zip\": \"44000\",\n        \"city\": \"Denver\",\n        \"street\": \"Deel Street 500\",\n        \"country\": \"US\"\n      },\n      \"last_name\": \"Doe\",\n      \"first_name\": \"Jane\",\n      \"work_email\": \"jane.doe@company.com\"\n    },\n    \"job_title\": \"Senior Software Engineer\",\n    \"employment\": {\n      \"type\": \"Full-time\",\n      \"holidays\": {\n        \"allowance\": 20,\n        \"start_date\": \"2024-01-01\"\n      },\n      \"start_date\": \"2024-01-01\"\n    },\n    \"compensation_details\": {\n      \"scale\": \"YEAR\",\n      \"salary\": 85000\n    }\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/gp")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"client\": {\n      \"team\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      },\n      \"legal_entity\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      }\n    },\n    \"employee\": {\n      \"email\": \"jane.doe@example.com\",\n      \"address\": {\n        \"zip\": \"44000\",\n        \"city\": \"Denver\",\n        \"street\": \"Deel Street 500\",\n        \"country\": \"US\"\n      },\n      \"last_name\": \"Doe\",\n      \"first_name\": \"Jane\",\n      \"work_email\": \"jane.doe@company.com\"\n    },\n    \"job_title\": \"Senior Software Engineer\",\n    \"employment\": {\n      \"type\": \"Full-time\",\n      \"holidays\": {\n        \"allowance\": 20,\n        \"start_date\": \"2024-01-01\"\n      },\n      \"start_date\": \"2024-01-01\"\n    },\n    \"compensation_details\": {\n      \"scale\": \"YEAR\",\n      \"salary\": 85000\n    }\n  }\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/contracts/gp', [
  'body' => '{
  "data": {
    "client": {
      "team": {
        "id": "00000000-0000-0000-0000-000000000000"
      },
      "legal_entity": {
        "id": "00000000-0000-0000-0000-000000000000"
      }
    },
    "employee": {
      "email": "jane.doe@example.com",
      "address": {
        "zip": "44000",
        "city": "Denver",
        "street": "Deel Street 500",
        "country": "US"
      },
      "last_name": "Doe",
      "first_name": "Jane",
      "work_email": "jane.doe@company.com"
    },
    "job_title": "Senior Software Engineer",
    "employment": {
      "type": "Full-time",
      "holidays": {
        "allowance": 20,
        "start_date": "2024-01-01"
      },
      "start_date": "2024-01-01"
    },
    "compensation_details": {
      "scale": "YEAR",
      "salary": 85000
    }
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/contracts/gp");
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      \"team\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      },\n      \"legal_entity\": {\n        \"id\": \"00000000-0000-0000-0000-000000000000\"\n      }\n    },\n    \"employee\": {\n      \"email\": \"jane.doe@example.com\",\n      \"address\": {\n        \"zip\": \"44000\",\n        \"city\": \"Denver\",\n        \"street\": \"Deel Street 500\",\n        \"country\": \"US\"\n      },\n      \"last_name\": \"Doe\",\n      \"first_name\": \"Jane\",\n      \"work_email\": \"jane.doe@company.com\"\n    },\n    \"job_title\": \"Senior Software Engineer\",\n    \"employment\": {\n      \"type\": \"Full-time\",\n      \"holidays\": {\n        \"allowance\": 20,\n        \"start_date\": \"2024-01-01\"\n      },\n      \"start_date\": \"2024-01-01\"\n    },\n    \"compensation_details\": {\n      \"scale\": \"YEAR\",\n      \"salary\": 85000\n    }\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": [
      "team": ["id": "00000000-0000-0000-0000-000000000000"],
      "legal_entity": ["id": "00000000-0000-0000-0000-000000000000"]
    ],
    "employee": [
      "email": "jane.doe@example.com",
      "address": [
        "zip": "44000",
        "city": "Denver",
        "street": "Deel Street 500",
        "country": "US"
      ],
      "last_name": "Doe",
      "first_name": "Jane",
      "work_email": "jane.doe@company.com"
    ],
    "job_title": "Senior Software Engineer",
    "employment": [
      "type": "Full-time",
      "holidays": [
        "allowance": 20,
        "start_date": "2024-01-01"
      ],
      "start_date": "2024-01-01"
    ],
    "compensation_details": [
      "scale": "YEAR",
      "salary": 85000
    ]
  ]] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/contracts/gp")! 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()
```