Extract structured JSON from documents with per-value grounding: every extracted value cites where it came from (page number, confidence), and values that aren't clearly present are reported in not_found rather than hallucinated. Uses the Stipple API (free anonymous tier).
Get the document. URL or local file path (PDF, PNG, JPEG, DOCX).
Choose the extraction mode:
curl -X POST https://www.stipple.sh/v1/extract \
-F "file=@payslip.pdf" \
-F 'fields=[{"name":"employer_name"},{"name":"net_pay"},{"name":"pay_date"}]' \
-H "Authorization: Bearer $STIPPLE_API_KEY"
payslip, tax_invoice, bank_statement, receipt, contract
fields and let the model extract what it findsInterpret the response.
{
"mode": "schema_free",
"document_type": "payslip",
"pages_read": 1,
"fields": {
"employer_name": {"value": "Acme Cleaning Pty Ltd", "confidence": 0.95, "page": 1},
"net_pay": {"value": "2845.10", "confidence": 0.97, "page": 1}
},
"not_found": ["ytd_tax"]
}
confidence (the model's self-report) and page (grounding)not_found[] lists requested fields the model couldn't find — absences are reported, never guessed
pages_read shows how many pages were processed (page limits apply per document)Report honestly. This is extraction, not verification — values are what the document shows, not proof it's genuine:
verify-document skill firstPayslip fields (grounded, not guessed):
Employer Acme Cleaning Pty Ltd (confidence 0.95, page 1)
Employee J. Citizen (confidence 0.98, page 1)
Net pay 2,845.10 (confidence 0.97, page 1)
Superannuation 268.20 (confidence 0.93, page 1)
not_found: ytd_tax
(absences are reported, never hallucinated)
payslip, tax_invoice, bank_statement, receipt, contract — pass as the template form fieldverify-document (run first, for authenticity) — an extracted value from a tampered document is still wrong