UC Statements

API reference for Universal Credit statement management and the UC calculator.

List UC Statements

JavaScript
const statements = await $fetch('https://taxmtd.uk/api/uc-statements')
// Returns: Array<UCStatement>
Python
res = requests.get(
    "https://taxmtd.uk/api/uc-statements",
    cookies=session_cookies,
)
statements = res.json()["data"]
PHP
$response = Http::withCookies($session)
    ->get('https://taxmtd.uk/api/uc-statements');

$statements = $response->json()['data'];
Rust
#[derive(Deserialize)]
struct UCStatement {
    id: i64,
    assessment_start: String,
    assessment_end: String,
    payment_amount: Option<f64>,
    standard_allowance: Option<f64>,
    total_entitlement: Option<f64>,
    minimum_income_floor: Option<f64>,
    used_earnings: Option<f64>,
    work_allowance: Option<f64>,
    taper_rate: Option<f64>,
    total_deductions: Option<f64>,
    reported_income: f64,
    reported_expenses: f64,
    uc_payment: Option<f64>,
}

let stmts: Vec<UCStatement> = client
    .get("https://taxmtd.uk/api/uc-statements")
    .send().await?
    .json::<serde_json::Value>().await?["data"]
    .as_array().unwrap()
    .iter()
    .map(|v| serde_json::from_value(v.clone()).unwrap())
    .collect();
cURL
curl https://taxmtd.uk/api/uc-statements

Create UC Statement

Full UC statement with DWP breakdown fields.

JavaScript
await $fetch('https://taxmtd.uk/api/uc-statements', {
  method: 'POST',
  body: {
    // Period
    periodId: 1,
    assessmentStart: '2026-01-30',
    assessmentEnd: '2026-02-27',

    // Payment
    paymentDate: '2026-03-15',
    paymentAmount: 312.45,

    // Entitlement
    standardAllowance: 393.45,
    housingElement: 450.00,
    childrenElement: 269.58,
    totalEntitlement: 1112.03,

    // Claimants
    claimant1Name: 'Jane Doe',
    claimant1Earnings: 800.00,
    claimant2Name: 'John Doe',
    claimant2SelfEmploymentEarnings: 1200.00,
    claimant2PreviousLosses: 0,
    claimant2TotalEarnings: 1200.00,

    // Calculation
    minimumIncomeFloor: 1400.00,
    usedEarnings: 1400.00,
    workAllowance: 411.00,
    taperRate: 0.55,

    // Deductions
    takeHomePay: 440.00,
    savingsDeduction: 0,
    totalDeductions: 984.50,

    // Legacy
    reportedIncome: 1200,
    reportedExpenses: 300,

    // Source file
    sourceFilename: 'uc-statement-march.pdf',
    sourceMimeType: 'application/pdf',
    sourceFile: 'base64-encoded-file-data...'
  }
})
Python
res = requests.post(
    "https://taxmtd.uk/api/uc-statements",
    json={
        "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,
        "minimumIncomeFloor": 1400.00,
        "workAllowance": 411.00,
        "taperRate": 0.55,
        "reportedIncome": 1200,
        "reportedExpenses": 300,
    },
    cookies=session_cookies,
)
data = res.json()["data"]
PHP
$response = Http::withCookies($session)->post(
    'https://taxmtd.uk/api/uc-statements',
    [
        '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,
        'minimumIncomeFloor' => 1400.00,
        'workAllowance' => 411.00,
        'taperRate' => 0.55,
        'reportedIncome' => 1200,
        'reportedExpenses' => 300,
    ]
);

$data = $response->json()['data'];
Rust
let res = 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,
        "minimumIncomeFloor": 1400.00,
        "workAllowance": 411.00,
        "taperRate": 0.55,
        "reportedIncome": 1200,
        "reportedExpenses": 300
    }))
    .send().await?;
cURL
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",
    "paymentAmount": 312.45,
    "standardAllowance": 393.45,
    "reportedIncome": 1200,
    "reportedExpenses": 300
  }'

Update UC Statement

JavaScript
await $fetch('https://taxmtd.uk/api/uc-statements', {
  method: 'PUT',
  body: { id: 1, paymentAmount: 320.00, notes: 'Corrected amount' }
})
Python
res = requests.put(
    "https://taxmtd.uk/api/uc-statements",
    json={"id": 1, "paymentAmount": 320.00, "notes": "Corrected amount"},
    cookies=session_cookies,
)
data = res.json()["data"]
PHP
$response = Http::withCookies($session)->put(
    'https://taxmtd.uk/api/uc-statements',
    ['id' => 1, 'paymentAmount' => 320.00, 'notes' => 'Corrected amount']
);

$data = $response->json()['data'];
Rust
let res = client.put("https://taxmtd.uk/api/uc-statements")
    .json(&serde_json::json!({
        "id": 1,
        "paymentAmount": 320.00,
        "notes": "Corrected amount"
    }))
    .send().await?;
cURL
curl -X PUT https://taxmtd.uk/api/uc-statements \
  -H "Content-Type: application/json" \
  -d '{"id":1,"paymentAmount":320.00}'

Delete UC Statement

JavaScript
await $fetch('https://taxmtd.uk/api/uc-statements', {
  method: 'DELETE',
  body: { id: 1 }
})
Python
res = requests.delete(
    "https://taxmtd.uk/api/uc-statements",
    json={"id": 1},
    cookies=session_cookies,
)
data = res.json()["data"]
PHP
$response = Http::withCookies($session)->delete(
    'https://taxmtd.uk/api/uc-statements',
    ['id' => 1]
);

$data = $response->json()['data'];
Rust
let res = client.delete("https://taxmtd.uk/api/uc-statements")
    .json(&serde_json::json!({ "id": 1 }))
    .send().await?;
cURL
curl -X DELETE https://taxmtd.uk/api/uc-statements \
  -H "Content-Type: application/json" \
  -d '{"id":1}'

UC Statement Data Model

FieldTypeDescription
paymentDatestringDate payment received
paymentAmountnumberHeadline payment amount
standardAllowancenumberBase UC amount
housingElementnumberHousing costs support
childrenElementnumberChild element totals
totalEntitlementnumberSum of all elements
claimant1NamestringName of claimant 1
claimant1EarningsnumberClaimant 1 earnings
claimant2NamestringSelf-employed claimant
claimant2SelfEmploymentEarningsnumberSE gross income
claimant2PreviousLossesnumberCarried-forward losses
minimumIncomeFloornumberMIF threshold
usedEarningsnumberEarnings used by DWP
workAllowancenumberEarnings before taper
taperRatenumberDeduction rate (0.55)
takeHomePaynumberTotal earnings deduction
savingsDeductionnumberCapital/savings deduction
totalDeductionsnumberCombined deductions
sourceFilestringBase64-encoded UC letter
sourceFilenamestringOriginal filename
sourceMimeTypestringMIME type of source