> 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 an EOR contract

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

Submits details for an Employee of Record (EOR) contract and returns a quote. Deel processes the submitted information and returns pricing, compensation, and health plan details before the contract is activated.

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

Reference: https://developer.deel.com/api/eor-endpoints/eor-contract/create-eor-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` (EorPostRequestBodyContentApplicationJsonSchemaData, required)

## Response

### 201

Successfully created the EOR contract quote.

- `data` (EorPostResponsesContentApplicationJsonSchemaData, optional)

## Errors

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

## Types

### EorPostRequestBodyContentApplicationJsonSchemaData

- `client` (EorPostRequestBodyContentApplicationJsonSchemaDataClient, required) — Client details for the contract.
- `employee` (EorPostRequestBodyContentApplicationJsonSchemaDataEmployee, required)
- `job_title` (string, required) — Employee's job title.
- `seniority` (EorPostRequestBodyContentApplicationJsonSchemaDataSeniority, required) — Seniority selection for the role.
- `employment` (EorPostRequestBodyContentApplicationJsonSchemaDataEmployment, required) — Employment contract specific details.
- `compensation_details` (EorPostRequestBodyContentApplicationJsonSchemaDataCompensationDetails, required)
- `pension` (EorPostRequestBodyContentApplicationJsonSchemaDataPension, optional) — Some countries required a pension benefit.
- `benefits` (list of EorPostRequestBodyContentApplicationJsonSchemaDataBenefitsItems, optional)
- `health_plan_id` (string, optional) — Healthcare plan id. You can see available healthcare plans in the country guide endpoint.
- `quote_additional_fields` (EorPostRequestBodyContentApplicationJsonSchemaDataQuoteAdditionalFields, optional, nullable) — Some countries require additional employee information for employment contracts.

### EorPostResponsesContentApplicationJsonSchemaData

- `id` (string, optional) — ID of the created contract quote.
- `type` (enum, optional) — Type of the 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`
- `costs` (EorPostResponsesContentApplicationJsonSchemaDataCosts, optional) — Detailed breakdown of employment costs including summary totals, sectioned cost groups, and additional context notes.
- `client` (EorPostResponsesContentApplicationJsonSchemaDataClient, optional) — Client information for the contract.
- `status` (enum, optional) — Current status of the contract.
  - 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` (EorPostResponsesContentApplicationJsonSchemaDataEmployee, optional)
- `job_title` (string, optional) — Employee's job title
- `seniority` (EorPostResponsesContentApplicationJsonSchemaDataSeniority, optional) — Seniority level of the employee
- `created_at` (string, optional) — Contract creation timestamp
- `employment` (EorPostResponsesContentApplicationJsonSchemaDataEmployment, optional) — Employment contract specific details.
- `health_plan` (EorPostResponsesContentApplicationJsonSchemaDataHealthPlan, optional, nullable)
- `compensation_details` (EorPostResponsesContentApplicationJsonSchemaDataCompensationDetails, optional)

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

### EorPostRequestBodyContentApplicationJsonSchemaDataClient

Client details for the contract.

- `team` (EorPostRequestBodyContentApplicationJsonSchemaDataClientTeam, required)
- `legal_entity` (EorPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntity, optional)

### EorPostRequestBodyContentApplicationJsonSchemaDataEmployee

- `last_name` (string, required) — Employee's last name.
- `first_name` (string, required) — Employee's first name.
- `nationality` (string, required) — Employee's nationality.
- `email` (string, optional) — Employee's email address.
- `address` (EorPostRequestBodyContentApplicationJsonSchemaDataEmployeeAddress, optional, nullable)
- `external_id` (string, optional) — External identifier of the employee.
- `pf_deductions` (enum, optional) — Employee's PF deductions. Required only for India contracts.
  - Allowed values: `12% of Basic`, `12% of Rs 15,000 (Rs 1,800)`

### EorPostRequestBodyContentApplicationJsonSchemaDataSeniority

Seniority selection for the role.

- `id` (EorPostRequestBodyContentApplicationJsonSchemaDataSeniorityId, optional) — Identifier for the seniority level (string or numeric ID).

### EorPostRequestBodyContentApplicationJsonSchemaDataEmployment

Employment contract specific details.

