Verify Payslip Authenticity & Math Reconciliation
Audits submitted payslip PDFs or images against 17 deterministic forensic checks. Recomputes gross − tax − deductions = net pay, verifies statutory superannuation rates (11.5% in AU), checks employer ABN Modulo-89 validity, and inspects PDF font rendering streams for spliced glyphs.
Instant execution
Run this verification workflow directly. For instant zero-auth testing with deterministic fixture data, include the Stp-Sandbox: true header.
curl -X POST "https://www.stipple.sh/v1/warrants" \
-H "Authorization: Bearer stp_live_your_key_here" \
-F "file=@payslip_jordan_smith.pdf"Expected JSON response
The engine returns deterministic findings with evidence traces, confidence bounds, and recommended actions:
{
"warrant_id": "war_8f29d10a4b7e",
"document_type": "payslip",
"risk_band": "high",
"recommended_action": "review_before_action",
"quality_score": 0.94,
"inspection_coverage": "complete",
"signals": [
{
"id": "domain.payslip.reconciliation",
"severity": "high",
"category": "arithmetic",
"explanation": "Net pay ($4,250.00) does not equal Gross Pay ($5,000.00) minus Tax Withheld ($1,100.00) and Deductions ($150.00). Expected $3,750.00.",
"evidence": {
"claimed_net": 4250.0,
"calculated_net": 3750.0,
"delta": 500.0
}
},
{
"id": "domain.payslip.superannuation_statutory",
"severity": "medium",
"category": "compliance",
"explanation": "Reported superannuation contribution ($450.00) deviates from statutory 11.5% minimum on Ordinary Time Earnings ($575.00 expected).",
"evidence": {
"claimed_super": 450.0,
"statutory_min": 575.0
}
}
],
"audit_trail_pdf": "https://www.stipple.sh/v1/warrants/war_8f29d10a4b7e/report.pdf"
}Measured benchmark
Dataset measured
210 Australian payslips built from three templates — 192 forged in six catalogued ways, 18 left untouched as controls.
What was measured
Tamper and arithmetic detection recall
Result
79.3% — 138 of the 174 forgeries a forensic check should catch. 100% on broken net pay and statutory super.
Statistical bound
95% CI: 72.7% – 84.7%
Read this before the number: One tamper family accounts for almost the whole miss — a 36-document hole. Without it the aggregate would be 100% rather than 79.3%. The guide names which family and why it is hard.
Full method, corpus and caveats — how the corpus was built and what it does not prove.
AI agent prompt & MCP tool usage
When configuring autonomous agents (Claude Desktop, Cursor, Hermes), use this verified prompt pattern:
You are an automated underwriting assistant.
When a borrower submits an income document:
1. Call Stipple tool verify_document(url="...")
2. If risk_band is "high" or recommended_action is "review_before_action", extract the specific arithmetic discrepancy (e.g. gross pay minus deductions != net pay).
3. Do not reject outright — compile the audit trail for human underwriter sign-off.Input parameters & headers
| Field | Type | Required | Description |
|---|---|---|---|
| file | file (multipart) | Required | Binary PDF, PNG, or JPEG file up to 25MB. |
| country | string | Optional | ISO country hint (e.g. "AU", "NZ", "GB", "US"). Defaults to AU. |
| Stp-Sandbox | header (boolean) | Optional | Set to "true" to return instant fixture data without consuming credits or API quotas. |
Diagnostic signals & failed checks
Each check reports exactly what it tested and what evidence it found. High severity signals trigger an escalated risk band:
Gross pay minus tax withheld and post-tax deductions does not equal stated net pay.
Employer superannuation contribution does not match Australian statutory 11.5% SG rate.
Character glyph streams indicate secondary font overlays or spliced numerical characters.
The 11-digit Australian Business Number (ABN) failed the ATO Modulo-89 checksum validation.
Production considerations & edge cases
- Scanned / Photographed Payslips: Rasterized images lose PDF vector metadata; quality_score will drop and structural signals degrade to OCR estimation.
- Salary Sacrifice & Pre-Tax Deductions: When complex novated leases or super sacrifice exist, inspect the breakdown in the signals array before flagging.
- Consistent Forgeries: If an attacker alters gross, tax, super, and net simultaneously in exact proportion, internal math reconciles; external employer confirmation is required.
Related workflows
Take it to production
The snippets above run against the sandbox with Stp-Sandbox: true — no key, no credits, fixture data. Drop that header and the call is real, which needs a key.
Every key gets a free weekly allowance. Past that, prepaid credit packs cover it, and Errors & limits says what happens when you run out.