GuidesAPI ReferenceChangelog
Changelog

New fields in Tasks endpoints

Added

POST /contracts/{contract_id}/tasks

We added id and status properties in the response of POST /contracts/{contract_id}/tasks endpoint.

Sample response

{
  "data": {
    "created": true,
    "id": "0d636d0d-a869-4e29-8f64-889869a444d9",
    "status": "approved"
  }
}

New Accounting V2 endpoints

Added

Retrieve invoices

Retrieve a list of paid invoices for your workforce.

Endpoint: GET /rest/v2/invoices

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v2/invoices \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Retrieve Deel invoices

Retrieve a list of invoices related to Deel fees.
Endpoint: GET /rest/v2/invoices/deel

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v2/invoices/deel \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Download invoice

Get link to download the invoice PDF.

Endpoint: GET /rest/v2/invoices/{invoice_id}/download

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v2/invoices/invoice_id/download \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

New People endpoints

Added

Retrieve Departments

Retrieve the list of departments in your organization.

Endpoint: GET /rest/v1/departments

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/departments \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Update Department

Update department for a specific worker using the worker's ID.
Endpoint: PUT /rest/v1/people/worker_id/department

Sample request

curl --request PUT \
     --url https://api.letsdeel.com/rest/v1/people/worker_id/department \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "department_id": "123e4567-e89b-12d3-a456-426614174000"
  }
}
'

Retrieve Working Locations

Retrieve the list of working locations in your organization.

Endpoint: GET /rest/v1/working-locations

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/working-locations \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Update Working Location

Update working location for a specific worker using the worker's ID.
Endpoint: PUT /rest/v1/people/worker_id/working-location

Sample request

curl --request PUT \
     --url https://api.letsdeel.com/rest/v1/people/worker_id/working-location \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "working_location_id": "123e4567-e89b-12d3-a456-426614174000"
  }
}
'

New EOR endpoints

Added

Retrieve Payslips

Retrieve a list of payslips for a specific worker by their worker ID.

Endpoint: GET /rest/v1/eor/workers/{worker_id}/payslips

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/eor/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/payslips \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Download Specific Payslip

Download a specific payslip for a worker using the payslip’s ID.
Endpoint: GET /rest/v1/eor/workers/{worker_id}/payslips/{payslip_id}/download

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/eor/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/payslips/ApdZbLvq0r0E/download \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

New Global Payroll endpoints

Added

Retrieve Payslips

Retrieve a list of payslips for a specific worker by their worker ID.

Endpoint: GET /rest/v1/gp/workers/{worker_id}/payslips

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/gp/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/payslips \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Download Specific Payslip

Download a specific payslip for a worker using the payslip’s ID.
Endpoint: GET /rest/v1/gp/workers/{worker_id}/payslips/{payslip_id}/download

Sample request

curl --request GET \
     --url https://api.letsdeel.com/rest/v1/gp/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/payslips/ApdZbLvq0r0E/download \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token'

Update Address

Update the address details of a worker using their worker ID.
Endpoint: PATCH /rest/v1/gp/workers/{worker_id}/address

Sample request

curl --request PATCH \
     --url https://api.letsdeel.com/rest/v1/gp/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/address \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "city": "London",
    "street": "123 Deel Street",
    "zip": "12345"
  }
}
'

Modify Compensation

Modify the compensation details of a specific worker.
Endpoint: PATCH /rest/v1/gp/workers/{worker_id}/compensation

Sample request

curl --request PATCH \
     --url https://api.letsdeel.com/rest/v1/gp/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/compensation \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "scale": "YEAR",
    "salary": 50000,
    "effective_date": "1999-12-31"
  }
}
'

Adjust PTO Policy

Adjust the Paid Time Off (PTO) policy for a specific worker.
Endpoint: PATCH /rest/v1/gp/workers/{worker_id}/pto-policy

Sample request

curl --request PATCH \
     --url https://api.letsdeel.com/rest/v1/gp/workers/0123abcd-e031-4f1e-93d4-6bc66e8c4727/pto-policy \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "accrual_start_date": "1999-12-31",
    "yearly_allowance": "15"
  }
}
'

Update Employee Information

Update general employee information for a worker by their ID.
Endpoint: PATCH /rest/v1/gp/workers/{worker_id}/employee-information