- `country` (string, required) — Country code of employment.
- `start_date` (string, required) — Start date in ISO-8601 format (YYYY-MM-DD).
- `scope_of_work` (EorPostRequestBodyContentApplicationJsonSchemaDataEmploymentScopeOfWork, required) — Scope of work; either a string with full text or an object referencing a template/validation UUID.
- `work_visa_required` (boolean, required, default: false) — Do you require Deel to apply for work visa for this person?
- `type` (enum, optional) — Is it a full-time contract or a part-time contract?
  - Allowed values: `Full-time`, `Part-time`
- `state` (string, optional, nullable) — State code of the state/province where the this person will be employed.
- `end_date` (string, optional, nullable) — End date in ISO-8601 format (YYYY-MM-DD).
- `holidays` (double, optional, nullable) — Enter the number of holidays. Leave this field blank if you are choosing "STANDARD" time_off_type.
- `is_hourly` (boolean, optional) — Is the employee contract hourly instead of salaried?
- `time_off_type` (enum, optional) — If you want to use standard number of holidays for this employee, choose "STANDARD". If you want to enter a specific number of holidays, choose "SPECIFIC" and enter the number of days in the holidays field.
  - Allowed values: `STANDARD`, `SPECIFIC`
- `seniority_date` (string, optional) — Seniority date
- `sick_leave_days` (integer, optional) — Number of sick leave days
- `probation_period` (double, optional, nullable) — Number of probation days.
- `notice_period_type` (enum, optional) — Type of notice period.
  - Allowed values: `STANDARD`, `CUSTOM`
- `work_hours_per_week` (double, optional) — Employee's work hours per week. Required only if contract is set as hourly.
- `probation_period_time_unit` (enum, optional) — Time unit of probation period.
  - Allowed values: `DAY`, `WEEK`, `MONTH`
- `notice_period_after_probation` (double, optional, nullable) — Notice period after probation required when type is CUSTOM.
- `notice_period_during_probation` (double, optional, nullable) — Notice period during probation required when type is CUSTOM.
- `employee_completed_past_probation` (boolean, optional, default: false) — Whether the employee has previously passed the probation period.
- `probation_period_type_for_definite` (enum, optional) — Type of probation period for definite contracts.
  - Allowed values: `STANDARD`, `CUSTOM`
- `notice_period_after_probation_time_unit` (enum, optional) — Time unit of notice period after probation.
  - Allowed values: `DAY`, `WEEK`, `MONTH`
- `notice_period_during_probation_time_unit` (enum, optional) — Time unit of notice period during probation.
  - Allowed values: `DAY`, `WEEK`, `MONTH`

### EorPostRequestBodyContentApplicationJsonSchemaDataCompensationDetails

- `currency` (string, required) — Salary currency.
- `salary` (double, optional) — Employee's gross annual salary. Required only if contract is salaried.
- `hourly_rate` (double, optional) — Employee's hourly rate. Required only if contract is set as hourly.
- `signing_bonus` (double, optional, nullable) — Signing bonus amount.
- `fixed_adjustments` (list of EorPostRequestBodyContentApplicationJsonSchemaDataCompensationDetailsFixedAdjustmentsItems, optional)
- `variable_compensation` (double, optional, nullable) — Variable compensation. For example, if the person will earn 5% of the gross annual salary as the variable compensation, enter 5.
- `signing_bonus_payout_type` (enum, optional, nullable) — Should be set only if signing_bonus is set. It defines when the bonus is paid.
  - Allowed values: `FIRST_CYCLE`, `AFTER_PROBATION`, `AFTER_FIRST_CONTRACT_ANNIVERSARY`
- `variable_compensation_type` (enum, optional, nullable) — Should be set only if variable_compensation is set. It can be PERCENTAGE or FIXED.
  - Allowed values: `PERCENTAGE`, `FIXED`
- `variable_compensation_title` (string, optional) — Variable compensation title.
- `variable_compensation_timeline` (enum, optional, nullable) — Variable compensation timeline.
  - Allowed values: `ANNUALLY`, `BIANNUALLY`, `QUARTERLY`, `MONTHLY`
- `variable_compensation_effective_date` (string, optional) — Variable compensation effective date.

### EorPostRequestBodyContentApplicationJsonSchemaDataPension

Some countries required a pension benefit.

- `id` (string, optional) — Pension provider id. You can see available pension providers in the country guide endpoint.
- `contribution` (string, optional) — Enter the value of pension contribution. You should send this value only if the contribution object is available in the country guide endpoint and the value should be there between minimum and maximum values indicated.

