Skip to main content
Invoice-Converter.comInvoice-Converter
Pricing
Convert InvoiceConvert
Convert
⌘K
Documentation overview
Understand formats and standards
Compliance Guides
XRechnung Standard
ZUGFeRD Format
PDF/A-3 for ZUGFeRD
CII Cross Industry Invoice
UBL Universal Business Language
DIN EN 16931-1 Standard
PEPPOL Network
Country and regulatory rules
EU E-Invoicing Mandate
EU E-Invoicing
EU e-invoicing in 2026: what to implement (and why)
EU top markets playbook (DE, FR, IT, ES, PL, NL)
PEPPOL in the EU: how exchange actually works
CTC/clearance and portals in the EU: how to build reliable integrations
Country Guides
Germany
France
Italy
Spain
Poland
Netherlands
Belgium
Austria
Denmark
Sweden
Finland
Fix validation and submission issues
Leitweg-ID Validation
Support playbooks
Support
Why invoices need review
PDF readiness
Source data readiness
Attachments and service descriptions
API errors
API automation
Handling schema errors
Review validation help
Support
Missing information
Buyer reference
Payment and IBAN
VAT and reverse charge
Totals and rounding
Prepayments
Line items
ZUGFeRD PDF warnings
Validation playbooks
Observed validation fixes
Due date or terms
Bank transfer IBAN
PDF/A-3 readiness
VATEX exemption reason
Review vs download
Public test invoice fixture library
Valid XRechnung UBL basic invoice
Invalid XRechnung missing payment terms
Factur-X/ZUGFeRD EN 16931 CII XML
XRechnung rounding and IBAN edge case
KoSIT Validator Errors
ERROR
BR-DE-1
BR-DE-2
BR-DE-3
BR-DE-4
BR-DE-5
BR-DE-6
BR-DE-7
BR-DE-8
BR-DE-9
BR-DE-10
BR-DE-11
BR-DE-14
BR-DE-15
BR-DE-16
BR-DEX-01
BR-DEX-03
BR-DEX-04
BR-DEX-05
BR-DEX-06
BR-DEX-07
BR-DEX-08
BR-DEX-09
BR-DEX-10
BR-DEX-11
BR-DEX-12
BR-DEX-13
BR-DEX-14
BR-CO-3
BR-CO-4
BR-CO-9
BR-CO-10
BR-CO-11
BR-CO-13
BR-CO-14
BR-CO-15
BR-CO-16
BR-CO-17
BR-CO-25
BR-CO-26
BR-S-1
BR-S-5
BR-S-8
BR-CO-05
BR-CO-06
BR-CO-07
BR-CO-08
BR-CO-12
BR-CO-18
BR-CO-19
BR-CO-20
BR-CO-21
BR-CO-22
BR-CO-23
BR-CO-24
BR-61
BR-AE-02
BR-AE-10
BR-E-01
BR-E-05
BR-DE-19
BR-05
BR-22
BR-23
BR-24
BR-25
BR-26
BR-47
BR-57
BR-DE-22
BR-DE-30
BR-DE-31
PEPPOL-EN16931-R001
PEPPOL-EN16931-R010
PEPPOL-EN16931-R020
PEPPOL-EN16931-R046
PEPPOL-EN16931-R120
PEPPOL-EN16931-R130
BR-01
BR-02
BR-03
BR-04
BR-06
BR-07
BR-08
BR-09
BR-10
BR-11
BR-12
BR-13
BR-14
BR-15
BR-16
BR-17
BR-18
BR-19
BR-20
BR-21
BR-27
BR-28
BR-29
BR-30
BR-31
BR-32
BR-33
BR-36
BR-37
BR-38
BR-41
BR-42
BR-43
BR-44
BR-45
BR-46
BR-48
BR-49
BR-50
BR-51
BR-52
BR-53
BR-54
BR-55
BR-56
BR-62
BR-63
BR-64
BR-65
BR-CL-01
BR-CL-03
BR-CL-04
BR-CL-05
BR-CL-06
BR-CL-07
BR-CL-08
BR-CL-10
BR-CL-11
BR-CL-13
BR-CL-14
BR-CL-15
BR-CL-16
BR-CL-17
BR-CL-18
BR-CL-19
BR-CL-20
BR-CL-21
BR-CL-22
BR-CL-23
BR-CL-24
BR-CL-25
BR-CL-26
BR-DEC-01
BR-DEC-02
BR-DEC-05
BR-DEC-06
BR-DEC-09
BR-DEC-10
BR-DEC-11
BR-DEC-12
BR-DEC-13
BR-DEC-14
BR-DEC-15
BR-DEC-16
BR-DEC-17
BR-DEC-18
BR-DEC-19
BR-DEC-20
BR-DEC-23
BR-DEC-24
BR-DEC-25
BR-DEC-27
BR-DEC-28
BR-S-02
BR-S-03
BR-S-04
BR-S-06
BR-S-07
BR-S-09
BR-S-10
BR-Z-01
BR-Z-02
BR-Z-03
BR-Z-04
BR-Z-05
BR-Z-06
BR-Z-07
BR-Z-08
BR-Z-09
BR-Z-10
BR-AE-01
BR-AE-03
BR-AE-04
BR-AE-05
BR-AE-06
BR-AE-07
BR-AE-08
BR-AE-09
BR-E-02
BR-E-03
BR-E-04
BR-E-06
BR-E-07
BR-E-08
BR-E-09
BR-E-10
BR-IC-01
BR-IC-02
BR-IC-03
BR-IC-04
BR-IC-05
BR-IC-06
BR-IC-07
BR-IC-08
BR-IC-09
BR-IC-10
BR-IC-11
BR-IC-12
BR-G-01
BR-G-02
BR-G-03
BR-G-04
BR-G-05
BR-G-06
BR-G-07
BR-G-08
BR-G-09
BR-G-10
BR-O-01
BR-O-02
BR-O-03
BR-O-04
BR-O-05
BR-O-06
BR-O-07
BR-O-08
BR-O-09
BR-O-10
BR-O-11
BR-O-12
BR-O-13
BR-O-14
BR-AF-01
BR-AF-02
BR-AF-03
BR-AF-04
BR-AF-05
BR-AF-06
BR-AF-07
BR-AF-08
BR-AF-09
BR-AF-10
BR-AG-01
BR-AG-02
BR-AG-03
BR-AG-04
BR-AG-05
BR-AG-06
BR-AG-07
BR-AG-08
BR-AG-09
BR-AG-10
BR-B-01
BR-B-02
WARNING
BR-DE-17
BR-DE-18
BR-DE-20
BR-DE-21
BR-DEX-02
BR-DE-26
BR-DE-27
BR-DE-28
Look up reference data
Glossary
E
EN 16931
E-reporting
e-Factura RO
EAS (Electronic Address Scheme)
ebInterface
C
CIUS
CII
Code list
Credit note
Contract reference
Chorus Pro
Codice Destinatario
X
XRechnung
XML Schema (XSD)
XML
Z
ZUGFeRD
F
Factur-X
Finvoice
U
UBL
Unit code
P
PEPPOL
PEPPOL BIS
Participant ID
PDF/A-3
Payment means
Purchase order (PO)
PDP (Plateforme de Dématérialisation Partenaire)
A
Access Point
Allowance / charge
S
SMP
SML
Schematron
SDI (Sistema di Interscambio)
Svefaktura
L
Leitweg-ID
K
KoSIT
KSeF
KvK number
V
Validation
VAT ID
ViDA
VeriFactu
ViDA Pillar 1: Digital Reporting Requirements
ViDA Pillar 2: Single VAT Registration
ViDA Pillar 3: Platform Economy
B
Business Term (BT)
Business Group (BG)
BIC
R
Reverse charge
Real-time reporting
Real-time invoice reporting (RTIR)
T
Tax category
TicketBAI
I
IBAN
Invoice type code
Invoice line item
ISO 6523
D
Document reference
D-U-N-S Number
Digipoort
Q
QR code payment
G
GLN (Global Location Number)
O
OVT-tunnus
OIOUBL
N
NemHandel
Code Lists
Currency codes (common)
Country codes (common)
VAT category codes
Payment means type codes
Unit of measure codes (common)
Invoice type codes (common in XRechnung)
XRechnung Fields
Invoice basics
BT-1
BT-2
BT-3
BT-5
BT-6
BT-7
BT-8
BT-10
BT-11
BT-12
BT-14
BT-15
BT-16
BT-17
BT-18
BT-19
BT-21
BT-22
BT-23
BT-24
BT-25
BT-26
Delivery and payment
BT-9
BT-13
BT-20
BT-59
BT-60
BT-61
BT-70
BT-71
BT-72
BT-73
BT-74
BT-75
BT-76
BT-77
BT-78
BT-79
BT-80
BT-81
BT-82
BT-83
BT-84
BT-85
BT-86
BT-87
BT-88
BT-89
BT-90
BT-91
Seller details
BT-27
BT-28
BT-29
BT-30
BT-31
BT-32
BT-33
BT-34
BT-35
BT-36
BT-37
BT-38
BT-39
BT-40
BT-41
BT-42
BT-43
BT-62
BT-63
BT-64
BT-65
BT-66
BT-67
BT-68
BT-69
Buyer details
BT-44
BT-45
BT-46
BT-47
BT-48
BT-49
BT-50
BT-51
BT-52
BT-53
BT-54
BT-55
BT-56
BT-57
BT-58
Discounts and charges
BT-92
BT-93
BT-94
BT-95
BT-96
BT-97
BT-98
BT-99
BT-100
BT-101
BT-102
BT-103
BT-104
BT-105
Taxes and totals
BT-106
BT-107
BT-108
BT-109
BT-110
BT-111
BT-112
BT-113
BT-114
BT-115
BT-116
BT-117
BT-118
BT-119
BT-120
BT-121
BT-122
BT-123
BT-124
BT-125
Line items
BT-126
BT-127
BT-128
BT-129
BT-130
BT-131
BT-132
BT-133
BT-134
BT-135
BT-136
BT-137
BT-138
BT-139
BT-140
BT-141
BT-142
BT-143
BT-144
BT-145
BT-146
BT-147
BT-148
BT-149
BT-150
BT-151
BT-152
BT-153
BT-154
BT-155
BT-156
BT-157
BT-158
BT-159
BT-160
BT-161
BT-162
BT-163
ZUGFeRD Profiles
MINIMUM
BASIC WL
BASIC
EN 16931
EXTENDED
Compare formats and tools
Comparisons
XRechnung vs ZUGFeRD
PDF24 Tools
sevDesk
Integrate and implement
Platform incident help
Support
Temporary unavailable
Missing result
Validation unavailable
Browser errors
Account and rate limits
Credits and subscriptions
Authoritative validation
ERP export validation guides
DATEV
Lexware
SAP Business One
Odoo
Microsoft Dynamics
Trust & Security
Developer API
Email invoices
  1. E-Invoicing Resources
  2. Developer API

