Guide

UK Peppol invoice XML example (UBL, validated)

A complete UK Peppol BIS Billing 3.0 invoice in UBL XML, with GBP, 20% and zero-rated lines and a delivery charge, validated against EN 16931 and Peppol rules.

Published 5 min readBy

Below is a complete, valid UK e-invoice in Peppol BIS Billing 3.0 (UBL 2.1) format. It is a GBP invoice from one UK VAT-registered company to another, with a 20% line, a zero-rated line and a delivery charge. We validated it against the UBL 2.1 schema, the EN 16931 UBL rules (version 1.3.17 from the European Commission's GitHub) and the Peppol BIS Billing 3.0 rules, with no errors and no warnings. Copy it, then read the walkthrough to see what each part does.

All names, numbers and identifiers are fictitious. HMRC has not yet published a UK e-invoice specification, so this shows Peppol BIS Billing 3.0 with UK data, not a confirmed UK mandate format.

The scenario

Seller Example Supplies Ltd, Leeds, VAT GB123456789
Buyer Sample Buyer Ltd, Bristol, VAT GB987654321
Line 1 10 hours consultancy at £85.00, standard rated 20% = £850.00
Line 2 5 printed books at £12.00, zero-rated = £60.00
Charge Delivery £15.00, standard rated 20%
VAT 20% on £865.00 = £173.00; 0% on £60.00
Total £925.00 net + £173.00 VAT = £1,098.00

The full invoice

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
  <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
  <cbc:ID>INV-2026-0142</cbc:ID>
  <cbc:IssueDate>2026-10-20</cbc:IssueDate>
  <cbc:DueDate>2026-11-19</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>GBP</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>FIN-OPS-77</cbc:BuyerReference>
  <cac:InvoicePeriod>
    <cbc:StartDate>2026-09-01</cbc:StartDate>
    <cbc:EndDate>2026-09-30</cbc:EndDate>
  </cac:InvoicePeriod>
  <cac:OrderReference>
    <cbc:ID>PO-48213</cbc:ID>
  </cac:OrderReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0088">5099999000011</cbc:EndpointID>
      <cac:PartyName>
        <cbc:Name>Example Supplies</cbc:Name>
      </cac:PartyName>
      <cac:PostalAddress>
        <cbc:StreetName>1 High Street</cbc:StreetName>
        <cbc:CityName>Leeds</cbc:CityName>
        <cbc:PostalZone>LS1 1AA</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>GB</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>GB123456789</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Example Supplies Ltd</cbc:RegistrationName>
        <cbc:CompanyID>01234567</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts team</cbc:Name>
        <cbc:ElectronicMail>accounts@example.co.uk</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0088">5099999000028</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>20 Market Square</cbc:StreetName>
        <cbc:CityName>Bristol</cbc:CityName>
        <cbc:PostalZone>BS1 2BB</cbc:PostalZone>
        <cac:Country>
          <cbc:IdentificationCode>GB</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>GB987654321</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Sample Buyer Ltd</cbc:RegistrationName>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:Delivery>
    <cbc:ActualDeliveryDate>2026-09-30</cbc:ActualDeliveryDate>
  </cac:Delivery>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
    <cbc:PaymentID>INV-2026-0142</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>GB29NWBK60161331926819</cbc:ID>
      <cbc:Name>Example Supplies Ltd</cbc:Name>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>
  <cac:PaymentTerms>
    <cbc:Note>Payment within 30 days of invoice date</cbc:Note>
  </cac:PaymentTerms>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>DL</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Delivery</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="GBP">15.00</cbc:Amount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>20</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:AllowanceCharge>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="GBP">173.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="GBP">865.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="GBP">173.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>20</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="GBP">60.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="GBP">0.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>Z</cbc:ID>
        <cbc:Percent>0</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="GBP">910.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="GBP">925.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="GBP">1098.00</cbc:TaxInclusiveAmount>
    <cbc:ChargeTotalAmount currencyID="GBP">15.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="GBP">1098.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="GBP">850.00</cbc:LineExtensionAmount>
    <cac:OrderLineReference>
      <cbc:LineID>1</cbc:LineID>
    </cac:OrderLineReference>
    <cac:Item>
      <cbc:Name>Consultancy services, September 2026</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>20</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="GBP">85.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="C62">5</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="GBP">60.00</cbc:LineExtensionAmount>
    <cac:OrderLineReference>
      <cbc:LineID>2</cbc:LineID>
    </cac:OrderLineReference>
    <cac:Item>
      <cbc:Name>Printed books</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>Z</cbc:ID>
        <cbc:Percent>0</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="GBP">12.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>

Walkthrough

Header: identifiers and dates

  • cbc:CustomizationID and cbc:ProfileID are fixed Peppol values for BIS Billing 3.0. A wrong CustomizationID triggers PEPPOL-EN16931-R004.
  • cbc:ID is the invoice number (BT-1). HMRC requires "a sequential number based on one or more series which uniquely identifies the document".
  • cbc:IssueDate (BT-2) and cbc:DueDate (BT-9) must be YYYY-MM-DD.
  • cbc:InvoiceTypeCode 380 is a commercial invoice. Credit notes use a separate CreditNote document. See credit notes in Peppol.
  • cbc:DocumentCurrencyCode GBP. For other currencies, see multi-currency e-invoices.

References

cbc:BuyerReference (BT-10) and cac:OrderReference/cbc:ID (BT-13). Peppol needs at least one (rule R003). See buyer reference and PO number. cac:InvoicePeriod shows the service period. cac:Delivery/cbc:ActualDeliveryDate is one way to show the time of supply. You could use cbc:TaxPointDate (BT-7) instead.

Parties

  • cbc:EndpointID is the Peppol electronic address, with a schemeID from the EAS list. We used 0088 (GS1 GLN) with fictitious numbers that pass the GLN check-digit rule. UK businesses may also use 9932 (UK VAT number). See Peppol EAS codes for the UK.
  • cac:PartyName/cbc:Name is the trading name (BT-28). cac:PartyLegalEntity/cbc:RegistrationName is the legal name (BT-27). HMRC requires the name under which you are registered for VAT.
  • cac:PartyTaxScheme/cbc:CompanyID is the VAT number with the GB prefix (BR-CO-09).
  • cac:PartyLegalEntity/cbc:CompanyID here holds a Companies House-style number without a scheme ID. That is optional.
  • Postal addresses need a country code (BR-09, BR-11).

Payment

cbc:PaymentMeansCode 30 is credit transfer. Rule BR-61 then requires an account identifier (cac:PayeeFinancialAccount/cbc:ID). We used the standard example IBAN format. cbc:PaymentID is the remittance reference you want quoted.

Document-level charge

cac:AllowanceCharge with cbc:ChargeIndicator true is a charge. false would be a discount. Reason code DL is "Delivery" in the UNCL 7161 list. Each charge needs its own VAT category and rate.

VAT breakdown

One cac:TaxTotal with one cac:TaxSubtotal per VAT category and rate:

  • S at 20%: taxable £850.00 + £15.00 = £865.00, VAT £173.00
  • Z at 0%: taxable £60.00, VAT £0.00 (no exemption reason allowed)

Category codes are explained in UK VAT category codes.

Totals

Element Value Rule
LineExtensionAmount 910.00 = 850.00 + 60.00 BR-CO-10
ChargeTotalAmount 15.00 BR-CO-12
TaxExclusiveAmount 925.00 = 910.00 + 15.00 BR-CO-13
TaxTotal/TaxAmount 173.00 = 173.00 + 0.00 BR-CO-14
TaxInclusiveAmount 1098.00 = 925.00 + 173.00 BR-CO-15
PayableAmount 1098.00 BR-CO-16

Element order inside cac:LegalMonetaryTotal is fixed by the UBL schema: LineExtensionAmount, TaxExclusiveAmount, TaxInclusiveAmount, then AllowanceTotalAmount, ChargeTotalAmount, PrepaidAmount, PayableRoundingAmount, PayableAmount.

Lines

Each cac:InvoiceLine has an ID, quantity with a UN/ECE unit code (HUR hour, C62 one), a net amount equal to quantity × price (PEPPOL-EN16931-R120), an item name, a VAT category, and a price. cac:OrderLineReference links each line to the PO line.

How to validate it yourself

  1. Schema: validate against UBL-Invoice-2.1.xsd from the OASIS UBL 2.1 package.
  2. EN 16931 rules: run the UBL XSLT from ConnectingEurope/eInvoicing-EN16931 with an XSLT 2.0 processor such as Saxon.
  3. Peppol rules: compile PEPPOL-EN16931-UBL.sch from OpenPEPPOL/peppol-bis-invoice-3 and run it the same way.

Look for svrl:failed-assert in the output. None means pass. Most Access Points run the same checks when you submit.

Variations

What may change

This example follows Peppol BIS Billing 3.0 as published in May 2026. Peppol is confirmed as the UK's network. The UK data standard is due to be set out after the roadmap at Budget 2026 and may add UK-specific requirements. Nothing UK-specific is confirmed yet. Check the timeline.

Frequently asked questions

Is there an official UK e-invoice XML example?

Not yet. HMRC has not published a UK e-invoice specification or examples. Peppol publishes generic examples on GitHub. The example on this page follows Peppol BIS Billing 3.0 with UK data.

Which XML format do UK Peppol invoices use?

Peppol BIS Billing 3.0 uses UBL 2.1. The Invoice root element is in the namespace urn:oasis:names:specification:ubl:schema:xsd:Invoice-2.

What is the minimum a Peppol invoice needs?

Among other things: the CustomizationID and ProfileID, invoice number, issue date, type code, currency, a buyer reference or PO number, seller and buyer with electronic addresses and postal addresses, a VAT breakdown, totals, and at least one line.

How was this example validated?

Against the UBL 2.1 Invoice schema, the EN 16931 UBL Schematron (version 1.3.17) and the Peppol BIS Billing 3.0 Schematron. All passed with no errors or warnings.

Spotted a mistake? Report an error. einvoices.uk is an independent publication and is not affiliated with HMRC. Details of the mandate may change; check the sources and official GOV.UK guidance before acting.