Submit EPS manually
Manually submit an EPS (Employer Payment Summary) to HMRC for a specific tax year
curl --request POST \
--url https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual \
--header 'Content-Type: application/json' \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>' \
--data '
{
"taxYear": 2025,
"taxMonth": 1,
"finalSubmissionDetails": {
"becauseSchemeCeased": true,
"dateSchemeCeased": "2024-04-05",
"forYear": true
},
"isPreview": false
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual"
payload = {
"taxYear": 2025,
"taxMonth": 1,
"finalSubmissionDetails": {
"becauseSchemeCeased": True,
"dateSchemeCeased": "2024-04-05",
"forYear": True
},
"isPreview": False
}
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({
taxYear: 2025,
taxMonth: 1,
finalSubmissionDetails: {becauseSchemeCeased: true, dateSchemeCeased: '2024-04-05', forYear: true},
isPreview: false
})
};
fetch('https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual', 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/rti/eps/{taxYear}/manual",
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([
'taxYear' => 2025,
'taxMonth' => 1,
'finalSubmissionDetails' => [
'becauseSchemeCeased' => true,
'dateSchemeCeased' => '2024-04-05',
'forYear' => true
],
'isPreview' => false
]),
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/rti/eps/{taxYear}/manual"
payload := strings.NewReader("{\n \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\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/rti/eps/{taxYear}/manual")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual")
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 \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\n}"
response = http.request(request)
puts response.read_body{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>",
"data": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>..."
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>",
"data": {
"submissionId": "EPS_2025_001",
"taxYear": 2025,
"organisationId": "org_123",
"hmrcEpsReportStatus": "Sent",
"createdDate": "2025-01-01T00:00:00Z",
"createdBy": "user_123",
"updatedDate": "2025-01-02T00:00:00Z",
"updatedBy": "user_456",
"taxMonth": 6,
"submissionBody": "Submission body content",
"correlationID": "corr_123",
"submissionDate": "2025-01-01T00:00:00Z",
"submissionResponse": "Response from HMRC",
"errors": [
"Error message 1",
"Error message 2"
]
}
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>"
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>"
}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
The tax year to submit EPS for
1800 <= x <= 3000Query Parameters
Whether to generate a preview without submitting to HMRC
Body
- Option 1
- Option 2
EPS submission request for tax years 2024-25 and 2025-26
Tax year (2024 or 2025)
2025
Tax month
1 <= x <= 121
Final submission details for tax years 2024/2025 and 2025/2026
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Employment allowance with De Minimis State Aid sectors (tax years before 2026-27)
Show child attributes
Show child attributes
Recoverable amounts for tax years 2024-25 and 2025-26
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether this is a preview
Was this page helpful?
curl --request POST \
--url https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual \
--header 'Content-Type: application/json' \
--header 'X-Auth-Token: <api-key>' \
--header 'X-Org-Id: <api-key>' \
--data '
{
"taxYear": 2025,
"taxMonth": 1,
"finalSubmissionDetails": {
"becauseSchemeCeased": true,
"dateSchemeCeased": "2024-04-05",
"forYear": true
},
"isPreview": false
}
'import requests
url = "https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual"
payload = {
"taxYear": 2025,
"taxMonth": 1,
"finalSubmissionDetails": {
"becauseSchemeCeased": True,
"dateSchemeCeased": "2024-04-05",
"forYear": True
},
"isPreview": False
}
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({
taxYear: 2025,
taxMonth: 1,
finalSubmissionDetails: {becauseSchemeCeased: true, dateSchemeCeased: '2024-04-05', forYear: true},
isPreview: false
})
};
fetch('https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual', 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/rti/eps/{taxYear}/manual",
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([
'taxYear' => 2025,
'taxMonth' => 1,
'finalSubmissionDetails' => [
'becauseSchemeCeased' => true,
'dateSchemeCeased' => '2024-04-05',
'forYear' => true
],
'isPreview' => false
]),
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/rti/eps/{taxYear}/manual"
payload := strings.NewReader("{\n \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\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/rti/eps/{taxYear}/manual")
.header("X-Auth-Token", "<api-key>")
.header("X-Org-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.flowpayroll.ai/v1/rti/eps/{taxYear}/manual")
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 \"taxYear\": 2025,\n \"taxMonth\": 1,\n \"finalSubmissionDetails\": {\n \"becauseSchemeCeased\": true,\n \"dateSchemeCeased\": \"2024-04-05\",\n \"forYear\": true\n },\n \"isPreview\": false\n}"
response = http.request(request)
puts response.read_body{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>",
"data": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>..."
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>",
"data": {
"submissionId": "EPS_2025_001",
"taxYear": 2025,
"organisationId": "org_123",
"hmrcEpsReportStatus": "Sent",
"createdDate": "2025-01-01T00:00:00Z",
"createdBy": "user_123",
"updatedDate": "2025-01-02T00:00:00Z",
"updatedBy": "user_456",
"taxMonth": 6,
"submissionBody": "Submission body content",
"correlationID": "corr_123",
"submissionDate": "2025-01-01T00:00:00Z",
"submissionResponse": "Response from HMRC",
"errors": [
"Error message 1",
"Error message 2"
]
}
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>"
}{
"message": {
"text": "<string>",
"token": "<string>",
"tokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
},
"content": {
"data": {},
"metadata": {
"dateFormat": "yyyy-MM-dd",
"dateTimeFormat": "yyyy-MM-ddTHH:mm:ss.fffZ",
"paginationToken": "<string>"
}
},
"validationIssues": [
{
"field": "<string>",
"reason": "<string>",
"reasonToken": "<string>",
"reasonTokenArguments": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"messageToken": "<string>"
}