Integration

Markdown export

External API V1 Documentation

Convert invoices into validated e-invoices from your own systems: upload a PDF, DOCX, or TXT document — or structured ERP data — and download XRechnung, ZUGFeRD, EN 16931, UBL, or CII output once validation has passed. This page is the complete integration contract: access model, endpoints, error catalog, and limits.

OverviewKey capabilitiesGet API accessRequest accessQuickstartQuickstart with curlBase URL and API keysFirst successful requestCommon payload examplesRequired request headersAuth rulesIdempotency contractEndpoint ReferenceOutput format matrixError ContractCommon errors and what to doRate & payload limitsRetry guidanceTask lifecycle & retentionSupport modelChangelogDelivery ArtifactsUse Postman and OpenAPISend Technical Feedback

Five REST endpoints turn PDF, DOCX, or TXT invoices — or structured ERP data — into validated XRechnung, ZUGFeRD, EN 16931, UBL, and CII e-invoices: upload, poll, download. Access is approval-based: request it by email, test with prepaid API credits, and use an Enterprise agreement for production volume.

Overview#

The API accepts multipart uploads, returns JSON responses, and uses standard HTTP status codes with Bearer authentication. Every conversion runs asynchronously: submit the document, poll the task, then download the result. A file is delivered only after validation has passed — there is no unvalidated output.

