GuidesAPI ReferenceChangelog
Changelog

πŸš€ Enhancements for POST /rest/v2/immigration/client/cases

✨ What's New

  • Updated Immigration API specification to enforce stricter validation rules based on case_type.
  • Refined request and response schemas to align with the latest OpenAPI specifications.
  • No changes to actual request or response parameters β€” only added stricter validation (e.g., optional fields, enum constraints, length limits).

πŸš€ Enhancements for POST /rest/v2/eor

✨ What's New

We've introduced two new optional fields to the request payload of the POST /rest/v2/eor endpoint to provide greater flexibility and compliance with local labor regulations:
API reference

πŸ”Ή employment.sick_leave_days (optional)

  • Description: Specifies the number of sick leave days for the employee.
  • Validation: Must comply with the legal limits and regulations of the employee's country.
  • Use Case: Helps you manage employee benefits in line with regional policies.

πŸ”Ή employment.seniority_date (optional)

  • Description: Represents the original employment start date for employees who are already working with your organization (directly or via third parties).
  • Availability: Supported in select countries only.
  • Use Case: Ensures accurate tracking of employee tenure and benefits eligibility.

πŸš€ New Endpoints & Enhancements

We’re excited to announce several new updates and improvements across our Time Off and Timesheets APIs to make your integrations more powerful and flexible. Below is a detailed breakdown of the latest changes:


✨ Time Off API Enhancements

πŸ”Ή Create Time Off

Endpoint: POST /rest/v2/time-offs
Scopes: time-off:write
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

What’s new:

  • βœ… You can now request time-offs using only the policy_id, removing the need to specify a time_off_type_id.
  • πŸ•’ Support added for requesting time-offs with a PENDING status.
  • πŸ“… The start_date and end_date fields now accept both YYYY-MM-DD and ISO 8601 date formats. We recommend using YYYY-MM-DD for consistency.
  • πŸ“Ž File attachments are now supported when submitting requests via multipart/form-data.

πŸ”Ή Update Time Off

Endpoint: PATCH /rest/v2/time-offs/:id
Scopes: time-off:write
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

What’s new:

  • βœ… Time-off updates now support using only the policy_id, removing the requirement for time_off_type_id.
  • πŸ“… Updated support for start_date and end_date parameters in both YYYY-MM-DD and ISO string formats (we recommend YYYY-MM-DD).
  • πŸ“Ž Edit time-offs with file attachments using multipart/form-data.

πŸ†• New Endpoint: Daily Time Off Configurations

Endpoint: GET /rest/v2/time-offs/dailies
Scopes: time-off:read
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

What it does:
Fetch comprehensive daily information for a given date range tied to an hrisProfile:

  • πŸ—“ Work Schedule: Breakdown of working hours by weekday.
  • πŸŽ‰ Holidays: Holidays occurring within the specified date range.
  • πŸ“˜ Time Off Dailies: Daily records including holiday or work status.

⏱ Timesheets API – New Endpoints for Hourly Report Root Presets

πŸ†• Create Hourly Report Root Preset

Endpoint: POST /rest/v2/timesheets/root-presets
Scopes: timesheets:write
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

Create a new root preset for hourly reports to streamline your reporting setup.


πŸ†• Get All Hourly Report Root Presets

Endpoint: GET /rest/v2/timesheets/root-presets
Scopes: timesheets:read
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

Retrieve a list of all existing hourly report root presets.


πŸ†• Get a Specific Hourly Report Root Preset

Endpoint: GET /rest/v2/timesheets/root-presets/:id
Scopes: timesheets:read
Allowed Tokens:
OAUTH2:ORGANIZATIONAL, OAUTH2:PERSONAL, PAT:ORGANIZATIONAL, PAT:PERSONAL

Fetch detailed information about a specific preset by ID.

✨ New Time-Off Endpoints

πŸ†• POST /rest/v2/time-offs/validate

Validate a time-off request before submission.

  • Enables pre-validation of new or updated time-off requests for given dates.
  • Returns:
    • Validation errors, if the request cannot be processed.
    • Pre-calculation of time-off usage.
    • Daily breakdown of available time-off for easier user selection.
  • ⚑ It is required to call this endpoint before submitting or updating a time-off request.

πŸ”— API Reference: Validate Time-Off
πŸ”’ Scopes Required: time-off:read
πŸ”‘ Supported Token Types: OAUTH2:PERSONAL, OAUTH2:ORGANIZATIONAL, PAT:PERSONAL, PAT:ORGANIZATIONAL


πŸ†• POST /rest/v2/time-offs/review

