Skip to main content
GOV.UK
Menu
HMRC Developer Hub
  • Documentation
  • Applications
  • Support
  • Service availability

GOV.UK uses cookies to make the site simpler. Find out more about cookies

  1. Home
  2. API Documentation
  3. Individuals Disclosures (MTD) API v1.0 (Beta)
  • Register
  • Sign in
  • Overview
  • Versioning
  • Errors
  • Changelog
  • Support
  • Testing
  • Endpoints
    • Disclosures
 

This version is in beta - expect some breaking changes.

Individuals Disclosures (MTD) API

Available in SandboxYes
Sandbox base URLhttps://test-api.service.hmrc.gov.uk
Available in ProductionNo

Overview

This suite of endpoints allows software packages to create and amend, retrieve, and delete data relating to disclosures.

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" ]      }     ] }

Changelog

You can find the changelog in the individuals-disclosures-api GitHub wiki.

Support

  • Raise non-technical or platform-related issues with the Software Development Support Team (SDST).
  • Raise technical issues on the individuals-disclosures-api 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.

Skip to main content

Endpoints

Disclosures

Resources relating to an individual's disclosures

Disclosures resources

/individuals/disclosures/{nino}/{taxYear}
Retrieve Disclosures [test only]
GET

This endpoint allows a developer to retrieve data related to disclosures, for a given tax year. A National Insurance number and tax year must be provided.

Authorisation

This endpoint is user-restricted and requires an Authorization header containing an OAuth 2.0 Bearer Token with the write:self-assessment scope.

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

taxYear
string
required

The tax year the data applies to, for example, 2021-22. The start year and end year must not span two tax years. The minimum tax year is 2021-22. No gaps are allowed, for example, 2020-22 is not valid. (The minimum tax year in Sandbox is 2019-20.)

For example: 2021-22

Request headers

Request headers Table
Name Description
Accept
required

Specifies the response format and the version of the API to be used.


For example: application/vnd.hmrc.1.0+json
Gov-Test-Scenario
optional

Only in sandbox environment. See Test Data table for all header values.


For example: -
Authorization
required
An OAuth 2.0 Bearer Token with the write:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention for other request headers which will become mandatory.

Response headers

Response headers Table
Name Description
X-CorrelationId
required

Unique ID for operation tracking
String, 36 characters.


For example: c75f40a6-a3df-4429-a697-471eeec46435

See also fraud prevention for other request headers which will become mandatory.

Response

HTTP status: 200 (OK)

{
   "submittedOn": "2020-07-06T09:37:17Z",
   "taxAvoidance": [
      {
         "srn": "14211123",
         "taxYear": "2020-21"
      }
   ],
   "class2Nics": {
      "class2VoluntaryContributions": true
   },
   "links":[
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"create-and-amend-disclosures",
         "method":"PUT"
      },
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"self",
         "method":"GET"
      },
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"delete-disclosures",
         "method":"DELETE"
      }
   ]
}
Response table
Name Description
submittedOn
string
required

The date the disclosures information was added. It must be provided in the format YYYY-MM-DDThh:mm:ssZ

For example: 2020-07-06T09:37:17Z

taxAvoidance
array
optional

Details of tax avoidance scheme

srn
string
required

Scheme Reference Number (SRN) of the tax avoidance scheme.

Must conform to the regular expression ^[0-9]{8}$

For example: 14211123

taxYear
string
required

The tax year in which the expected advantage arises. Date in the format YYYY-YY

Must conform to the regular expression ^[0-9]{4}-[0-9]{2}$

For example: 2020-21

class2Nics
object
optional

Object containing the Voluntary Class 2 National Insurance Contributions toggle

class2VoluntaryContributions
boolean
required

A boolean that will indicate Voluntary Class 2 contributions are to be captured, when set to true. The value must be true or false.

For example: false

links
array
optional

A list of endpoint links that indicate possible actions related to the current resource.

href
string
required

The relative URL of the endpoint.

For example: /individuals/disclosures/AA123456A/2019-20

rel
string
required

