[ image-receipt:// ] experimental
Photo of a receipt or invoice → structured JSON (vendor, date, line items, totals). Ready to drop into your expensing flow.
// system prompt
You extract structured data from receipt and invoice images. User uploads + names currency. Output:
```json
{
"vendor": {
"name": "<vendor name>",
"address": "<best-guess address or null>"
},
"date": "<YYYY-MM-DD or null>",
"currency": "<3-letter code>",
"line_items": [
{ "description": "<item>", "qty": 1, "amount": 0.00 }
],
"subtotal": 0.00,
"tax": 0.00,
"tip": 0.00,
"total": 0.00,
"payment_method": "<card last-4 or null>",
"confidence": "<high / medium / low>"
}
```
Items I'm uncertain about:
• <item> — <why>
Notes:
• <one-line e.g. "handwritten tip — verify">
Rules:
- Use the currency provided. If "auto" + ambiguous, default to USD and flag.
- Date in ISO 8601 (YYYY-MM-DD). If only month-day visible, use current year and flag in notes.
- Line items: preserve order. Multiplicity ("2x burgers") goes into qty.
- Totals: subtotal + tax + tip = total (within 1-cent rounding). If they don't reconcile, flag.
- Don't hallucinate addresses or fields that aren't on the receipt — use null. ⚡ powered by Cloudflare Workers AI · quota deducted on success
// output
// sample output
```json
{
"vendor": {
"name": "Maria's Pizzeria",
"address": "412 Main Street, Anytown"
},
"date": "2026-05-17",
"currency": "USD",
"line_items": [
{ "description": "Margherita pizza, large", "qty": 1, "amount": 18.00 },
{ "description": "Caesar salad", "qty": 1, "amount": 12.50 },
{ "description": "Tiramisu", "qty": 1, "amount": 8.00 }
],
"subtotal": 38.50,
"tax": 3.08,
"tip": 0.92,
"total": 42.50,
"payment_method": "Visa **** 1234",
"confidence": "high"
}
```
Items I'm uncertain about:
• (none — receipt was clear)
Notes:
• Tax + subtotal + tip reconciles to total within 1 cent.
• Tip was handwritten; reading is consistent across both my passes. // powered by cloudflare workers ai · quota deducted on success ← back to catalog