Sample request

curl --request PATCH \
     --url https://api.letsdeel.com/rest/v1/gp/workers/worker_id/employee-information \
     --header 'accept: application/json' \
     --header 'authorization: Bearer token' \
     --header 'content-type: application/json' \
     --data '
{
  "data": {
    "first_name": "Jane",
    "middle_name": "Jay",
    "last_name": "Doe",
    "date_of_birth": "1999-12-31",
    "gender": "string",
    "marital_status": "Single"
  }
}
'

Custom fields in GET /people/:id endpoint

We added custom_fields property in the response of GET /people/:id endpoint. Now, you can get custom fields for an employee.

Sample response

{
    "custom_fields": [
        {
            "name": "Job title",
            "value": "Software Engineer II"
        }
    ]
}

New Time-off endpoints.

Added

Time-off API

We have released a whole new time-off API which makes it even easier to add, update, and review employee PTO. The new API uses worker_id as the identifier vs contract_id.

Sample Request

Create a time-off request using the following format

curl --request POST \
     --url https://api.letsdeel.com/rest/v1/people/0123abcd-e031-4f1e-93d4-6bc66e8c4727/time-offs \
     --header 'accept: application/json' \
     --header 'authorization: Bearer {token}' \
     --header 'content-type: multipart/form-data' \
     --form type=VACATION \
     --form start_date=2023-11-03 \
     --form end_date=2023-11-05 \
     --form reason=Holiday

OAuth updates.

Updated

OAuth Server Change

We have moved the OAuth server to the same domain as the Deel app. You can now use app.deel.com/oauth2/... for all of your OAuth-related requests to Deel.

For example, the API call to exchange and auth grant for an access token will look like this:

POST 'https://app.deel.com/oauth2/tokens' \
--header 'Authorization: Basic d3dzZm5lbG84MDowYWZzN3h2MGQ5' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code={authorization_code}' \
--data-urlencode 'redirect_uri={redirectUri}'

OAuth calls to demo can be made to this host:demo.letsdeel.com/oauth2/....

Introduce people endpoints.

Added

People Endpoints

We're excited to announce the launch of our latest feature, allowing you to retrieve a list of people in your Deel account.

Programmatically fetch, analyze, and leverage a comprehensive list of individuals associated with your organization to enhance team management and strategic decision-making.

Sample Request

curl --location 'https://api.letsdeel.com/rest/v1/people' \
--header 'Authorization: Bearer {token}' 

Sample Response

{
    "data": [
        {
            "id": "a4f91c16-2104-4841-ba4e-77fdcb5bc6ee",
            "created_at": "2023-07-21T07:44:58.437Z",
            "first_name": "Whitney",
            "last_name": "Houston",
            "full_name": "Whitney Houston",
            "emails": [
                {
                    "type": "primary",
                    "value": "[email protected]"
                },
                {
                    "type": "work",
                    "value": null
                },
                {
                    "type": "personal",
                    "value": "[email protected]"
                }
            ],
            "birth_date": null,
            "start_date": "2023-08-05",
            "nationality": null,
            "client_legal_entity": {
                "id": 232324,
                "name": "Aleena Moon"
            },
            "state": "BE",
            "seniority": "Lead (Individual Contributor Level 4)",
            "completion_date": "2023-07-21T07:45:11.807Z",
            "direct_manager": null,
            "direct_reports": null,
            "direct_reports_count": 0,
            "employments": [
                {
                    "id": "3edvyng",
                    "name": "Fixed-Rate API- 2023-07-21",
                    "team": {
                        "id": 384149,
                        "name": "Oleena"
                    },
                    "email": "[email protected]",
                    "state": "BE",
                    "country": "GE",
                    "payment": null,
                    "is_ended": true,
                    "timezone": null,
                    "job_title": "QA Engineer",
                    "seniority": "Lead (Individual Contributor Level 4)",
                    "start_date": "2023-08-05",
                    "work_email": null,
                    "hiring_type": "contractor",
                    "hiring_status": "inactive",
                    "completion_date": "2023-07-21T07:45:11.807Z",
                    "contract_status": "cancelled",
                    "voluntarily_left": null,
                    "contract_coverage": null,
                    "new_hiring_status": "inactive",
                    "client_legal_entity": {
                        "id": 232324,
                        "name": "Aleena Moon"
                    },
                    "has_eor_termination": null,
                    "contract_is_archived": false,
                    "contract_has_contractor": false,
                    "is_user_contract_deleted": false,
                    "hris_direct_employee_invitation": null
                }
            ],
            "hiring_status": "inactive",
            "new_hiring_status": "inactive",
            "hiring_type": "contractor",
            "job_title": "QA Engineer",
            "country": "GE",
            "timezone": null,
            "department": null,
            "work_location": null
        }
    ]
}

