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

# Amendments & offboarding

> Guide to amending active EOR contracts, managing expenses, and processing terminations in Deel's Embedded model.

This guide covers employer-initiated changes to active EOR employment, including contract amendments, expense adjustments, draft contract management, termination, and employer-side resignation handling.

All endpoints require an admin-scoped API token. See [Getting started](/api/embedded/getting-started) for authentication and environment setup. For creating contracts, see [Hiring & contracts](/api/embedded/eor-hiring). For worker-initiated amendment signing and resignation submission, see [Worker self-service](/api/embedded/eor-worker-self-service).

> **Warning**
>
> All amendment and termination operations are legally binding. Test every flow in the Deel sandbox environment before connecting to production data.

## Contract amendments

Amendments change the terms of an active EOR contract, covering salary, job title, seniority, working hours, employment type, or other fields. After creation, an amendment enters a review and signing flow involving both the employer and the employee.

### Check amendable fields

Before rendering an amendment form, retrieve the validation settings for the contract to understand which fields can be changed and what constraints apply.

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/amendments/validation/settings`](/api/embedded/eor-endpoints/eor-amendments/get-contract-amendments-validation-settings)
      </td>

      <td>
        Amendable fields, allowed values, constraints, and effective date rules
      </td>
    </tr>
  </tbody>
</table>

Use this response to determine which fields to expose in the UI and what validation to apply client-side before submission.

### Create an amendment

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `POST`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/amendments`](/api/embedded/eor-endpoints/eor-amendments/create-contract-amendment)
      </td>

      <td>
        Create a contract amendment
      </td>
    </tr>
  </tbody>
</table>

Include only the fields you want to change; all amendment fields are optional. Always include `effective_date`. Amendable fields include: `salary`, `job_title`, `seniority_id`, `employment_type`, `work_hours_per_week`, `end_date`, `scope`, `fixed_adjustments`, and `variable_compensation`.

After creation, the amendment enters review and signing. Both you and the worker must sign before it activates.

### Track amendment status

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/amendments`](/api/embedded/eor-endpoints/eor-amendments/get-contract-amendments)
      </td>

      <td>
        List amendments and their current status
      </td>
    </tr>
  </tbody>
</table>

Subscribe to `eor.amendment.status.updated` to receive notifications as the amendment progresses through review and signing states, rather than polling this endpoint.

To cancel a pending amendment, use [`DELETE /eor/contracts/{contract_id}/amendments/{amendment_id}`](/api/embedded/eor-endpoints/eor-amendments/delete-contract-amendment). Cancellation is only possible before all parties have signed; once fully signed, the amendment cannot be reversed through this endpoint.

## Expense adjustments

Use adjustments to submit expense reimbursements on behalf of employees. Each adjustment is applied to the employee's next payroll cycle.

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `POST`
      </td>

      <td>
        [`/adjustments`](/api/embedded/eor-endpoints/adjustments/create-contract-adjustment)
      </td>

      <td>
        Create an expense adjustment
      </td>
    </tr>

    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/adjustments/{id}`](/api/embedded/eor-endpoints/adjustments/get-contract-adjustment)
      </td>

      <td>
        Check adjustment status
      </td>
    </tr>

    <tr>
      <td>
        `DELETE`
      </td>

      <td>
        [`/adjustments/{id}`](/api/embedded/eor-endpoints/adjustments/delete-contract-adjustment)
      </td>

      <td>
        Cancel a pending adjustment before processing
      </td>
    </tr>
  </tbody>
</table>

> **Note**
>
> Adjustments cover employer-initiated expense submissions. Worker-initiated expense requests are handled separately through the worker-side API surface.

## Draft contract management

