Receipt verification API
One call takes a receipt or invoice (image or PDF) and returns its fields, deterministic checks (arithmetic, tax rate, dates, currency), a risk score for editing, AI generation or reuse with the reasons, and whether the same receipt was submitted before by you or anyone else. Same tools over REST and MCP.
Get a key (agents can do this themselves)
curl -X POST https://receiptaudit.com/api/v1/keysThe response has an api_key with 50 free checks and a claim_url. Store the key; hand the claim URL to the person you work for. They open it to claim the account and buy prepaid credits (from $49 for 3,000 checks). No dashboard, no card needed to start.
Check a receipt
curl -X POST https://receiptaudit.com/api/v1/receipts/check \
-H "Authorization: Bearer raud_…" \
-H "Content-Type: application/json" \
-d '{"image_url": "https://example.com/receipt.jpg"}'
# or send the file itself
-d '{"image_base64": "'"$(base64 < receipt.jpg)"'"}'{
"checkId": "6f1c…",
"fields": {
"merchant": {
"name": "Blue Bottle Coffee",
"country": "US"
},
"date": "2026-10-03",
"currency": "USD",
"subtotal": 11.5,
"total": 12.53
},
"checks": [
{
"code": "total_matches",
"passed": true,
"severity": "info",
"message": "Subtotal, taxes and tip add up to the total."
}
],
"authenticity": {
"risk": 0.62,
"signals": [
{
"code": "editor_software",
"weight": 0.45,
"message": "EXIF says the image was saved by Adobe Photoshop."
}
]
},
"duplicate": {
"image": null,
"fields": null,
"seenBefore": false
},
"creditsRemaining": 49
}Each check costs 1 credit, refunded automatically if we can't read the file. Treat risk as triage: route high-risk receipts to a person, don't auto-reject on it.
When credits run out
The API answers 402 with code: "payment_required", a fresh claim_url and a pricing_url. Show the claim URL to your human; the key works again as soon as they pay. Check the balance with GET /api/v1/account, or get a new claim link with POST /api/v1/account/link.
Operations
POST /api/v1/receipts/check(check_receipt, needs a key): Extracts the fields of a receipt or invoice (image or PDF, by https URL or base64), checks its arithmetic, tax rate and dates, scores signs that it was edited or AI-generated (with reasons), and reports whether the same receipt was submitted before. Costs 1 credit, refunded if the file can't be read.POST /api/v1/keys(create_api_key): Returns a new API key with 50 free checks and a claim_url. Call this once, store the key, and give the claim_url to your human so they can own the account and add credits.GET /api/v1/account(get_account, needs a key): Returns the remaining credits, whether a person has claimed the account, and how many checks it has run.POST /api/v1/feedback(report_feedback): Report a missing capability, a wrong result or a bug in a sentence or two. A person reads every report. Free, no key needed (send yours to link the report to your account).POST /api/v1/account/link(create_claim_link, needs a key): Returns a new claim_url (valid 30 days) where a person can claim this account and buy credits.
Connect an MCP client
{
"mcpServers": {
"receipt-audit": {
"url": "https://receiptaudit.com/mcp",
"headers": {
"Authorization": "Bearer raud_…"
}
}
}
}Clients that can't set headers can pass api_key as a tool argument. Without a key, call create_api_key first.
Machine-readable descriptions
- OpenAPI: /openapi.json
- Agent guide: /llms.txt
- API catalog (RFC 9727): /.well-known/api-catalog
- MCP server card: server-card.json
Errors, limits and privacy
Errors are RFC 9457 application/problem+json with a stable code and a resolution. Each client may make 60 requests per minute (IETF RateLimit headers; 429 carries Retry-After). Files up to 8 MB: JPEG, PNG, WebP, HEIC or PDF. We don't store receipts: only hashes of the image and key fields, kept for duplicate detection.