Skip to content
0s and 1s

Free CIS API and MCP server

Our CIS calculators, for your own software and your AI assistant.

The sums behind our free CIS tools, as a JSON API and an MCP server. Free to use, with no key and no sign-up.

What it covers
The CIS deduction both ways, the tax month and its deadlines, late filing penalties, the gross payment status turnover test, whether to verify before paying, and whether a nil return is due.
What it doesn't touch
It only works things out. There is no sign-in, nothing you send is stored, and it never talks to HMRC or asks for a Government Gateway login.
Money and dates
Send money in pounds, as "1,200.00" or 1200. Answers give each amount in pence and in pounds. Dates are YYYY-MM-DD; where a tool needs today, you send it.
Limits
Up to 60 requests a minute from one address, the API and the MCP server together. Each MCP message counts, so connecting and listing the tools uses three or four. Past that you get a 429 with a Retry-After header. GET answers can be cached for an hour.
Where the answers come from
Each answer lists the GOV.UK guidance and legislation it follows, and links to the page on this site that does the same sum. The answers follow the rules as published. They aren't tax advice and don't come from HMRC.

Add the CIS tools to your AI assistant

The MCP server is at https://0sand1s.co.uk/mcp. It uses Streamable HTTP and needs no sign-in.

Claude

In Claude, open Customize, then Connectors. Choose Add custom connector, name it 0s and 1s, paste the URL above and add it with no sign-in. On a Team or Enterprise plan, an owner adds it under Organization settings, Connectors.

Claude Code

claude mcp add --transport http 0sand1s https://0sand1s.co.uk/mcp

Cursor

In .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project:

{
  "mcpServers": {
    "0sand1s": { "url": "https://0sand1s.co.uk/mcp" }
  }
}

VS Code

In .vscode/mcp.json:

{
  "servers": {
    "0sand1s": { "type": "http", "url": "https://0sand1s.co.uk/mcp" }
  }
}

The CIS API

Each tool takes a GET with a query string or a POST with a JSON body, and answers in JSON. The full description is the OpenAPI document, and /api/v1 lists the tools with an example of each. Bad input gets a 400 with a message for each field.

curl -X POST https://0sand1s.co.uk/api/v1/deduction \
  -H "Content-Type: application/json" \
  -d '{"gross":"1,200.00","vat":"200.00","materials":"300.00","rate":20}'
{
  "tool": "cis_deduction",
  "result": {
    "deduction": { "pence": 14000, "pounds": "£140.00" },
    "net_payment": { "pence": 86000, "pounds": "£860.00" },
    ...
  },
  "summary": "At 20%, deduct £140.00 and pay the subcontractor £860.00 plus £200.00 VAT, £1,060.00 in all.",
  "sources": [{ "title": "GOV.UK, Make deductions and pay subcontractors", "url": "https://www.gov.uk/..." }],
  "see_also": "https://0sand1s.co.uk/tools/cis-calculator"
}

CIS deduction, gross to net

GET or POST /api/v1/deduction, MCP tool cis_deduction

Works out the CIS deduction on a payment to a subcontractor, from the gross bill to the net payment. Takes the gross including VAT, the VAT, the subcontractor's materials and the rate (0, 20 or 30). VAT is never taxed under CIS and materials come off before the rate applies; the deduction is rounded down to the penny. Returns each step of the working, money in pence and pounds. Does not cover retentions, or decide which rate applies (verify the subcontractor with HMRC for that).

Input for cis_deduction
FieldNeededWhat it is
grossYesThe amount being paid, including any VAT, before the CIS deduction. Pounds, as a string like "1,200.00" or a number like 1200.
vatNoThe VAT within the gross. Leave out or 0 under the domestic reverse charge. Pounds, as a string like "1,200.00" or a number like 1200.
materialsNoWhat the subcontractor paid for materials, plant hire, consumables and fuel (not travel) on the job. Without VAT if the subcontractor is VAT registered, with it if not. Pounds, as a string like "1,200.00" or a number like 1200.
rateYesThe subcontractor's CIS rate in per cent: 20 if registered, 30 if not registered or unmatched when verified, 0 for gross payment status
curl "https://0sand1s.co.uk/api/v1/deduction?gross=1,200.00&vat=200.00&materials=300.00&rate=20"

CIS gross up, net to gross

GET or POST /api/v1/gross-up, MCP tool cis_gross_up

Finds the gross amount (excluding VAT) that leaves a given net payment after the CIS deduction, for a subcontractor quoted a take-home figure. Takes the net, the subcontractor's materials and the rate (0, 20 or 30). Where rounding lets two grosses give the same net, the larger is returned so CIS is never under-deducted. Returns the forward working on that gross, money in pence and pounds. VAT is not included; add it on top if the subcontractor charges it.

Input for cis_gross_up
FieldNeededWhat it is
netYesThe payment the subcontractor should receive after the CIS deduction, excluding VAT. Pounds, as a string like "1,200.00" or a number like 1200.
materialsNoThe subcontractor's materials within the payment, as for cis_deduction. Pounds, as a string like "1,200.00" or a number like 1200.
rateYesThe subcontractor's CIS rate in per cent: 20 if registered, 30 if not registered or unmatched when verified, 0 for gross payment status
curl "https://0sand1s.co.uk/api/v1/gross-up?net=860.00&materials=300.00&rate=20"

CIS tax month and deadlines

GET or POST /api/v1/tax-month, MCP tool cis_tax_month

