Create EOR Contract
Creating EOR Contracts
This guide shows you how to create Employer of Record (EOR) contracts through Deel’s API. With EOR, you can hire full-time employees in countries where you don’t have a legal entity - Deel acts as the legal employer while you maintain day-to-day management of the worker.
Overview
Creating an EOR contract involves four main steps:
- Get Contract Form - Retrieve country-specific requirements
- Validate Job Scope (Optional) - Validate custom job descriptions
- Get Benefits - Retrieve available benefits for the country
- Create Contract - Submit the contract creation request
Before creating contracts, you can estimate employment costs.
Step 1: Get EOR Contract Form
Retrieve country-specific requirements for creating an EOR contract. This endpoint returns all required fields, validation rules, and data sources needed for contract creation.
API Endpoint: GET /forms/eor/create-contract/{country_code}
Query Parameters:
country_code(required) - ISO country code (e.g., US, GB, DE)state(required for US/CA/AU) - State or province codestart_date(required) - Proposed start date (YYYY-MM-DD)work_hours_per_week(required) - Weekly hours (e.g., 40)contract_duration_in_days(optional) - Duration for fixed-term contracts
Response includes:
- Required fields with validation rules (first_name, last_name, email, etc.)
- Data source endpoints for dropdowns (job titles, currencies, seniorities)
- Country-specific fields and dependencies
Common lookup endpoints from the response:
GET /legal-entities- Your organization’s legal entitiesGET /lookups/job-titles- Standard job titlesGET /lookups/seniorities- Seniority levelsGET /lookups/currencies- Supported currenciesGET /eor/start-date- Valid start dates for the country
Step 2: Validate Job Scope (Optional)
If you’re using a custom job description, validate it before creating the contract to avoid delays. You can skip this step if using a pre-approved job scope template.
Three approaches for job scope:
- Use a template - Get templates via
GET /eor/job-scopesand passscope_template_idin the contract - Validate first - Validate custom job description, then use
quote_validation_log_public_idin the contract - Validate inline - Include
scope_of_workdirectly in contract (may require 24-hour review)
API Endpoint: POST /eor/job-scopes/validate
When approved, use the quote_validation_log_public_id when creating the contract. If rejected, you’ll receive feedback within 24 hours.
Step 3: Get Benefits
Retrieve available benefits for the target country to include in the contract.
API Endpoint: GET /eor/benefits
Response includes:
- Benefit ID (use this when creating the contract)
- Name and type
- Monthly cost (if applicable)
- Whether it’s statutory (required by law) or optional
Step 4: Create the EOR Contract
Submit the contract creation request with all the information gathered from the previous steps.
API Endpoint: POST /eor
Required Fields:
- Employee information (first_name, last_name, email)
- Job details (job_title, seniority, scope_template_id or scope_of_work)
- Compensation (salary, salary_currency)
- Location (country, state if applicable)
- Contract details (start_date, work_hours_per_week)
- Organization (legal_entity_id)
Key Response Fields:
contract_id- Use for signing, amendments, and other operationsstatus- Initiallyunder_review, thenwaiting_for_client_signquote- Monthly cost breakdown (salary + benefits + Deel fee)
What Happens After Creation
Once you create the contract, it enters under_review status. Deel will review the contract details and:
- Validate the job scope (if custom)
- Verify country-specific compliance requirements
- Generate the employment agreement
- Move the contract to the next stage for signatures
Next Steps:
- The contract will transition to
waiting_for_client_signstatus (usually within 24 hours) - You can then sign the contract using the signature endpoints
- After all parties sign, the worker can begin onboarding
See the Contract Signing and Employee Onboarding guides for next steps.
Best Practices
- Validate job scopes early - For custom job descriptions, validate 24+ hours before you need to create the contract
- Cache lookup data - Job titles, currencies, and benefits don’t change often; cache them to reduce API calls
- Handle country-specific requirements - Different countries require different fields; always use the form endpoint to discover requirements
- Estimate costs upfront - Use the employment cost endpoint to show candidates total employment costs before contract creation
- Store contract IDs - You’ll need the
contract_idfor signing, amendments, terminations, and other lifecycle operations
Next Steps
- Learn how to sign EOR contracts after creation
- Understand worker onboarding process
- Explore EOR Amendments to modify contracts
- Review EOR Terminations for offboarding
- Set up Webhooks for
contract.createdevents