Universal Credit
UC calculator, MIF, taper rate, work allowance, and optimisation for self-employed claimants.
How UC Works for Self-Employed
If you're self-employed and claiming Universal Credit, your payment is calculated based on net self-employment earnings for each monthly assessment period.
Rates (2025/26)
Standard Allowance
| Circumstance | Monthly |
|---|---|
| Single, under 25 | £311.68 |
| Single, 25+ | £393.45 |
| Couple, both under 25 | £489.23 |
| Couple, one 25+ | £617.60 |
Additional Elements
| Element | Monthly |
|---|---|
| First child (born before 6 Apr 2017) | £333.33 |
| First child (born after 6 Apr 2017) | £269.58 |
| Second child | £269.58 |
| Housing element | Varies by area |
| Disabled child (lower) | £156.11 |
| Disabled child (higher) | £487.58 |
| Carer element | £198.31 |
Work Allowance
| Circumstances | Monthly Allowance |
|---|---|
| With housing element | £411 |
| Without housing element | £722 |
Taper Rate
For every £1 earned above the work allowance, 55p deducted from UC payment.
Minimum Income Floor (MIF)
After 12 months of gainful self-employment, DWP assumes earnings of at least:
National minimum wage × expected hours × 52 ÷ 12
Even if you earned less, the MIF amount is used - resulting in a lower UC payment. TaxMTD highlights when the MIF is applied.
UC Calculation Formula
flowchart TD;
A[Gross Income] --> B[Minus Expenses];
B --> C[Net Earnings];
C --> D{MIF applies?};
D -->|Yes| E[Use MIF amount];
D -->|No| F[Use actual earnings];
E --> G[Minus Work Allowance];
F --> G;
G --> H[Multiply by 55%];
H --> I[Taper Reduction];
J[Standard Allowance + Elements] --> K[Total Entitlement];
K --> L[Minus Taper Reduction];
I --> L;
L --> M[UC Payment];
UC Statement Fields
TaxMTD captures the full UC statement breakdown:
| Field | Description |
|---|---|
paymentAmount | Headline payment received |
standardAllowance | Base UC amount |
housingElement | Housing costs support |
childrenElement | Child element totals |
totalEntitlement | Sum of all elements |
minimumIncomeFloor | MIF threshold (if applied) |
usedEarnings | Amount DWP uses for taper |
workAllowance | Earnings before taper |
taperRate | Deduction rate (0.55) |
totalDeductions | All deductions combined |
API
JavaScript
// List UC statements
const statements = await $fetch('https://taxmtd.uk/api/uc-statements')
// Create UC statement with full breakdown
await $fetch('https://taxmtd.uk/api/uc-statements', {
method: 'POST',
body: {
periodId: 1,
assessmentStart: '2026-01-30',
assessmentEnd: '2026-02-27',
paymentDate: '2026-03-15',
paymentAmount: 312.45,
standardAllowance: 393.45,
housingElement: 450.00,
totalEntitlement: 843.45,
claimant2SelfEmploymentEarnings: 1200.00,
minimumIncomeFloor: 1400.00,
usedEarnings: 1400.00,
workAllowance: 411.00,
taperRate: 0.55,
totalDeductions: 531.00,
reportedIncome: 1200,
reportedExpenses: 300
}
})
// Update statement
await $fetch('https://taxmtd.uk/api/uc-statements', {
method: 'PUT',
body: { id: 1, paymentAmount: 320.00 }
})
Python
# List UC statements
statements = requests.get(
"https://taxmtd.uk/api/uc-statements",
cookies=session_cookies,
).json()["data"]
# Create UC statement
requests.post(
"https://taxmtd.uk/api/uc-statements",
json={
"periodId": 1,
"assessmentStart": "2026-01-30",
"assessmentEnd": "2026-02-27",
"paymentAmount": 312.45,
"standardAllowance": 393.45,
"reportedIncome": 1200,
"reportedExpenses": 300,
},
cookies=session_cookies,
)
# Update statement
requests.put(
"https://taxmtd.uk/api/uc-statements",
json={"id": 1, "paymentAmount": 320.00},
cookies=session_cookies,
)
PHP
$statements = Http::get('https://taxmtd.uk/api/uc-statements')->json();
Http::post('https://taxmtd.uk/api/uc-statements', [
'periodId' => 1,
'assessmentStart' => '2026-01-30',
'assessmentEnd' => '2026-02-27',
'paymentAmount' => 312.45,
'standardAllowance' => 393.45,
'reportedIncome' => 1200,
'reportedExpenses' => 300,
]);
Rust
// List UC statements
let statements = client
.get("https://taxmtd.uk/api/uc-statements")
.send().await?
.json::<serde_json::Value>().await?;
// Create UC statement
client.post("https://taxmtd.uk/api/uc-statements")
.json(&serde_json::json!({
"periodId": 1,
"assessmentStart": "2026-01-30",
"assessmentEnd": "2026-02-27",
"paymentAmount": 312.45,
"standardAllowance": 393.45,
"reportedIncome": 1200,
"reportedExpenses": 300
}))
.send().await?;
// Update statement
client.put("https://taxmtd.uk/api/uc-statements")
.json(&serde_json::json!({"id": 1, "paymentAmount": 320.00}))
.send().await?;
cURL
# List statements
curl https://taxmtd.uk/api/uc-statements
# Create statement
curl -X POST https://taxmtd.uk/api/uc-statements \
-H "Content-Type: application/json" \
-d '{"periodId":1,"assessmentStart":"2026-01-30","assessmentEnd":"2026-02-27","reportedIncome":1200,"reportedExpenses":300}'