Last updated 9 October 2026View as Markdown

Umbrella company pay

POST /v1/umbrella-pay Needs a key

Inside IR35 through an umbrella: the salary its margin and employment costs leave from a day rate, and the take-home on it.

Request

A JSON body. Fields not listed here are rejected.

FieldTypeDescription
income requiredobjectContract income: a day rate per day, or an amount a year, month or week.
income.amount required in incomenumberPounds and pence. Allowed: 0 or more, under 100,000,000.
income.per required in incomestringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
margin requiredobjectThe umbrella's margin.
margin.amount required in marginnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
margin.per required in marginstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
tax_year optionalstringThe tax year, such as 2026-27. The latest when not given. Default "2026-27".
region optionalstringWhere the employee lives: england, scotland, wales or northern_ireland. Needed unless tax_code is given (its S or C prefix sets the region). One of england, scotland, wales, northern_ireland.
pay_frequency optionalstringHow often they are paid: monthly (when not given), four_weekly, two_weekly or weekly. Each period runs through payroll. One of monthly, four_weekly, two_weekly, weekly. Default "monthly".
working_pattern optionalobjectDays and hours a week and weeks a year, for amounts per day or hour: 5 days, 37.5 hours and 52 weeks when not given.
working_pattern.days_per_week optionalnumberDays worked a week: 5 when not given. Allowed: more than 0, up to 7. Default 5.
working_pattern.hours_per_week optionalnumberHours worked a week: 37.5 when not given. Allowed: more than 0, up to 168. Default 37.5.
working_pattern.weeks_per_year optionalnumberWeeks paid a year: 52 when not given. Allowed: 1 to 53. Default 52.
tax_code optionalstringTheir tax code, such as 1257L, S1257L, K475, BR, D0, NT or 0T, with W1 or M1 for the week 1/month 1 basis. Worked out from the income when not given.
ni_category optionalstringNational Insurance category letter: A when not given, C over State Pension age. One of A, B, C, D, E, F, H, I, J, K, L, M, N, S, V, Z. Default "A".
student_loans optionalarray of stringEach loan they repay: plan_1, plan_2, plan_4, plan_5, postgraduate. One of plan_1, plan_2, plan_4, plan_5, postgraduate.
pension optionalobjectTheir pension contribution: method (relief_at_source, net_pay or salary_sacrifice) with a percent (of pay, or of qualifying_earnings as basis) or a fixed amount.
pension.method required in pensionstringHow the contribution is taken: relief_at_source, net_pay or salary_sacrifice. One of relief_at_source, net_pay, salary_sacrifice.
pension.percent optionalnumberA percentage of pensionable pay. Allowed: 0 to 100.
pension.basis optionalstringPensionable pay: all of it (pay), or only automatic enrolment qualifying earnings. Pay when not given. One of pay, qualifying_earnings.
pension.includes optionalarray of stringPay besides salary that is pensionable: overtime, allowances, bonus. One of overtime, allowances, bonus.
pension.amount optionalobjectA fixed contribution instead of a percent.
pension.amount.amount required in pension.amountnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
pension.amount.per required in pension.amountstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
employer_pension optionalstring or objectThe employer's contribution, on top of pay: auto_enrolment_minimum (3% of qualifying earnings), or a percent or amount.
employer_pension.percent optionalnumberA percentage of pensionable pay. Allowed: 0 to 100.
employer_pension.basis optionalstringPensionable pay: all of it (pay), or only automatic enrolment qualifying earnings. Pay when not given. One of pay, qualifying_earnings.
employer_pension.includes optionalarray of stringPay besides salary that is pensionable: overtime, allowances, bonus. One of overtime, allowances, bonus.
employer_pension.amount optionalobjectA fixed contribution instead of a percent.
employer_pension.amount.amount required in employer_pension.amountnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
employer_pension.amount.per required in employer_pension.amountstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
overtime optionalarray of objectOvertime: amounts per period, or hours at a multiple of the hourly rate per period.
overtime[].amount optionalnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
overtime[].per required in overtimestringThe period the amount or hours are for. One of year, month, four_weeks, two_weeks, week, day, hour.
overtime[].hours optionalnumberOvertime hours. Allowed: 0 to 168.
overtime[].multiplier optionalnumberTimes the salary's hourly rate: 1.5 for time and a half. Allowed: 0 to 10.
allowances optionalobjectCash allowances, taxed and NI'd like salary.
allowances.amount required in allowancesnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
allowances.per required in allowancesstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
bonus optionalobjectA one-off bonus, paid in pay_period (the last pay period of the year when not given).
bonus.amount required in bonusnumberThe bonus, in pounds and pence. Allowed: 0 or more, under 100,000,000.
bonus.pay_period optionalintegerThe pay period it is paid in: 1 is the first of the tax year. Allowed: 1 to 52.
salary_sacrifice optionalobjectSalary given up for something other than a pension: free of tax and NI.
salary_sacrifice.amount required in salary_sacrificenumberPounds and pence. Allowed: 0 or more, under 100,000,000.
salary_sacrifice.per required in salary_sacrificestringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
benefits_in_kind optionalobjectTaxable benefits in kind, collected through the tax code.
benefits_in_kind.amount required in benefits_in_kindnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
benefits_in_kind.per required in benefits_in_kindstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
childcare_vouchers optionalobjectChildcare vouchers taken from pay; joined_before_2011 gives the old scheme’s basic rate exempt amount.
childcare_vouchers.amount required in childcare_vouchersnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
childcare_vouchers.per required in childcare_vouchersstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
childcare_vouchers.joined_before_2011 optionalbooleanJoined the scheme before 6 April 2011.
pre_tax_deductions optionalobjectDeductions before tax but after NI, such as payroll giving.
pre_tax_deductions.amount required in pre_tax_deductionsnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
pre_tax_deductions.per required in pre_tax_deductionsstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
post_tax_deductions optionalobjectDeductions from net pay.
post_tax_deductions.amount required in post_tax_deductionsnumberPounds and pence. Allowed: 0 or more, under 100,000,000.
post_tax_deductions.per required in post_tax_deductionsstringThe period the amount is for. One of year, month, four_weeks, two_weeks, week, day, hour.
blind optionalbooleanBlind Person's Allowance.
marriage_allowance optionalstringMarriage Allowance: transferring or receiving. One of transferring, receiving.
married_couples_allowance optionalbooleanClaims Married Couple's Allowance (one of the couple born before 6 April 1935).
child_benefit optionalobjectChild Benefit in the household, for the High Income Child Benefit Charge: the children, and the weeks of the year it is paid (all of them when not given).
child_benefit.children required in child_benefitintegerChildren Child Benefit is paid for. Allowed: 1 to 20.
child_benefit.weeks optionalintegerWeeks of the tax year it is paid for: all of them when not given. Allowed: 1 to 53.
apprenticeship_levy optionalbooleanCounts the Apprenticeship Levy in the umbrella's costs (0.5% of pay, for an umbrella whose pay bill is over £3 million). True when not given. Default true.

