Getting started

Create an API key and run your first scan: a verbose receipt extraction with curl in under a minute.

Base URL

All API requests go to https://api.tagjet.app. Every path below is relative to that base. Responses are JSON by default.

1. Create an API key

Open Keys & usage in this portal and click "Create a key". Your secret key is shown exactly once, at creation time — copy it immediately and store it somewhere safe. It looks like tj_live_… . If you lose it, revoke the key and create a new one; the API never reveals an existing key again.

2. Authenticate every request

Pass your key in the apikey request header. Tagjet also accepts the standard Authorization: Bearer form if you prefer it. Never embed a key in client-side code or a public repo.

http
apikey: tj_live_your_key_here
# or, equivalently:
Authorization: Bearer tj_live_your_key_here

3. Run your first scan (verbose)

POST a photo or PDF of a receipt or invoice to /v1/receipts/verbose as multipart form data. The verbose endpoint returns the full structured result plus a per-field confidence score for each value, so you can decide what to auto-accept and what to route to a human.

bash
curl https://api.tagjet.app/v1/receipts/verbose \
  -H "apikey: tj_live_your_key_here" \
  -F "file=@receipt.jpg"

What you get back

A JSON document with id, status, processingMs, an overallConfidence (0..1), and a data object whose fields (merchantName, merchantVatId, country, date, currency, totalAmount, taxAmount, line items, …) each carry a value and a confidence. On plans with fraud checks enabled, a quality object is also included with image and tamper signals plus a fraudFlag.

json
{
  "id": "0e0b1f1a-...",
  "status": "DONE",
  "processingMs": 1840,
  "overallConfidence": 0.93,
  "data": {
    "merchantName": { "value": "Lidl", "confidence": 0.97 },
    "date":         { "value": "2026-06-12", "confidence": 0.95 },
    "currency":     { "value": "EUR", "confidence": 0.99 },
    "totalAmount":  { "value": 23.47, "confidence": 0.96 },
    "taxAmount":    { "value": 3.07, "confidence": 0.9 }
  }
}

Other ways to send a document

Instead of multipart, you can POST application/json with either a base64-encoded image (the image field, plus an optional contentType) or a publicly reachable url for Tagjet to fetch. Add "store": false to any request for a parse-only scan that does not retain the original document.

bash
curl https://api.tagjet.app/v1/receipts/verbose \
  -H "apikey: tj_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/receipt.pdf", "language": "de" }'

Next steps

See "Sync vs async" to choose the right endpoint for your latency and volume needs, and "Webhooks & polling" to learn how to receive async results.