/v1/hmrc-p-forms base path, relative to the environment base URLs documented on the API reference introduction.
Key concepts
- P45 — the form a leaver receives, summarising their pay and tax in the tax year up to their leaving date. Flow Payroll produces it as part of the leaver process — see the leavers guide.
- P60 — the end-of-year summary produced for each employee for a tax year. P60s exist as previews before they are finalised, and separate endpoints list each state.
- P32 — the employer payment record for a tax month, covering income tax, National Insurance, statutory payment recoveries, and the apprenticeship levy.
- Bulk send job — the asynchronous job created when you send P45 or P60 notifications. The response returns a
jobIdyou poll for the job’s status and counts.
API structure
P45s
Fetch a leaver’s P45 as data withGET /p45/{employeeId} or as a PDF with GET /p45/{employeeId}/file, and render a preview PDF ahead of time with GET /p45/{employeeId}/preview (a leavingDate query parameter is required). List finalised P45s for a tax year across the organisation (GET /p45/list/{taxYear}/finalised) or for one payroll (GET /p45/list/{payrollConfigId}/{taxYear}/finalised), and discover which tax years hold P45 data with GET /p45/tax-years. POST /p45/{employeeId}/replacements issues a replacement P45, and POST /p45/send-notification notifies a list of employees in bulk.
P60s
Fetch an employee’s P60 for a tax year as data (GET /p60/{employeeId}/{taxYear}) or as a PDF (GET /p60/{employeeId}/{taxYear}/file), and regenerate it with POST /p60/{employeeId}/{taxYear}/regenerate. List preview P60s (GET /p60/list/{taxYear}/preview) or finalised P60s for the organisation or a single payroll, and discover available years with GET /p60/tax-years, GET /p60/{employeeId}/preview-years, and GET /p60/{employeeId}/finalised-years. POST /p60/send-notification notifies a list of employees in bulk.
P32 employer payment record
Retrieve the P32 for a tax month as data withGET /p32/{year}/{month} (month 1–12) or as a PDF with GET /p32/{year}/{month}/pdf, or fetch every month in a year with GET /p32/{year}.
Bulk send jobs
The two send-notification endpoints respond with202 Accepted and a jobId. Poll GET /pforms/send-notification/jobs/{jobId} to track the job’s form type, tax year, status, and counts.
PDF endpoints return
application/pdf with a Content-Disposition header carrying a suggested filename, for example P45-2025-2026-Doe-Jane.pdf.Typical workflow
- Find the tax years that hold form data with
GET /p45/tax-yearsorGET /p60/tax-years. - List the finalised forms for a year —
GET /p45/list/{taxYear}/finalisedorGET /p60/list/{taxYear}/finalised— passingpageSizeand followingpaginationTokenuntil it is no longer returned. - Download an individual form as a PDF with
GET /p45/{employeeId}/fileorGET /p60/{employeeId}/{taxYear}/file. - Notify employees that their forms are available with
POST /p45/send-notificationorPOST /p60/send-notification, then pollGET /pforms/send-notification/jobs/{jobId}until the job completes. - When reconciling what the organisation owes HMRC, fetch the month’s P32 with
GET /p32/{year}/{month}.
Authentication
Every request must carry a valid token in theX-Auth-Token header, and multi-organisation credentials must also send X-Org-Id — see Authentication. JSON responses use the shared envelope described in Response format.