Individuals Business End of Period Statement (MTD) API
Date | Amount |
---|---|
Version and status | |
Available in Sandbox | Yes |
Sandbox base URL | https://test-api.service.hmrc.gov.uk |
Available in Production | Yes |
Production base URL | https://api.service.hmrc.gov.uk |
Overview
This API allows a developer to submit a declaration that the submission date for a business is complete.
For information on how to connect to this API see the Income Tax MTD end-to-end service guide.
Send fraud prevention data
HMRC monitors transactions to help protect your customers' confidential data from criminals and fraudsters.
Check the data you need to send. You can also use the Test API during initial development and as part of your quality assurance checks.
Versioning
When an API changes in a way that is backwards-incompatible, we increase the version number of the API. See our reference guide for more on versioning.
Errors
We use standard HTTP status codes to show whether an API request succeeded or not. They are usually in the range:
- 200 to 299 if it succeeded, including code 202 if it was accepted by an API that needs to wait for further action
- 400 to 499 if it failed because of a client error by your application
- 500 to 599 if it failed because of an error on our server
Errors specific to each API are shown in the Endpoints section, under Response. See our reference guide for more on errors.
Single errors will be returned in the following format:
{
"code": "FORMAT_FIELD_NAME",
"message": "The provided FieldName is invalid"
}
Where possible, multiple errors will be returned with INVALID_REQUEST
in the following format:
{
"code": "INVALID_REQUEST",
"message": "Invalid request",
"errors": [
{
"code": "RULE_FIELD_NAME",
"message": "The provided FieldName is not allowed"
},
{
"code": "FORMAT_FIELD_NAME",
"message": "The provided FieldName is invalid"
}
]
}
Where it is possible for the same error to be returned multiple times, message
will describe the expected format and paths
will show the fields which are invalid.
Where arrays are submitted a number indicates the object in the array sequence, for example, /arrayName/1/fieldName
An example with single error:
{
"code": "FORMAT_STRING_NAME",
"message": "The provided field is not valid",
"paths": [ "/arrayName/0/fieldName" ]
}
An example with multiple errors:
{
"code": "INVALID_REQUEST",
"message": "Invalid request",
"errors": [
{
"code": "FORMAT_VALUE",
"message": "The field should be between 0 and 99999999999.99",
"paths": [ "/objectName/fieldName1", "/arrayName/0/fieldName2" ]
},
{
"code": "FORMAT_STRING_NAME",
"message": "The provided field is not valid",
"paths": [ "/arrayName/0/fieldName3", "/arrayName/1/fieldName3" ]
}
]
}
Where the error RULE_BUSINESS_VALIDATION_FAILURE
is returned, an additional error ID is returned.
{
"code":"RULE_BUSINESS_VALIDATION_FAILURE",
"errorId":"C55503",
"message":"UK Property - Cannot submit data for consolidated expenses if the cumulative turnover amount exceeds the threshold. Please amend and resubmit"
}
Changelog
You can find the changelog in the income-tax-mtd-changelog GitHub wiki.
Support
- Raise non-technical or platform-related issues with the Software Development Support Team (SDST).
- Raise technical issues on the income-tax-mtd-changelog GitHub page.
Testing
You can use the sandbox environment to test this API. You can use the Create Test User API or it's frontend service to create test users.
It may not be possible to test all scenarios in the sandbox. You can test some scenarios by passing the Gov-Test-Scenario header. Documentation for each endpoint includes a Test data section, which explains the scenarios that you can simulate using the Gov-Test-Scenario header.
If you have a specific testing need that is not supported in the sandbox, contact our support team.
Some APIs may be marked [test only]. This means that they are not available for use in production and may change.
Endpoints
/individuals/business/end-of-period-statement/{nino}
Submit End of Period Statement for a Business [test only]
POST
This endpoint allows the developer to submit a declaration that the submission data for a business is complete. A National Insurance number is required.
Path parameters
Name | Description |
---|---|
nino
string
required
|
National Insurance number, in the format AA999999A.
For example: |
Request headers
Name | Description |
---|---|
Accept
required
|
Specifies the response format and the version of the API to be used. application/vnd.hmrc.2.0+json
|
Content-Type
required
|
Specifies the format of the request body, which must be JSON. application/json
|
Gov-Test-Scenario
optional
|
Only in sandbox environment. See Test Data table for all header values. -
|
Authorization
required
|
An
OAuth 2.0 Bearer Token
with the write:self-assessment scope.
For example: Bearer bb7fed3fe10dd235a2ccda3d50fb
|
See also fraud prevention.
Request
Scenario: Submit End of Period Statement for a Business
{ "typeOfBusiness": "self-employment", "businessId": "XAIS12345678910", "accountingPeriod" : { "startDate": "2021-04-06", "endDate": "2022-04-05" }, "finalised": true }
Name | Description |
---|---|
typeOfBusiness
string
required
|
The type of business the the declaration is for. Limited to the following possible values: self-employment
uk-property
foreign-property
|
businessId
string
required
|
An identifier for the business, unique to the customer.
Must conform to the regular expression
For example: |
accountingPeriod
object
required
|
Object containing the accounting period start and end dates |
startDate
string
required
|
The date the accounting period started. Must be in the format YYYY-MM-DD.
For example: |
endDate
string
required
|
The date the accounting period ended. Must be in the format YYYY-MM-DD.
For example: |
finalised
boolean
required
|
Indicates the declaration for the finalised statement. The value can only be set to true.
For example: |
Responses
HTTP status 204 (No Content)
Response headers
Name | Description |
---|---|
X-CorrelationId
required
|
Unique ID for operation tracking c75f40a6-a3df-4429-a697-471eeec46435
|
See also fraud prevention.
Error scenarios
Scenario | HTTP status | Code |
---|---|---|
The format of the supplied NINO field is not valid. |
400 (Bad Request) |
FORMAT_NINO |
The format of the supplied type of business is not valid. |
400 (Bad Request) |
FORMAT_TYPE_OF_BUSINESS |
The format of the supplied Business ID field is not valid. |
400 (Bad Request) |
FORMAT_BUSINESS_ID |
The format of the supplied accounting period start date is invalid. |
400 (Bad Request) |
FORMAT_START_DATE |
The format of the supplied accounting period end date is invalid. |
400 (Bad Request) |
FORMAT_END_DATE |
The format of the supplied Finalised field is not valid. |
400 (Bad Request) |
FORMAT_FINALISED |
An empty or non-matching body was submitted. |
400 (Bad Request) |
RULE_INCORRECT_OR_EMPTY_BODY_SUBMITTED |
The End date is before the Start date. |
400 (Bad Request) |
RULE_END_DATE_BEFORE_START_DATE |
The specified tax year is not supported. Either the tax year specified is before the minimum tax year value, or it is after the maximum tax year value. |
400 (Bad Request) |
RULE_TAX_YEAR_NOT_SUPPORTED |
The user has previously submitted an End of Period Statement for this business' accounting period. |
403 (Forbidden) |
RULE_ALREADY_SUBMITTED |
The user has tried to make their End of Period Statement declaration before the accounting period has ended. |
403 (Forbidden) |
RULE_EARLY_SUBMISSION |
The user has tried to make their End of Period Statement declaration too late. |
403 (Forbidden) |
RULE_LATE_SUBMISSION |
An End of Period Statement without a matching accounting period cannot be submitted. |
403 (Forbidden) |
RULE_NON_MATCHING_PERIOD |
The client or agent is not authorised. This is because: the client is not subscribed to MTD, the agent is not subscribed to Agent Services, or the client has not authorised the agent to act on their behalf |
403 (Forbidden) |
CLIENT_OR_AGENT_NOT_AUTHORISED |
There are business validation rule failures. See error response for details. |
403 (Forbidden) |
RULE_BUSINESS_VALIDATION_FAILURE |
Matching resource not found. |
404 (Not Found) |
MATCHING_RESOURCE_NOT_FOUND |
For error scenarios that are common across all APIs, and for error formats, see our reference guide.
Test data
Scenario simulations using Gov-Test-Scenario headers is only available in the sandbox environment.
Header Value (Gov-Test-Scenario) | Scenario |
---|---|
N/A - DEFAULT |
Simulate success response. |
NOT_FOUND |
Simulate scenario where no data found. |
ALREADY_SUBMITTED |
Simulate scenario where the user has previously submitted an End of Period Statement for this business' accounting period. |
EARLY_SUBMISSION |
Simulate scenario where the user has tried to make their End of Period Statement declaration before the accounting period has ended. |
LATE_SUBMISSION |
Simulate scenario where the user has tried to make their End of Period Statement declaration too late. |
NON_MATCHING_PERIOD |
Simulate scenario where an End of Period Statement without a matching accounting period cannot be submitted. |
BVR_MISMATCHED_START_DATE |
Simulate scenario where the period submission start date does not match the accounting period start date. |
BVR_CLASS4_OVER_16 |
Simulate scenario where the user has requested a National Insurance Class 4 exemption but the individual’s age is greater than or equal to 16 years old on the 6th April of the current tax year. |
BVR_CLASS4_PENSION_AGE |
Simulate scenario where the user has requested a National Insurance Class 4 exemption but the individual's age is less than their State Pension age on the 6th April of the current tax year. |
BVR_CONSOLIDATED_EXPENSES |
Simulate scenario where consolidated expenses are not allowed if the cumulative turnover amount exceeds the threshold. |
BVR_END_DATE_SHORT |
Simulate scenario where the period submission end date does not match the accounting period end date. |
BVR_END_DATE_EXCEEDS |
Simulate scenario where the period submission end date does not match the accounting period end date. |
BVR_FHL_PRIVATE_USE_ADJUSTMENT |
Simulate scenario for UK Furnished Holiday Lettings, the private use adjustment exceeds the total allowable expenses. |
BVR_NON_FHL_PRIVATE_USE_ADJUSTMENT |
Simulate scenario for UK non-Furnished Holiday Lettings, the private use adjustment exceeds the total allowable expenses. |
BVR_UK_PROPERTY_MULTIPLE_ERRORS |
Simulate scenario for UK Property where multiple business validation rule errors are returned. |
BUSINESS_VALIDATION_FAILURE |
Simulate a generic BVR failure message. |
TAX_YEAR_NOT_SUPPORTED |
Simulates the scenario where the tax year is not supported. |
Close Section