API Docs / Schemas / MtdOtherIncomeDto

MtdOtherIncomeDto

Everything HMRC hold for a client's tax year outside their trading income: dividends, savings,
employment income, reliefs and capital gains.

One read, not fourteen. HMRC keep these as fourteen independent resources across five APIs, and
asking for them one at a time costs a round trip per resource all the way down the chain,
re-resolves the client on each, re-reads the same submission stamps on each, and then has to be
paced from the browser so HMRC's rate limiter does not refuse the burst. The MTD service does
all of it in one exchange, because how hard HMRC may be asked is knowledge about HMRC.

Values, not flags. Summarising the five headings and opening the form to edit one of them need
the same reads, so a summary-only read would only put the fourteen calls back one heading at a
time.

Properties

Name Type Description
clientCodestring

The Sodium client the year belongs to, stamped by the API on the way out.

The Sodium client the year belongs to, stamped by the API on the way out.

taxYearstring

The tax year, in HMRC's format, e.g. 2025-26.

The tax year, in HMRC's format, e.g. 2025-26.

unavailableAreasarray of string

The areas HMRC could not be asked about, named as dividends, savings,
employments, reliefs or gains.

One area failing does not fail the read. Fourteen calls is enough that a rate limit or a
momentary outage on one of them is a normal event, and "four areas reported, reliefs could not
be checked" serves a practice far better than an error where a panel should be.

A named area's values mean nothing. Showing "nothing reported" for it would
be a claim about the client's tax position that nobody made — the UI must show no verdict.

The areas HMRC could not be asked about, named as dividends, savings,
employments, reliefs or gains.

One area failing does not fail the read. Fourteen calls is enough that a rate limit or a
momentary outage on one of them is a normal event, and "four areas reported, reliefs could not
be checked" serves a practice far better than an error where a panel should be.

A named area's values mean nothing. Showing "nothing reported" for it would
be a claim about the client's tax position that nobody made — the UI must show no verdict.

ukDividendsMtdUkDividendsDto
foreignDividendsMtdDividendsIncomeDto
savingsAccountsMtdSavingsAccountsDto
otherSavingsMtdOtherSavingsDto
employmentsMtdEmploymentsDto
nonPayeEmploymentMtdNonPayeEmploymentDto
otherEmploymentIncomeMtdOtherEmploymentIncomeDto
reliefsMtdReliefsDto
otherCapitalGainsMtdOtherCapitalGainsDto
residentialDisposalsMtdCgtResidentialDisposalsDto

JSON Example

{
  "clientCode": "string",
  "taxYear": "string",
  "unavailableAreas": [
    "string"
  ],
  "ukDividends": {
    "clientCode": "string",
    "taxYear": "string",
    "isHeld": false,
    "lastAction": "...",
    "ukDividends": "..."
  },
  "foreignDividends": {
    "clientCode": "string",
    "taxYear": "string",
    "isHeld": false,
    "lastAction": "...",
    "dividends": "..."
  }
}

Used By Operations