High-intent Belgium routing confusion

0208 vs 9925 in Belgium: which Peppol ID should you use?

Belgian Peppol delivery often fails because the counterparty is stored with the wrong identifier scheme. This page explains when 0208 and 9925 diverge and what to verify first.

Check a Belgian participant now
Blocked Odoo send flow

Odoo says Peppol sent the invoice, but the customer never received it

If Odoo marks an invoice as sent while the customer sees nothing, you are usually dealing with routing, registration, or access-point issues rather than broken invoice content.

Diagnose Odoo delivery
Odoo maintenance and trust issues

What Odoo means by 'Revalidate IDs' in Peppol

The revalidation prompt usually signals stale participant metadata or a registration mismatch. This page shows what to refresh before you resend.

Refresh the right identifiers
Failed partner onboarding

No valid Peppol ID found for a Belgian customer

This usually means the customer is registered under a different identifier or not fully published. Here is how to separate a real absence from a lookup mismatch.

Validate the counterparty
Directory lookup confusion

Partner not found in the Peppol Directory

A missing directory hit does not always mean the company is absent from the network. Learn when the directory is advisory and what else to check.

Compare directory evidence
Endpoint-level routing mismatch

Wrong endpoint scheme in a Belgian Peppol invoice

The invoice can look structurally valid and still fail because the participant scheme does not match the recipient's published routing identity.

Check endpoint structure
Access-point authentication failure

Odoo Peppol invalid signature for request

An invalid request signature is usually a provider credential or environment problem, especially after database copies or restores.

Triage the signature failure
Validation passed but delivery failed

Why a valid invoice can still fail on Peppol

Passing XML validation is not enough. Routing, registration, and provider state can still block delivery. This page explains the gap.

See the missing layer
German document rejection

XRechnung buyer reference missing

German XRechnung flows commonly reject invoices missing the buyer reference. Learn how to spot the issue fast and avoid another failed submission.

Check XRechnung fields
Rule-code translation

BR-CO-10 explained without validator jargon

If you hit BR-CO-10, the invoice totals do not reconcile. This page translates the rule into practical bookkeeping and ERP checks.

Translate BR-CO-10
Profile-field export failure

Missing CustomizationID in a Peppol invoice

A Peppol invoice can contain the business data and still fail because the export is missing the profile marker tools expect to classify it correctly.

Check profile metadata
Inconclusive lookup triage

Peppol Directory inconclusive: what it means before you resend

An inconclusive directory result is not a green light and not a final rejection. This page explains how to handle the gray zone without wasting retries.

Review the lookup evidence
VAT validation friction

Belgian VAT number not found in VIES

If VIES cannot confirm the Belgian VAT number you used for an e-invoice workflow, you need to separate a real format problem from a temporary upstream gap.

Check the VAT evidence
Odoo multi-company drift

Odoo Peppol is using the wrong company binding

Multi-company setups, duplicates, and restored databases can leave Odoo pointing at the wrong Belgian participant even when the invoice itself looks fine.

Check the company binding
Totals and rounding failure

Cash rounding is breaking Peppol totals

Rounding logic that looks harmless in the ERP can still produce totals that fail e-invoice validation. This page isolates the most common pattern.

Check the totals logic
Identifier-format mismatch

My customer has a GLN in Odoo, but I still get 'no valid Peppol ID'

A stored GLN or alternate identifier does not guarantee Odoo will resolve the exact Peppol participant the recipient expects. This page shows where the mismatch happens.

Compare the stored identifier