Send a PDF, DOCX, or TXT invoice document or structured invoice data to a conversion endpoint. Invoice-Converter starts one async task for extraction, validation, and artifact generation. The result endpoint returns a file only when the requested artifact is validated, checked, and ready; while processing it returns 202 TASK_NOT_READY, and blocking validation issues return 422 VALIDATION_FAILED.

Status: gated access

Base path: /api/v1. Last synchronized 2026-07-26.

Key capabilities#

  • Upload endpoints for PDF invoices and structured invoice data
  • AI-powered invoice data extraction
  • Automated EN 16931 and KoSIT validation
  • XRechnung, ZUGFeRD, EN16931, UBL, and CII output formats
  • Async processing with polling; small invoices often take around 30 seconds, larger invoices up to 1-2 minutes
  • Idempotent writes for safe retries

Get API access#

API access is approval-based, not self-service. This is the path from first contact to production keys.

  1. Create an account, then request API access by email to contact@invoice-converter.com with your company, account email, and expected monthly volume.
  2. Use prepaid API credits for approved testing or Enterprise order-form billing for production use.
  3. After approval, create a live API key from the API access section.
  4. Run the first request with server-side credentials, then monitor usage and rotate keys from your profile.

Request access#

Request API access by email
Enterprise plan and pricing

Quickstart#

Three API calls complete a conversion. The convert endpoint is served at /api/v1 and requires authentication.

POST /api/v1/invoices:convert

Live

Convert invoice document to structured e-invoice

POST /api/v1/invoices:convert-structured

Live

Convert structured data

GET /api/v1/tasks/{task_id}

Live

Poll task status

Quickstart with curl#

Replace $API_KEY with your live key and $TASK_ID with the task_id from the first response. The same three calls work for every output format.

1. Start the conversion
curl -X POST "https://www.invoice-converter.com/api/v1/invoices:convert" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: inv-2026-0001" \
  -F "file=@invoice.pdf" \
  -F "format=XRECHNUNG"
