The Problem
Belgium mandates B2B e-invoicing via Peppol from January 1, 2026. WHMCS sends PDF emails. That won't cut it anymore.
What's Changing
Before 2026: Send PDF invoice by email → Client receives, processes manually → Done.
From 2026: Belgian B2B transactions require structured electronic invoices via Peppol network. PDFs alone don't comply.
What is Peppol?
Peppol (Pan-European Public Procurement Online) is a network for exchanging electronic business documents. Think of it as email for invoices, but structured.
How it works:
- You send invoice to Peppol network
- Network routes to recipient's accounting software
- Invoice arrives as structured data (UBL format)
- Automatic processing possible
Benefits:
- No PDF attachments to download
- No manual data entry
- Invoice goes directly into accounting software
- Structured data enables automation
- Legal compliance
The WHMCS Gap
WHMCS generates invoices and sends emails. It doesn't:
- Connect to Peppol network
- Generate UBL format
- Route to recipient's accounting software
- Track Peppol delivery status
For Belgian B2B clients, you need a bridge between WHMCS and Peppol.
The Solution
Peppol Billit connects WHMCS to the Peppol network using Billit as access point. Belgian B2B invoices automatically transmit via Peppol when paid.
What It Does
Automatic Invoice Transmission:
- Belgian B2B client pays invoice
- Module detects eligibility (BE country + valid VAT number)
- Invoice data sent to Billit API
- Billit converts to UBL and transmits via Peppol
- Client receives invoice in their accounting software
- Confirmation email sent to client
Automatic Credit Note Transmission:
- Invoice gets refunded in WHMCS
- Module sends credit note via Peppol
- Client receives credit note in their accounting software
Eligibility Detection:
- Only triggers for Belgian clients (country = BE)
- Only triggers for B2B clients (valid BE VAT number in tax_id field)
- All other clients continue receiving normal WHMCS invoice emails
- No manual intervention needed
Client Area:
- "Peppol E-Invoices" link in Billing menu (only visible to eligible clients)
- List of all Peppol documents sent
- Type badges (Invoice / Credit Note)
- Delivery status tracking
- Links to original WHMCS invoices
Admin Dashboard:
- Connection test button
- Statistics (sent, pending, failed)
- Separate tabs for Invoices and Credit Notes
- Filter by status
- Retry failed deliveries
- View delivery details and API responses
What is Billit?
Billit is a Belgian accounting platform and certified Peppol Access Point. They handle the complexity:
- UBL format conversion
- Peppol network routing
- Recipient lookup
- Delivery confirmation
This module uses Billit's API to send documents. You need a Billit account with API access.
Technical Implementation
Database: Creates mod_peppol_sent table:
- Invoice ID and number
- Document type (invoice/credit_note)
- Client info
- Peppol ID (VAT number)
- Billit Order ID (for webhook matching)
- Status (pending/sent/accepted/delivered/refused/failed)
- API response data
- Timestamps
Hooks:
InvoicePaid- sends invoice via PeppolInvoiceRefunded- sends credit note via PeppolEmailPreSend- optionally suppresses default invoice emails for Peppol clients- Menu hooks - adds Peppol menu items for eligible clients only
Billit API Endpoints:
GET /v1/account/accountInformation- connection testPOST /v1/peppol/sendOrder- send invoice/credit note
Authentication: API key in apiKey header (not Bearer token).
Configuration
Billit API Key: Your API key from Billit account settings.
Test Mode: Use Billit sandbox environment for testing. Disable for production.
Email Behavior: Three options:
- Replace (default): Suppress default WHMCS invoice emails for Peppol clients. They receive "Peppol Invoice Delivered" confirmation instead.
- Keep: Send both default WHMCS emails AND Peppol delivery confirmation.
- None: No emails at all for Peppol clients. Invoice is delivered via Peppol only - no email confirmation sent. Use this if your clients receive invoices directly in their accounting software and don't need email notifications.
Default VAT %: VAT percentage for invoice lines (default: 21% for Belgium).
Webhook Secret: Secret key for verifying Billit webhook signatures (see Webhook Setup below).
Email Templates
Module creates two email templates on activation:
- "Peppol Invoice Delivered"
- "Peppol Credit Note Delivered"
Customize in Setup → Email Templates → Invoice.
Webhook Setup (Real-time Status Updates)
To receive real-time delivery status updates from Billit (Sent → Accepted → Delivered/Refused), register a webhook.
Register the webhook with Billit:
curl --request POST \
--url https://api.billit.be/v1/webhooks \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'apiKey: YOUR_BILLIT_API_KEY' \
--data '{
"EntityType": "Message",
"EntityUpdateType": "U",
"WebhookURL": "https://YOUR_WHMCS_URL/modules/addons/peppol_billit/webhook.php"
}'
Response example:
{
"WebhookID": 56044,
"EntityType": "Message",
"EntityUpdateType": "U",
"WebhookURL": "https://YOUR_WHMCS_URL/modules/addons/peppol_billit/webhook.php",
"Secret": "your-secret-key-here"
}
Save the secret: Copy the Secret from the response and paste it in the module settings under Webhook Secret.
Status Flow:
pending → sent → accepted → delivered
↓
refused
- Sent: Invoice queued and validated by Billit
- Accepted: Peppol network acknowledged receipt
- Delivered: Customer received the invoice (final state)
- Refused: Customer or system rejected the invoice
The webhook URL is also displayed in the admin panel under Configuration Status.
When You Need This
Required if:
- You have Belgian B2B customers
- You want to comply with Belgium's 2026 e-invoicing mandate
- You want invoices to arrive directly in client's accounting software
Not required if:
- No Belgian B2B customers
- Only B2C customers (consumers, no VAT number)
- Using external accounting system that already handles Peppol
- Not operating in Belgium
Installation
- Purchase license here
- Upload files to
/modules/addons/peppol_billit/ - Go to Setup → Addon Modules
- Activate "Peppol Billit"
- Enter your license key
- Enter your Billit API key
- Test connection
- Done
Belgian B2B invoices now transmit via Peppol automatically when paid.
Technical Specifications
Requirements:
- WHMCS 8.9+
- PHP 7.4+
- Billit account with API access
- Valid Billit API key
Languages included:
- English
- Dutch
- French
Security:
- Client area validates ownership
- All files check WHMCS constant
- SQL injection protection (Capsule ORM)
- API key stored securely in WHMCS config
- HTTPS only for API calls
Troubleshooting
Connection test fails:
- Check API key is correct
- Check Test Mode matches your API key type (sandbox vs production)
- Look in WHMCS activity log for details
Invoice not sending via Peppol:
- Check client is Belgian (country = BE)
- Check client has valid VAT number (BE + 10 digits in tax_id field)
- Check invoice is actually paid (status = Paid)
- Look in activity log for errors
Client not seeing Peppol menu:
- They must be eligible (Belgian B2B with valid VAT number)
- Clear template cache
Credit note not sending:
- Invoice must be in "Refunded" status
- Check activity log for errors
Client says they didn't receive invoice in accounting software:
- Check delivery status in admin dashboard
- Verify their VAT number is correct and registered on Peppol network
- Their accounting software must be connected to Peppol (not all are)
- Retry failed delivery from admin dashboard
Comparison: Before vs After
Before Peppol Billit:
Invoice paid → WHMCS sends PDF email → Client downloads PDF
→ Client manually enters in accounting software
→ PDF gets lost in inbox
→ "Can you resend invoice #1234?"
After Peppol Billit:
Invoice paid → Module sends to Billit API → Billit converts to UBL
→ Billit sends via Peppol
→ Invoice arrives in client's accounting software
→ Automatic processing possible
→ Client gets confirmation email
This Module vs Credit Notes Module
Different problems, complementary solutions:
Credit Notes for WHMCS:
- Generates credit note PDF documents
- Stores in database and optionally Nextcloud
- Client can download PDFs
- For EU accounting compliance (formal credit note documents)
Peppol Billit:
- Transmits invoices and credit notes via Peppol network
- Documents arrive in client's accounting software
- No PDF handling (Billit generates UBL)
- For Belgian B2B e-invoicing mandate compliance
Use both if: You need PDF credit notes for your records AND want to transmit documents via Peppol.
Why Billit?
Peppol requires a certified Access Point to send documents. You can't connect directly to the network.
Options for Access Points:
- Billit (Belgian, accounting software with API)
- Exact Online
- Yuki
- Various others
We chose Billit because:
- Belgian company (local support)
- Clean API
- Reasonable pricing
- Handles conversion to UBL automatically
- Already used by many Belgian businesses
If you're already using different accounting software with Peppol capability, check if they have an API you could integrate with instead.
Why This Exists
ArkHost operates in Belgium. The 2026 e-invoicing mandate means we need to send structured invoices to B2B clients via Peppol. WHMCS doesn't do this.
Options were:
- Manually upload every invoice to accounting software (tedious)
- Wait for WHMCS to maybe implement Peppol someday (unlikely)
- Build integration with Peppol Access Point (practical solution)
We built the module using Billit as Access Point. It's in production at ArkHost. Belgian B2B invoices automatically transmit via Peppol when paid.
Made it available to other Belgian hosting companies facing the same compliance deadline.
License
Commercial module licensed per WHMCS installation.
Purchase: Peppol Billit for WHMCS
Note: You also need a Billit account with API access. That's a separate subscription with Billit.