Also supports unencrypted text-layer PDFs <=187500 bytes/10 pages/120000 extract
Also supports unencrypted text-layer PDFs <=187500 bytes/10 pages/120000 extracted characters. Conservative English/German labels for invoice number, dates and totals; returns page/line evidence and complete bounded text lines. Unrecognized fields and item tables remain null/empty, partial=true; dollar signs do not imply USD. Unsupported or ambiguous core fields fail422 without settlement. Local Poppler only, no model, OCR or external API. 20 second timeout.
Answeringour last check, 2026-10-10
1 of 1checks answered this week
1270 msmedian answer time
$0.004listed price per call
$0.004price it asked us
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://handel.halowerk.com/v1/invoice-extract
| Category | Search and research |
|---|---|
| Provider host | handel.halowerk.com |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 3 from 2 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-10 | valid payment request | 402 | $0.004 | 1270 ms |
Example input (from the provider)
{
"body": {
"document_base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dWJsOkludm9pY2UgeG1sbnM6dWJsPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpJbnZvaWNlLTIiIHhtbG5zOmNhYz0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yIiB4bWxuczpjYmM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yIj48Y2JjOkN1c3RvbWl6YXRpb25JRD51cm46Y2VuLmV1OmVuMTY5MzE6MjAxNyNjb21wbGlhbnQjdXJuOnhvZXYtZGU6a29zaXQ6c3RhbmRhcmQ6eHJlY2hudW5nXzMuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD48Y2JjOklEPlJFLTIwMjYtMDA0MjwvY2JjOklEPjxjYmM6SXNzdWVEYXRlPjIwMjYtMDgtMDM8L2NiYzpJc3N1ZURhdGU+PGNiYzpEdWVEYXRlPjIwMjYtMDktMDI8L2NiYzpEdWVEYXRlPjxjYmM6SW52b2ljZVR5cGVDb2RlPjM4MDwvY2JjOkludm9pY2VUeXBlQ29kZT48Y2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPkVVUjwvY2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPjxjYmM6QnV5ZXJSZWZlcmVuY2U+MDQwMTEwMDAtMTIzNDUtMzQ8L2NiYzpCdXllclJlZmVyZW5jZT48Y2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5PjxjYWM6UGFydHk+PGNhYzpQb3N0YWxBZGRyZXNzPjxjYmM6Q2l0eU5hbWU+QnJlbWVuPC9jYmM6Q2l0eU5hbWU+PGNiYzpQb3N0YWxab25lPjI4MTk1PC9jYmM6UG9zdGFsWm9uZT48Y2FjOkNvdW50cnk+PGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REU8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+PC9jYWM6Q291bnRyeT48L2NhYzpQb3N0YWxBZGRyZXNzPjxjYWM6UGFydHlUYXhTY2hlbWU+PGNiYzpDb21wYW55SUQ+REUxMjM0NTY3ODk8L2NiYzpDb21wYW55SUQ+PGNhYzpUYXhTY2hlbWU+PGNiYzpJRD5WQVQ8L2NiYzpJRD48L2NhYzpUYXhTY2hlbWU+PC9jYWM6UGFydHlUYXhTY2hlbWU+PGNhYzpQYXJ0eUxlZ2FsRW50aXR5PjxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Ob3Jkd2VyayBIYW5kZWwgR21iSDwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+PC9jYWM6UGFydHlMZWdhbEVudGl0eT48L2NhYzpQYXJ0eT48L2NhYzpBY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT48Y2FjOkFjY291bnRpbmdDdXN0b21lclBhcnR5PjxjYWM6UGFydHk+PGNhYzpQYXJ0eUxlZ2FsRW50aXR5PjxjYmM6UmVnaXN0cmF0aW9uTmFtZT5TdGFkdHdlcmtlIEJlaXNwaWVsIEHDtlI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPjwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+PC9jYWM6UGFydHk+PC9jYWM6QWNjb3VudGluZ0N1c3RvbWVyUGFydHk+PGNhYzpQYXltZW50TWVhbnM+PGNiYzpQYXltZW50TWVhbnNDb2RlPjU4PC9jYmM6UGF5bWVudE1lYW5zQ29kZT48Y2FjOlBheWVlRmluYW5jaWFsQWNjb3VudD48Y2JjOklEPkRFMDIxMjAzMDAwMDAwMDAyMDIwNTE8L2NiYzpJRD48L2NhYzpQYXllZUZpbmFuY2lhbEFjY291bnQ+PC9jYWM6UGF5bWVudE1lYW5zPjxjYWM6VGF4VG90YWw+PGNiYzpUYXhBbW91bnQgY3VycmVuY3lJRD0iRVVSIj43Ni4wMDwvY2JjOlRheEFtb3VudD48Y2FjOlRheFN1YnRvdGFsPjxjYmM6VGF4YWJsZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjQwMC4wMDwvY2JjOlRheGFibGVBbW91bnQ+PGNiYzpUYXhBbW91bnQgY3VycmVuY3lJRD0iRVVSIj43Ni4wMDwvY2JjOlRheEFtb3VudD48Y2FjOlRheENhdGVnb3J5PjxjYmM6SUQ+UzwvY2JjOklEPjxjYmM6UGVyY2VudD4xOTwvY2JjOlBlcmNlbnQ+PGNhYzpUYXhTY2hlbWU+PGNiYzpJRD5WQVQ8L2NiYzpJRD48L2NhYzpUYXhTY2hlbWU+PC9jYWM6VGF4Q2F0ZWdvcnk+PC9jYWM6VGF4U3VidG90YWw+PC9jYWM6VGF4VG90YWw+PGNhYzpMZWdhbE1vbmV0YXJ5VG90YWw+PGNiYzpMaW5lRXh0ZW5zaW9uQW1vdW50IGN1cnJlbmN5SUQ9IkVVUiI+NDAwLjAwPC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD48Y2JjOlRheEV4Y2x1c2l2ZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjQwMC4wMDwvY2JjOlRheEV4Y2x1c2l2ZUFtb3VudD48Y2JjOlRheEluY2x1c2l2ZUFtb3VudCBjdXJyZW5jeUlEPSJFVVIiPjQ3Ni4wMDwvY2JjOlRheEluY2x1c2l2ZUFtb3VudD48Y2JjOlByZXBhaWRBbW91bnQgY3VycmVuY3lJRD0iRVVSIj4wLjAwPC9jYmM6UHJlcGFpZEFtb3VudD48Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRD0iRVVSIj40NzYuMDA8L2NiYzpQYXlhYmxlQW1vdW50PjwvY2FjOkxlZ2FsTW9uZXRhcnlUb3RhbD48Y2FjOkludm9pY2VMaW5lPjxjYmM6SUQ+MTwvY2JjOklEPjxjYmM6SW52b2ljZWRRdWFudGl0eSB1bml0Q29kZT0iSDg3Ij44PC9jYmM6SW52b2ljZWRRdWFudGl0eT48Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD0iRVVSIj40MDAuMDA8L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PjxjYWM6SXRlbT48Y2JjOk5hbWU+V2FydHVuZyBSZWdhbGFubGFnZTwvY2JjOk5hbWU+PGNhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PGNiYzpJRD5TPC9jYmM6SUQ+PGNiYzpQZXJjZW50PjE5PC9jYmM6UGVyY2VudD48L2NhYzpDbGFzc2lmaWVkVGF4Q2F0ZWdvcnk+PC9jYWM6SXRlbT48Y2FjOlByaWNlPjxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD0iRVVSIj41MC4wMDwvY2JjOlByaWNlQW1vdW50PjwvY2FjOlByaWNlPjwvY2FjOkludm9pY2VMaW5lPjwvdWJsOkludm9pY2U+",
"include_lines": true,
"verify_totals": true
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"document_base64": {
"description": "The document as base64. Either a PDF with an embedded ZUGFeRD or Factur-X XML, or the EN 16931 XML itself (CII or UBL). The JSON body of this hub is capped at 256 kB, so the base64 text must stay below 250000 characters, which is roughly 187 kB of file.",
"maxLength": 250000,
"minLength": 16,
"type": "string"
},
"include_lines": {
"default": true,
"description": "Whether to return the individual invoice lines. False returns only header, tax breakdown and totals.",
"type": "boolean"
},
"verify_totals": {
"default": true,
"description": "Whether to recompute the stated totals from the lines and the tax breakdown and report every deviation.",
"type": "boolean"
}
},
"required": [
"document_base64"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}