The e-invoice.be API allows you to create invoices and credit notes that comply with the European e-invoicing standard (EN 16931) and transmit them via the Peppol network.
Enable test mode for development and testing. When test mode is enabled, documents are emailed instead of being sent via Peppol, allowing you to safely test your integration. Contact [email protected] to enable test mode. Learn more about test mode →
Creating and sending an e-invoice involves these steps:
Validate your JSON invoice data (required during development)
Create the document - only valid invoices can be created
Send the document via Peppol (or email if test mode is enabled)
You must validate your invoice JSON before creating a document. The API only accepts invoices that can be converted into valid UBL BIS Billing 3.0 format. Use /api/validate/json during development to test your payload.
{ "valid": true, "message": "Invoice JSON is valid and can be converted to UBL BIS Billing 3.0"}
Validation errors:
Copy
{ "valid": false, "errors": [ { "field": "vendor_tax_id", "message": "Invalid tax ID format. Expected format: country code + number (e.g., BE1018265814 for Belgium)" }, { "field": "items[0].tax_rate", "message": "Invalid tax rate format. Must be a percentage string (e.g., '21.00')" } ]}
Use /api/validate/json extensively during development. This endpoint does not create any documents - it only validates that your JSON can be converted to valid UBL format. See the Validation Guide for more details.
Each line item in the items array represents a product or service:
Copy
{ "description": "Product/Service description", // What is being sold "quantity": 10, // Quantity "unit": "C62", // Unit of measure (C62 = pieces/units) "unit_price": 100.00, // Price per unit (excluding VAT) "amount": 1000.00, // Line total (quantity × unit_price) "tax_rate": "21.00" // VAT percentage as string}
Required item fields:
At least description or unit_price should be provided for meaningful invoices
Common unit codes:
C62 - Units/pieces
HUR - Hours
DAY - Days
MTR - Meters
KGM - Kilograms
Tax rate format:
Must be a string representing a percentage
Examples: "21.00", "6.00", "0.00"
Standard Belgian VAT rates: "21.00" (standard), "6.00" (reduced), "0.00" (zero-rated)
Automatic Retries: Documents in TRANSIT use an exponential backoff strategy with multiple retry attempts over 24 hours before transitioning to FAILED. This maximizes delivery success during temporary network issues.Track delivery status using webhooks or by polling GET /api/documents/{document_id}Coming soon: Detailed transmission attempt history will be available in a future release, showing all retry attempts with timestamps and failure reasons.
If test mode is enabled on your account, this will email the UBL XML. If test mode is disabled, it will send via Peppol. Your code doesn’t need to change - just the test mode setting on your account.