2. Poll the task until completed
curl "https://www.invoice-converter.com/api/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $API_KEY"
3. Download the validated file
curl -o invoice.xml \
  "https://www.invoice-converter.com/api/v1/tasks/$TASK_ID/result?download=xml" \
  -H "Authorization: Bearer $API_KEY"

Base URL and API keys#

  • Production base URL: https://www.invoice-converter.com/api/v1.
  • Live keys use the production host and the icp_... prefix.
  • Run onboarding and validation requests with approved live keys before sending production volume.
  • Treat keys as server-side secrets. Do not embed them in browser or mobile clients.

First successful request#

Use this sequence as the minimum happy path after creating an API key.

  • Upload: POST /api/v1/invoices:convert with Authorization, Idempotency-Key, file=@invoice.pdf (or .docx/.txt), and format=XRECHNUNG.
  • Poll every 10-15 seconds: GET /api/v1/tasks/{task_id} until status is completed or failed.
  • Download: GET /api/v1/tasks/{task_id}/result?download=xml and store X-Correlation-ID for support tracing.
  • For ZUGFeRD PDF output, request format=ZUGFERD on convert and download=pdf on result; hybrid PDF output requires a PDF source upload.
  • For structured input, call POST /api/v1/invoices:convert-structured with pdf_file=@invoice.pdf, data_file=@invoice-data.json, and the target format.
  • Optionally send client_reference or external_invoice_id and source_system for ERP reconciliation.
  • For split ERP exports of one invoice, repeat data_file; for multiple invoices, start one task per invoice with its own idempotency key.
  • Store result_artifacts from the status response to see whether XML/PDF artifacts are validated, cached, or still unavailable because of dependencies.

Common payload examples#

  • XRECHNUNG: send format=XRECHNUNG.
  • ZUGFERD: send format=ZUGFERD; use download=pdf on result for the hybrid PDF/A-3 output.
  • Structured input: send pdf_file plus one or more data_file parts; accepted data formats are CSV, JSON, XML, XLSX, and TXT, with any supported target format. The data_file parts must contain all mandatory data; the PDF does not fill missing fields.
  • Multiple invoices: submit separate convert requests and track each returned task_id; repeated data_file parts are only for split exports of the same invoice.
  • UBL: send format=UBL; for deterministic integrations, set an explicit profile such as PEPPOL, XRECHNUNG, or EN16931.
  • CII: send format=CII; for deterministic integrations, set an explicit profile such as EN16931.

Required request headers#

  • Authorization: Bearer <api_key>

Auth rules#

API access is gated. Approved accounts can create API keys from the profile, use them as Bearer tokens, and use prepaid credits for approved testing or Enterprise order-form billing for production.

  • Keys are tenant-scoped live credentials for approved accounts. The current production prefix is icp_....
  • Create, rotate, and revoke API keys from your profile after API access is enabled. Copy new keys immediately because plaintext keys are shown only once.
  • Missing or invalid key returns 401.
  • Calls to /api/v1 receive an X-Correlation-ID automatically when omitted.
  • Write calls require Idempotency-Key; keep this value stable across retries.
  • Use server-to-server integration from your backend. Browser-origin access is restricted in production.

Idempotency contract#

  • Send an Idempotency-Key on every write call.
  • Idempotency keys must match [A-Za-z0-9._:-]+ and be at most 200 chars.
  • If you provide your own key, the same key + identical payload returns the cached response.
  • Same key + different payload returns 409 IDEMPOTENCY_CONFLICT.
  • Idempotency keys expire after 24 hours.

Endpoint Reference#

All endpoints are available under /api/v1. Timeouts surface as 504 and other temporary connectivity failures as 502; correlation IDs help support trace requests end-to-end.

POST /api/v1/invoices:convert

Live

Upload a PDF, DOCX, or TXT invoice document and start asynchronous conversion. Returns a task_id for polling. ZUGFeRD/Factur-X hybrid PDF downloads require a PDF source upload; DOCX/TXT sources should request XML results. Request: multipart/form-data; file (binary, required) — PDF, DOCX, or TXT invoice source document; legacy DOC/RTF, images, and other files are rejected; format (string, required) — target output format; see format matrix below; profile (string, optional, recommended for deterministic integrations) — explicit compliance profile. Defaults by format; allowed values include XRECHNUNG, PEPPOL, EN16931, and supported ZUGFeRD/Factur-X profiles; jurisdiction (string, optional) — explicit ISO 3166-1 alpha-2 jurisdiction context used for validation/advisory checks; does not override profile; transaction_scope (string, optional) — explicit transaction scope context, such as B2G; applied to the queued task; delivery_channel (string, optional) — one of PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF, UNKNOWN; applied to the queued task; client_reference or external_invoice_id (string, optional) — tenant-side invoice/job reference returned on accepted uploads and task status responses; source_system (string, optional) — upstream ERP or billing system label returned on accepted uploads and task status responses; use_seller_master_data (boolean, optional) — when omitted, the tenant profile default applies; false ignores saved seller defaults for this request, true provides/uses seller defaults; seller_master_data (JSON object string, optional) — request-scoped seller defaults used only when use_seller_master_data=true; supported keys include business_name, address, tax, electronic address, contact, and payment fields (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note); every supplied profile value replaces the corresponding extracted value, absent profile fields remain unchanged, and differences create non-blocking review warnings. Response: 202 Accepted.

