Accept Quote

After creating an EOR contract, the contract must be signed by three parties to become legally valid. This guide explains the signature workflow and how to sign the contract between your organization and Deel.

Overview

EOR contracts involve two separate agreements:

  1. Client-Deel Contract - Between your organization and Deel, establishing employment costs and responsibilities
  2. Employment Agreement - Between Deel (as employer of record) and the worker, formalizing employment terms

This guide focuses on the Client-Deel Contract and the three-party signature process.

Three-Party Signature Flow

The contract requires signatures in this sequence:

  1. Deel signs - Deel reviews and signs the contract (automatic or within 24 hours)
  2. Your organization signs - You accept the quote and sign via API
  3. Worker signs - Worker completes onboarding and signs the employment agreement
1

Deel Signs

After contract creation, Deel reviews and automatically or manually signs

2

You Sign

Accept the quote and sign using the API endpoint

3

Worker Signs

Worker completes onboarding and signs employment agreement

Step 1: Deel Signs the Contract

After you create the contract, Deel reviews it, issues a cost quote, and signs the contract.

Automatic Signature:

  • Available in select countries with validated job scopes
  • Contract is signed immediately after creation
  • Status changes from under_review to waiting_for_client_sign

Manual Signature:

  • Required when automatic signature is unavailable
  • Takes up to 24 hours to review and sign
  • You’ll be notified when ready for your signature

Automatic signature depends on country-specific requirements and job scope validation. If you used a pre-validated job scope template or validation ID, the contract is more likely to be signed automatically.

Check Contract Status

Monitor the contract status to know when it’s ready for your signature.

API Endpoint: GET /eor/contracts/{contract_id}/details

$curl --request GET \
> --url 'https://api.letsdeel.com/rest/v2/eor/contracts/eor_xyz789/details' \
> --header 'Authorization: Bearer YOUR_API_KEY'

Status Values:

  • under_review - Deel is reviewing and preparing to sign
  • waiting_for_client_sign - ✅ Ready for your signature
  • waiting_for_employee_contract - Waiting for worker onboarding
  • active - Fully signed and active

Step 2: Review the Quote

Before signing, review the cost quote to ensure it matches your expectations.

Quote Breakdown:

  • Salary - Monthly salary for the employee
  • Benefits - Cost of selected benefits (health, pension, etc.)
  • Employer Costs - Taxes and statutory contributions
  • Deel Fee - Deel’s service fee
  • Total Monthly Cost - Sum of all costs

The quote is included in the contract details response from Step 1.

1// Example: Review quote before signing
2const contract = await axios.get(
3 `${DEEL_API_BASE}/eor/contracts/${contractId}/details`,
4 { headers }
5);
6
7const quote = contract.data.data.quote;
8
9console.log('Cost Breakdown:');
10console.log(`Salary: ${quote.currency} ${quote.salary_monthly}/month`);
11console.log(`Benefits: ${quote.currency} ${quote.benefits_monthly}/month`);
12console.log(`Deel Fee: ${quote.currency} ${quote.deel_fee_monthly}/month`);
13console.log(`Total: ${quote.currency} ${quote.total_monthly_cost}/month`);
14console.log(`Annual Total: ${quote.currency} ${quote.total_monthly_cost * 12}`);
15
16// Proceed to sign if acceptable
17if (quoteIsAcceptable(quote)) {
18 await signContract(contractId);
19}

Step 3: Sign the Contract

Once the status is waiting_for_client_sign and you’ve reviewed the quote, sign the contract to proceed.

API Endpoint: POST /contracts/{contract_id}/signatures

$curl --request POST \
> --url 'https://api.letsdeel.com/rest/v2/contracts/eor_xyz789/signatures' \
> --header 'Authorization: Bearer YOUR_API_KEY' \
> --header 'Content-Type: application/json' \
> --data '{
> "data": {
> "client_signature": "John Doe",
> "contract_template_id": "12345"
> }
> }'

Request Parameters:

ParameterTypeRequiredDescription
client_signaturestringYesName of the person signing on behalf of your organization
contract_template_idstringNoCustom employee agreement template ID (optional)

If you want to use a custom employee agreement template instead of the default, include the contract_template_id. You can retrieve available templates from the contract templates endpoint. Custom templates can only be created from the Deel UI.

After Signing:

  • Contract status changes to waiting_for_employee_contract
  • Deel prepares the employee agreement
  • Worker receives a welcome email to begin onboarding

Step 4: Worker Onboarding Begins

After you sign the contract, Deel sends a welcome email to the worker with instructions to:

  1. Sign up to the Deel platform
  2. Complete identity verification (KYC)
  3. Provide banking and tax information
  4. Review and sign the employment agreement

The worker must complete onboarding before the employment agreement can be signed and the contract becomes active.

See the Worker Onboarding guide for detailed information about the worker’s onboarding process.

Best Practices

  • Use webhooks instead of polling - More efficient and provides real-time updates
  • Review quotes carefully - Verify total costs match your budget before signing
  • Store contract IDs - Keep a record of contract IDs for future amendments or queries
  • Set up notifications - Alert your finance team when contracts are ready for signature
  • Automate where appropriate - For standard contracts within budget, consider auto-signing
  • Track signature timestamps - Monitor how long contracts spend in each status
  • Handle errors gracefully - Implement retry logic for failed signature attempts

Troubleshooting

Contract Stuck in under_review

If a contract remains in under_review for more than 24 hours:

  • Check if the job scope requires manual validation
  • Verify all required fields were provided during contract creation
  • Contact Deel support with the contract ID

Signature Request Fails

Common reasons for signature failures:

  • Contract is not in waiting_for_client_sign status
  • Invalid contract ID
  • Missing required signature name
  • Invalid template ID (if using custom templates)

Worker Not Receiving Onboarding Email

After signing:

  • Verify the worker’s email address in the contract
  • Check spam/junk folders
  • Allow up to 30 minutes for email delivery
  • Contact Deel support if the email doesn’t arrive

Next Steps

  • Set up Webhooks for contract status updates