Batch approve or reject multiple time-off requests.

  • Allows reviewing (approving/rejecting) multiple pending time-off requests in a single API call.
  • Designed to integrate with workflows where time-off requests are initially submitted with a pending approval status.
  • Great for automating bulk approval/review processes via API.

πŸ”— API Reference: Approve/Reject Time-Off Requests
πŸ”’ Scopes Required: time-off:write
πŸ”‘ Supported Token Types: OAUTH2:PERSONAL, OAUTH2:ORGANIZATIONAL, PAT:PERSONAL, PAT:ORGANIZATIONAL

New Visa Requirement Endpoint + EOR & People API Enhancements

✨ New Feature

βž• Added Check Visa Requirement Endpoint

  • Endpoint: GET /v2/immigration/visa-requirement/:country_code
  • Description:
    Use this endpoint to determine if a work visa is required for a specific employment country, given the employee’s nationality or multiple nationalities.
    Ideal for ensuring early-stage compliance during employee onboarding.

πŸ”§ Update

πŸ”„ Updated POST /v2/eor Response Schema

  • Added the following missing fields under benefits:
    • cover_all – Indicates whether the benefit applies to all employees.
    • cover_dependents – Indicates whether dependents are also covered under the benefit.

These updates enhance the completeness and accuracy of the benefits object in the EOR payload.



πŸ”§ Update

πŸ”„ Updated PUT /v2/people/{id}/department

  • Added optional query param: replace_other_positions: Indicates if this department position should replace all other positions or only append to the existing ones.

πŸ”„ Updated GET /v2/people/{hrisProfileOid} Response Schema

  • Added new response field: profile_organizational_structures

EOR retrieve Benefits by Country API

Updated: Retrieve Benefits by Country API

Added new response fields: providers[].contribution_options, providers[].min_contribution, providers[].max_contribution.

Endpoint: GET /v2/eor/benefits

API Reference: Retrieve Benefits by Country

πŸš€ New EOR Worker API Endpoints Added

We are introducing a set of new API endpoints to enhance support for Employer of Record (EOR) worker operations, including compliance document management and bank account handling.


πŸ“Œ New Endpoints

πŸ—‚οΈ Compliance Documents

  • GET /v2/eor/workers/compliance-documents
    Returns a list of required and optional compliance documents associated with an EOR employee.
    Scopes: worker:read
    Allowed tokens: OAUTH2:PERSONAL

  • GET /v2/eor/workers/compliance-documents/:document_id/templates/download
    Retrieves a downloadable template for a specific compliance document, if available.
    Scopes: worker:read
    Allowed tokens: OAUTH2:PERSONAL

  • POST /v2/eor/workers/compliance-documents/:document_id
    Uploads an employee compliance document.
    Scopes: worker:write
    Allowed tokens: OAUTH2:PERSONAL

🏦 Bank Account Operations

  • GET /v2/eor/workers/banks/guide
    Provides a structured guide (form schema) for submitting bank account details.
    Scopes: worker:read
    Allowed tokens: OAUTH2:PERSONAL

  • POST /v2/eor/workers/banks
    Allows submission of bank account details for an EOR employee.
    Scopes: worker:write
    Allowed tokens: OAUTH2:PERSONAL

✍️ Contract Agreement Operations

  • POST /v2/eor/workers/contracts/:contract_id/signatures
    Enables workers to sign a contract by submitting a typed signature.
    Scopes: worker:write
    Allowed tokens: OAUTH2:PERSONAL

  • GET /v2/eor/workers/contracts/:contract_id/offer-letter
    Returns a rendered HTML preview of the job offer letter for a specific EOR contract.
    Scopes: worker:read
    Allowed tokens: OAUTH2:PERSONAL

  • GET /v2/eor/workers/contracts/:contract_id/employee-agreement/download
    Provides a downloadable PDF link to the employee agreement associated with the given EOR contract.
    Scopes: worker:read
    Allowed tokens: OAUTH2:PERSONAL


πŸ“‹ Key Highlights

  • πŸ” Dynamic Field Support
    Bank account forms are now dynamically defined via the guide endpoint, enabling country-specific validations and input schemas.

  • πŸ“Ž Template-Driven Document Submission
    Workers can now download blank templates for required compliance documents directly via the API.

  • πŸ–ŠοΈ Contract Signing
    Sign employment contracts digitally with a simple string-based signature submission.

  • πŸ“„ Offer Letter Rendering
    Allows workers to preview the HTML-formatted job offer letter for EOR contracts.

  • πŸ“ƒ Employee Agreement Download
    Enables clients to preview or download the finalized employee agreement, giving full transparency and access to finalized contractual documentation.



Updated Fetch EOR Contract form endpoint

