PEPPOL BIS / UBL XML
POST /wp-json/api/v2/create-ubl generates PEPPOL BIS UBL XML from the shared POP payload.
What you need
- a valid
datapayload, authenticated license enabled - PEPPOL is a B2B corridor: the recipient must be a business entity
Output
- success: raw UBL XML
- error (validation, quota, webhook, integration): structured JSON
Delivery
Generated XML can be sent to active PEPPOL integrations or to configured webhooks.
Good to know
- recipient routing does not use
sdi_type; it is derived from VAT/registration identifiers and, when possible, PEPPOL directory lookups purchase_order_data.idbecomesOrderReference(often required to satisfyPEPPOL-EN16931-R003when sending to provider validation)connected_invoice_data.id/datebecomeBillingReferencefor credit notesconnector_exclusive_channel_active(403): PEPPOL delivery is blocked while Zoho is the account’s active, connected billing channel; local UBL generation is not affectedcountry_not_eligible_for_peppol: the account’s registered country is not a supported PEPPOL country- generating and sending via WordPress, direct API, n8n, or MCP no longer requires a paid plan: every plan, including Free, can send using its own available credits. On Shopify, sending still requires the Basic plan or higher
- currently supported PEPPOL countries (28): AT, BE, BG, CY, CZ, DE, DK, EE, FI, FR, GR, HR, HU, IE, IS, LT, LU, LV, MT, NL, NO, PT, RO, SE, SI, SK, CH, GB. Deliberately excluded: Spain (Facturae corridor, not yet supported), Northern Ireland (not enabled in the country catalog), Liechtenstein (no configured PEPPOL endpoint identifier scheme)
- France (gov-fr, beta): when the transmitter country is
FR, the request is automatically routed to the gov-fr corridor instead of generic PEPPOL: same public contract (integration.use = peppol), no different value to pass. The corridor has its own Legal Entity and its own error messages ("France Legal Entity is missing.","France integration is not active."instead of the PEPPOL equivalents). The SIREN required for the Legal Entity is automatically derived from the account’s French VAT number (last 9 digits); an optionalfr_sirenfield in the account-setup payload lets you force a different one. Covers e-invoicing only: French e-reporting isn’t implemented yet. See france-peppol for the activation guide.