Skip to main content
This walkthrough takes one employee from “does Cadana support their country?” to a completed payroll with a downloadable payslip. (Paying an independent contractor instead? That flow skips statutory compliance and tax profiles — see Pay a Contractor End-to-End.) The worked example uses India — one of the supported jurisdictions — because it exercises every part of the flow: statutory documents, a tax profile, and the EOR employment model. Every step is country-parameterized: the discovery endpoints in steps 1–2 tell you exactly what to collect for any other jurisdiction.
Profile writes are applied asynchronously — a read immediately after a write can return the previous state. When scripting this flow, poll or retry briefly between a write and its verification. See the notes in each step.

Step 1 — Confirm the jurisdiction is supported

List jurisdictions and confirm the worker’s country is live. The response includes each country’s filing types, payroll frequency, and currency.

Step 2 — Discover what data the jurisdiction needs

The required fields endpoint returns every field the jurisdiction requires, tagged by entity (person or business) and scope:
  • scope: ["calculation"] fields feed the tax engine — submit them to the person’s tax profile (step 4)
  • scope: ["filing"] fields go on statutory returns — submit them via the statutory fields endpoints (step 5)
  • Fields with both scopes are submitted to both

Step 3 — Create the employee

Create the person with their address (which determines the tax jurisdiction), compensation, and employment model. Set compInfo.employmentModel: "eor" to employ through Cadana’s Employer of Record — this determines what the payroll debit collects; see Employment Models. Then add identity details — date of birth, gender, and the identity documents the jurisdiction requires (for India: PAN as taxId, Aadhaar as nationalId, UAN as socialSecurityId):

Step 4 — Set the tax profile

Submit the calculation-scope fields from step 2 to the person’s tax profile. These drive payroll tax computation — regime choice, employer size, year-to-date figures, and any declarations.
The tax profile PUT replaces the whole profile — send every field you want kept, not just the one you’re changing.

Step 5 — Submit statutory filing data

Submit the filing-scope person fields. Fields are validated against the jurisdiction’s definitions — bad formats and unknown keys are rejected with per-field errors. Document-type fields (like India’s Aadhaar and PAN card images) take a fileId: reserve one with create upload URL (purpose statutory-document), PUT the file bytes to the returned URL, then submit the fileId as the field value. See document fields. Business-side fields (for India: TAN, employer PAN, EPFO establishment ID, ESIC employer code, LIN) go to the business fields endpoint once per jurisdiction.

Step 6 — Verify nothing is missing

The requirements endpoint returns per-field satisfied/outstanding status. Loop until nothing is outstanding — each entry names the exact field and endpoint to fix it.

Step 7 — Add payment details

Fetch the corridor’s requirements schema — it specifies every field, format, and conditional rule for the worker’s country, currency, and payment method — then build the payment info from it. A person must have payment details before they can be added to a payroll.

Step 8 — Run payroll

Create a payroll, save it with the worker’s entry, then approve. Entries carry the base salary plus any allowances, bonuses, or voluntary deductions; the engine computes taxes and statutory contributions on save. Fetch the saved payroll to review the computed gross, deductions, employer contributions, net, and the debit that will be collected from your balance (what the debit covers depends on the employment model): Then approve it: A payroll dated in the future is Scheduled and disburses on the payroll date. In sandbox, use a past payrollDate to complete the payroll immediately on approval — see testing payrolls.

Step 9 — Payslips and the invoice

Once the payroll is Completed, download payslips and reconcile the invoice: The payroll’s invoiceId links to an itemized invoice breaking the debit into line categories with per-line FX rates.

What’s next

Employment Models

What the debit collects under direct employment vs EOR

Payroll Lifecycle

Status flow, FX handling, and webhooks

Statutory Compliance

Filing data, documents, and the requirements loop in depth

Tax Engine

Standalone tax calculations with full formula transparency