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

Disbursement

Bank files, disbursement summaries and Tally sync.

Base URLhttps://api.indpayroll.com/v13 endpoints
GET /payroll-runs/{id}/bank-file

Download the bank upload file

The salary upload file for the run, in the layout of the payment method's bank. Held employees and employees with incomplete bank details are left out - GET /payroll-runs/{id}/disbursement-summary lists who and why.

format=csv is the generic layout most banks accept; format=txt is the fixed-width variant some corporate portals require.

Path parameters

id required
string
Payroll run id.

Query parameters

format
enum: csv, txt
File format. Defaults to csv.
payment_method_id
integer
Render only the employees paid through this method.

Responses

  • 200 The requested file. The content type follows format - text/csv, text/plain, application/pdf, or the Office XML type for xlsx.
  • 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
  • 409 The resource is in a state that forbids the change - a locked or paid run, a duplicate external_id, or a settlement already approved. ErrorResponse
GET /payroll-runs/{id}/disbursement-summary

Totals by bank and payment method

What you need to fund the accounts before uploading - and the list of employees who will not be paid by transfer.

Path parameters

id required
string
Payroll run id.

Responses

  • 200 The summary. DisbursementSummary
  • 404 No such resource, or it belongs to an organization this key cannot reach. ErrorResponse
Request
curl -X GET https://api.indpayroll.com/v1/payroll-runs/{id}/disbursement-summary \
  -H "Authorization: Bearer $INDP_API_KEY"
Response · 200
{
  "payroll_run_id": "run_2026_09_0042",
  "currency": "INR",
  "total_net_payable": 4207600,
  "employee_count": 85,
  "by_payment_method": [
    {
      "payment_method_id": 2,
      "type": "bank_transfer",
      "bank_name": "HDFC Bank",
      "employee_count": 82,
      "amount": 4098200
    },
    {
      "payment_method_id": 3,
      "type": "cash",
      "employee_count": 3,
      "amount": 109400
    }
  ],
  "by_bank": [
    {
      "bank_name": "HDFC Bank",
      "employee_count": 61,
      "amount": 3120400
    },
    {
      "bank_name": "ICICI Bank",
      "employee_count": 21,
      "amount": 977800
    }
  ],
  "excluded": [
    {
      "employee_id": "ext:emp-1310",
      "reason": "Missing IFSC"
    }
  ],
  "held": [
    {
      "employee_id": "ext:emp-1044",
      "amount": 38200
    }
  ]
}
POST /payroll-runs/{id}/sync-tally

Post the run to Tally

Builds the salary journal voucher and posts it, the same path the Tally button in the product takes. Map component codes to your own ledgers, or let unmapped codes fall back to the organization's default ledger.

Send dry_run: true to see the voucher without posting it.

Path parameters

id required
string
Payroll run id.

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

ledger_mapping
object
Component code to Tally ledger name. Unmapped codes fall back to the organization's default ledger.
voucher_date
string (date)
Defaults to the run's period end.
dry_run
boolean
Build the voucher and return it without posting.

Responses

  • 200 Posted, or built and returned when dry_run was set. TallySyncResult
  • 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
  • 409 The resource is in a state that forbids the change - a locked or paid run, a duplicate external_id, or a settlement already approved. ErrorResponse
Request
curl -X POST https://api.indpayroll.com/v1/payroll-runs/{id}/sync-tally \
  -H "Authorization: Bearer $INDP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "ledger_mapping": {
    "BASIC": "Salaries - Basic",
    "HRA": "Salaries - HRA",
    "PF_EMPLOYER": "PF Payable",
    "TDS": "TDS Payable"
  },
  "voucher_date": "2026-09-30",
  "dry_run": false
}'