Skip to main content
With the Employer of Record (EOR) model, Cadana is the worker’s legal employer. Cadana holds the employment agreement, runs compliant payroll, withholds and remits taxes and statutory contributions, and handles compliant termination. You direct the day-to-day work, and you integrate the whole lifecycle through the same APIs used for direct employment — EOR is a mode, not a separate product surface. This guide walks the full EOR lifecycle and links into the detailed guide for each step. If you employ workers under your own entity and only need payroll, see Pay an Employee End-to-End — the two flows share most steps.

How Responsibilities Split

Step 1 — Estimate the Cost of Hire

Before making an offer, estimate the full employer cost — gross↔net plus employer-side contributions — with the Employment Cost Calculator. No person record is needed: The response’s employerContributions array is what you will fund on top of gross pay under EOR — see Employment Models for exactly what the payroll debit collects.

Step 2 — Confirm EOR Availability and Local Employment Rules

List jurisdictions filtered to EOR support — each country reports its eorStatus alongside the workerTypes and employmentModels it supports: Then fetch the jurisdiction’s details. For EOR countries the response carries an eor block with the local employment rules you need to shape a compliant offer — probation and fixed-term limits, working hours, notice periods, statutory leave minimums, 13th-salary obligations, payout constraints, and termination rules. Numeric fields carry a value (null where no statutory rule exists) plus notes explaining the underlying statute:
Finally, discover every data field the jurisdiction requires you to collect, exactly as in Pay an Employee, step 2.

Step 3 — Create the EOR Employee

Create the person with compInfo.employmentModel: "eor", then complete their identity details, tax profile, statutory filing fields, and payment details. This is identical to Pay an Employee, steps 3–7 — the employment model changes what the payroll debit collects, not how you submit data. Use the requirements endpoint to loop until nothing is outstanding — under EOR, complete statutory data is a precondition for issuing the employment agreement.
Before setting the worker’s payment details, check the jurisdiction’s eor.payoutMethod.walletPayoutAllowed from step 2 — some countries require salary to be credited to a bank account in the worker’s name, so a wallet can’t be their payout destination there.

Step 4 — The Employment Agreement

Once the worker’s data is complete, the local employment agreement is issued from a country-specific template. Both signing modes are supported — see Manage Contracts for the full flows:
  • Electronic signing — create the contract from a template, then hand each signer a signing URL. The business representative signs first, then the worker.
  • Offline signing — a contract executed outside the platform (for example, wet-signed locally) is uploaded as a signed PDF and attached to the person’s record.
Track progress with the contract.created, contract.signed, and contract.status.updated webhook events. Contract issuance can be asynchronous — treat the webhooks, not the create call, as your source of truth for signature state.
EOR employment agreement templates are configured per country with your account manager. The agreement is between the worker and Cadana as the employing entity — your business is referenced as the client the work is performed for.

Step 5 — Worker Account and Verification

Every worker gets a Cadana account. Invite them once their person record exists — the invite email (or a returnable onboarding link, if you deliver it yourself) takes them into the app, where they complete identity and address verification at first sign-in: If you’re embedding the experience in your own product instead, submit verification data directly via the KYC API and track state with the user.kyc.updated webhook. Both paths are covered in Worker Wallets.

Step 6 — Fund the Payroll

EOR payrolls debit gross pay plus employer contributions from your business balance (direct employment debits net plus fees — see Employment Models). Fund your account ahead of the payroll date and read your balance back at any time: See Fund Your Account for deposit methods (bank transfer, direct debit from a linked external account, and sandbox test deposits).

Step 7 — Run Payroll

Payroll runs identically to direct employment: create, save entries, review the computed debit, approve. Follow Pay an Employee, steps 8–9. After completion, the payroll’s invoice itemizes the debit into GROSS_PAYROLL and EMPLOYER_CONTRIBUTION line categories with per-line FX rates.

Changing Salary or Role

Compensation and job changes go through the job info endpoint — under EOR this also triggers the corresponding employment-agreement update on the Cadana side: Changes surface on the person.updated webhook. Salary changes apply from the next payroll run that you save.

Termination and Offboarding

Request offboarding with an exit date and reason — Cadana handles the compliant execution (statutory notice, severance, and final pay under local law): Offboarding is scheduled, not immediate — the worker transitions to Former on the exit date, and you can cancel before then or reinstate after. The full lifecycle, request fields, and the four person.offboarding.* / person.reinstated webhook events are covered in Offboard Workers.
Under EOR, local law governs notice periods and severance — an exit date that violates statutory notice can’t be executed as requested. Check the jurisdiction’s eor.termination block (notice scale, severance formula, and process requirements) from step 2 when planning termination timing.

Webhooks to Subscribe To

See Webhooks for setup and Events for payloads.

Next Steps

Pay an Employee End-to-End

The shared data-collection and payroll steps in full detail

Employment Models

What the payroll debit collects under EOR vs direct

Manage Contracts

Template-based e-signing and signed-PDF upload

Offboard Workers

Scheduling, cancelling, reinstating, and webhooks