Authentication
Every API request requires an Authorization header containing an API key. Create one from Settings → API keys. Keys start with riq_, do not expire, and are scoped to your account — they can only read and write your own receipts. Key management (create, list, revoke) is only available from the dashboard, not over the API.
curl https://api.receiptiq.ai/api/receipts \
-H "Authorization: Bearer riq_aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
-H "Content-Type: application/json"Endpoints
/api/receiptsList all receipts for the authenticated user, sorted by upload date descending.
// No request body.[
{
"id": "rcpt_abc123",
"vendor": "Staples",
"total": 42.99,
"currency": "USD",
"date": "2026-03-15",
"status": "done",
"created_at": "2026-03-15T14:22:00Z"
}
]/api/receipts/uploadUpload a receipt image or PDF. Returns 202 immediately; extraction runs in the background. Poll GET /api/receipts to see status change from "queued" to "done".
// multipart/form-data
// Field: file (image/jpeg, image/png, application/pdf)// 202 Accepted
{
"id": "rcpt_xyz789",
"status": "queued",
"vendor": null,
"total": null,
"currency": null,
"date": null,
"created_at": "2026-04-05T09:11:00Z"
}/api/receipts/upload-zipUpload a ZIP archive of receipt images/PDFs. Each file is enqueued as a separate background job.
// multipart/form-data
// Field: file (application/zip)
// Supported entries: .pdf, .jpg, .jpeg, .png, .webp (max 15 MB each)
// Max ZIP size: 100 MB, max 500 entries// 202 Accepted
{
"accepted": 12,
"skipped": 2,
"skipped_reasons": ["logo.svg: unsupported type"],
"receipt_ids": ["rcpt_001", "rcpt_002"],
"total_receipts": 12
}/api/receipts/:idRetrieve a single receipt with full extracted data including line items.
// No request body.
// Replace :id with the receipt ID, e.g. /api/receipts/rcpt_abc123{
"id": "rcpt_abc123",
"vendor": "Staples",
"total": 42.99,
"currency": "USD",
"date": "2026-03-15",
"status": "done",
"line_items": [
{ "description": "A4 Paper (500 sheets)", "quantity": 2, "unit_price": 14.99, "total": 29.98 },
{ "description": "Ballpoint Pens (12pk)", "quantity": 1, "unit_price": 13.01, "total": 13.01 }
],
"created_at": "2026-03-15T14:22:00Z"
}/api/receipts/:id/export/csvDownload the receipt and its line items as a CSV file.
// No request body. Replace :id with the receipt ID.// Content-Type: text/csv
// Content-Disposition: attachment; filename="receipt_abc123.csv"
id,vendor,total,currency,date,description,quantity,unit_price,line_total
rcpt_abc123,Staples,42.99,USD,2026-03-15,A4 Paper (500 sheets),2,14.99,29.98
rcpt_abc123,Staples,42.99,USD,2026-03-15,Ballpoint Pens (12pk),1,13.01,13.01/api/receipts/:id/retryRe-run AI extraction on a receipt that failed or returned incomplete data.
// No request body. Replace :id with the receipt ID.{
"id": "rcpt_abc123",
"status": "processing",
"vendor": null,
"total": null,
"created_at": "2026-03-15T14:22:00Z"
}/api/searchSemantic and keyword search across all uploaded receipts. Supports natural language queries.
{
"query": "coffee shop January"
}{
"query": "coffee shop January",
"results": [
{
"id": "rcpt_def456",
"vendor": "Blue Bottle Coffee",
"total": 8.50,
"date": "2026-01-12",
"score": 0.94
}
]
}/api/insights/askAsk a natural-language question about your receipts (spend by category, vendor trends, etc). Requires a Starter or Pro plan. May return 503 on first request while the inference GPU warms up — retry after a few seconds.
{
"question": "How much did I spend on coffee last month?"
}{
"answer": "You spent $48.30 on coffee in March 2026 across 7 receipts, mostly at Blue Bottle and Sightglass.",
"citations": [
{ "receipt_id": "rcpt_def456", "vendor": "Blue Bottle Coffee", "total": 8.50, "date": "2026-03-04" }
]
}Rate Limits
Rate limits are enforced per user account on receipt upload endpoints. When exceeded, the API returns 429 Too Many Requests with a Retry-After header.