Docs/API Reference
Docs/API Reference

ReceiptConverter API

Parse any receipt or invoice image into structured JSON — via a single HTTP request. Works with any language, any platform, any automation tool.

REST APIJSON responsesCredit-basedOpenAPI spec ↗Markdown ↗

Base URL

https://receiptconverter.com/api/v1

All responses are Content-Type: application/json. The API is versioned — /v1 will remain stable. Breaking changes will be introduced under a new version path (e.g. /v2) with advance notice.

Authentication

All requests require an API key passed as a Bearer token. Generate keys from your dashboard. Each key is tied to your account plan and shares the same monthly quota as your dashboard usage.

Authorization: Bearer sk_live_your_key_here
Keys start with sk_live_. The full key is shown only once when created — store it securely.

POST /convert

POSThttps://receiptconverter.com/api/v1/convert

Accepts a receipt or invoice as a file upload (multipart/form-data) or as a publicly accessible URL (application/json). Returns structured data including vendor, date, line items, taxes, and totals.

One credit is consumed per successful conversion. Accepted formats: JPG, PNG, WEBP, HEIC, TIFF, BMP, PDF (text-based only — scanned/image PDFs are not supported; export those pages as JPG or PNG first).

Request format

Option A — File upload (multipart/form-data)

FieldTypeDescription
filerequiredFileReceipt image or PDF. Max 10 MB. Accepted: JPG, PNG, WEBP, HEIC, TIFF, BMP, text-based PDF.
file_namestringOptional filename hint (used when saving to your dashboard).

Option B — URL (application/json)

FieldTypeDescription
urlrequiredstringPublicly accessible URL of the receipt image or PDF.
file_namestringOptional filename hint.

Response schema

Successful responses (HTTP 200) return a JSON object with the following shape:

{
  "success": true,
  "processing_ms": 1240,
  "conversions_used": 3,
  "conversions_limit": 100,
  "data": {
    "vendor": "Whole Foods Market",
    "date": "2024-03-15",
    "total": 47.83,
    "subtotal": 43.50,
    "currency": "USD",
    "payment_method": "Visa ****4242",
    "category": "Groceries",
    "tip": null,
    "taxes": [
      { "label": "Sales Tax", "amount": 4.33 }
    ],
    "items": [
      { "name": "Organic Milk 1gal", "quantity": 2, "unit_price": 5.99, "total_price": 11.98 },
      { "name": "Sourdough Bread",   "quantity": 1, "unit_price": 6.49, "total_price": 6.49 }
    ]
  }
}

Error codes

HTTPerror fieldMeaning
401unauthorizedAPI key missing, invalid, or revoked.
400no_fileNo file or URL provided.
400file_too_largeFile exceeds 10 MB.
400invalid_file_typeUnsupported file format.
400scanned_pdfPDF is a scanned image — convert to JPG/PNG first.
400url_fetch_failedCould not fetch file from the provided URL.
422not_a_receiptFile doesn't appear to be a receipt or invoice.
429monthly_limit_reachedMonthly conversion quota exhausted.
500conversion_failedUnexpected internal error.

Rate limits

API calls share the same monthly quota as your dashboard conversions. Limits reset on the 1st of each month.

PlanMonthly conversionsShared with dashboard
Free10Yes
Pro100Yes
Pro PlusUnlimitedYes

Code examples

cURL — file upload

curl -X POST https://receiptconverter.com/api/v1/convert \
  -H "Authorization: Bearer sk_live_your_key_here" \
  -F "file=@/path/to/receipt.jpg" \
  -F "file_name=grocery-march.jpg"

cURL — URL input

curl -X POST https://receiptconverter.com/api/v1/convert \
  -H "Authorization: Bearer sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/receipts/march-2024.jpg"}'

Node.js (v18+)

import { readFileSync } from "node:fs";

const file = new File(
  [readFileSync("receipt.jpg")],
  "receipt.jpg",
  { type: "image/jpeg" }
);

const body = new FormData();
body.append("file", file);
body.append("file_name", "receipt.jpg");

const res = await fetch("https://receiptconverter.com/api/v1/convert", {
  method: "POST",
  headers: { Authorization: "Bearer sk_live_your_key_here" },
  body,
});

const { success, data } = await res.json();
console.log(data.vendor, data.total);
data.items.forEach(item => console.log(item.name, item.total_price));

Python

import requests

with open("receipt.jpg", "rb") as f:
    res = requests.post(
        "https://receiptconverter.com/api/v1/convert",
        headers={"Authorization": "Bearer sk_live_your_key_here"},
        files={"file": ("receipt.jpg", f, "image/jpeg")},
    )

data = res.json()["data"]
print(data["vendor"], data["total"])
for item in data["items"]:
    print(item["name"], item["total_price"])

n8n / Zapier / Make

Use an HTTP Request node with:

Method:  POST
URL:     https://receiptconverter.com/api/v1/convert
Headers: Authorization: Bearer sk_live_your_key_here
Body:    multipart/form-data  →  file = (your file field)
Ready to integrate?

Generate your API key from the dashboard — no extra setup required.

Go to Dashboard →