POST /api/v1/invoices:convert-structured

Live

Upload a carrier PDF plus CSV, JSON, XML, XLSX, or TXT invoice data and start asynchronous structured-data conversion. The data_file parts are the only semantic source; the PDF does not fill missing invoice fields. For ZUGFeRD/Factur-X it is used as the carrier PDF, and for XML-oriented outputs it is retained as the submitted PDF artifact. Use one conversion request per invoice; repeat data_file only for split ERP exports that describe the same invoice. Request: multipart/form-data; pdf_file (binary, required) — carrier PDF used for ZUGFeRD/Factur-X embedding and retained for XML-oriented outputs; data_file (binary, required, repeatable) — CSV, JSON, XML, XLSX, or TXT invoice data used as the only semantic source; .xls, PDFs, and image files are rejected as data_file; repeat for split header/line exports of the same invoice; aliases data_files and data_files[] are accepted; structured data total size — max 2 MB across all data_file parts; format (string, required) — target output format; supports XRECHNUNG, ZUGFERD, EN16931, UBL, and CII; profile (string, optional, recommended for deterministic integrations) — explicit compliance profile. Defaults by format; jurisdiction (string, optional) — explicit ISO 3166-1 alpha-2 jurisdiction context used for validation/advisory checks; does not override profile; transaction_scope (string, optional) — explicit transaction scope context, such as B2G; applied to the queued task; delivery_channel (string, optional) — one of PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF, UNKNOWN; applied to the queued task; client_reference or external_invoice_id (string, optional) — tenant-side invoice/job reference returned on accepted uploads and task status responses; source_system (string, optional) — upstream ERP or billing system label returned on accepted uploads and task status responses; use_seller_master_data (boolean, optional) — when omitted, the tenant profile default applies; false ignores saved seller defaults for this request, true provides/uses seller defaults; seller_master_data (JSON object string, optional) — request-scoped seller defaults used only when use_seller_master_data=true; supported keys include business_name, address, tax, electronic address, contact, and payment fields (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note); every supplied profile value replaces the corresponding extracted value, absent profile fields remain unchanged, and differences create non-blocking review warnings. Response: 202 Accepted.

GET /api/v1/tasks/{task_id}

Live

Poll the current status of a conversion task. Returns pending, processing, completed, or failed. Completed tasks include result_artifacts diagnostics so clients can see which XML/PDF artifacts are available, cached, and validation-proven. Completed task payloads may include additive _processing_warnings and _validation_warnings entries with SOURCE_CONTEXT_* rule IDs when source evidence was unavailable, suspect, or truncated; treat them as review signals, not failures. When failed, the response includes an error field with the failure reason. Request: none (GET); task_id (path, required) — UUID returned by the convert endpoint; include_validation_report_html (query, optional) — true or false (default false); when true, the status response inlines the sanitized validation report HTML for the current strict artifact when available. Response: 200 OK.

GET /api/v1/tasks/{task_id}/result

Live

Download the generated file (XML or PDF). Result syntax matches the original task format: XRECHNUNG/EN16931/UBL return UBL XML, CII/ZUGFERD return CII XML, and ZUGFERD + download=pdf returns a hybrid PDF/A-3. For other formats, download=pdf can return a rendered PDF. Repeated downloads may be served from cached generated artifacts when validation proof is still current. While processing, this endpoint returns 202 TASK_NOT_READY; blocking validation issues return 422 VALIDATION_FAILED, retryable dependency gaps return 503, and artifact invariant failures return 500, all with no file body. Request: none (GET); task_id (path, required) — UUID returned by the convert endpoint; download (query, required) — xml or pdf. Response: 200 OK.

GET /api/v1/tasks/{task_id}/validation-report

Live

Download the validation report tied to the current validated result artifact. The report is available only after strict conversion has produced a cached artifact with current validation proof, and returns 404 when no report is bound to the delivered artifact. Request: none (GET); task_id (path, required) — UUID returned by the convert endpoint; download (query, optional) — html or xml. Response: 200 OK.

Output format matrix#

FormatSyntaxVersion / ProfileContent-TypeExtension
XRECHNUNGUBL 2.1 XMLXRechnung 3.0.2application/xml.xml
ZUGFERDCII XML (download=xml) / hybrid PDF/A-3 (download=pdf)ZUGFeRD 2.3.2 / Factur-X 1.07.2application/xml or application/pdf.xml / .pdf
EN16931UBL 2.1 XMLEN 16931application/xml.xml
UBLUBL 2.1 XMLOASIS UBL 2.1application/xml.xml
CIIUN/CEFACT CII XMLD16Bapplication/xml.xml

