This version is in beta - expect some breaking changes.

Business Income Source Summary (MTD) API

Dates and amounts
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 retrieve a summary of income and expenditure for a specified self-employment, or property business for a given tax year.

For information on how to connect to this API see the Income Tax MTD end-to-end service guide.

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

Changelog

You can find the changelog in the income-tax-mtd-changelog GitHub wiki.

Support

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

/individuals/self-assessment/income-summary/{nino}/self-employment

Retrieve a Self-Employment Business Income Source Summary (BISS)
GET

This endpoint allows a developer to retrieve a running year-to-date (YTD) summary of the income and expenditure for a specified self-employment business during a tax year.

Authorisation

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

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

Query parameters

Query parameters table
Name Description
taxYear
string
optional

The tax year to which the data applies in the format YYYY-YY. If no tax year is supplied the default is the current tax year. The earliest permitted tax year is 2019-20.

For example: 2019-20

selfEmploymentId
string
required

An identifier for the self-employment business, unique to the customer. Must conform to the regular expression ^X[A-Z0-9]{1}IS[0-9]{11}$

For example: X9IS98470026982

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 read:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention.

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.

Response

HTTP status: 200 (OK)

Self-employment loss summary

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "accountingAdjustments": -30.00,
  "loss": {
    "net": 0.00,
    "taxable": 35.00
  }
}

Self-employment profit summary

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "accountingAdjustments": -30.00,
  "profit": {
    "net": 20.00,
    "taxable": 0.00
  }
}

Response table
Name Description
total
object
required

Object of total values.

income
number
required

The total income for the income source. The value must be between 0 and 99999999999.99.

For example: 100.00

expenses
number
optional

The total expenses for the income source. The value must be between -99999999999.99 and 99999999999.99.

For example: 50.00

additions
number
optional

The total additions to net profit (or deduction to net loss). The value must be between -99999999999.99 and 99999999999.99.

For example: 5.00

deductions
number
optional

The total deductions to net loss (or addition to net profit). The value must be between 0 and 99999999999.99.

For example: 60.00

accountingAdjustments
number
optional

Adjustment for change of accounting practice, for example, cash basis to accrual accounting. The value must be between -99999999999.99 and 99999999999.99.

For example: -30.00

profit
object
optional

An object of profit values.

net
number
optional

The net profit of income source. The value must be between 0 and 99999999999.99.

For example: 20.00

taxable
number
optional

The taxable net profit of the income source. The value must be between 0 and 99999999999.99.

For example: 0.00

loss
object
optional

Object of loss values.

net
number
optional

The net loss of income source. The value must be between 0 and 99999999999.99.

For example: 0.00

taxable
number
optional

The taxable net loss of the income source. The value must be between 0 and 99999999999.99.

For example: 35.00

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 format of the self-employment ID is not valid

400 (Bad Request)

FORMAT_SELF_EMPLOYMENT_ID

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

400 (Bad Request)

RULE_TAX_YEAR_RANGE_INVALID

A self-employment ID was not provided for a self-employment business

400 (Bad Request)

RULE_SELF_EMPLOYMENT_ID

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

No data can be found for the given NINO and request

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 a successful response with profit

LOSS

Simulates a successful response with loss

NOT_FOUND

Simulates a scenario where no data can be found


Close Section
/individuals/self-assessment/income-summary/{nino}/uk-property

Retrieve a UK Property Business Income Source Summary (BISS)
GET

This endpoint allows a developer to retrieve a running year-to-date (YTD) summary of the income and expenditure for a specified UK property business during a tax year.

Authorisation

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

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

Query parameters

Query parameters table
Name Description
taxYear
string
optional

The tax year to which the data applies in the format YYYY-YY. If no tax year is supplied the default is the current tax year. The earliest permitted tax year is 2019-20.

For example: 2019-20

typeOfBusiness
string
required

The type of business the summary calculation is for.

Limited to the following values:
uk-property-non-fhl
uk-prop erty-fhl

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 read:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention.

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.

Response

HTTP status: 200 (OK)

UK Property Summary FHL

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "profit": {
    "net": 50.00,
    "taxable": 0.00
  }
}

UK Property Summary Non FHL

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "loss": {
    "net": 0.00,
    "taxable": 5.00
  }
}

Response table
Name Description
total
object
required

Object of total values.

income
number
required

The total income for the income source. The value must be between 0 and 99999999999.99.

For example: 100.00