Before a contract is signed, it remains in draft state and can be updated or delayed. These operations are only available before the signing phase begins.

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `PATCH`
      </td>

      <td>
        [`/eor/contract/{contract_id}`](/api/reference/endpoints/eor-contract/update-eor-contract)
      </td>

      <td>
        Update fields on a draft contract
      </td>
    </tr>

    <tr>
      <td>
        `PATCH`
      </td>

      <td>
        [`/eor/contract/{oid}/delay-onboarding`](/api/embedded/eor-endpoints/eor-hiring/delay-onboarding)
      </td>

      <td>
        Delay the employment start date
      </td>
    </tr>
  </tbody>
</table>

Use the delay endpoint to push back a start date after the contract is created but before it enters the signing phase.

## Offboarding

Terminations require country-specific validation before submission. Retrieve required fields and check for restricted dates before presenting the offboarding form; an incomplete or date-restricted submission returns a `422` that blocks the flow.

### Get required information

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/offboarding/required-information`](/api/embedded/eor-endpoints/eor-offboarding/get-eor-contract-offboarding-required-information)
      </td>

      <td>
        Country-specific termination fields: severance type, notice period, legal data
      </td>
    </tr>
  </tbody>
</table>

Use this response to render the correct form fields for the employment country before submitting the termination request.

### Check restricted dates

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/offboarding/restricted-dates`](/api/embedded/eor-endpoints/eor-offboarding/get-contract-offboarding-restricted-dates)
      </td>

      <td>
        Dates on which termination cannot be processed
      </td>
    </tr>
  </tbody>
</table>

Restricted dates include payroll cutoff dates and statutory restricted periods. Validate the proposed end date against these before allowing submission.

### Submit termination

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `POST`
      </td>

      <td>
        [`/eor/{oid}/terminations/regular`](/api/reference/endpoints/eor-terminations/create-regular-termination)
      </td>

      <td>
        Submit a termination request
      </td>
    </tr>
  </tbody>
</table>

Required fields: `reason`, `reason_detail`, `desired_end_date`, `is_employee_notified`, and `used_time_off`.

### Track offboarding progress

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `GET`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/offboarding`](/api/embedded/eor-endpoints/eor-offboarding/get-contract-offboarding)
      </td>

      <td>
        Current offboarding state, document status, and confirmed end date
      </td>
    </tr>
  </tbody>
</table>

Subscribe to `contract.terminated` and `people.terminated` to receive notifications when the termination is confirmed and the employee profile is updated.

## Employee-initiated resignation

When the worker submits a resignation via [Worker self-service](/api/embedded/eor-worker-self-service), review the employee's accrued paid time off before offboarding can proceed.

<table>
  <colgroup>
    <col />

    <col />

    <col />
  </colgroup>

  <thead>
    <tr>
      <th>
        Method
      </th>

      <th>
        Endpoint
      </th>

      <th>
        Purpose
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `POST`
      </td>

      <td>
        [`/eor/contracts/{contract_id}/offboarding/resignations/review-pto`](/api/embedded/eor-endpoints/eor-offboarding/review-eor-offboarding-pto)
      </td>

      <td>
        Review accrued PTO for a resigning employee
      </td>
    </tr>
  </tbody>
</table>

This step is required before the worker can sign their resignation letter and before offboarding progresses.

## Key webhook events

| Event                          | Trigger                                        |
| ------------------------------ | ---------------------------------------------- |
| `eor.amendment.status.updated` | Amendment progressed through review or signing |
| `contract.terminated`          | Termination confirmed                          |
| `people.terminated`            | Employee profile marked as terminated          |

See the [Webhooks guide](/api/webhooks/introduction) for event payload structure and signature verification.

## Next steps

#### [Hiring & contracts](/api/embedded/eor-hiring)

Group setup, cost estimation, and EOR contract creation.

#### [Employment management](/api/embedded/eor-management)

Employee data, onboarding tracking, and time off management.

#### [Worker self-service](/api/embedded/eor-worker-self-service)

Worker-side amendment signing and resignation submission.

#### [Getting started](/api/embedded/getting-started)

Authentication, environments, and webhook setup.