Verification & ForensicsPOST /v1/warrants

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.

bash
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:

json
{
  "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:

text
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

FieldTypeRequiredDescription
filefile (multipart)RequiredBinary PDF, PNG, or JPEG file up to 25MB.
countrystringOptionalISO country hint (e.g. "AU", "NZ", "GB", "US"). Defaults to AU.
Stp-Sandboxheader (boolean)OptionalSet 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:

domain.payslip.reconciliationhigh

Gross pay minus tax withheld and post-tax deductions does not equal stated net pay.

domain.payslip.superannuation_statutorymedium

Employer superannuation contribution does not match Australian statutory 11.5% SG rate.

forensics.pdf.font_substitutionhigh

Character glyph streams indicate secondary font overlays or spliced numerical characters.

entity.abn.checksum_invalidhigh

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.

A weekly credit allowance of your own, usage metering, and somewhere for purchased credits to live.

Every key gets a free weekly allowance. Past that, prepaid credit packs cover it, and Errors & limits says what happens when you run out.