Error Contract#

CodeHTTPRetryableNotes
AUTHENTICATION_REQUIRED401NoMissing/empty bearer token
INVALID_API_KEY401NoAPI key not found/revoked/expired
INSUFFICIENT_API_CREDITS402NoUse approved prepaid testing credits or Enterprise order-form billing
IDEMPOTENCY_KEY_REQUIRED400NoWrite endpoint called without Idempotency-Key
INVALID_IDEMPOTENCY_KEY400NoIdempotency key has invalid format
IDEMPOTENCY_CONFLICT409NoSame key used with different request hash
IDEMPOTENCY_IN_PROGRESS409YesSafe to retry later with same key/payload
FORMAT_REQUIRED400NoConversion request missing required format
INVALID_FORMAT422NoUnsupported conversion format
CLIENT_REFERENCE_CONFLICT400Noclient_reference and external_invoice_id differ
INVALID_CLIENT_METADATA400Noclient_reference, external_invoice_id, or source_system exceeds its length limit or contains control characters
INVALID_SELLER_MASTER_DATA400Nouse_seller_master_data or seller_master_data is not parseable or fails field validation
METHOD_NOT_ALLOWED405NoConversion paths accept POST only; the response includes an Allow: POST header
DOWNLOAD_FORMAT_REQUIRED400NoTask result request missing required download query
INVALID_DOWNLOAD_FORMAT400NoTask result download query must be xml or pdf
AUTH_SERVICE_UNAVAILABLE503YesAuth backend unavailable
RATE_LIMIT_SERVICE_UNAVAILABLE503YesRate-limit backend unavailable
API_CREDIT_SERVICE_UNAVAILABLE503YesPrepaid API credit or channel allowance verification is temporarily unavailable on conversion uploads
RATE_LIMITED429YesRespect Retry-After and quota headers
BAD_REQUEST400NoInvalid JSON or invalid UUID path parameter
INVALID_QUERY_PARAMETER400Noinclude_validation_report_html must be true or false
PAYLOAD_TOO_LARGE413NoOver upload size limit
INVALID_UPLOAD400NoUpload read/parsing failure
UPLOAD_FAILED4xx/5xxConditionalFix invalid request options; retry only for transient 5xx cases
TASK_NOT_READY202YesPoll again for async completion
TASK_NOT_FOUND404NoValidation-report request for an unknown task or a task not owned by the tenant
VALIDATION_FAILED422NoBlocking validation issues remain, including strict ZUGFeRD prerequisite failures and unresolved blocking_source_conflict items; correct invoice data before retrying
AUTHORITATIVE_VALIDATION_UNAVAILABLE503YesAuthoritative validation, proof persistence, or hybrid-generation dependency unavailable; retry later
TASK_STATUS_FAILED4xx/5xxConditionalRetry if transient service condition
TASK_RESULT_FAILED4xx/5xxConditionalRetry if transient service condition
TASK_FAILED500NoTask failed before a compliant artifact was issued; details carry the underlying failure code
XML_GENERATION_FAILED500YesTransient XML generation failure or timeout
PDF_GENERATION_FAILED500YesTransient PDF generation failure or timeout
ARTIFACT_GENERATION_RERUN_REQUIRED503NoStrict artifact generation failed after server-side retries; start a new conversion after the dependency recovers
ARTIFACT_GENERATION_FAILED503 (details code)NoRecorded on failed tasks for retryable strict issuance failures; result downloads surface 503 ARTIFACT_GENERATION_RERUN_REQUIRED with this code in details
ARTIFACT_PARITY_FAILED500 (details code)NoReported in the details of 500 TASK_FAILED when the strict artifact does not match the final reviewed invoice data; escalate with the correlation ID
INTERNAL_ARTIFACT_INVARIANT_FAILED500NoCompleted strict task has no safe stored artifact for the requested download; escalate with the correlation ID
PROFILE_MISMATCH422NoRequested profile does not match the CustomizationID of the stored result on result download
ZUGFERD_SOURCE_PDF_INCOMPATIBLE422NoStrict hybrid PDF generation cannot embed XML into the uploaded source PDF
ZUGFERD_SOURCE_PDF_REQUIRED422Nodownload=pdf for ZUGFERD requires a PDF source upload (DOCX/TXT sources cannot carry the hybrid PDF); request download=xml instead
VALIDATION_REPORT_NOT_FOUND404NoNo validation report is bound to the current delivered artifact proof
VALIDATION_REPORT_FAILED4xx/5xxConditionalValidation report retrieval failed; retry only transient 5xx cases
OUTPUT_PROFILE_REQUIRED422NoA generic output contract requires an explicit profile when no unambiguous default can be determined
OUTPUT_PROFILE_CONFLICT422NoProfile contradicts the selected output format or explicit variant
PROXY_ERROR502/504YesTemporary connectivity failure (504 for timeout)

