Hiring & contracts

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 for that walkthrough. For an overview of IC contract types and the Embedded model, see IC embedded overview. For ongoing management of active contracts, see Manage contracts.

Prerequisites

Employer phase

1

Populate form data

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

MethodEndpointPurpose
GET/lookups/job-titlesJob titles for dropdown
GET/lookups/currenciesSupported currencies
2

Create the contract

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

POST /contracts

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.

3

Attach documents (optional)

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

POST /contracts/{contract_id}/documents

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

4

Set custom fields (optional)

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

MethodEndpointPurpose
GET/contracts/{contract_id}/custom_fieldsRetrieve defined custom fields
PUT/contracts/{contract_id}/custom_fieldsSet or update field values
5

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

Required fields: signature, signer_title.

6

Send the worker invitation

Dispatch the worker signing invitation.

POST /contracts/{contract_id}/invitations

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 for the worker-side walkthrough.

Webhook events

EventTrigger
contract.createdIC contract submitted successfully
contract.status.updatedContract status changed (e.g. pending_signature to active)
employee.created.contractorContractor HRIS profile created after signing
onboarding.status.updatedOnboarding step completed or status changed (covers KYC)

See the Webhooks guide for event payload structure and signature verification.

Next steps