Independence Day offer · ₹52/employee/moClaim offer
INDPayroll
API reference

Payslips

Generated slips as JSON, PDF and salary certificates.

Base URLhttps://api.indpayroll.com/v16 endpoints
GET /payslips

List payslips

Query parameters

organization_id
integer
Organization to act on. Required when the API key can reach more than one organization; optional - and defaulted - when it can reach exactly one.
month
integer
year
integer
employee_id
string
payroll_run_id
string
status
enum: generated, paid, void, on_hold
page
integer
1-based page number.
per_page
integer
Items per page. The engine caps this at 200.

Responses

  • 200 Payslips. object
  • 401 The key is missing, unknown, or the HMAC signature did not verify. ErrorResponse
GET /payslips/{id}

Retrieve a payslip

The full breakdown as JSON - every earning, deduction, employer contribution and reimbursement, plus the run it belongs to and its payment status. Render it yourself, or take the PDF.

Path parameters

id required
string
INDPayroll id of the resource.

Responses

  • 200 The payslip. Payslip
  • 401 The key is missing, unknown, or the HMAC signature did not verify. ErrorResponse
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse
Request
curl -X GET https://api.indpayroll.com/v1/payslips/{id} \
  -H "Authorization: Bearer $INDP_API_KEY"
Response · 200
{
  "id": "slip_2026_09_1187",
  "payroll_run_id": "run_2026_09_0042",
  "organization_id": 42,
  "month": 9,
  "year": 2026,
  "status": "paid",
  "paid_on": "2026-10-05",
  "pdf_url": "https://api.indpayroll.com/v1/payslips/slip_2026_09_1187.pdf",
  "external_id": "ext-1001",
  "name": "Aditi Sharma",
  "employee_code": "ACM-0142",
  "period_start": "2026-09-01",
  "period_end": "2026-09-30",
  "payable_days": 28,
  "total_days": 30,
  "lop_days": 2,
  "basic": 39666.67,
  "hra": 15866.67,
  "gross": 93786.67,
  "pf_employee": 1800,
  "esi_employee": 0,
  "professional_tax": 200,
  "tds": 9420,
  "total_deductions": 11420,
  "net_payable": 82654.67,
  "currency": "INR"
}
GET /payslips/{id}.pdf

Stream the payslip PDF

Renders with the organization's payslip template unless you name another. The six templates are the same ones the product offers.

Path parameters

id required
string
INDPayroll id of the resource.

Query parameters

template
integer
Template 1-6. Defaults to the organization's setting.

Responses

  • 200 The PDF.
  • 401 The key is missing, unknown, or the HMAC signature did not verify. ErrorResponse
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse
POST /payslips/{id}/email

Email one payslip

Sends from the INDPayroll SMTP. Use it only if you are not sending payslips yourself.

Path parameters

id required
string
INDPayroll id of the resource.

Headers

Idempotency-Key
string
A unique key, at most 255 characters, that makes this request safe to retry. Replaying a key within 24 hours returns the original response and does not act again.

Body application/json · optional

to
string (email)
Defaults to the employee's own address.
cc
string (email)[]
template
integer
message
string

Responses

  • 202 Accepted. The work runs asynchronously; poll the returned resource. AsyncAck
  • 400 The request was malformed or failed validation. ErrorResponse
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse
Request
curl -X POST https://api.indpayroll.com/v1/payslips/{id}/email \
  -H "Authorization: Bearer $INDP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "cc": [
    "payroll@acme.in"
  ],
  "template": 2
}'
GET /payslips/{id}/salary-certificate

Salary certificate for the financial year

A Form 16-style statement built from every slip the employee holds in the financial year containing this payslip - gross, deductions, TDS, PF and PT, month by month. Ask for format=pdf for a signed-looking document.

Path parameters

id required
string
INDPayroll id of the resource.

Query parameters

financial_year
string
Indian financial year in YYYY-YY form. Defaults to the year containing the period.
format
enum: json, xlsx, csv, txt, pdf
File format to return instead of JSON. Omit it - or send Accept: application/json - to get JSON rows you can render yourself.

Responses

  • 200 The certificate, as JSON or a file. SalaryCertificate
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse
GET /employees/{id}/payslips

List one employee's payslips

The employee's own payslip history, newest first. This is what an employee-facing screen in your app reads.

Path parameters

id required
string
Employee id, or your own identifier prefixed with ext: - /employees/ext:emp-1001.

Query parameters

financial_year
string
Indian financial year in YYYY-YY form. Defaults to the year containing the period.
year
integer
page
integer
1-based page number.
per_page
integer
Items per page. The engine caps this at 200.

Responses

  • 200 Payslips. object
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse