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.
apikey: tj_live_your_key_here
# or, equivalently:
Authorization: Bearer tj_live_your_key_here3. 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.
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.
{
"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.
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.
