Run Indian payroll from inside your own product.
A REST API over the INDPayroll engine: employees and salary structures, the attendance and leave a period is built from, payroll runs, payslips, bank files, and the PF, ESI, professional tax, LWF and TDS returns that follow. JSON in, JSON out - or a filing-ready file when you ask for one.
https://api.indpayroll.com/v1From a key to a calculated payslip in six calls.
Bearer keys, HMAC signing, scopes and sandbox mode.
All 171 endpoints, generated from the spec.
Take the YAML and generate your own client.
What the engine does
INDPayroll calculates Indian payroll: it spreads a CTC across a salary structure, pro-rates it against attendance and leave, applies PF, ESI, professional tax, TDS and LWF as the statute defines them, and produces payslips, bank files and filing-ready returns. The API exposes all of it - the same engine the product runs on, with no screen in the way.
There are 171 endpoints across 14 groups. You will not need most of them: a calculate-only integration uses one.
Two ways to integrate
| Calculate only | Embed the engine | |
|---|---|---|
| You hold | Employees, attendance, everything. | Your own UI; INDPayroll holds the payroll data. |
| You call | POST /payroll-runs/preview with the inputs inline. | Employees, inputs, then create, calculate, lock and mark paid. |
| We store | Nothing. No run, no payslip, no id. | Runs, payslips, statutory files, the audit trail. |
| You get | Fully calculated slips as JSON. | Slips, PDFs, bank files, ECR, 24Q, FnF, reports. |
Both shapes use the same objects and the same calculation. Start with preview whichever you are building - it is the fastest way to see a real number.
Base URLs
| Environment | Base URL | Keys |
|---|---|---|
| Production | https://api.indpayroll.com/v1 | indp_live_... |
| Sandbox | https://sandbox-api.indpayroll.com/v1 | indp_test_... |
Sandbox is the same engine over synthetic organizations, and nothing is ever submitted to EPFO, ESIC or TRACES from it. Build there first.
Your first call
GET /me proves the key works and tells you which organizations it can reach - the organization_id every other call wants.
curl https://sandbox-api.indpayroll.com/v1/me \
-H "Authorization: Bearer $INDP_API_KEY" \
-H "INDP-Version: 2026-09-01"{
"key_id": "indp_test_9f2c41ab",
"mode": "sandbox",
"company": { "id": 17, "name": "Acme Technologies Private Limited" },
"scopes": ["org:read", "employees:write", "payroll:write", "statutory:read"],
"organization_ids": [42],
"rate_limits": { "requests_per_minute": 600, "payroll_runs_per_hour": 60 },
"api_version": "2026-09-01"
}Conventions
| How it works | |
|---|---|
| Money | A decimal number of rupees to two places - 82654.67, never paise integers. |
| Dates | YYYY-MM-DD. Timestamps are RFC 3339 in UTC. |
| Employee ids | INDPayroll's id, or your own prefixed with ext: - /employees/ext:emp-1001. Upserts match on external_id. |
| Lists | { data, meta }, with page and per_page. See Pagination and formats. |
| Errors | { error } with a stable code and a request_id. See Errors. |
| Retries | Send an Idempotency-Key on every mutating call. See Idempotency. |
| Files | Reports and statutory endpoints take ?format= with xlsx, csv, txt or pdf. |
Before you start
- A sandbox key pair from the partner console.
- An organization with its statutory identifiers set - PF code, ESI code, PAN, TAN and a PT state. Statutory output is only as good as these.
- A salary structure: components, and a salary group that arranges them.
- Somewhere to receive webhooks, if you would rather not poll.
Endpoint groups
Health, tokens, key introspection, organizations and webhook subscriptions.
Departments, designations, holiday calendar and shifts.
The employee master the engine reads on every run.
One-time per-organization setup - cycle, components, groups, TDS, PT, payment methods.
Per-employee salary structure, increments and variable components.
Attendance, leave, overtime, expenses and advances the run consumes.
The engine itself - preview, calculate, hold, lock, mark paid, reverse.
Generated slips as JSON, PDF and salary certificates.
Bank files, disbursement summaries and Tally sync.
PF, ESI, PT, LWF and TDS returns in filing-ready formats.
Full and final settlements and gratuity projections.
Payroll, attendance and compliance reports as JSON or file exports.
Bulk file imports and their job status.
Event subscriptions. The events themselves are described under `webhooks`.