Overview
Digitizer API reference
Use the Digitizer API to digitize business documents - invoices, bills, receipts and similar. Upload a scan or a camera photo and get back normalized fields, line items, per-field confidence, and reconciliation warnings — with no templates to configure and nothing to train.
Every business document uses /api/v1/documents and the same public schema. Responses include the page count and a meta.request_id for support. Printed values, calculated amounts, and fields needing review are identified through field_status.
{ success, data, meta }. List endpoints return items and pagination fields inside data. Dates are ISO 8601, amounts are plain decimals, and empty collections come back as [].https://digitizer.ee/api/v1/documentsLine amounts and review
Every document uses the same line schema: net_unit_price and unit_price are net and gross prices before line discounts. subtotal is the net line amount after discounts; vat_amount is its tax; total is its gross amount. The deprecated amount always equals total, including null.
VAT rates use percentage points: 20 means 20%. Unknown or ambiguous values are null. Unit prices may have more decimal places than currency totals. Printed values are retained; calculated line taxes may include a minor-unit adjustment to match document tax totals.
field_status reports read, derived, enriched, or review. Check review_fields and warnings before posting data. Confidence scores are indicative, not guarantees of correctness.
For base64 uploads, send a JSON object with content, content_type, and optional filename. A pages array contains independent files: the synchronous endpoint processes only the first; the batch endpoint processes each separately.
Reference
Endpoints
The reference covers documents, batch jobs, metadata, and workspace usage: documents, jobs, and metadata. Use the request and response schemas in /openapi.json.
Documents
Documents
Upload, retrieve, list, and delete normalized document results.
Base path /api/v1/documents
Extract a document
Upload a PDF or image and receive normalized document data synchronously. Multipart file uploads and base64 JSON are supported. If multiple files or pages entries are supplied, only the first is processed; meta.ignored_files reports the rest. Use the batch endpoint for multiple documents.
https://digitizer.ee/api/v1/documentsBody
filebodyrequired- file·PDF, PNG, JPEG, WEBP, TIFF, or BMP; maximum 25 MiB per file and 10 pages per document.
hintsbody- string·Optional document context, such as a language or vendor name.
raw_textbody- boolean·Include document text when true. Default: false.
regionsbody- boolean·Include located field boxes when true. Coordinates range from 0 to 1000 on each page. Default: false.
Request
curl --request POST \
--url 'https://digitizer.ee/api/v1/documents' \
--header 'X-API-Key: dig_live_xxxxxxxxxxxx' \
--form '[email protected]' \
--form 'regions=true'Response
{
"success": true,
"data": {
"id": "doc_example",
"filename": "invoice-1042.pdf",
"content_type": "application/pdf",
"size_bytes": 48320,
"type": "document",
"status": "processed",
"is_document": true,
"pages": 1,
"confidence": 0.96,
"created_at": "2026-09-22T09:12:44Z",
"processing_ms": 2841,
"extraction": {
"document_number": "INV-1042",
"issue_date": "2026-08-02",
"currency": "USD",
"subtotal": 4200,
"vat_amount": 420,
"total": 4620,
"vat_rates": [
{
"rate": 10,
"net": 4200,
"vat": 420,
"gross": 4620
}
],
"vendor": {
"name": "Northwind Supply Co."
},
"line_items": [
{
"description": "Maintenance service",
"code": "SVC-1042",
"ean": null,
"quantity": 2,
"unit": "hour",
"net_unit_price": 2100,
"unit_price": 2310,
"discount_percent": null,
"discount_amount": null,
"subtotal": 4200,
"vat_rate": 10,
"vat_amount": 420,
"total": 4620,
"amount": 4620
}
]
},
"field_confidence": {
"document_number": 0.99
},
"field_status": {
"document_number": {
"status": "read",
"review": false
},
"line_items[0].total": {
"status": "derived",
"review": false
}
},
"review_fields": [],
"warnings": []
},
"meta": {
"request_id": "req_example"
}
}Returns: A document with normalized fields, line items, review status, and optional field locations and document text.
Create extraction batch
Submit up to 100 documents. The response is HTTP 202 with job ids; poll each job, then fetch its document_id. There is no separate batch polling endpoint. JSON pages entries represent independent documents, not pages to combine.
https://digitizer.ee/api/v1/documents/batchBody
filesbodyrequired- file[]·Repeated files form field; up to 100 files, 25 MiB each.
hintsbody- string·Optional document context, such as a language or vendor name.
raw_textbody- boolean·Include document text when true. Default: false.
regionsbody- boolean·Include located field boxes when true. Coordinates range from 0 to 1000 on each page. Default: false.
Response
{
"success": true,
"data": {
"id": "bat_example",
"status": "queued",
"document_ids": [],
"job_ids": [
"job_example"
],
"count": 1,
"created_at": "2026-09-22T09:12:44Z"
},
"meta": {
"request_id": "req_example"
}
}Returns: A batch acceptance receipt with job ids in upload order.
List documents
Browse the complete document history for this API key, newest first. Pages contain up to 100 documents; follow next_cursor using the same search and filter until it is null. Limit defaults to 25.
https://digitizer.ee/api/v1/documentsParameters
limitquery- integer·Results per page, 1-100. Default: 25.
cursorquery- string·Opaque next_cursor from the previous page. Omit for the first page.
qquery- string·Case-insensitive filename search across all history; maximum 254 characters.
filterquery- string·all (default), review, or duplicates. Applies across all history.
Response
{
"success": true,
"data": {
"items": [
{
"id": "doc_example",
"filename": "invoice-1042.pdf",
"content_type": "application/pdf",
"size_bytes": 48320,
"type": "document",
"status": "processed",
"pages": 1,
"confidence": 0.96,
"created_at": "2026-09-22T09:12:44Z",
"processing_ms": 2841
}
],
"count": 1,
"pagination": {
"limit": 25,
"next_cursor": null
}
},
"meta": {
"request_id": "req_example"
}
}Returns: Document summaries, count, and pagination metadata.
Get document
Retrieve the stored document result. Optional locations and text are available only if requested at upload.
https://digitizer.ee/api/v1/documents/{document_id}Parameters
document_idpathrequired- string·Document id returned by extraction.
Response
{
"success": true,
"data": {
"id": "doc_example",
"filename": "invoice-1042.pdf",
"content_type": "application/pdf",
"size_bytes": 48320,
"type": "document",
"status": "processed",
"is_document": true,
"pages": 1,
"confidence": 0.96,
"created_at": "2026-09-22T09:12:44Z",
"processing_ms": 2841,
"extraction": {
"document_number": "INV-1042",
"issue_date": "2026-08-02",
"currency": "USD",
"subtotal": 4200,
"vat_amount": 420,
"total": 4620,
"vat_rates": [
{
"rate": 10,
"net": 4200,
"vat": 420,
"gross": 4620
}
],
"vendor": {
"name": "Northwind Supply Co."
},
"line_items": [
{
"description": "Maintenance service",
"code": "SVC-1042",
"ean": null,
"quantity": 2,
"unit": "hour",
"net_unit_price": 2100,
"unit_price": 2310,
"discount_percent": null,
"discount_amount": null,
"subtotal": 4200,
"vat_rate": 10,
"vat_amount": 420,
"total": 4620,
"amount": 4620
}
]
},
"field_confidence": {
"document_number": 0.99
},
"field_status": {
"document_number": {
"status": "read",
"review": false
},
"line_items[0].total": {
"status": "derived",
"review": false
}
},
"review_fields": [],
"warnings": []
},
"meta": {
"request_id": "req_example"
}
}Returns: The document result.
Delete document
Remove a document and its extraction from the business. This cannot be undone.
https://digitizer.ee/api/v1/documents/{document_id}Parameters
document_idpathrequired- string·Document id to delete.
Response
{
"success": true,
"data": {
"id": "doc_example",
"deleted": true
},
"meta": {
"request_id": "req_example"
}
}Returns: The deleted id and deleted=true.
Jobs
Jobs
Track documents submitted through batch uploads.
Base path /api/v1/jobs
Get job status
Poll a batch job no faster than once per second. Status is queued, processing, succeeded, or failed. On success, fetch document_id; on failure, inspect error.code.
https://digitizer.ee/api/v1/jobs/{job_id}Parameters
job_idpathrequired- string·Job id from the batch response.
Response
{
"success": true,
"data": {
"id": "job_example",
"status": "succeeded",
"type": "document",
"document_id": "doc_example",
"error": null,
"created_at": "2026-09-22T09:12:44Z",
"updated_at": "2026-09-22T09:12:48Z"
},
"meta": {
"request_id": "req_example"
}
}Returns: Job status and result id or error.
Metadata
Metadata
Discover the schema and inspect business usage.
Base path /api/v1/metadata
List document types
Invoices, receipts, bills, and similar documents share the document type and one schema.
https://digitizer.ee/api/v1/metadata/document-typesResponse
{
"success": true,
"data": {
"items": [
{
"id": "document",
"label": "Document",
"fields": 20
}
]
},
"meta": {
"request_id": "req_example"
}
}Returns: Supported document types and field counts.
List extractable fields
Get top-level field names, data types, nullability, and descriptions. Nested field schemas are defined in /openapi.json.
https://digitizer.ee/api/v1/metadata/fieldsParameters
typequery- string·Only document is supported; default: document.
Response
{
"success": true,
"data": {
"type": "document",
"fields": {
"document_number": {
"type": "string",
"nullable": true,
"description": "Invoice, bill or receipt identifier."
},
"issue_date": {
"type": "date",
"nullable": true,
"description": "Document date, ISO 8601."
},
"due_date": {
"type": "date",
"nullable": true,
"description": "Payment due date."
},
"currency": {
"type": "string",
"nullable": true,
"description": "ISO 4217 currency code."
},
"subtotal": {
"type": "number",
"nullable": true,
"description": "Net of VAT."
},
"vat_amount": {
"type": "number",
"nullable": true,
"description": "Total VAT."
},
"rounding": {
"type": "number",
"nullable": true,
"description": "Rounding adjustment applied to reach the total."
},
"total": {
"type": "number",
"nullable": true,
"description": "Gross amount printed."
},
"amount_due": {
"type": "number",
"nullable": true,
"description": "Unpaid balance."
},
"vat_rates": {
"type": "array",
"nullable": true,
"description": "VAT per rate: rate, net, vat, gross."
},
"vendor": {
"type": "object",
"nullable": true,
"description": "Issuing party."
},
"customer": {
"type": "object",
"nullable": true,
"description": "Billed party."
},
"line_items": {
"type": "array",
"nullable": false,
"description": "Line item rows: description, code, ean, quantity, unit, gross unit_price, net_unit_price, discount_percent, discount_amount, subtotal, vat_rate, vat_amount, total. amount is a deprecated alias of total."
},
"banks": {
"type": "array",
"nullable": true,
"description": "Every bank printed for payment: name, iban, swift_bic."
},
"account_number": {
"type": "string",
"nullable": true,
"description": "Customer account number."
},
"previous_balance": {
"type": "number",
"nullable": true,
"description": "Balance carried forward."
},
"payments_credits": {
"type": "number",
"nullable": true,
"description": "Payments and credits applied."
},
"service_address": {
"type": "string",
"nullable": true,
"description": "Address the service applies to."
},
"consumption": {
"type": "object",
"nullable": true,
"description": "unit and value for metered documents."
},
"payment": {
"type": "object",
"nullable": true,
"description": "Payment: method, card_number, card_last4, auth_code, reference, receipt_number, amount, tendered, change."
}
}
},
"meta": {
"request_id": "req_example"
}
}Returns: The selected type and its field definitions.
Get usage
Return all-time processing usage for the current business from its durable ledger, including usage for deleted documents. Legacy configured API keys report retained documents without a history cap.
https://digitizer.ee/api/v1/usageResponse
{
"success": true,
"data": {
"documents": 128,
"pages": 143,
"by_type": {
"document": 128
},
"last_request_at": "2026-09-22T09:12:44Z"
},
"meta": {
"request_id": "req_example"
}
}Returns: Business document counts, page counts, and last successful processing time.
Callbacks
Callbacks
Connect a business to your software with signed document notifications.
Base path /api/v1/callbacks
Get callback settings
Returns the current business callback and latest 20 deliveries. Signing secrets are never returned by GET.
https://digitizer.ee/api/v1/callbackResponse
{"success":true,"data":{"url":"","enabled":false,"updated_at":null,"deliveries":[]},"meta":{"request_id":"req_example"}}Returns: Callback settings and delivery status.
Configure a callback
Configure one optional public HTTPS callback per business. Applies to new documents from API, dashboard, and approved email attachments. Read /docs/callbacks for signature verification and retries. Changing configuration cancels pending deliveries.
https://digitizer.ee/api/v1/callbackBody
urlbodyrequired- string·Public HTTPS endpoint on port 443; may be empty when disabled.
enabledbodyrequired- boolean·Enable delivery of document.processed notifications.
rotate_secretbody- boolean·Generate a new signing secret and cancel pending deliveries.
Request
{
"url": "https://software.example.com/webhook",
"enabled": true
}Response
{"success":true,"data":{"url":"https://software.example.com/webhook","enabled":true,"updated_at":"2026-09-22T12:00:00Z","deliveries":[],"signing_secret":"whsec_example_only"},"meta":{"request_id":"req_example"}}Returns: Updated settings; signing_secret is returned only on first setup or rotation.