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

# Hiring & contracts

> Employer-side guide to creating IC contracts in Deel's Embedded model, from form data through signing and worker invitation.

This guide covers the employer-side flow for creating an IC contract: populating form data, creating the contract, attaching documents, signing, and dispatching the worker invitation.

After you complete these steps, the contractor signs the contract and completes onboarding through the worker-side flow. See [Worker onboarding](/api/embedded/ic-worker-onboarding) for that walkthrough. For an overview of IC contract types and the Embedded model, see [IC embedded overview](/api/embedded/ic-overview). For ongoing management of active contracts, see [Manage contracts](/api/embedded/ic-manage).

## Prerequisites

* **Admin-scoped API token**. See [Getting started](/api/embedded/getting-started) for authentication setup.

## Employer phase

### Populate form data

Before rendering the contract creation form, fetch the lookup data needed for dropdowns and selectors.

<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>
        [`/lookups/job-titles`](/api/reference/endpoints/lookups/get-job-titles)
      </td>

      <td>
        Job titles for dropdown
      </td>
    </tr>

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

      <td>
        [`/lookups/currencies`](/api/reference/endpoints/lookups/get-currencies)
      </td>

      <td>
        Supported currencies
      </td>
    </tr>
  </tbody>
</table>

### Create the contract

Submit the contract creation request with the worker details, group assignment, and payment terms.

[`POST /contracts`](/api/embedded/ic-endpoints/contracts/create-ic-contract)

The `contract_type` field determines the billing model: `fixed`, `pay_as_you_go`, `milestones`, or `tasks`. Required fields: `worker` details (`first_name`, `last_name`, `email`, `country`), `client.team` (group ID), `job_title`, `start_date`, `currency`, and payment terms appropriate to the contract type.

The response includes the contract `id` and initial `status`. Store the `id`; it is required for all subsequent operations.

### Attach documents (optional)

Attach a Statement of Work, NDA, or other exhibit to the contract before signing.

[`POST /contracts/{contract_id}/documents`](/api/embedded/ic-endpoints/contractor-hiring/create-contract-document)

Send as `multipart/form-data`. Multiple documents can be attached to a single contract.

### Set custom fields (optional)

Attach platform-specific metadata to the contract: internal project codes, cost centre IDs, or other identifiers.

<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>
        [`/contracts/{contract_id}/custom_fields`](/api/reference/endpoints/custom-fields-contracts/get-contract-custom-fields)
      </td>

      <td>
        Retrieve defined custom fields
      </td>
    </tr>

    <tr>
      <td>
        `PUT`
      </td>

      <td>
        [`/contracts/{contract_id}/custom_fields`](/api/reference/endpoints/custom-fields-contracts/put-contract-custom-field)
      </td>

      <td>
        Set or update field values
      </td>
    </tr>
  </tbody>
</table>

### Sign the contract

Sign the contract on behalf of the end customer. The contract advances to the worker signing stage.

[`POST /contracts/{contract_id}/signatures`](/api/embedded/ic-endpoints/contractor-hiring/create-contract-signature)

Required fields: `signature`, `signer_title`.

### Send the worker invitation

Dispatch the worker signing invitation.

[`POST /contracts/{contract_id}/invitations`](/api/embedded/ic-endpoints/contractor-hiring/create-contract-invitation)

This sends the contractor a Deel-branded email with a hosted signing URL. To handle the signing experience in your own platform, generate a worker token or magic link instead. See [Worker onboarding](/api/embedded/ic-worker-onboarding) for the worker-side walkthrough.

## Webhook events

| Event                         | Trigger                                                        |
| ----------------------------- | -------------------------------------------------------------- |
| `contract.created`            | IC contract submitted successfully                             |
| `contract.status.updated`     | Contract status changed (e.g. `pending_signature` to `active`) |
| `employee.created.contractor` | Contractor HRIS profile created after signing                  |
| `onboarding.status.updated`   | Onboarding step completed or status changed (covers KYC)       |

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

## Next steps

#### [Worker onboarding](/api/embedded/ic-worker-onboarding)

Worker-side flow: signing, identity verification, and payout setup.

#### [Manage contracts](/api/embedded/ic-manage)

Amendments, invoices, timesheets, off-cycle payments, and termination for active contracts.

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

Authentication, environments, token generation, and webhook setup.

#### [Webhooks](/api/webhooks/introduction)

Configure webhooks to receive real-time updates on contract events.