expenses
number
optional

The total expenses for the income source. The value must be between -99999999999.99 and 99999999999.99.

For example: 50.00

additions
number
optional

The total additions to net profit (or deduction to net loss). The value must be between -99999999999.99 and 99999999999.99.

For example: 5.00

deductions
number
optional

The total deductions to net loss (or addition to net profit). The value must be between 0 and 99999999999.99.

For example: 60.00

profit
object
optional

An object of profit values.

net
number
optional

The net profit of income source. The value must be between 0 and 99999999999.99.

For example: 20.00

taxable
number
optional

The taxable net profit of the income source. The value must be between 0 and 99999999999.99.

For example: 0.00

loss
object
optional

Object of loss values.

net
number
optional

The net loss of income source. The value must be between 0 and 99999999999.99.

For example: 0.00

taxable
number
optional

The taxable net loss of the income source. The value must be between 0 and 99999999999.99.

For example: 35.00

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 format of the supplied type of business is not valid

400 (Bad Request)

FORMAT_TYPE_OF_BUSINESS

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

No data can be found for the given NINO and request

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 a successful response with profit

LOSS

Simulates a successful response with loss

NOT_FOUND

Simulates a scenario where no data can be found


Close Section
/individuals/self-assessment/income-summary/{nino}/foreign-property

Retrieve a Foreign Property Business Income Source Summary (BISS)
GET

This endpoint allows a developer to retrieve a running (year-to-date) summary of the income and expenditure for a specified foreign property business during a tax year.

Authorisation

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

Path parameters

Path parameters table
Name Description
nino
string
required

National Insurance number, in the format AA999999A.

For example: TC663795B

Query parameters

Query parameters table
Name Description
businessId
string
required

An identifier for the foreign property business, unique to the customer. Must conform to the regular expression^X[A-Z0-9]{1}IS[0-9]{11}$

For example: XAIS12345678910

typeOfBusiness
string
required

The type of business the summary calculation is for.

Limited to the following values:
foreign-property-fhl-eea
foreign-property

taxYear
string
optional

The tax year to which the data applies in the format YYYY-YY. If no tax year is supplied the default is the current tax year. The earliest permitted tax year is 2019-20.

For example: 2019-20

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 read:self-assessment scope.

For example: Bearer bb7fed3fe10dd235a2ccda3d50fb

See also fraud prevention.

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.

Response

HTTP status: 200 (OK)

Foreign Property profit summary

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "profit": {
    "net": 50.00,
    "taxable": 0.00
  }
}

Foreign Property FHL EEA loss summary

{
  "total": {
    "income": 100.00,
    "expenses": 50.00,
    "additions": 5.00,
    "deductions": 60.00
  },
  "loss": {
    "net": 0.00,
    "taxable": 5.00
  }
}

Response table
Name Description
total
object
required

Object of total values.

income
number
required

The total income for the income source. The value must be between 0 and 99999999999.99.

For example: 100.00

expenses
number
optional

The total expenses for the income source. The value must be between -99999999999.99 and 99999999999.99.

For example: 50.00

additions
number
optional

The total additions to net profit (or deduction to net loss). The value must be between -99999999999.99 and 99999999999.99.

For example: 5.00

deductions
number
optional

The total deductions to net loss (or addition to net profit). The value must be between 0 and 99999999999.99.

For example: 60.00

profit
object
optional

Object of profit values.

net
number
optional

The net profit of income source. The value must be between 0 and 99999999999.99.

For example: 20.00

taxable
number
optional

The taxable net profit of the income source. The value must be between 0 and 99999999999.99.

For example: 0.00

loss
object
optional

Object of loss values.

net
number
optional

The net loss of income source. The value must be between 0 and 99999999999.99.

For example: 0.00

taxable
number
optional

The taxable net loss of the income source. The value must be between 0 and 99999999999.99.

For example: 35.00

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 Business ID field is not valid

400 (Bad Request)

FORMAT_BUSINESS_ID

The format of the supplied type of business is not valid

400 (Bad Request)

FORMAT_TYPE_OF_BUSINESS

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

A Business ID was not provided for a foreign property business

400 (Bad Request)

RULE_BUSINESS_ID

A type of business was not provided

400 (Bad Request)

RULE_TYPE_OF_BUSINESS

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 a successful response with profit

LOSS

Simulates a successful response with loss

NOT_FOUND

Simulates a scenario where no data can be found


Close Section

Skip to main content