For a date, gives the CIS tax month it falls in (the 6th to the 5th), the tax year, the date the monthly return (CIS300) is due (the 19th, also the date for paying HMRC by any means other than electronically), and the date for paying HMRC electronically (the 22nd, moved back to the banking day before when the 22nd is a weekend or an England and Wales bank holiday). Bank holidays are known to bank_holidays_known_until; after that only weekends move the date.

Input for cis_tax_month
FieldNeededWhat it is
dateYesAny date, such as a payment date or today, YYYY-MM-DD
curl "https://0sand1s.co.uk/api/v1/tax-month?date=2026-10-18"

CIS late filing penalties

GET or POST /api/v1/late-penalties, MCP tool cis_late_penalties

Works out the late filing penalties on one monthly CIS return under Finance Act 2009 Schedule 55: £100 the day after the 19th, £200 at 2 months, then the greater of £300 and 5% of the deductions at 6 and at 12 months (5% alone for a first return). Takes the tax year and month, the filing date or none, today's date, the deductions and whether a return had been filed before. Returns each penalty with its date and whether it is charged, avoided or still to come. Does not cover deliberate withholding, interest on late payment, or appeals.

Input for cis_late_penalties
FieldNeededWhat it is
tax_yearYesThe tax year, by the calendar year it starts in: 2026 for 6 April 2026 to 5 April 2027
tax_monthYesThe tax month, 1 to 12: 1 is 6 April to 5 May, 12 is 6 March to 5 April
filed_onNoThe day the return was filed. Leave out or null if it has not been filed, YYYY-MM-DD
as_atYesToday's date. Penalties on a return not yet filed run to this date, YYYY-MM-DD
deductionsNoThe CIS deductions the return shows, or would show. Leave out or 0 for a nil return. Pounds, as a string like "1,200.00" or a number like 1200.
filed_beforeNotrue if the contractor had already filed a CIS return before this one was due (the usual case). false for the first return, which has no £300 minimum
curl "https://0sand1s.co.uk/api/v1/late-penalties?tax_year=2026&tax_month=3&filed_on=2026-09-24&as_at=2026-10-18&deductions=2,400.00&filed_before=true"

CIS gross payment status turnover test

GET or POST /api/v1/gross-payment-turnover-test, MCP tool cis_gross_payment_turnover_test

Checks the turnover test for CIS gross payment status (Finance Act 2004 Schedule 11, SI 2005/2045 reg 28): £30,000 net construction turnover for a sole trader; for a partnership or company, the lower of £30,000 for each partner or relevant person and £100,000. In a close company, shareholders count as well as directors. Returns the figure needed by each route, which one applies, and how far short. Covers the turnover test only, not the business test or the compliance test.

Input for cis_gross_payment_turnover_test
FieldNeededWhat it is
business_typeYesThe subcontractor's business: sole-trader, partnership or company
partnersNoPartnership only: the number of partners, the highest at any one time in the 12 months
directorsNoCompany only: the number of directors, the highest at any one time in the 12 months
close_companyNoCompany only: true if it is a close company (controlled by 5 or fewer people, or by its directors)
shareholdersNoClose company only: shareholders who are not also directors, each counted once
net_turnoverYesConstruction turnover for the last 12 months, less VAT and the cost of materials. Pounds, as a string like "1,200.00" or a number like 1200.
curl "https://0sand1s.co.uk/api/v1/gross-payment-turnover-test?business_type=company&directors=2&close_company=true&shareholders=1&net_turnover=95,000.00"

Does a CIS subcontractor need verifying?

GET or POST /api/v1/needs-verification, MCP tool cis_needs_verification

Says whether a contractor must verify a subcontractor with HMRC before paying them (SI 2005/2045 reg 6): not needed if the subcontractor was on one of this contractor's CIS returns, or was verified by this contractor, in the tax year of the payment or the two before. Takes the payment date, the tax years the subcontractor was on a return and the last verification date, all supplied by the caller. Does not contact HMRC or verify anyone, and does not cover group companies or business transfers.

Input for cis_needs_verification
FieldNeededWhat it is
payment_dateYesThe date of the payment about to be made, YYYY-MM-DD
included_on_return_in_tax_yearsNoTax years (by the year each starts in) in which this contractor included the subcontractor on a CIS return. An array, or comma-separated like "2025,2026"
last_verified_onNoThe date this contractor last verified the subcontractor with HMRC, if ever, YYYY-MM-DD
curl "https://0sand1s.co.uk/api/v1/needs-verification?payment_date=2026-10-18&included_on_return_in_tax_years=2023"

Is a CIS nil return due?

GET or POST /api/v1/nil-return-check, MCP tool cis_nil_return_check

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.

Input for cis_nil_return_check
FieldNeededWhat it is
tax_yearYesThe tax year, by the calendar year it starts in: 2026 for 6 April 2026 to 5 April 2027
tax_monthYesThe tax month, 1 to 12: 1 is 6 April to 5 May, 12 is 6 March to 5 April
paid_subcontractors_in_monthYestrue if any subcontractor was paid in that tax month, gross payments included
paid_subcontractors_beforeYestrue if the contractor had paid any subcontractor before that tax month started
mainstream_contractorNotrue for a mainstream contractor (a construction business). false for a deemed contractor, which is outside the nil return rule
told_hmrc_no_payments_onNoIf 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
curl "https://0sand1s.co.uk/api/v1/nil-return-check?tax_year=2026&tax_month=6&paid_subcontractors_in_month=false&paid_subcontractors_before=true"

Questions, or a tool you'd like added?

Email support@0sand1s.co.uk. 0s and 1s itself does the CIS jobs: verify subbies, record payments, file the CIS300 and send statements.