### EorPostRequestBodyContentApplicationJsonSchemaDataBenefitsItems

List of additional benefits to include in the calculation

- `plan_id` (string, optional) — The ID of a benefits plan to include in the calculation.
- `cover_all` (boolean, optional) — Flag indicating if benefit will fully cover the employee.
- `provider_id` (string, optional) — The ID of a benefits provider to include in the calculation.
- `contribution` (double, optional) — The amount the client will contribute for the benefit in the currency of the contract. Only taken into account if cover_all is set to false. For Unisure provider contribution is always in USD.
- `cover_dependents` (boolean, optional) — Flag indicating if benefit will cover dependents. Only needed if cover_all is set to true.

### EorPostRequestBodyContentApplicationJsonSchemaDataQuoteAdditionalFields

Some countries require additional employee information for employment contracts.

- `dob` (string, optional) — Employee's date of birth.
- `gender` (string, optional) — Employee's gender.
- `worker_type` (enum, optional) — Type of worker.
  - Allowed values: `Skilled`, `Unskilled`

### EorPostResponsesContentApplicationJsonSchemaDataCosts

Detailed breakdown of employment costs including summary totals, sectioned cost groups, and additional context notes.

- `summary` (EorPostResponsesContentApplicationJsonSchemaDataCostsSummary, optional) — Top-level overview of costs, including key totals and currency metadata.
- `sections` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItems, optional) — Detailed and categorized cost sections including grouped and standalone items.
- `additional_data` (EorPostResponsesContentApplicationJsonSchemaDataCostsAdditionalData, optional) — Supplementary notes and contextual information relevant to the cost quote.

### EorPostResponsesContentApplicationJsonSchemaDataClient

Client information for the contract.

- `legal_entity` (EorPostResponsesContentApplicationJsonSchemaDataClientLegalEntity, optional)

### EorPostResponsesContentApplicationJsonSchemaDataEmployee

- `email` (string, optional) — Employee's email
- `last_name` (string, optional) — Employee's last name
- `first_name` (string, optional) — Employee's first name
- `legal_name` (string, optional) — Employee's legal name

### EorPostResponsesContentApplicationJsonSchemaDataSeniority

Seniority level of the employee

- `id` (integer, required) — Seniority level ID
- `name` (string, required) — Seniority level name

### EorPostResponsesContentApplicationJsonSchemaDataEmployment

Employment contract specific details.

- `state` (string, optional, nullable) — State or province of employment
- `country` (string, optional) — Country of employment
- `end_date` (string, optional, nullable) — Employment end date
- `start_date` (string, optional) — Employment start date
- `scope_of_work` (string, optional) — Scope of work description.
- `time_off_type` (string, optional) — Type of time off for the employee
- `probation_period` (integer, optional, nullable) — Number of probation days
- `work_visa_required` (boolean, optional) — If a work visa is required
- `calculated_holidays` (string, optional) — Number of calculated holidays

### EorPostResponsesContentApplicationJsonSchemaDataHealthPlan

- `id` (string, optional) — Health plan ID
- `name` (string, optional) — Health plan name

### EorPostResponsesContentApplicationJsonSchemaDataCompensationDetails

- `salary` (string, optional) — Gross annual salary
- `currency` (string, optional) — Currency of the salary
- `variable_compensation` (string, optional) — Variable compensation account or percentage
- `variable_compensation_type` (string, optional, nullable) — Type of variable compensation

### EorPostRequestBodyContentApplicationJsonSchemaDataClientTeam

- `id` (EorPostRequestBodyContentApplicationJsonSchemaDataClientTeamId, required) — Team identifying information.

### EorPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntity

- `id` (EorPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntityId, required) — Legal entity reference for the client.

### EorPostRequestBodyContentApplicationJsonSchemaDataEmployeeAddress

- `zip` (string, optional) — Zip code.
- `city` (string, optional) — City name.
- `state` (string, optional, nullable) — State code.
- `street` (string, optional) — Street and number.
- `country` (string, optional) — Country code.

### EorPostRequestBodyContentApplicationJsonSchemaDataSeniorityId

Identifier for the seniority level (string or numeric ID).

### EorPostRequestBodyContentApplicationJsonSchemaDataEmploymentScopeOfWork

Scope of work; either a string with full text or an object referencing a template/validation UUID.

### EorPostRequestBodyContentApplicationJsonSchemaDataCompensationDetailsFixedAdjustmentsItems