Common errors and what to do#

  • Retry with backoff: 429, 500, 502, 503, 504.
  • Fix request or source data: 400, 409, 413, 422.
  • Fix access or credentials: 401, 403.
  • Confirm approval and prepaid testing credits or Enterprise order-form billing: 402 INSUFFICIENT_API_CREDITS.
  • Keep polling later: 202 TASK_NOT_READY.
  • For 422 VALIDATION_FAILED, show the returned field, rule ID, and remediation to a human reviewer before retrying with corrected invoice data.
  • For 503 AUTHORITATIVE_VALIDATION_UNAVAILABLE, fetch the same task result later; no unverified artifact was delivered.

Rate & payload limits#

Per-key rate limits and payload size constraints are enforced for all API calls. Rejected conversions do not consume prepaid API credits; rate limits are calculated separately per endpoint.

  • Endpoint-aware limits are cost-weighted. Both upload endpoints use the baseline quota (default 30/min and 500/hour); task polling is currently at least 10/min and 120/hour, and result downloads are currently at least 10/min and about 134/hour by default.
  • Read effective limits from X-RateLimit-Limit-Minute and X-RateLimit-Limit-Hour on responses.
  • Source document upload max size: 20 MB for PDF, DOCX, or TXT files.
  • Structured data upload max size: 2 MB total across all data_file parts.
  • JSON payload max size: 1 MB
  • Rate-limit responses include Retry-After, X-RateLimit-Limit-Minute, and X-RateLimit-Limit-Hour.

Retry guidance#

  • Use exponential backoff with jitter.
  • Retry only transient classes (429, 500, 502, 503, 504) using the same payload and idempotency key where possible.
  • Do not blindly retry validation or contract errors (400, 401, 402, 403, 409, 413, 422).

Task lifecycle & retention#

  • Completed and failed tasks remain available for 10 minutes after reaching terminal state.
  • Processing times out after 5 minutes — stuck tasks are automatically marked failed.
  • Idempotency keys expire after 24 hours.
  • Rate-limit counters reset on a rolling window.

Support model#

  • Business-hours support on commercially reasonable efforts.
  • No formal SLA, service credit, or response-time commitment unless agreed in an order form.

Changelog#

Recent externally visible API changes.

2026-07-26

When seller master data is enabled, every supplied profile value replaces the corresponding extracted seller or payment value. Fields absent from the profile remain unchanged. Source differences are non-blocking review warnings.

2026-07-10

Documentation backfill; no runtime behavior change. The error catalog now documents the previously undocumented runtime error codes, including API_CREDIT_SERVICE_UNAVAILABLE, TASK_NOT_FOUND, INVALID_CLIENT_METADATA, INVALID_SELLER_MASTER_DATA, PROFILE_MISMATCH, ZUGFERD_SOURCE_PDF_REQUIRED, VALIDATION_REPORT_NOT_FOUND, VALIDATION_REPORT_FAILED, INVALID_QUERY_PARAMETER, and METHOD_NOT_ALLOWED. Clients that parse error responses by the machine-readable code field need no changes; clients that switch on a fixed list of codes should add the newly documented values. Corrected changelog dates: DOCX/TXT source support shipped on 2026-06-30, not 2026-07-06.

2026-07-06

Completed task payloads may include additive _processing_warnings and _validation_warnings entries with SOURCE_CONTEXT_* rule IDs when source evidence was unavailable, suspect, or truncated before extraction. Treat SOURCE_CONTEXT_* entries as review signals for customer-side exception handling; strict artifact downloads remain governed by validation proof and artifact checks.

2026-07-03

Strict ZUGFeRD prerequisite failures (missing mandatory fields for hybrid generation) now fail as 422 VALIDATION_FAILED with the blocking rule IDs instead of a retryable 503; route these to a data-correction flow, not a retry loop. For XML-only formats (XRECHNUNG, EN16931, UBL, CII), the PDF rendering is now a best-effort convenience artifact: download=xml stays authoritative on completed tasks while download=pdf can be unavailable if the rendering failed after XML issuance. Conversions with unresolved blocking source conflicts now fail as 422 VALIDATION_FAILED with blocking_source_conflict issue entries instead of issuing an artifact.

2026-06-30

POST /api/v1/invoices:convert now accepts PDF, DOCX, and TXT invoice source documents in the file field. Legacy DOC, RTF, image, and other unsupported source files are rejected before conversion starts. ZUGFeRD/Factur-X hybrid PDF downloads still require a PDF source upload; use XML downloads for DOCX/TXT source conversions. Added optional include_validation_report_html=true on GET /api/v1/tasks/{task_id} to inline the sanitized validation report HTML when available. Conversion uploads now accept optional use_seller_master_data and seller_master_data fields on both endpoints so approved tenants can opt into stored or request-scoped seller defaults.

