PF ECR file
The Electronic Challan cum Return for the month, in the exact layout the EPFO portal accepts. Built from the locked runs of the period: UAN, name, gross wages, EPF wages, EPS wages, employee share, employer share and EPS contribution per member.
Employees with no UAN are reported in rows with a warning rather than silently dropped - the portal rejects the whole file for one bad member.
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 requiredinteger | Calendar month, 1-12. |
year requiredinteger | Four-digit year. |
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
200The return as JSON rows, or as a file whenformatasks for one. StatutoryFileMeta400The request was malformed or failed validation. ErrorResponse401The key is missing, unknown, or the HMAC signature did not verify. ErrorResponse403The key is valid but lacks the scope, or cannot reach this organization. ErrorResponse422The request was well-formed but the engine could not compute it - a missing salary structure, no PT state on an employee, or a period with no inputs. ErrorResponse
curl -X GET https://api.indpayroll.com/v1/statutory/pf/ecr \
-H "Authorization: Bearer $INDP_API_KEY"{
"report": "pf_ecr",
"organization_id": 42,
"month": 9,
"year": 2026,
"generated_at": "2026-10-01T05:12:00Z",
"employee_count": 86,
"totals": {
"gross_wages": 4820000,
"epf_wages": 1290000,
"employee_share": 154800,
"employer_share": 154800,
"eps": 107500
},
"download_url": "https://api.indpayroll.com/v1/statutory/pf/ecr?month=9&year=2026&format=txt",
"rows": [
{
"uan": "101234567890",
"member_name": "Aditi Sharma",
"gross_wages": 93787,
"epf_wages": 15000,
"eps_wages": 15000,
"employee_share": 1800,
"employer_share": 550,
"eps_contribution": 1250,
"ncp_days": 2
}
]
}