Set a contribution override for one pay period
Sets the contribution for the addressed pay period only, replacing the group settings and any standing association override for that period (additional voluntary contributions stay additive on top). Idempotent: repeating the call replaces the override. The automatic enrolment minimum binds per pay reference period, so a below-minimum override needs acknowledgeBelowAutoEnrolmentMinimum. The employee must be in a pension group. Applies to open pay runs only; the period’s payslip is re-processed automatically.
curl --request PUT \
--url https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period} \
--header 'Content-Type: application/json' \
--data '
{
"contributionOverride": {
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"acknowledgeBelowAutoEnrolmentMinimum": true
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}"
payload = {
"contributionOverride": {
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"acknowledgeBelowAutoEnrolmentMinimum": True
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
contributionOverride: {
employeeFactor: 123,
employerFactor: 123,
employeeFixedAmount: 123,
employerFixedAmount: 123
},
acknowledgeBelowAutoEnrolmentMinimum: true
})
};
fetch('https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{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/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'contributionOverride' => [
'employeeFactor' => 123,
'employerFactor' => 123,
'employeeFixedAmount' => 123,
'employerFixedAmount' => 123
],
'acknowledgeBelowAutoEnrolmentMinimum' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}"
payload := strings.NewReader("{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}")
.header("Content-Type", "application/json")
.body("{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}"
response = http.request(request)
puts response.read_body{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {
"employeeId": "<string>",
"taxYear": 123,
"period": 123,
"contributionOverride": {
"contributionType": "Percentage",
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"createdBy": "<string>",
"createdDate": "2023-11-07T05:31:56Z",
"updatedBy": "<string>",
"updatedDate": "2023-11-07T05:31:56Z"
},
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}Body
Per-employee contribution override. When present on an association it fully replaces the pension group's contribution settings.
Show child attributes
Show child attributes
Confirms the period is deliberately below the automatic enrolment minimum, which binds per pay reference period (at least 8% of qualifying earnings in total with at least 3% from the employer; fixed amounts cannot meet it). Without it such an override is rejected.
Response
OK
The response envelope every FlowPayroll API answers with: a message, the
content, and any validationIssues. errors and the top-level
metadata are deprecated copies of validationIssues and
content.metadata, and will be removed.
What happened, as English text and a stable token to translate from.
textId and textParameters are deprecated copies of token and tokenArguments.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Deprecated: the same issues as validationIssues (reasonText is reason, reasonId is reasonToken, reasonParameters is reasonTokenArguments). Read validationIssues; this will be removed.
Show child attributes
Show child attributes
Deprecated: the same values as content.metadata. Read that; this will be removed.
Show child attributes
Show child attributes
Was this page helpful?
curl --request PUT \
--url https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period} \
--header 'Content-Type: application/json' \
--data '
{
"contributionOverride": {
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"acknowledgeBelowAutoEnrolmentMinimum": true
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}"
payload = {
"contributionOverride": {
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"acknowledgeBelowAutoEnrolmentMinimum": True
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
contributionOverride: {
employeeFactor: 123,
employerFactor: 123,
employeeFixedAmount: 123,
employerFixedAmount: 123
},
acknowledgeBelowAutoEnrolmentMinimum: true
})
};
fetch('https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{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/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'contributionOverride' => [
'employeeFactor' => 123,
'employerFactor' => 123,
'employeeFixedAmount' => 123,
'employerFixedAmount' => 123
],
'acknowledgeBelowAutoEnrolmentMinimum' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}"
payload := strings.NewReader("{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}")
.header("Content-Type", "application/json")
.body("{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v2/pension/employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"contributionOverride\": {\n \"employeeFactor\": 123,\n \"employerFactor\": 123,\n \"employeeFixedAmount\": 123,\n \"employerFixedAmount\": 123\n },\n \"acknowledgeBelowAutoEnrolmentMinimum\": true\n}"
response = http.request(request)
puts response.read_body{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {
"employeeId": "<string>",
"taxYear": 123,
"period": 123,
"contributionOverride": {
"contributionType": "Percentage",
"employeeFactor": 123,
"employerFactor": 123,
"employeeFixedAmount": 123,
"employerFixedAmount": 123
},
"createdBy": "<string>",
"createdDate": "2023-11-07T05:31:56Z",
"updatedBy": "<string>",
"updatedDate": "2023-11-07T05:31:56Z"
},
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}{
"message": {
"token": "<string>",
"text": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": null
}
],
"textId": "<string>",
"textParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": null,
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": null
}
]
}
],
"errors": [
{
"field": "<string>",
"reasonText": "<string>",
"reasonId": "<string>",
"reasonParameters": [
{
"key": "<string>",
"value": "<string>"
}
]
}
],
"metadata": {
"dateFormat": "<string>",
"dateTimeFormat": "<string>",
"paginationToken": "<string>"
}
}