Improved

EOR Pensions

We have added a pension object in the response of the country guide endpoint that indicates if this country has a pension benefit available or not.

 "pension": {
   "status": "REQUIRED",
   "providers": [
    {
     "id": 0,
     "name": "US Pension",
     "home_page_url": "https://bit.ly/3uW72fp",
     "contribution": {
      "type": "PERCENTAGE",
      "minimum": "5.00",
      "maximum": "10.00"
     }
    }
   ]
  }

To ensure your employees receive this benefit, make sure to include a new pension object while creating an EOR Contract quote (using the POST /eor endpoint). This will allow you to set the preferred pension provider for the employees.
This new pension object has two properties:

  1. id: Pension provider's id
  2. contribution: You should send this value when the pension provider that you choose has a contribution object.

The contribution property should have a value between the minimum and maximum given.

"pension": {
   "id": "0",
   "contribution": "7.00"
  }

SCIM API Filters

We have added email and name filters to the Deel HR SCIM API Users endpoint. Now you can search for a user based on their email, givenName, or familyName.

To search for someone based on their email format the request like this:

curl --request GET \
     --url 'https://api-staging.letsdeel.com/scim/v2/Users?filter=email%20eq%20%22john%22&startIndex=1&count=50' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer {token}

To search for someone based on their givenName, format the request like this:

curl --request GET \
     --url 'https://api-staging.letsdeel.com/scim/v2/Users?filter=name.givenName%20eq%20%22john%22&startIndex=1&count=50' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer {token}

To search for someone based on their familyName, format the request like this:

curl --request GET \
     --url 'https://api-staging.letsdeel.com/scim/v2/Users?filter=name.familyName%20eq%20%22john%22&startIndex=1&count=50' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer {token}

New additions: Managers API.

Added

Managers Endpoints

We're excited to announce the launch of our latest feature that allows developers to seamlessly integrate Deel with their existing systems.

With the Deel API, you can now add client users (managers) to your Deel accounts and effortlessly list existing managers.

The key impacts of this feature include streamlined integration, enhanced efficiency in user management, scalability, improved user experience, and future expansions in functionality such as role assignment and user removal.

Simplify your onboarding and user management with Deel API Manager Integration.

Sample Request

POST 'https://api.letsdeel.com/rest/v1/managers' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token}' \
--data-raw '{ 
    "data": {
            "first_name": "Nic",
            "last_name": "Jokic",
            "email": "[email protected]",
    }
}'

Read more about this endpoint here.

Introducing Onboarding API.

Added

Onboarding API

Create candidates in Deel with a simple and minimal API call. Deel partners don't need extensive information to create people in Deel. Whether you're an ATS or a job board, you can use Deel Onboarding API to create candidates in Deel.

POST 'https://api.letsdeel.com/rest/v1/candidates' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token}' \
--header 'x-client-id: {client_id}' \
--data-raw '{ 
    "data": {
      "id": "dhzj64mgen",
      "first_name": "Taylor",
      "last_name": "Swift",
      "status": "offer-accepted",
      "link": "https://your-ats.com/path/to/candidate/dhzj64mgen",
      "email": "[email protected]"
    }
}'

Candidates created with the API will show up in Deel at the top of the People list. Clients can click the "Review & Onboard" button to onboard candidates.

SCIM API: Edit User

You can now edit users in Deel HR SCIM API. The latest PATCH User endpoint enables you to edit a user's work email and manager.

Improved

OAuth app creation flow

We have changed the OAuth app creation flow to make it easy for you to get started with OAuth.

Sandbox: All OAuth apps created in Sandbox/Demo will be automatically published. You don't need to wait for our approval anymore.

Production: All OAuth apps created in production will be automatically submitted for review. Once reviewed the app will be published.