Partner organisations only. A Payroll organisation calling this
endpoint receives 405 Method Not Allowed.
Returns a paginated list of pay periods for the employer, newest first by
pay_period_end_date. Only periods with at least one active contribution
are included. Each item includes contribution totals, associated upload
ids, and collection payments for the period.
Optionally filter by upload_ids to return only periods associated with
at least one of the given file upload ids (OR match). Matching periods
still return their full upload_ids and payments arrays.
Query parameters
-
The maximum number of pay periods to return per page.
Minimum value is
1, maximum value is500. Default value is200. -
The page number to return in the list of pay periods.
Minimum value is
1. Default value is1. -
Optional filter. When provided, only pay periods associated with at least one of these upload ids are returned. Pass as a single comma-separated value (
upload_ids=id1,id2). Do not repeat the query key. Plain commas between ids are fine; percent-encoding is not required for Penfold upload ids. Maximum 100 ids (enforced by the API). Unknown or unmatched ids simply contribute no matches (they do not cause a 404).Minimum length is
1.
Responses
-
Paginated list of pay periods for the specified employer.
-
Bad request, the request is malformed or contains invalid data.
-
Unauthorized, the request requires authentication, and the provided credentials are either missing or incorrect.
-
Employer not found, the specified employer_id does not match any existing employer.
-
Method not allowed for this client type.
curl \
--request GET 'https://payroll-api.getpenfold.dev/v4/employers/{employer_id}/pay_periods' \
--header "Authorization: Bearer $ACCESS_TOKEN"
{
"page_number": 1,
"page_size": 200,
"total_items": 1,
"items": [
{
"id": "clxyz123payperiod",
"pay_period_start_date": "2026-01-01",
"pay_period_end_date": "2026-01-31",
"frequency": "Monthly",
"total_contributions_pence": 250000,
"employee_contributions_pence": 100000,
"employer_contributions_pence": 150000,
"upload_ids": [
"clxyz123upload",
"clxyz456upload"
],
"payments": [
{
"id": "clxyz123payment",
"amount_pence": 150000,
"status": "Pending",
"payment_method": "DirectDebit",
"upload_id": "clxyz123upload"
}
]
}
]
}
{
"error": "Bad request: invalid data provided."
}
{
"error": "Bad request: invalid data provided."
}
{
"error": "Bad request: invalid data provided."
}
{
"error": "Bad request: invalid data provided."
}