.json

JSON that mirrors
the v1 schema exactly.

The same shape you get from the API and from the webhook. Stable field order, ISO 8601 timestamps, three-letter currency codes, items as a nested array. If you're piping into another system, this is the cheapest path.

receipt_2yK3pQ.json
JSON
{
  "id": "rcpt_2yK3pQ",
  "status": "completed",
  "language": "en-US",
  "currency": "USD",
  "merchant": { "name": "Brew & Butter", "address": "128 Palm St" },
  "payment": { "method": "card", "brand": "visa", "last4": "4242" },
  "items": [
    {
      "id": "item_01",
      "name": "Oat milk latte",
      "variant": "Large",
      "category": "Drinks",
      "quantity": 1,
      "price": 5.50,
      "tax_rate": 0.085,
      "confidence": 96
    }
  ],
  "subtotal": 25.00,
  "tax": 2.13,
  "total": 27.13,
  "summary": "Five drinks and pastries from a coffee shop, paid by card.",
  "confidence": 94
}

When to use

  • You're piping into a database or another structured system
  • You're building a programmatic integration
  • You want the items array in its native nested shape
  • You need to mirror the webhook payload for offline processing

Probably not the right pick when

  • Your downstream tool only reads spreadsheets (use CSV)
  • You're working with a system that demands XML (use XML)
  • You're sending the data to a person who needs to read it (use the dashboard or a summary view)

The endpoint

POST /v1/receipts/:id/export?format=json
Full docs

FAQ

About the
.json export.

Is this the same shape as the API response?
Yes. Identical to what GET /receipts/:id returns and what the webhook delivers. Versioned at /v1 so the schema stays stable.
How are nullable fields represented?
Missing values come back as null, not omitted. This keeps deserialization predictable in strongly-typed languages and avoids "did the field exist" guessing.
Can I get a stripped-down JSON?
Use the fields query param to project only the fields you need. The shape stays the same, but anything you didn't request comes back null or omitted (your choice via a separate flag).
How do you handle currency precision?
Decimals match the currency's standard precision (USD has 2 decimals, JPY has 0, BHD has 3). Returned as JSON numbers, not strings, but the SDKs surface them as decimal types when the language has them.

Drop the receipt in.
Take the .json.