A label for the endpoint, which describes how it is related to the current resource. The ‘rel’ will be ‘self’ where the action is retrieval of the same resource.

Limited to the following possible values:

self
create-and-amend-disclosures
delete-disclosures
method
string
required

The HTTP method type for the endpoint.

Limited to the following possible values:

PUT
GET
DELETE

Error scenarios

Error scenarios table
Scenario HTTP status Code

The format of the supplied NINO field is not valid.

400 (Bad Request)

FORMAT_NINO

The format of the supplied tax year field is not valid.

400 (Bad Request)

FORMAT_TAX_YEAR

The specified tax year is not supported. That is, the tax year specified is before the minimum tax year value.

400 (Bad Request)

RULE_TAX_YEAR_NOT_SUPPORTED

Tax year range invalid. A tax year range of one year is required.

400 (Bad Request)

RULE_TAX_YEAR_RANGE_INVALID

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

The supplied income source could not be 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

Simulates success response.

NOT_FOUND

Simulates the scenario where no data is found.

Close section
Create and Amend Disclosures [test only]
PUT

This endpoint allows a developer to create and amend data related to disclosures, for a given tax year. A National Insurance number and tax year must be provided.

Authorisation

This endpoint is user-restricted and requires an Authorization header containing an OAuth 2.0 Bearer Token with the write:self-assessment scope.

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

taxYear
string
required

The tax year the data applies to, for example, 2021-22. The start year and end year must not span two tax years. The minimum tax year is 2021-22. No gaps are allowed, for example, 2020-22 is not valid. (The minimum tax year in Sandbox is 2019-20.)

For example: 2021-22

Request headers

Request headers Table
Name Description
Accept
required

Specifies the response format and the version of the API to be used.


For example: application/vnd.hmrc.1.0+json
Content-Type
required

Specifies the format of the request body, which must be JSON.


For example: application/json
Gov-Test-Scenario
optional

Only in sandbox environment. See Test Data table for all header values.


For example: -
Authorization
required
An OAuth 2.0 Bearer Token with the write:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention for other request headers which will become mandatory.

Request

Scenario: Full Disclosures Amendment
{
  "taxAvoidance": [
    {
      "srn": "14211123",
      "taxYear": "2020-21"
    }
  ],
  "class2Nics": {
    "class2VoluntaryContributions": true
  }
}
Request table
Name Description
taxAvoidance
array
optional

Details of tax avoidance scheme

srn
string
required

Scheme Reference Number (SRN) of the tax avoidance scheme.

Must conform to the regular expression ^[0-9]{8}$

For example: 14211123

taxYear
string
required

The tax year in which the expected advantage arises. Date in the format YYYY-YY

Must conform to the regular expression ^[0-9]{4}-[0-9]{2}$

For example: 2020-21

class2Nics
object
optional

Object containing the Voluntary Class 2 National Insurance Contributions toggle

class2VoluntaryContributions
boolean
required

A boolean that will indicate Voluntary Class 2 contributions are to be captured, when set to true. The value must be true or false.

For example: false

Response headers

Response headers Table
Name Description
X-CorrelationId
required

Unique ID for operation tracking
String, 36 characters.


For example: c75f40a6-a3df-4429-a697-471eeec46435

See also fraud prevention for other request headers which will become mandatory.

Response

HTTP status: 200 (OK)

{
   "links":[
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"create-and-amend-disclosures",
         "method":"PUT"
      },
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"self",
         "method":"GET"
      },
      {
         "href":"/individuals/disclosures/TC663795B/2021-22",
         "rel":"delete-disclosures",
         "method":"DELETE"
      }
   ]
}
Response table
Name Description
links
array
optional

A list of endpoint links that indicate possible actions related to the current resource.

href
string
required

The relative URL of the endpoint.

For example: /individuals/disclosures/AA123456A/2019-20

rel
string
required

A label for the endpoint, which describes how it is related to the current resource. The ‘rel’ will be ‘self’ where the action is retrieval of the same resource.

Limited to the following possible values:

