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 islive. 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 byentity (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. SetcompInfo.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 thecalculation-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.
Step 5 — Submit statutory filing data
Submit thefiling-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-fieldsatisfied/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 thedebit 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 isCompleted, 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