- `name` (string, optional) — Adjustment name.
- `value` (double, optional) — Adjustment value.
- `opt_out` (boolean, optional) — Whether the adjustment is being opted out of.
- `optional` (boolean, optional) — Whether the adjustment is optional.
- `description` (string, optional) — Adjustment description.
- `is_recurring` (boolean, optional) — Whether the adjustment is paid recurring monthly or one-time on employee's first payroll.
- `rule_cost_id` (string, optional) — Identifier of the rule cost associated with the adjustment.
- `is_country_specific` (boolean, optional) — Whether this adjustment is country-specific.
- `skipping_confirmation_text` (string, optional) — Optional skipping confirmation text shown to the user.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSummary

Top-level overview of costs, including key totals and currency metadata.

- `salary` (string, optional) — Annual gross salary in local currency.
- `currency` (string, optional) — Local currency code (e.g., BRL, PLN).
- `exchange_rate` (string, optional) — Exchange rate used to convert from local to supporting currency.
- `totals_formatted` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSummaryTotalsFormattedItems, optional) — Formatted summary totals in both local and supporting currencies.
- `supporting_currency` (string, optional) — Reference or secondary currency (e.g., USD) used for reporting totals.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItems

- `name` (string, optional) — Internal identifier for the cost section (e.g., MONTHLY_EMPLOYMENT_BREAKDOWN).
- `label` (string, optional) — Display name for the cost section.
- `groups` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItems, optional) — Collections of related costs grouped under a common label.
- `totals` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsTotalsItems, optional) — Overall totals for the section, summing all groups and standalone items.
- `is_summarized` (boolean, optional) — Indicates whether the section is presented in summarized form.
- `standalone_items` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsStandaloneItemsItems, optional) — Cost items that do not belong to regular groups, often irregular or one-off costs.

### EorPostResponsesContentApplicationJsonSchemaDataCostsAdditionalData

Supplementary notes and contextual information relevant to the cost quote.

- `annual_notes` (list of string, optional) — Notes or assumptions specifically relevant to annual cost calculations.
- `monthly_notes` (list of string, optional) — Notes or assumptions specifically relevant to monthly cost calculations.
- `once_off_notes` (list of string, optional) — Notes regarding one-time costs or irregular payments in the quote.
- `additional_notes` (list of string, optional) — General conditions, assumptions, or fees that may apply to the quote.

### EorPostResponsesContentApplicationJsonSchemaDataClientLegalEntity

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

### EorPostRequestBodyContentApplicationJsonSchemaDataClientTeamId

Team identifying information.

### EorPostRequestBodyContentApplicationJsonSchemaDataClientLegalEntityId

Legal entity reference for the client.

### EorPostRequestBodyContentApplicationJsonSchemaDataEmploymentScopeOfWork1

- `scope_template_id` (string, optional) — Scope template UUID.

### EorPostRequestBodyContentApplicationJsonSchemaDataEmploymentScopeOfWork2

- `scope_validation_id` (string, optional) — Scope validation UUID.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSummaryTotalsFormattedItems

- `title` (string, optional) — Display title for the total (e.g., 'Monthly Total').
- `total` (string, optional) — Formatted amount in local currency.
- `frequency` (string, optional) — Time period for the total (e.g., monthly, annual).
- `total_supporting` (string, optional) — Formatted amount in supporting currency.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItems

- `name` (string, optional) — Internal identifier for the group.
- `costs` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsCostsItems, optional) — Individual cost items within the group.
- `label` (string, optional) — Display name for the group (e.g., Gross Salary, Employer Cost).
- `totals` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsTotalsItems, optional) — Aggregated totals for all items within the group.
- `has_breakdown` (boolean, optional) — Indicates if the group contains multiple detailed cost items to be expanded.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsTotalsItems

- `total` (string, optional) — Total cost for the section in local currency.
- `frequency` (string, optional) — How often the total is calculated (e.g., monthly, annual).
- `total_supporting` (string, optional) — Total cost for the section in supporting currency.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsStandaloneItemsItems

- `name` (string, optional) — Internal identifier for the standalone cost item.
- `label` (string, optional) — Display name for the standalone cost item.
- `totals` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsStandaloneItemsItemsTotalsItems, optional) — Monthly and annual totals for the standalone item in local and supporting currencies.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsCostsItems

- `label` (string, optional) — Name of the specific cost item (e.g., Salary, Meal Voucher).
- `totals` (list of EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsCostsItemsTotalsItems, optional) — Monthly and annual totals for the cost item in local and supporting currencies.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsTotalsItems

- `total` (string, optional) — Group total in local currency.
- `frequency` (string, optional) — How often the total is calculated (e.g., monthly, annual).
- `total_supporting` (string, optional) — Group total in supporting currency.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsStandaloneItemsItemsTotalsItems

- `total` (string, optional) — Standalone cost amount in local currency.
- `frequency` (string, optional) — How often this cost occurs (e.g., monthly, annual, one-time).
- `total_supporting` (string, optional) — Standalone cost amount in the supporting currency.

### EorPostResponsesContentApplicationJsonSchemaDataCostsSectionsItemsGroupsItemsCostsItemsTotalsItems

- `total` (string, optional) — Total cost amount in local currency.
- `frequency` (string, optional) — How often this cost occurs (e.g., monthly, annual, one-time).
- `total_supporting` (string, optional) — Total cost amount in the supporting currency.

## Examples

**Request**

```json
{
  "data": {
    "client": {
      "team": {
        "id": "team-12345"
      }
    },
    "employee": {
      "last_name": "Doe",
      "first_name": "John",
      "nationality": "US"
    },
    "job_title": "Senior Backend Engineer",
    "seniority": {},
    "employment": {
      "country": "US",
      "start_date": "2024-01-15",
      "scope_of_work": "Scope of work description.",
      "work_visa_required": false
    },
    "compensation_details": {
      "currency": "USD"
    }
  }
}
```

**Response**

```json
{
  "data": {
    "id": "contract-12345",
    "type": "eor",
    "costs": {
      "summary": {
        "salary": "700,000.00",
        "currency": "EUR",
        "exchange_rate": "0.92",
        "totals_formatted": [
          {
            "title": "Monthly total",
            "total": "61,613.86",
            "frequency": "monthly",
            "total_supporting": "67,116.35"
          }
        ],
        "supporting_currency": "USD"
      },
      "sections": [
        {
          "name": "MONTHLY_EMPLOYMENT_BREAKDOWN",
          "label": "Monthly employment breakdown",
          "groups": [
            {
              "name": "GROSS_MONTHLY_SALARY",
              "costs": [
                {
                  "label": "Salary",
                  "totals": [
                    {
                      "total": "58,333.33",
                      "frequency": "monthly",
                      "total_supporting": "63,542.84"
                    }
                  ]
                }
              ],
              "label": "Gross salary",
              "totals": [
                {
                  "total": "58,633.33",
                  "frequency": "monthly",
                  "total_supporting": "63,869.63"
                }
              ],
              "has_breakdown": true
            }
          ],
          "totals": [
            {
              "total": "61,613.86",
              "frequency": "monthly",
              "total_supporting": "67,116.35"
            }
          ],
          "is_summarized": true,
          "standalone_items": [
            {
              "name": "One off payment",
              "label": "Printed Agreement handling fee",
              "totals": [
                {
                  "total": "73.44",
                  "frequency": "monthly",
                  "total_supporting": "80.00"
                }
              ]
            }
          ]
        }
      ],
      "additional_data": {}
    },
    "client": {
      "legal_entity": {
        "name": "Acme Corporation"
      }
    },
    "status": "new",
    "employee": {
      "email": "john.doe@example.com",
      "last_name": "Doe",
      "first_name": "John",
      "legal_name": "Johnathan Doe"
    },
    "job_title": "Software Engineer",
    "seniority": {
      "id": 1,
      "name": "Senior"
    },
    "created_at": "2025-01-01T12:00:00Z",
    "employment": {
      "state": "CA",
      "country": "US",
      "end_date": "2025-12-31T00:00:00Z",
      "start_date": "2025-01-15T00:00:00Z",
      "scope_of_work": "Full time engineering duties including backend and API work.",
      "time_off_type": "STANDARD",
      "probation_period": 90,
      "work_visa_required": false,
      "calculated_holidays": "20"
    },
    "health_plan": {
      "id": "healthplan-123",
      "name": "Premium Health"
    },
    "compensation_details": {
      "salary": "100000",
      "currency": "USD",
      "variable_compensation": "5",
      "variable_compensation_type": "PERCENTAGE"
    }
  }
}
```

**SDK Code**