self
create-and-amend-disclosures
delete-disclosures
method
string
required

The HTTP method type for the endpoint.

Limited to the following possible values:

PUT
GET
DELETE

Error scenarios

Error scenarios table
Scenario HTTP status Code

The format of the supplied NINO field is not valid.

400 (Bad Request)

FORMAT_NINO

The format of the supplied tax year field is not valid.

400 (Bad Request)

FORMAT_TAX_YEAR

The specified tax year is not supported. That is, the tax year specified is before the minimum tax year value.

400 (Bad Request)

RULE_TAX_YEAR_NOT_SUPPORTED

Tax year range invalid. A tax year range of one year is required.

400 (Bad Request)

RULE_TAX_YEAR_RANGE_INVALID

The format of the supplied scheme reference number is not valid.

400 (Bad Request)

FORMAT_SRN_INVALID

An empty or non-matching body was submitted.

400 (Bad Request)

RULE_INCORRECT_OR_EMPTY_BODY_SUBMITTED

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

Voluntary Class 2 NICs cannot be changed after 31st Jan following the year of submission.

403 (Forbidden)

RULE_VOLUNTARY_CLASS2_CANNOT_BE_CHANGED

The supplied income source could not be 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

Simulates success response.

VOLUNTARY_CLASS2_CANNOT_BE_CHANGED

Simulates the scenario where Voluntary Class 2 NICs cannot be changed.

NOT_FOUND

Simulates the scenario where no data is found.

Close section
Delete Disclosures [test only]
DELETE

This endpoint allows a developer to delete data related to disclosures, for a given tax year. A National Insurance number and tax year must be provided.

Authorisation

This endpoint is user-restricted and requires an Authorization header containing an OAuth 2.0 Bearer Token with the write:self-assessment scope.

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

taxYear
string
required

The tax year the data applies to, for example, 2021-22. The start year and end year must not span two tax years. The minimum tax year is 2021-22. No gaps are allowed, for example, 2020-22 is not valid. (The minimum tax year in Sandbox is 2019-20.)

For example: 2021-22

Request headers

Request headers Table
Name Description
Accept
required

Specifies the response format and the version of the API to be used.


For example: application/vnd.hmrc.1.0+json
Gov-Test-Scenario
optional

Only in sandbox environment. See Test Data table for all header values.


For example: -
Authorization
required
An OAuth 2.0 Bearer Token with the write:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention for other request headers which will become mandatory.

Response headers

Response headers Table
Name Description
X-CorrelationId
required

Unique ID for operation tracking
String, 36 characters.


For example: a1e8057e-fbbc-47a8-a8b4-78d9f015c253

See also fraud prevention for other request headers which will become mandatory.

Response

HTTP status: 204 (No Content)

Error scenarios

Error scenarios table
Scenario HTTP status Code

The format of the supplied NINO field is not valid.

400 (Bad Request)

FORMAT_NINO

The format of the supplied tax year field is not valid.

400 (Bad Request)

FORMAT_TAX_YEAR

The specified tax year is not supported. That is, the tax year specified is before the minimum tax year value.

400 (Bad Request)

RULE_TAX_YEAR_NOT_SUPPORTED

Tax year range invalid. A tax year range of one year is required.

400 (Bad Request)

RULE_TAX_YEAR_RANGE_INVALID

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

Voluntary Class 2 NICs cannot be changed after 31st Jan following the year of submission.

403 (Forbidden)

RULE_VOLUNTARY_CLASS2_CANNOT_BE_CHANGED

The supplied income source could not be 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

Simulates success response.

VOLUNTARY_CLASS2_CANNOT_BE_CHANGED

Simulates the scenario where Voluntary Class 2 NICs cannot be changed.

NOT_FOUND

Simulates the scenario where no data is found.

Close section
Skip to main content
Is this page not working properly? Is this page not working properly?
  • Cookies
  • Privacy policy
  • Terms and conditions
  • Help using GOV.UK
  • Accessibility statement

Open Government Licence

All content is available under the Open Government Licence v3.0, except where otherwise stated

© Crown Copyright