# POST /receipt/scan: $0.03 per call

Photo of a receipt or invoice to clean JSON: shop or supplier, VAT/tax ID, date, currency, line items, subtotal, tax, total and payment details, with the maths checked by code (do the lines add up, does subtotal + tax = total). JPEG, PNG, GIF or WebP up to 5 MB from a public URL. For PDFs and text use invoice-parse. The text read from the image is included.

- **Price:** $0.03 in USDC, the same on Base, Solana, Polygon, Arbitrum. Failed calls are never charged.
- **Free trial:** no, paid only (it uses a paid AI model or data source, or costs more than the trial covers). Other ways to pay: x402 or [prepaid credits](/credits).
- **Tier:** live
- **Answers cached for:** 1 day(s)
- **Data sources:** our image-ocr service (Workers AI: Llama 3.2 11B Vision, metered); Workers AI: Mistral Small 3.1 (metered)
- **Lane:** AI tools ([OpenAPI](/openapi/ai.json))
- **Live health:** [status page](/status)

## Free sample

See an answer for the demo input first, free (no payment, 10 a minute): [https://aayatai.com/sample/receipt-scan](/sample/receipt-scan). It is a stored real answer when we have one, otherwise an example marked `"kind": "illustrative"`.

```bash
curl "https://aayatai.com/sample/receipt-scan"
```

## 1. See the price (free)

Call it without paying: you get `402 Payment Required` and a `PAYMENT-REQUIRED` header with the exact price and where to pay.

```bash
curl -i -X POST https://aayatai.com/receipt/scan -H "content-type: application/json" -d '{"url":"https://aayatai.com/examples/receipt.png"}'
```

## 2. Pay and call (TypeScript)

```bash
npm install @x402/fetch @x402/evm viem
```

```ts
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

// A wallet used only by your agent, holding a little USDC on Base.
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});

const res = await pay("https://aayatai.com/receipt/scan", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({"url":"https://aayatai.com/examples/receipt.png"}),
});
console.log(await res.json());
```

## 3. Or as an MCP tool

```ts
// MCP server: https://aayatai.com/mcp (Streamable HTTP). With the x402 MCP client (see /start):
const result = await client.callTool("receipt-scan", {"url":"https://aayatai.com/examples/receipt.png"});
```

## Inputs

- `url` **(required)** (string): Public image URL of the receipt or invoice (JPEG, PNG, GIF or WebP, up to 5 MB).
- `detail` (string; one of `full`, `brief`; default `full`): brief = key fields only (same price)

Bad inputs are rejected with HTTP 400 before any payment is asked for.

## Example answer

Example only: the shape of an answer, with placeholder addresses and made-up figures. It is not data about any real token or wallet; call the service (or its free sample) for real results.

```json
{
  "documentType": "receipt",
  "supplier": {
    "name": "Example Supplies Ltd",
    "address": "1 High Street, London EC1A 1AA",
    "taxId": "GB123456789",
    "companyNumber": null,
    "email": null,
    "phone": null
  },
  "customer": {
    "name": "Example Buyer Ltd",
    "address": null,
    "taxId": null
  },
  "invoiceNumber": "INV-1042",
  "purchaseOrder": null,
  "issueDate": "2026-09-01",
  "dueDate": "2026-10-01",
  "currency": "GBP",
  "lineItems": [
    {
      "description": "Printer paper",
      "quantity": 2,
      "unitPrice": 4.5,
      "amount": 9,
      "taxRate": 20
    },
    {
      "description": "Toner cartridge",
      "quantity": 1,
      "unitPrice": 51,
      "amount": 51,
      "taxRate": 20
    }
  ],
  "subtotal": 60,
  "tax": 12,
  "discount": null,
  "shipping": null,
  "total": 72,
  "amountPaid": null,
  "amountDue": 72,
  "payment": {
    "iban": null,
    "bic": null,
    "sortCode": null,
    "accountNumber": null,
    "reference": null,
    "terms": null
  },
  "checks": {
    "linesMatchSubtotal": true,
    "totalAddsUp": true,
    "issues": []
  },
  "model": "@cf/mistralai/mistral-small-3.1-24b-instruct",
  "source": {
    "url": "https://aayatai.com/examples/receipt.png",
    "ocrChars": 236
  },
  "ocrText": "Example Supplies Ltd\n1 High Street, London EC1A 1AA\nVAT GB123456789\n...\nTOTAL GBP 72.00"
}
```

## Related

- [POST /invoice/parse](/services/invoice-parse) ($0.02): Parse an invoice or receipt into clean JSON: supplier, VAT/tax ID, invoice number, dates, currency, line items, subtotal, tax, total, amount due and bank detail
- [POST /document/ask](/services/document-ask) ($0.02): Ask a question about one document (PDF, Word, web page or pasted text) and get a short answer with the exact quotes that support it.
- [POST /text/compare](/services/text-compare) ($0.01): What changed between two versions of a text: terms and conditions, a contract, a privacy policy, docs, a pricing page.
- [POST /text/actions](/services/text-actions) ($0.01): Action items from meeting notes, an email thread, a transcript or a chat log: each task with its owner and due date (relative dates like 'next Friday' turned in
- [POST /entities](/services/entities) ($0.005): Named-entity extraction: the organisations, people, places, products, events, dates, amounts of money and laws in a text or document (URL to a page or PDF), wit
- [POST /keywords](/services/keywords) ($0.003): Key phrases and topics of a text, web page or PDF, for tagging, SEO and search indexes: up to 30 key phrases, most important first, each checked by code to real
- [POST /moderate](/services/moderate) ($0.005): Content moderation for AI agents and apps: is this text safe?
- [POST /injection/check](/services/injection-check) ($0.003): Prompt-injection check for AI agents: before your agent reads an untrusted web page, email, file or tool result, check whether it tries to hijack the agent (ign

New here? [Getting started in 60 seconds](/start). All services: [Aayat AI](/).