---
title: "Is a CIS nil return due?"
method: POST
path: "/api/v1/nil-return-check"
tags: ["CIS"]
---

# Is a CIS nil return due?

`POST /api/v1/nil-return-check`

## Request

- Base URL: `https://0sand1s.co.uk`
- URL: `https://0sand1s.co.uk/api/v1/nil-return-check`
- Auth: none declared

Says whether a contractor must file a CIS nil return for a tax month (SI 2005/2045 reg 4(9A) and (9B), inserted by SI 2026/289 from 6 April 2026): due when a mainstream contractor that has paid subcontractors before pays none that month, unless it told HMRC no later than 14 days before the month started. Takes the tax year and month and yes or no answers. Returns whether a nil return is due, why, and the date it is due. Does not file anything. The same as the GET, with the input as a JSON body.

## Request body

- object
  - `tax_year` integer, required: The tax year, by the calendar year it starts in: 2026 for 6 April 2026 to 5 April 2027
  - `tax_month` integer, required: The tax month, 1 to 12: 1 is 6 April to 5 May, 12 is 6 March to 5 April
  - `paid_subcontractors_in_month` boolean, required: true if any subcontractor was paid in that tax month, gross payments included
  - `paid_subcontractors_before` boolean, required: true if the contractor had paid any subcontractor before that tax month started
  - `mainstream_contractor` boolean: true for a mainstream contractor (a construction business). false for a deemed contractor, which is outside the nil return rule
  - `told_hmrc_no_payments_on` string: If the contractor told HMRC in advance that no payments would be made in that month, the date it did so. Leave out if not, YYYY-MM-DD

## Response `200`

The answer

- ToolResponse
  - `tool` string, required
  - `result` object, required: The answer. Amounts are { pence, pounds } objects; dates are YYYY-MM-DD.
  - `summary` string, required: The answer in one line
  - `sources` object[], required
    - `title` string
    - `url` string, uri
  - `see_also` string, uri, required: The page on 0sand1s.co.uk that does the same sum or explains the rule

## Other responses

- `400`: Input that could not be used, with a message per field
- `429`: More than 60 requests in a minute from one address

---

[API](https://skmtc.dev/0sand1s/apis/0s-and-1s-cis-api.md) · [All operations](https://skmtc.dev/0sand1s/apis/0s-and-1s-cis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/0sand1s/apis/0s-and-1s-cis-api/revisions/caf4279c7477?raw)