New

  • Added dynamic support for all countries available through Deel
    • All fields and constraints for the form are now dynamically fetched from our many sources of truth.
  • New query parameters
    • Added the optional query parameters state, work_hours_per_week and contract_duration_in_days.
      • These fields allow the form to be refreshed with updated validation rules and data.
      • For example, work hours can be used on-the-fly to calculate minimum salary requirements for part-time contracts in eligible countries.
      • state should only be sent when the GET v2/lookups/countries route returns a valid list of states.
        While refreshing the form with these fields is optional, it is recommended since invalid values might prevent the user from creating new contract quotes.
    • Quote form data improvements
      • rules added to options within questions. These follow the same behavior as question rules:
        • When no rule passes, the option becomes disabled and its value must not be sent.
      • start_date and end_date now return the correct allowed date ranges.
      • is_disabled property added to pages, sections, questions, and options. When set to true:
        • Users cannot input values or select options.
        • The entity and its child entities (e.g., questions within a disabled section) must be excluded from the creation request payload.
        • All other properties (like is_required for questions) can be ignored.
        • For questions and options, this matches the behavior when no rules pass.
        • ⚠️ While some properties may still be computed in the API response when is_disabled is true, these values are not guaranteed valid and should not be used or displayed.
      • must_request_validation added to the Job scope question to indicate whether validation through POST v2/eor/job-scopes/validate is required.
        - To cover certain cases where Job scope appears as Project description instead and validation is not mandatory.
        - The Currencies question now returns all supported currencies as options

Updated

  • Form response
    • Sections under the Compensation & dates page have been altered to better separate questions in the flow.
    • Multiple type has been renamed to Nested to better conform with design practices.
    • Removed currency from questions as it was redundant. Instead, use the currency as selected by the user for CURRENCY typed questions instead.

Endpoint:GET /rest/v2/forms/eor/create-contract/:country_code

API Reference: Fetch EOR Contract form

EOR Additional Fields, worker creation endpoints and legal entities


Updated: POST Create EOR Worker

We simplified the payload by removing the emailproperty from payload. We are now getting this information from the employee email provided during Create an EOR contract.

Endpoint: POST /rest/v2/eor/worker

API Reference: Create EOR Worker

Example:

curl --request POST \
     --url https://api.letsdeel.com/rest/v2/eor/worker \
     --header 'accept: application/json' \
     --header 'authorization: Bearer {YOUR_ORG_TOKEN}' \
     --data '{
  "data": {
    "contract_id": "mp4y66j"
  }
}'

Updated: GET Worker Additional Fields for EOR by Country

We updated this endpoint to retrieve all required fields common across all countries. The fields are:

  • street: Worker's address street (required)
  • city: Worker's address city (required)
  • state: Worker's address state/province (optional)
  • zip_code: Worker's address zip code (required)
  • phone: Worker's phone (required)
  • tax_residence: Worker's tax residency country (required)
  • is_payslip_access_allowed: Determine if worker will have access to payslip's.
  • is_compliance_access_allowed: Determine if worker will have access to compliance.

Note: We still retrieve all other fields that are country specific.

Endpoint: GET /rest/v2/forms/eor/worker-additional-fields/{country_code}

API Reference: Get worker additional fields for EOR


Added: POST EOR Worker Additional Information

A new endpoint has been implemented to save the additional fields related to an Employee of Record (EOR) worker. The endpoint payload is dynamic and the payload available properties can be retrieved using Get worker additional fields for (EOR) endpoint .

Endpoint: POST /rest/v2/eor/workers/contracts/:contract_id/additional-information

API Reference: Add additional information

Example

curl --request POST \
    --url \
    https://api.letsdeel.com/v2/rest/v2/eor/workers/contracts/{CONTRACT_ID}/additional-information --header 'accept: application/json' \
    --header 'authorization: Bearer {API_TOKEN}' \
    --header 'content-type: application/json' \
    --data '
      {
         "data": {
            "tax_residence": "United States",
            "phone": "+1-555-123-4567",
            "street": "123 Main St",
            "city": "New York",
            "zip_code": "10001",
            "is_payslip_access_allowed": true,
            "is_compliance_access_allowed": true,
            "dob": "1990-01-01",
            "id_type": "Passport",
            "passport_number": "AB1234"
         }
      }
    '

Updated: List of legal entities API

Added new response fields: phone, address, created_at, sic_number, updated_at, archived_at, industry_name .

Added new query filters: cursor, sort_order, limit, include_payroll_settings, include_archived, global_payroll, legal_entity_id and type.

Endpoint: GET /v2/legal-entities

API Reference: List of legal entities