```python
import requests

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

payload = { "data": {
        "client": { "team": { "id": "team-12345" } },
        "employee": {
            "last_name": "Doe",
            "first_name": "John",
            "nationality": "US"
        },
        "job_title": "Senior Backend Engineer",
        "seniority": {},
        "employment": {
            "country": "US",
            "start_date": "2024-01-15",
            "scope_of_work": "Scope of work description.",
            "work_visa_required": False
        },
        "compensation_details": { "currency": "USD" }
    } }
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/eor';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"client":{"team":{"id":"team-12345"}},"employee":{"last_name":"Doe","first_name":"John","nationality":"US"},"job_title":"Senior Backend Engineer","seniority":{},"employment":{"country":"US","start_date":"2024-01-15","scope_of_work":"Scope of work description.","work_visa_required":false},"compensation_details":{"currency":"USD"}}}'
};

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

	payload := strings.NewReader("{\n  \"data\": {\n    \"client\": {\n      \"team\": {\n        \"id\": \"team-12345\"\n      }\n    },\n    \"employee\": {\n      \"last_name\": \"Doe\",\n      \"first_name\": \"John\",\n      \"nationality\": \"US\"\n    },\n    \"job_title\": \"Senior Backend Engineer\",\n    \"seniority\": {},\n    \"employment\": {\n      \"country\": \"US\",\n      \"start_date\": \"2024-01-15\",\n      \"scope_of_work\": \"Scope of work description.\",\n      \"work_visa_required\": false\n    },\n    \"compensation_details\": {\n      \"currency\": \"USD\"\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/eor")

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\": \"team-12345\"\n      }\n    },\n    \"employee\": {\n      \"last_name\": \"Doe\",\n      \"first_name\": \"John\",\n      \"nationality\": \"US\"\n    },\n    \"job_title\": \"Senior Backend Engineer\",\n    \"seniority\": {},\n    \"employment\": {\n      \"country\": \"US\",\n      \"start_date\": \"2024-01-15\",\n      \"scope_of_work\": \"Scope of work description.\",\n      \"work_visa_required\": false\n    },\n    \"compensation_details\": {\n      \"currency\": \"USD\"\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/eor")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"client\": {\n      \"team\": {\n        \"id\": \"team-12345\"\n      }\n    },\n    \"employee\": {\n      \"last_name\": \"Doe\",\n      \"first_name\": \"John\",\n      \"nationality\": \"US\"\n    },\n    \"job_title\": \"Senior Backend Engineer\",\n    \"seniority\": {},\n    \"employment\": {\n      \"country\": \"US\",\n      \"start_date\": \"2024-01-15\",\n      \"scope_of_work\": \"Scope of work description.\",\n      \"work_visa_required\": false\n    },\n    \"compensation_details\": {\n      \"currency\": \"USD\"\n    }\n  }\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/eor', [
  'body' => '{
  "data": {
    "client": {
      "team": {
        "id": "team-12345"
      }
    },
    "employee": {
      "last_name": "Doe",
      "first_name": "John",
      "nationality": "US"
    },
    "job_title": "Senior Backend Engineer",
    "seniority": {},
    "employment": {
      "country": "US",
      "start_date": "2024-01-15",
      "scope_of_work": "Scope of work description.",
      "work_visa_required": false
    },
    "compensation_details": {
      "currency": "USD"
    }
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/eor");
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\": \"team-12345\"\n      }\n    },\n    \"employee\": {\n      \"last_name\": \"Doe\",\n      \"first_name\": \"John\",\n      \"nationality\": \"US\"\n    },\n    \"job_title\": \"Senior Backend Engineer\",\n    \"seniority\": {},\n    \"employment\": {\n      \"country\": \"US\",\n      \"start_date\": \"2024-01-15\",\n      \"scope_of_work\": \"Scope of work description.\",\n      \"work_visa_required\": false\n    },\n    \"compensation_details\": {\n      \"currency\": \"USD\"\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": "team-12345"]],
    "employee": [
      "last_name": "Doe",
      "first_name": "John",
      "nationality": "US"
    ],
    "job_title": "Senior Backend Engineer",
    "seniority": [],
    "employment": [
      "country": "US",
      "start_date": "2024-01-15",
      "scope_of_work": "Scope of work description.",
      "work_visa_required": false
    ],
    "compensation_details": ["currency": "USD"]
  ]] as [String : Any]

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

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