Example

cURL

curl https://api.checktakehomepay.co.uk/v1/umbrella-pay \
  -H "Authorization: Bearer $CHECKTAKEHOMEPAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "region": "england",
  "income": {
    "amount": 500,
    "per": "day"
  },
  "margin": {
    "amount": 25,
    "per": "week"
  }
}'

Response

200, with the result and what produced it: tax_year, engine, hmrc_test_data, assumptions and sources. This is the example's real response. Every field's type is in the OpenAPI document.

200 OK
{
  "tax_year": "2026-27",
  "engine": "2026-27.1",
  "hmrc_test_data": "rest of UK and Welsh tax v1.0, Scottish tax v1.1, NI v1.0, directors NI v1.0, student loans v1.0",
  "salary": 112078.45,
  "within_budget": true,
  "cost": {
    "pay": 112078.45,
    "employer_ni": 16061.16,
    "employer_pension": 0,
    "apprenticeship_levy": 560.39,
    "total": 128700
  },
  "employee": {
    "tax_code": "653L",
    "tax_code_derived": true,
    "tax_region": "rest_of_uk",
    "pay_frequency": "monthly",
    "personal_allowance": 6531,
    "adjusted_net_income": 112078.45,
    "benefits_in_kind": 0,
    "married_couples_allowance": 0,
    "childcare_voucher_band": null,
    "child_benefit": null,
    "periods": {
      "year": {
        "gross": 112078.45,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 112078.45,
        "taxable_pay": 112078.45,
        "tax": 34675.6,
        "employee_ni": 4251.6,
        "employer_ni": 16061.16,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 73151.25
      },
      "month": {
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.63,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.94
      },
      "four_weeks": {
        "gross": 8621.42,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 8621.42,
        "taxable_pay": 8621.42,
        "tax": 2667.35,
        "employee_ni": 327.05,
        "employer_ni": 1235.47,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 5627.02
      },
      "two_weeks": {
        "gross": 4310.71,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 4310.71,
        "taxable_pay": 4310.71,
        "tax": 1333.68,
        "employee_ni": 163.52,
        "employer_ni": 617.74,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 2813.51
      },
      "week": {
        "gross": 2155.35,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 2155.35,
        "taxable_pay": 2155.35,
        "tax": 666.84,
        "employee_ni": 81.76,
        "employer_ni": 308.87,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 1406.75
      },
      "day": {
        "gross": 431.07,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 431.07,
        "taxable_pay": 431.07,
        "tax": 133.37,
        "employee_ni": 16.35,
        "employer_ni": 61.77,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 281.35
      },
      "hour": {
        "gross": 57.48,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 57.48,
        "taxable_pay": 57.48,
        "tax": 17.78,
        "employee_ni": 2.18,
        "employer_ni": 8.24,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 37.51
      }
    },
    "payslips": [
      {
        "period": 1,
        "gross": 9339.88,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.88,
        "taxable_pay": 9339.88,
        "tax": 2889.26,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6096.32
      },
      {
        "period": 2,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 3,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 4,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.66,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.91
      },
      {
        "period": 5,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 6,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 7,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.66,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.91
      },
      {
        "period": 8,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 9,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 10,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.66,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.91
      },
      {
        "period": 11,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      },
      {
        "period": 12,
        "gross": 9339.87,
        "salary_sacrifice": 0,
        "childcare_vouchers": 0,
        "pension": 0,
        "pension_contribution": 0,
        "employer_pension": 0,
        "pre_tax_deductions": 0,
        "niable_pay": 9339.87,
        "taxable_pay": 9339.87,
        "tax": 2889.67,
        "employee_ni": 354.3,
        "employer_ni": 1338.43,
        "student_loans": {},
        "post_tax_deductions": 0,
        "take_home": 6095.9
      }
    ],
    "tax_bands": [
      {
        "rate": 20,
        "taxable": 37700,
        "tax": 7540
      },
      {
        "rate": 40,
        "taxable": 67839,
        "tax": 27135.6
      }
    ],
    "rates": {
      "effective": 34.73,
      "marginal": 61.99
    }
  },
  "assumptions": [
    "Inside IR35 through an umbrella: the salary is the largest whose employment cost (employer NI, the Apprenticeship Levy, any employer pension) fits what the margin leaves of the income. within_budget is false when costs that do not depend on salary (a fixed employer pension, say) use up what the margin leaves on their own.",
    "The umbrella pays the Apprenticeship Levy unless apprenticeship_levy is false, and claims no Employment Allowance. Holiday pay held back is not modelled."
  ],
  "sources": [
    "https://www.gov.uk/government/publications/payroll-technical-specifications-income-tax",
    "https://www.gov.uk/government/publications/payroll-technical-specifications-national-insurance",
    "https://www.gov.uk/government/publications/payroll-technical-specifications-student-loans/collection-of-student-loans-from-6-april-2026",
    "https://www.gov.uk/guidance/rates-and-thresholds-for-employers-2026-to-2027",
    "https://www.thepensionsregulator.gov.uk/en/business-advisers/automatic-enrolment-guide-for-business-advisers/minimum-contribution-increases-planned-by-law-phasing"
  ]
}

Errors

  • 400 INVALID_INPUT: the message names each field that is wrong.
  • 401 UNAUTHENTICATED (no key) or INVALID_KEY (a key we don’t know, or a revoked one).

Every code, and how to handle them: Errors.