Developer Reference

ReceiptIQ API

Integrate receipt extraction and search into your own product.

Base URLhttps://api.receiptiq.ai

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.

Example — authenticate with an API key
curl https://api.receiptiq.ai/api/receipts \
  -H "Authorization: Bearer riq_aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
  -H "Content-Type: application/json"

Endpoints

GET/api/receipts

List all receipts for the authenticated user, sorted by upload date descending.

Request
// No request body.
Response
[
  {
    "id": "rcpt_abc123",
    "vendor": "Staples",
    "total": 42.99,
    "currency": "USD",
    "date": "2026-03-15",
    "status": "done",
    "created_at": "2026-03-15T14:22:00Z"
  }
]
POST/api/receipts/upload

Upload 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".

Request
// multipart/form-data
// Field: file  (image/jpeg, image/png, application/pdf)
Response
// 202 Accepted
{
  "id": "rcpt_xyz789",
  "status": "queued",
  "vendor": null,
  "total": null,
  "currency": null,
  "date": null,
  "created_at": "2026-04-05T09:11:00Z"
}
POST/api/receipts/upload-zip

Upload a ZIP archive of receipt images/PDFs. Each file is enqueued as a separate background job.

Request
// 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
Response
// 202 Accepted
{
  "accepted": 12,
  "skipped": 2,
  "skipped_reasons": ["logo.svg: unsupported type"],
  "receipt_ids": ["rcpt_001", "rcpt_002"],
  "total_receipts": 12
}
GET/api/receipts/:id

Retrieve a single receipt with full extracted data including line items.

Request
// No request body.
// Replace :id with the receipt ID, e.g. /api/receipts/rcpt_abc123
Response
{
  "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"
}
GET/api/receipts/:id/export/csv

Download the receipt and its line items as a CSV file.

Request
// No request body. Replace :id with the receipt ID.
Response
// 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
POST/api/receipts/:id/retry

Re-run AI extraction on a receipt that failed or returned incomplete data.

Request
// No request body. Replace :id with the receipt ID.
Response
{
  "id": "rcpt_abc123",
  "status": "processing",
  "vendor": null,
  "total": null,
  "created_at": "2026-03-15T14:22:00Z"
}
POST/api/search

Semantic and keyword search across all uploaded receipts. Supports natural language queries.

Request
{
  "query": "coffee shop January"
}
Response
{
  "query": "coffee shop January",
  "results": [
    {
      "id": "rcpt_def456",
      "vendor": "Blue Bottle Coffee",
      "total": 8.50,
      "date": "2026-01-12",
      "score": 0.94
    }
  ]
}
POST/api/insights/ask

Ask 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.

Request
{
  "question": "How much did I spend on coffee last month?"
}
Response
{
  "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.

Free
100 requests / hour
Starter
100 requests / hour
Pro
100 requests / hour