Unlock a locked payroll run
Needs permission pay-run:unlock.
Reopens a locked, completed payroll run so its payslips can be changed and the run locked
again. The run answers at once as Reopened (every payslip) or PartiallyReopened (the listed
employees only); the payslips are reopened asynchronously, each keeping the version it had
when the run was locked (see the payslip versions endpoints). Every later locked run of the
payroll config is unlocked with it, with the same scope and reason, because its payslips
were calculated from this run’s cumulatives: the answer lists them as alsoUnlocked, and
they are locked again in period order, this run first (the lock refuses a run while an
earlier one is open). A later run already partially reopened for other employees is
widened instead of skipped: the employees in scope join its current cycle’s unlock (or the
cycle goes to Full), and it is listed under alsoUnlocked too. The same widening is
available on the run itself: unlocking a PartiallyReopened run for more employees, or in
full, adds to its open cycle rather than starting a new one. Every guard is checked on
every run before anything is reopened. A run in a finalised tax year is never unlocked,
and the last period of a tax year is closed once 5 April has passed. The next lock of each
run starts its lock cycle n+1 and issues only the reopened payslips.
curl --request POST \
--url https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock \
--header 'Content-Type: application/json' \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>' \
--data '
{
"scope": "<string>",
"employeeIds": [
"<string>"
],
"reason": "<string>"
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock"
payload = {
"scope": "<string>",
"employeeIds": ["<string>"],
"reason": "<string>"
}
headers = {
"X-Auth-Token": "<api-key>",
"X-Org-Id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Auth-Token': '<api-key>',
'X-Org-Id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({scope: '<string>', employeeIds: ['<string>'], reason: '<string>'})
};
fetch('https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock', 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/payroll/{payrollConfigId}/{year}/{period}/unlock",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scope' => '<string>',
'employeeIds' => [
'<string>'
],
'reason' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock"
payload := strings.NewReader("{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Auth-Token", "<api-key>")
req.Header.Add("X-Org-Id", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Auth-Token"] = '<api-key>'
request["X-Org-Id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": {
"payrollRun": {
"organisationId": "LOAD_TEST",
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"year": 2024,
"period": "2",
"frequency": "Monthly",
"paymentDate": "2024-05-06",
"periodStartDate": "2024-05-06",
"periodEndDate": "2024-06-05",
"payPeriodStartDate": "2024-05-01",
"payPeriodEndDate": "2024-05-31",
"status": "Completed",
"lockStatus": "Locked",
"totalEmployees": 10,
"totalSucceeded": 10,
"totalFailed": 0,
"createdBy": "System",
"createdDate": "2025-03-21T14:17:16.126Z",
"updatedBy": "System",
"updatedDate": "2025-03-21T14:17:19.320Z",
"hmrcDetails": {
"fullPaymentSubmissionReportDetails": {
"hmrcFpsReportStatus": "NotSent",
"hmrcFpsSubmissionId": "<string>",
"hmrcFpsSubmissionDate": "<string>",
"correlationId": "1234567890",
"submissionBody": "<string>",
"submissionResponse": "<string>",
"errors": [
"Error 1",
"Error 2"
],
"submissionDownloadUrl": "<string>",
"previewDownloadUrl": "<string>",
"lateReason": "NotionalPaymentToExpartByThirdPartyOrOverseasEmployer"
}
},
"totalBalances": {
"baseValues": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"grossForEmployerNi": 306,
"grossForEmployerClass1ANi": 306,
"grossPensionable": 306,
"grossForCourtOrders": 306,
"tax": 45.2,
"ni": 25.3,
"pension": 0,
"employerNi": 35.4,
"employerClass1ANI": 35.4,
"employerPension": 0,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"netDeductions": 0,
"totalPayable": 235.5,
"totalEmployerCost": 306,
"niBand": {},
"statutory": {
"SSP": 0,
"SMP": 0
},
"pensionContributionsByType": {
"NetPayArrangement": 0,
"ReliefAtSource": 0,
"SalarySacrifice": 0
},
"qualifyingEarningsForPension": 0,
"apprenticeshipLevy": 1.53,
"employmentAllowance": 0,
"apprenticeshipLevyAllowance": 0,
"statutoryRecovery": {
"StatutoryMaternityPay": {
"reclaimed": 100,
"nicCompensationRecovered": 8.5
}
},
"isEmpty": false,
"pensionRefundsByType": {
"ReliefAtSource": 146.76
},
"employerPensionRefundsByType": {
"ReliefAtSource": 110.07
}
},
"statutoryPaymentsReclaims": {}
},
"payslipContentVersion": 123,
"lockCycle": 1,
"completedDate": "2025-03-21T14:17:19.320Z",
"lockedBy": "System",
"lockedDate": "<string>",
"provisionalAllowances": {
"employmentAllowance": 1250,
"apprenticeshipLevyAllowance": 1250
}
},
"alsoUnlocked": [
{
"organisationId": "LOAD_TEST",
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"year": 2024,
"period": "2",
"frequency": "Monthly",
"paymentDate": "2024-05-06",
"periodStartDate": "2024-05-06",
"periodEndDate": "2024-06-05",
"payPeriodStartDate": "2024-05-01",
"payPeriodEndDate": "2024-05-31",
"status": "Completed",
"lockStatus": "Locked",
"totalEmployees": 10,
"totalSucceeded": 10,
"totalFailed": 0,
"createdBy": "System",
"createdDate": "2025-03-21T14:17:16.126Z",
"updatedBy": "System",
"updatedDate": "2025-03-21T14:17:19.320Z",
"hmrcDetails": {
"fullPaymentSubmissionReportDetails": {
"hmrcFpsReportStatus": "NotSent",
"hmrcFpsSubmissionId": "<string>",
"hmrcFpsSubmissionDate": "<string>",
"correlationId": "1234567890",
"submissionBody": "<string>",
"submissionResponse": "<string>",
"errors": [
"Error 1",
"Error 2"
],
"submissionDownloadUrl": "<string>",
"previewDownloadUrl": "<string>",
"lateReason": "NotionalPaymentToExpartByThirdPartyOrOverseasEmployer"
}
},
"totalBalances": {
"baseValues": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"grossForEmployerNi": 306,
"grossForEmployerClass1ANi": 306,
"grossPensionable": 306,
"grossForCourtOrders": 306,
"tax": 45.2,
"ni": 25.3,
"pension": 0,
"employerNi": 35.4,
"employerClass1ANI": 35.4,
"employerPension": 0,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"netDeductions": 0,
"totalPayable": 235.5,
"totalEmployerCost": 306,
"niBand": {},
"statutory": {
"SSP": 0,
"SMP": 0
},
"pensionContributionsByType": {
"NetPayArrangement": 0,
"ReliefAtSource": 0,
"SalarySacrifice": 0
},
"qualifyingEarningsForPension": 0,
"apprenticeshipLevy": 1.53,
"employmentAllowance": 0,
"apprenticeshipLevyAllowance": 0,
"statutoryRecovery": {
"StatutoryMaternityPay": {
"reclaimed": 100,
"nicCompensationRecovered": 8.5
}
},
"isEmpty": false,
"pensionRefundsByType": {
"ReliefAtSource": 146.76
},
"employerPensionRefundsByType": {
"ReliefAtSource": 110.07
}
},
"statutoryPaymentsReclaims": {}
},
"payslipContentVersion": 123,
"lockCycle": 1,
"completedDate": "2025-03-21T14:17:19.320Z",
"lockedBy": "System",
"lockedDate": "<string>",
"provisionalAllowances": {
"employmentAllowance": 1250,
"apprenticeshipLevyAllowance": 1250
}
}
]
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}Authorizations
Headers
Path Parameters
Body
The body of POST /payroll/{payrollConfigId}/{year}/{period}/unlock.
Why the run is being unlocked. Recorded on the lock cycle and on every payslip version it supersedes. A leaver whose P45 is already issued is reopened like anyone else: the correction reaches HMRC on the next FPS, never as a new P45, and the run's history names them under leaversWithIssuedP45
Response
The run, and every later locked run of the payroll config, is reopened and their payslips are being reopened
Was this page helpful?
curl --request POST \
--url https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock \
--header 'Content-Type: application/json' \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>' \
--data '
{
"scope": "<string>",
"employeeIds": [
"<string>"
],
"reason": "<string>"
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock"
payload = {
"scope": "<string>",
"employeeIds": ["<string>"],
"reason": "<string>"
}
headers = {
"X-Auth-Token": "<api-key>",
"X-Org-Id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Auth-Token': '<api-key>',
'X-Org-Id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({scope: '<string>', employeeIds: ['<string>'], reason: '<string>'})
};
fetch('https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock', 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/payroll/{payrollConfigId}/{year}/{period}/unlock",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scope' => '<string>',
'employeeIds' => [
'<string>'
],
'reason' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock"
payload := strings.NewReader("{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Auth-Token", "<api-key>")
req.Header.Add("X-Org-Id", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/payroll/{payrollConfigId}/{year}/{period}/unlock")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Auth-Token"] = '<api-key>'
request["X-Org-Id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scope\": \"<string>\",\n \"employeeIds\": [\n \"<string>\"\n ],\n \"reason\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": {
"payrollRun": {
"organisationId": "LOAD_TEST",
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"year": 2024,
"period": "2",
"frequency": "Monthly",
"paymentDate": "2024-05-06",
"periodStartDate": "2024-05-06",
"periodEndDate": "2024-06-05",
"payPeriodStartDate": "2024-05-01",
"payPeriodEndDate": "2024-05-31",
"status": "Completed",
"lockStatus": "Locked",
"totalEmployees": 10,
"totalSucceeded": 10,
"totalFailed": 0,
"createdBy": "System",
"createdDate": "2025-03-21T14:17:16.126Z",
"updatedBy": "System",
"updatedDate": "2025-03-21T14:17:19.320Z",
"hmrcDetails": {
"fullPaymentSubmissionReportDetails": {
"hmrcFpsReportStatus": "NotSent",
"hmrcFpsSubmissionId": "<string>",
"hmrcFpsSubmissionDate": "<string>",
"correlationId": "1234567890",
"submissionBody": "<string>",
"submissionResponse": "<string>",
"errors": [
"Error 1",
"Error 2"
],
"submissionDownloadUrl": "<string>",
"previewDownloadUrl": "<string>",
"lateReason": "NotionalPaymentToExpartByThirdPartyOrOverseasEmployer"
}
},
"totalBalances": {
"baseValues": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"grossForEmployerNi": 306,
"grossForEmployerClass1ANi": 306,
"grossPensionable": 306,
"grossForCourtOrders": 306,
"tax": 45.2,
"ni": 25.3,
"pension": 0,
"employerNi": 35.4,
"employerClass1ANI": 35.4,
"employerPension": 0,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"netDeductions": 0,
"totalPayable": 235.5,
"totalEmployerCost": 306,
"niBand": {},
"statutory": {
"SSP": 0,
"SMP": 0
},
"pensionContributionsByType": {
"NetPayArrangement": 0,
"ReliefAtSource": 0,
"SalarySacrifice": 0
},
"qualifyingEarningsForPension": 0,
"apprenticeshipLevy": 1.53,
"employmentAllowance": 0,
"apprenticeshipLevyAllowance": 0,
"statutoryRecovery": {
"StatutoryMaternityPay": {
"reclaimed": 100,
"nicCompensationRecovered": 8.5
}
},
"isEmpty": false,
"pensionRefundsByType": {
"ReliefAtSource": 146.76
},
"employerPensionRefundsByType": {
"ReliefAtSource": 110.07
}
},
"statutoryPaymentsReclaims": {}
},
"payslipContentVersion": 123,
"lockCycle": 1,
"completedDate": "2025-03-21T14:17:19.320Z",
"lockedBy": "System",
"lockedDate": "<string>",
"provisionalAllowances": {
"employmentAllowance": 1250,
"apprenticeshipLevyAllowance": 1250
}
},
"alsoUnlocked": [
{
"organisationId": "LOAD_TEST",
"payrollConfigId": "01JNR9P81W74HYCN35X1EEFDZE",
"year": 2024,
"period": "2",
"frequency": "Monthly",
"paymentDate": "2024-05-06",
"periodStartDate": "2024-05-06",
"periodEndDate": "2024-06-05",
"payPeriodStartDate": "2024-05-01",
"payPeriodEndDate": "2024-05-31",
"status": "Completed",
"lockStatus": "Locked",
"totalEmployees": 10,
"totalSucceeded": 10,
"totalFailed": 0,
"createdBy": "System",
"createdDate": "2025-03-21T14:17:16.126Z",
"updatedBy": "System",
"updatedDate": "2025-03-21T14:17:19.320Z",
"hmrcDetails": {
"fullPaymentSubmissionReportDetails": {
"hmrcFpsReportStatus": "NotSent",
"hmrcFpsSubmissionId": "<string>",
"hmrcFpsSubmissionDate": "<string>",
"correlationId": "1234567890",
"submissionBody": "<string>",
"submissionResponse": "<string>",
"errors": [
"Error 1",
"Error 2"
],
"submissionDownloadUrl": "<string>",
"previewDownloadUrl": "<string>",
"lateReason": "NotionalPaymentToExpartByThirdPartyOrOverseasEmployer"
}
},
"totalBalances": {
"baseValues": {
"gross": 306,
"grossTaxable": 306,
"grossNi": 306,
"grossForEmployerNi": 306,
"grossForEmployerClass1ANi": 306,
"grossPensionable": 306,
"grossForCourtOrders": 306,
"tax": 45.2,
"ni": 25.3,
"pension": 0,
"employerNi": 35.4,
"employerClass1ANI": 35.4,
"employerPension": 0,
"studentLoan": 0,
"postgraduateLoan": 0,
"net": 235.5,
"netDeductions": 0,
"totalPayable": 235.5,
"totalEmployerCost": 306,
"niBand": {},
"statutory": {
"SSP": 0,
"SMP": 0
},
"pensionContributionsByType": {
"NetPayArrangement": 0,
"ReliefAtSource": 0,
"SalarySacrifice": 0
},
"qualifyingEarningsForPension": 0,
"apprenticeshipLevy": 1.53,
"employmentAllowance": 0,
"apprenticeshipLevyAllowance": 0,
"statutoryRecovery": {
"StatutoryMaternityPay": {
"reclaimed": 100,
"nicCompensationRecovered": 8.5
}
},
"isEmpty": false,
"pensionRefundsByType": {
"ReliefAtSource": 146.76
},
"employerPensionRefundsByType": {
"ReliefAtSource": 110.07
}
},
"statutoryPaymentsReclaims": {}
},
"payslipContentVersion": 123,
"lockCycle": 1,
"completedDate": "2025-03-21T14:17:19.320Z",
"lockedBy": "System",
"lockedDate": "<string>",
"provisionalAllowances": {
"employmentAllowance": 1250,
"apprenticeshipLevyAllowance": 1250
}
}
]
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
},
"content": {
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
},
"data": "<unknown>"
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<unknown>"
}
]
}
]
}