2026-06-29

Added GET /api/v1/tasks/{task_id}/validation-report?download=html|xml to retrieve the validation report tied to the current strict result artifact proof. Validation report responses expose task ID, artifact SHA-256, validation proof ID, report proof ID, report content type, and correlation ID headers.

2026-06-02

External API access is now documented as approved gated access rather than ungated key creation. Clarified that no formal SLA, service credit, or contractual penalty applies unless agreed in an order form. format is now required on both conversion endpoints; missing values return 400 FORMAT_REQUIRED and unsupported values return 422 INVALID_FORMAT. download is now required on task-result requests; missing values return 400 DOWNLOAD_FORMAT_REQUIRED and unsupported values return 400 INVALID_DOWNLOAD_FORMAT. Conversion uploads now accept client_reference/external_invoice_id and source_system for customer-side reconciliation. Accepted conversion and task-status responses now include status_url, primary_result_format, primary_result_url, and supplied reconciliation fields.

2026-06-01

Structured conversion now accepts all public output formats: XRECHNUNG, ZUGFeRD, EN16931, UBL, and CII. Structured conversion now accepts repeatable data_file parts plus data_files and data_files[] aliases for split ERP exports. Structured multi-file bundles must describe exactly one invoice and fail fast on conflicting or missing bundle invoice IDs. Clarified that multiple invoice documents should be submitted as separate conversion tasks, each with its own idempotency key.

2026-05-27

Added POST /api/v1/invoices:convert-structured for carrier-PDF plus CSV/JSON/XML/XLSX/TXT structured-data conversion across supported output formats. Documented that structured data is the only semantic source on this endpoint; the PDF is used for hybrid embedding. Updated OpenAPI and Postman artifacts for structured conversion.

2026-05-08

Added prepaid External API credits for non-Enterprise tenants. Documented 402 INSUFFICIENT_API_CREDITS for approved tenants without Enterprise order-form billing or prepaid credits. Confirmed idempotent replays do not consume additional API credits. Clarified that External API V1 model routing is managed server-side while profile and delivery context stay caller-controlled.

2026-03-06

Made task-result downloads format-faithful for CII and ZUGFERD outputs. Added cached result artifact reuse for repeated XML/PDF downloads of the same task. Aligned polling quotas with endpoint-scoped weighted rate-limit buckets.

2026-02-23

Added clearer, consistent API error responses across all endpoints. Expanded convert options and documented XML/PDF download behavior for task results. Improved retry safety with stricter idempotency requirements and validation. Updated OpenAPI/Postman artifacts to match current API behavior.

Delivery Artifacts#

Download machine-readable integration artifacts for the Developer API.

OpenAPI JSON
Postman collection

Use Postman and OpenAPI#

  • Import the Postman collection and set the base_url, api_key, and idempotency_key collection variables.
  • Run the collection in order: convert, poll status, then fetch result.
  • Use the OpenAPI JSON to generate typed clients, but keep file upload, polling, and binary result handling covered by integration tests.
  • Record X-Correlation-ID in logs so support can trace requests end-to-end.

Send Technical Feedback#

Share implementation questions, risks, and required contract changes with our team.

Email technical feedback
Trust & SecurityEmail invoices
On this page
OverviewKey capabilitiesGet API accessRequest accessQuickstartQuickstart with curlBase URL and API keysFirst successful requestCommon payload examplesRequired request headersAuth rulesIdempotency contractEndpoint ReferenceOutput format matrixError ContractCommon errors and what to doRate & payload limitsRetry guidanceTask lifecycle & retentionSupport modelChangelogDelivery ArtifactsUse Postman and OpenAPISend Technical Feedback

Invoice-Converter.com

Helping businesses across Europe convert invoices to XRechnung and other e-invoice formats with validation support. Review edge cases before submission.

20,000+ invoices processed
Fast & Secure
Trusted by hundreds

Features

Convert PDFs & create

  • PDF to XRechnung
  • PDF to UBL
  • PDF to XRechnung (CII)
  • PDF to ZUGFeRD
  • PDF to Factur-X
  • Create XRechnung
  • XRechnung to PDF

View & validate

  • XRechnung/XML Viewer
  • XRechnung Validator

Quick Links

  • Resources
  • Trust & Security Center
  • Developer API Documentation
  • Blog
  • FAQ
  • Pricing
  • Climate Contribution

Legal

  • Imprint
  • Privacy Policy
  • Data Processing Agreement
  • Terms & Conditions
  • Money-Back Guarantee

Get in Touch

contact@invoice-converter.com
Start Converting
© 2026 Invoice-Converter.com.Made with in Europe
GDPR Compliant
German Server