Receipt Audit

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/keys

The 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

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

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.