Payslip
Get payslip data for an employee
Retrieves the payslip data for a specific employee in a given year and period
GET
/
payslip
/
data
/
{employeeId}
/
{year}
/
{period}
Get payslip data for an employee
curl --request GET \
--url https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period} \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}"
headers = {
"X-Auth-Token": "<api-key>",
"X-Org-Id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Token': '<api-key>', 'X-Org-Id': '<api-key>'}};
fetch('https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Auth-Token: <api-key>",
"X-Org-Id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Token", "<api-key>")
req.Header.Add("X-Org-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Token"] = '<api-key>'
request["X-Org-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": {
"text": "Payslip Data Retrieved",
"token": "getPayslipDataRetrieved"
},
"content": {
"data": {
"employeeDetails": {
"id": "EMP01JPW80Q2B7Q9RGGRY29VGC8WM",
"name": {
"title": "Mr",
"firstName": "John",
"lastName": "Doe",
"initials": "JD"
},
"address": {
"line1": "123 Main Street",
"line2": "Apartment 4B",
"city": "London",
"county": "Greater London",
"postcode": "SW1A 1AA",
"countryCode": "GB"
},
"birthDate": "1980-01-12",
"birthGender": "Male",
"payrollId": "PAY123",
"employeeCode": "EMP001",
"hoursWorkedCategory": "Above30Hours",
"taxCode": {
"code": "1257L",
"effectiveDate": "2024-04-06",
"reason": "Standard tax code",
"issuedBy": "HMRC",
"week1Month1": false
},
"nationalInsuranceCategory": "A",
"nationalInsuranceNumber": "AB123456C",
"passportNumber": "123456789",
"starterDetails": {
"startDate": "2024-01-15",
"starterDeclaration": "ThisIsMyOnlyJob",
"secondedDetails": {
"stayStatus": "Stay183DaysOrMore",
"eEACitizen": true,
"ePM6": false
},
"alreadySentToHmrcFps": false
},
"studentDetails": {
"studentLoanDetails": {
"loanType": "Plan2",
"startDate": "2020-09-01",
"endDate": "2023-06-30"
},
"postgraduateLoanDetails": {
"loanType": "PostgraduateLoan",
"startDate": "2023-09-01",
"endDate": "2024-06-30"
}
},
"directorDetails": {
"directorsNICType": "Annual",
"appointmentDate": "2024-01-15"
},
"leaverDetails": {
"leavingDate": "2024-12-31",
"reason": "Retirement",
"issuedBy": "Employer"
},
"workplaceDetails": {
"workplacePostcode": "SW1A 1AA"
},
"bankAccounts": [
{
"accountNumber": "12345678",
"sortCode": "123456",
"accountHolderName": "John Doe",
"isPrimaryPayrollAccount": true,
"allocationPercentage": 100
}
]
},
"employerDetails": {
"id": "LOAD_TEST",
"organisationInformation": {
"organisationId": "ORG123456789",
"name": {
"legalName": "Acme Corporation Ltd",
"tradingName": "Acme Corp"
},
"organisationType": "LimitedCompany",
"companyRegistrationNumber": "12345678",
"businessType": "LimitedCompany",
"registredOfficeAddress": {
"line1": "456 Business Park",
"line2": "Suite 100",
"city": "Manchester",
"county": "Greater Manchester",
"postcode": "M1 1AA",
"countryCode": "GB"
},
"correspondenceAddress": {
"line1": "456 Business Park",
"line2": "Suite 100",
"city": "Manchester",
"county": "Greater Manchester",
"postcode": "M1 1AA",
"countryCode": "GB"
},
"companyContactDetails": {
"name": "HR Department",
"email": "hr@acme.com",
"phone": "0161 123 4567"
},
"primaryContactDetails": {
"name": "John Smith",
"email": "john.smith@acme.com",
"phone": "0161 123 4568"
},
"createdBy": "System",
"createdDate": "2024-01-01T00:00:00.000Z",
"updatedBy": "System",
"updatedDate": "2024-01-01T00:00:00.000Z"
},
"taxReferenceNumbers": {
"employerPayeReference": {
"officeNumber": "123",
"referenceNumber": "AB12345"
},
"accountsOfficeReference": "123PX00123456",
"selfAssessmentUniqueTaxpayerReference": "1234567890",
"corporationTaxReferenceUniqueTaxpayerReference": "1234567890"
}
},
"year": 2024,
"period": 2,
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"frequency": "Monthly",
"summaryItems": [
{
"id": "PAYLINE-01JPW80Q2B5B76SQ2K56BZ3DHA",
"description": "Regular Hours",
"amount": 306,
"type": "Employee",
"category": "Earnings",
"payElementId": "base_salary",
"date": "2024-02-28"
},
{
"id": "PAYLINE-01JPW80Q2B5B76SQ2K56BZ3DHA2",
"description": "Basic Tax",
"amount": -45.2,
"type": "Employee",
"category": "Deductions",
"payElementId": "tax",
"date": "2024-02-28"
}
],
"forPeriod": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"tax": 45.2,
"ni": 25.3,
"employerNi": 35.4,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"niBand": {
"A": {
"employeeNi": 290.1,
"employerNi": 310.25,
"totalNi": 600.35,
"grossForEmployeeNi": 3500,
"grossForEmployerNi": 3500,
"bandResults": {
"ZeroToLel": {
"grossInBand": 2000,
"employeeNiForBand": 180,
"employerNiForBand": 220
},
"PtToFust": {
"grossInBand": 500,
"employeeNiForBand": 110.1,
"employerNiForBand": 90.25
}
}
}
},
"statutory": {
"SSP": 0,
"SMP": 0
}
},
"yearToDate": {
"gross": 612,
"grossTaxable": 612,
"grossNi": 612,
"tax": 90.4,
"ni": 50.6,
"employerNi": 70.8,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 471,
"niBand": {
"A": {
"employeeNi": 290.1,
"employerNi": 310.25,
"totalNi": 600.35,
"grossForEmployeeNi": 3500,
"grossForEmployerNi": 3500,
"bandResults": {
"ZeroToLel": {
"grossInBand": 2000,
"employeeNiForBand": 180,
"employerNiForBand": 220
},
"PtToFust": {
"grossInBand": 500,
"employeeNiForBand": 110.1,
"employerNiForBand": 90.25
}
}
}
},
"statutory": {
"SSP": 0,
"SMP": 0
}
},
"createdDate": "2025-03-21T14:17:19.076Z",
"createdBy": "System",
"updatedDate": "2025-03-21T14:17:19.076Z",
"updatedBy": "System",
"status": "Final",
"paymentDate": null,
"payPeriodStartDate": "2024-02-01",
"payPeriodEndDate": "2024-02-29",
"lateReason": null
}
}
}{
"message": {
"text": "Invalid frequency parameter",
"token": "invalidFrequencyParameter",
"tokenArguments": [
{
"name": "frequency",
"value": "InvalidFreq"
}
]
},
"validationIssues": [
{
"field": "calculationName",
"message": "No constants found for UK2024",
"code": "unsupported_formula"
}
]
}{
"message": {
"text": "Employee Id Does Not Exist",
"token": "employeeIdDoesNotExist",
"tokenArguments": [
{
"name": "employeeId",
"value": "EMP01JPW80Q2B7Q9RGGRY29VGC8WM"
}
]
}
}{
"message": {
"text": "Internal Server Error for requestId req-123456",
"token": "getPayslipDataInternalServerError",
"tokenArguments": [
{
"name": "requestId",
"value": "req-123456"
}
]
}
}Authorizations
Access token obtained from OAuth2 client credentials flow
Organisation to scope the request to. Required when the principal can access more than one organisation; optional for single-organisation principals (the authorizer resolves it automatically).
Path Parameters
ID of the employee
Year of the payslip
Pay period number within the year
Query Parameters
Optional payment frequency override. When provided, overrides the frequency from the employee's payroll config.
Available options:
Annual, Monthly, FourWeekly, Fortnightly, Weekly, Daily Optional flag to force the generation of a payslip. If true, the payslip will be generated even if it already exists.
Was this page helpful?
⌘I
Get payslip data for an employee
curl --request GET \
--url https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period} \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}"
headers = {
"X-Auth-Token": "<api-key>",
"X-Org-Id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Token': '<api-key>', 'X-Org-Id': '<api-key>'}};
fetch('https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Auth-Token: <api-key>",
"X-Org-Id: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Token", "<api-key>")
req.Header.Add("X-Org-Id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/payslip/data/{employeeId}/{year}/{period}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Token"] = '<api-key>'
request["X-Org-Id"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"message": {
"text": "Payslip Data Retrieved",
"token": "getPayslipDataRetrieved"
},
"content": {
"data": {
"employeeDetails": {
"id": "EMP01JPW80Q2B7Q9RGGRY29VGC8WM",
"name": {
"title": "Mr",
"firstName": "John",
"lastName": "Doe",
"initials": "JD"
},
"address": {
"line1": "123 Main Street",
"line2": "Apartment 4B",
"city": "London",
"county": "Greater London",
"postcode": "SW1A 1AA",
"countryCode": "GB"
},
"birthDate": "1980-01-12",
"birthGender": "Male",
"payrollId": "PAY123",
"employeeCode": "EMP001",
"hoursWorkedCategory": "Above30Hours",
"taxCode": {
"code": "1257L",
"effectiveDate": "2024-04-06",
"reason": "Standard tax code",
"issuedBy": "HMRC",
"week1Month1": false
},
"nationalInsuranceCategory": "A",
"nationalInsuranceNumber": "AB123456C",
"passportNumber": "123456789",
"starterDetails": {
"startDate": "2024-01-15",
"starterDeclaration": "ThisIsMyOnlyJob",
"secondedDetails": {
"stayStatus": "Stay183DaysOrMore",
"eEACitizen": true,
"ePM6": false
},
"alreadySentToHmrcFps": false
},
"studentDetails": {
"studentLoanDetails": {
"loanType": "Plan2",
"startDate": "2020-09-01",
"endDate": "2023-06-30"
},
"postgraduateLoanDetails": {
"loanType": "PostgraduateLoan",
"startDate": "2023-09-01",
"endDate": "2024-06-30"
}
},
"directorDetails": {
"directorsNICType": "Annual",
"appointmentDate": "2024-01-15"
},
"leaverDetails": {
"leavingDate": "2024-12-31",
"reason": "Retirement",
"issuedBy": "Employer"
},
"workplaceDetails": {
"workplacePostcode": "SW1A 1AA"
},
"bankAccounts": [
{
"accountNumber": "12345678",
"sortCode": "123456",
"accountHolderName": "John Doe",
"isPrimaryPayrollAccount": true,
"allocationPercentage": 100
}
]
},
"employerDetails": {
"id": "LOAD_TEST",
"organisationInformation": {
"organisationId": "ORG123456789",
"name": {
"legalName": "Acme Corporation Ltd",
"tradingName": "Acme Corp"
},
"organisationType": "LimitedCompany",
"companyRegistrationNumber": "12345678",
"businessType": "LimitedCompany",
"registredOfficeAddress": {
"line1": "456 Business Park",
"line2": "Suite 100",
"city": "Manchester",
"county": "Greater Manchester",
"postcode": "M1 1AA",
"countryCode": "GB"
},
"correspondenceAddress": {
"line1": "456 Business Park",
"line2": "Suite 100",
"city": "Manchester",
"county": "Greater Manchester",
"postcode": "M1 1AA",
"countryCode": "GB"
},
"companyContactDetails": {
"name": "HR Department",
"email": "hr@acme.com",
"phone": "0161 123 4567"
},
"primaryContactDetails": {
"name": "John Smith",
"email": "john.smith@acme.com",
"phone": "0161 123 4568"
},
"createdBy": "System",
"createdDate": "2024-01-01T00:00:00.000Z",
"updatedBy": "System",
"updatedDate": "2024-01-01T00:00:00.000Z"
},
"taxReferenceNumbers": {
"employerPayeReference": {
"officeNumber": "123",
"referenceNumber": "AB12345"
},
"accountsOfficeReference": "123PX00123456",
"selfAssessmentUniqueTaxpayerReference": "1234567890",
"corporationTaxReferenceUniqueTaxpayerReference": "1234567890"
}
},
"year": 2024,
"period": 2,
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"frequency": "Monthly",
"summaryItems": [
{
"id": "PAYLINE-01JPW80Q2B5B76SQ2K56BZ3DHA",
"description": "Regular Hours",
"amount": 306,
"type": "Employee",
"category": "Earnings",
"payElementId": "base_salary",
"date": "2024-02-28"
},
{
"id": "PAYLINE-01JPW80Q2B5B76SQ2K56BZ3DHA2",
"description": "Basic Tax",
"amount": -45.2,
"type": "Employee",
"category": "Deductions",
"payElementId": "tax",
"date": "2024-02-28"
}
],
"forPeriod": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"tax": 45.2,
"ni": 25.3,
"employerNi": 35.4,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"niBand": {
"A": {
"employeeNi": 290.1,
"employerNi": 310.25,
"totalNi": 600.35,
"grossForEmployeeNi": 3500,
"grossForEmployerNi": 3500,
"bandResults": {
"ZeroToLel": {
"grossInBand": 2000,
"employeeNiForBand": 180,
"employerNiForBand": 220
},
"PtToFust": {
"grossInBand": 500,
"employeeNiForBand": 110.1,
"employerNiForBand": 90.25
}
}
}
},
"statutory": {
"SSP": 0,
"SMP": 0
}
},
"yearToDate": {
"gross": 612,
"grossTaxable": 612,
"grossNi": 612,
"tax": 90.4,
"ni": 50.6,
"employerNi": 70.8,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 471,
"niBand": {
"A": {
"employeeNi": 290.1,
"employerNi": 310.25,
"totalNi": 600.35,
"grossForEmployeeNi": 3500,
"grossForEmployerNi": 3500,
"bandResults": {
"ZeroToLel": {
"grossInBand": 2000,
"employeeNiForBand": 180,
"employerNiForBand": 220
},
"PtToFust": {
"grossInBand": 500,
"employeeNiForBand": 110.1,
"employerNiForBand": 90.25
}
}
}
},
"statutory": {
"SSP": 0,
"SMP": 0
}
},
"createdDate": "2025-03-21T14:17:19.076Z",
"createdBy": "System",
"updatedDate": "2025-03-21T14:17:19.076Z",
"updatedBy": "System",
"status": "Final",
"paymentDate": null,
"payPeriodStartDate": "2024-02-01",
"payPeriodEndDate": "2024-02-29",
"lateReason": null
}
}
}{
"message": {
"text": "Invalid frequency parameter",
"token": "invalidFrequencyParameter",
"tokenArguments": [
{
"name": "frequency",
"value": "InvalidFreq"
}
]
},
"validationIssues": [
{
"field": "calculationName",
"message": "No constants found for UK2024",
"code": "unsupported_formula"
}
]
}{
"message": {
"text": "Employee Id Does Not Exist",
"token": "employeeIdDoesNotExist",
"tokenArguments": [
{
"name": "employeeId",
"value": "EMP01JPW80Q2B7Q9RGGRY29VGC8WM"
}
]
}
}{
"message": {
"text": "Internal Server Error for requestId req-123456",
"token": "getPayslipDataInternalServerError",
"tokenArguments": [
{
"name": "requestId",
"value": "req-123456"
}
]
}
}