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.
Base URL
https://receiptconverter.com/api/v1All 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_heresk_live_. The full key is shown only once when created — store it securely.POST /convert
https://receiptconverter.com/api/v1/convertAccepts 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)
| Field | Type | Description |
|---|---|---|
| filerequired | File | Receipt image or PDF. Max 10 MB. Accepted: JPG, PNG, WEBP, HEIC, TIFF, BMP, text-based PDF. |
| file_name | string | Optional filename hint (used when saving to your dashboard). |
Option B — URL (application/json)
| Field | Type | Description |
|---|---|---|
| urlrequired | string | Publicly accessible URL of the receipt image or PDF. |
| file_name | string | Optional 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
| HTTP | error field | Meaning |
|---|---|---|
| 401 | unauthorized | API key missing, invalid, or revoked. |
| 400 | no_file | No file or URL provided. |
| 400 | file_too_large | File exceeds 10 MB. |
| 400 | invalid_file_type | Unsupported file format. |
| 400 | scanned_pdf | PDF is a scanned image — convert to JPG/PNG first. |
| 400 | url_fetch_failed | Could not fetch file from the provided URL. |
| 422 | not_a_receipt | File doesn't appear to be a receipt or invoice. |
| 429 | monthly_limit_reached | Monthly conversion quota exhausted. |
| 500 | conversion_failed | Unexpected internal error. |
Rate limits
API calls share the same monthly quota as your dashboard conversions. Limits reset on the 1st of each month.
| Plan | Monthly conversions | Shared with dashboard |
|---|---|---|
| Free | 10 | Yes |
| Pro | 100 | Yes |
| Pro Plus | Unlimited | Yes |
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)Generate your API key from the dashboard — no extra setup required.
Go to Dashboard →