Read invoices and receipts into JSON and UBL.
Send an invoice or receipt as a PDF, JPEG or PNG and get back what's on it, as JSON and as UBL. Automatically within a few minutes, or checked by one of our processors within 24 working hours.
- Status
- PreviewBuild on it now with a test key. While in preview, details may still change before it's generally available.
- Price
- from €0.0350 per document
- Operations
- ocr.extractubl.verifiedocr.readubl.generateubl.validateocr.feedback
What it does
Two ways to process a document
Automatic (processing: automatic). OCR reads the document and returns the supplier, the
invoice number, the dates, the lines, the VAT per rate and the totals. Every field comes with a
confidence score, and warnings flag what doesn’t add up, such as totals that don’t reconcile. Expect
the result within two minutes.
Verified (processing: verified). After the OCR, one of our processors checks the document
against the original and corrects it where needed. They only approve it once the VAT adds up to the
total and the UBL passes validation. Done within 24 working hours. The invoice lines are not checked:
the UBL gets one line per VAT rate.
What you can do
- Send a document as base64 in JSON, or as a multipart upload. Up to 10 MB and 50 pages.
- Fetch the result, or get a webhook the moment it’s ready (
document.completed). - Download the UBL: UBL 2.1 to Peppol BIS Billing 3.0, always validated.
- Validate your own UBL files against the UBL schema, EN 16931 and Peppol BIS Billing 3.0.
- Report a wrong result. We only use the document to improve recognition when you allow it, per document.
Good to know
- OCR makes mistakes. Use the warnings and the confidence scores to decide which documents a person should look at, or choose verified processing.
- You pay when the outcome is in. A document we couldn’t read costs nothing, and sending the same file again returns the earlier document, also for free.
- We keep the document and its result for 7 days after the outcome by default; you can set anything from 0 to 30 days per account. Test documents are deleted after 24 hours.
Example
Real calls with a test key. Replace ac_test_… with your own key.
curl https://api.accountcloud.io/v1/documents \
-H "Authorization: Bearer ac_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: inbox-48213" \
-d '{
"file": { "name": "factuur-2026-118.pdf", "content_base64": "JVBERi0xLjQK…" },
"processing": "automatic",
"output": ["json", "ubl"],
"reference": "inbox-48213"
}'Location: /v1/documents/doc_01m6j1e9q4a4sncyn7de2ymbe7
AccountCloud-Charged: 0.0000{
"id": "doc_01m6j1e9q4a4sncyn7de2ymbe7",
"object": "document",
"status": "extracting",
"processing": "automatic",
"environment": "test",
"reference": "inbox-48213",
"file": {
"name": "factuur-2026-118.pdf",
"mime_type": "application/pdf",
"pages": 1
},
"expected_ready_at": "2026-11-04T01:07:43Z",
"result": null,
"charge": {
"operation": "ocr.extract",
"status": "none",
"amount": "0.0000",
"currency": "EUR",
"live_amount": "0.0350"
}
}curl https://api.accountcloud.io/v1/documents/doc_01m6j1e9q4a4sncyn7de2ymbe7 \
-H "Authorization: Bearer ac_test_…"AccountCloud-Charged: 0.0000{
"id": "doc_01m6j1e9q4a4sncyn7de2ymbe7",
"status": "completed",
"result": {
"document_type": "invoice",
"invoice_number": "TEST-2026-0001",
"issue_date": "2026-11-02",
"due_date": "2026-12-02",
"currency": "EUR",
"supplier": {
"name": "Testleverancier B.V.",
"vat_number": "NL000000000B02",
"iban": "NL91ABNA0417164300"
},
"lines": [
{
"description": "Advieswerk oktober",
"quantity": "1",
"unit_price": "100.00",
"vat_rate": "21.00",
"amount_excl_vat": "100.00"
},
{
"description": "Vakboeken",
"quantity": "2",
"unit_price": "25.00",
"vat_rate": "9.00",
"amount_excl_vat": "50.00"
}
],
"vat_breakdown": [
{ "rate": "21.00", "taxable_amount": "100.00", "vat_amount": "21.00" },
{ "rate": "9.00", "taxable_amount": "50.00", "vat_amount": "4.50" }
],
"totals": {
"amount_excl_vat": "150.00",
"vat_amount": "25.50",
"amount_incl_vat": "175.50"
}
},
"confidence": {
"document": 0.95,
"fields": {
"invoice_number": 0.99,
"supplier.name": 0.98,
"totals.amount_incl_vat": 0.99
}
},
"warnings": [],
"ubl": {
"available": true,
"href": "/v1/documents/doc_01m6j1e9q4a4sncyn7de2ymbe7/ubl",
"valid": true,
"profile": "peppol-bis-billing-3.0"
},
"charge": {
"operation": "ocr.extract",
"status": "none",
"amount": "0.0000",
"currency": "EUR",
"live_amount": "0.0350"
}
}What it costs
Excluding VAT, from your prepaid balance. Test keys are free, and an error or invalid input costs nothing.
Read more
Start with a test key. It's free.
Signing up takes a minute. The quickstart in the docs, five.