Layerbit
Compliance & Tax Technology

UAE E-Invoicing: What PINT-AE Actually Requires From Your System

A PDF invoice is a picture of an invoice. Under the UAE's e-invoicing programme, what counts is a structured XML document in the PINT-AE format, exchanged through an accredited service provider. If your billing system only produces PDFs today, the work ahead is data work — and most of it can start now.

Verify dates and obligations with the authority

This guide explains the technical structure of PINT-AE so engineering teams can prepare. Phased rollout dates, thresholds and exemptions are set by the UAE Ministry of Finance and the Federal Tax Authority and have been adjusted more than once. Confirm your own obligations and deadlines with the FTA, your Accredited Service Provider, or a qualified tax adviser — not with a technical article.

The short version

  • PINT-AE is the UAE profile of Peppol PINT, expressed as UBL 2.1 XML — not a PDF, not a PDF with XML attached.
  • The UAE uses a five-corner model: you, your provider, their provider, your customer, and the tax authority as the fifth corner.
  • You cannot send invoices yourself. Exchange happens through an Accredited Service Provider (ASP).
  • The real project is data readiness: tax identifiers, structured addresses, unit codes and tax categories for every counterparty and every line.

What PINT-AE is

Three layers are worth separating, because the names get used interchangeably and they are not the same thing:

LayerWhat it is
UBL 2.1The underlying XML grammar — an OASIS standard defining <Invoice>, <InvoiceLine>, <TaxTotal> and so on.
Peppol PINTOpenPeppol's international invoice specification: which UBL elements are mandatory, what they mean, and the business rules that must hold.
PINT-AEThe UAE-specific profile of PINT — local identifiers, local tax categories, and the additional rules the FTA requires.

So "generating a PINT-AE invoice" means producing UBL 2.1 XML that satisfies both the PINT business rules and the UAE additions. A document can be perfectly valid UBL and still fail PINT-AE validation, which is the situation most first integration attempts land in.

The five-corner model

Standard Peppol is a four-corner network: sender → sender's access point → receiver's access point → receiver. Neither party needs to know anything about the other's software; the access points speak a common protocol.

The UAE adds a fifth corner — the tax authority:

  You            Your ASP         Customer's ASP      Customer
   │                 │                   │                │
   └──── invoice ───►│──── Peppol  ─────►│──── invoice ──►│
                     │
                     └──── report ────► Federal Tax Authority
                                              (5th corner)

Your accredited provider both delivers the invoice to your customer's provider and reports the transaction to the FTA. This is a continuous transaction control model: reporting is a by-product of exchange rather than a separate periodic filing.

Two practical consequences follow. First, you cannot self-send — you must contract with an ASP, and that choice is a procurement exercise with a lead time. Second, validation happens outside your control. If your XML is malformed or fails a business rule, it is rejected at the provider, and your invoice has not legally been issued. Getting the document right is not a nice-to-have.

What the document looks like

A minimal-but-realistic invoice skeleton. Note the two namespaces: cbc for simple values and cac for composite structures — the most common source of confusion when hand-building UBL.

<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>...PINT-AE identifier...</cbc:CustomizationID>
  <cbc:ID>INV-2026-00417</cbc:ID>              <!-- BT-1  invoice number -->
  <cbc:IssueDate>2026-08-27</cbc:IssueDate>      <!-- BT-2  issue date -->
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode><!-- BT-3  380 = commercial invoice -->
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>

  <cac:AccountingSupplierParty>
    <cac:Party>
      <cac:PartyIdentification>
        <cbc:ID>1234567890</cbc:ID>             <!-- your tax identifier -->
      </cac:PartyIdentification>
      <cac:PostalAddress>
        <cbc:CityName>Dubai</cbc:CityName>
        <cac:Country><cbc:IdentificationCode>AE</cbc:IdentificationCode></cac:Country>
      </cac:PostalAddress>
    </cac:Party>
  </cac:AccountingSupplierParty>

  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="EA">2</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">500.00</cbc:LineExtensionAmount>
  </cac:InvoiceLine>

  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">25.00</cbc:TaxAmount>
  </cac:TaxTotal>
</Invoice>

Those BT- comments refer to business terms. PINT inherits its semantic model from EN 16931, the European standard, where every field has a stable identifier — BT-1 is always the invoice number regardless of syntax. Provider documentation and validation errors are written in BT numbers, so learning the handful that matter to you pays for itself quickly.

Where validation actually fails

In practice, rejections cluster into a few recurring categories rather than exotic schema problems:

ProblemDetail
Totals that do not reconcileThe sum of line amounts must equal the line extension total, which must tie to the tax-exclusive amount, the tax total and the payable amount. Every arithmetic relationship is a rule.
Rounding driftComputing tax per line and computing it on the total can differ by fils. Pick one method, apply it consistently, and make the document internally consistent.
Missing or malformed tax identifierBoth parties must be identified correctly. A transposed digit fails, and a checksum-valid number that is not actually registered fails at the authority.
Wrong tax categoryStandard-rated, zero-rated, exempt, out-of-scope and reverse-charge are distinct categories with distinct codes. Zero-rated and exempt are not interchangeable, and exports are not simply "no tax".
Invalid unit codesunitCode comes from the UN/ECE Recommendation 20 code list. EA, HUR, KGM are valid; each, hrs, pcs are not.
Unstructured addressesA single free-text address blob will not satisfy rules that expect discrete city, country and postal components.
Currency inconsistencyEvery currencyID must match the document currency; foreign-currency invoices need the tax amount in AED as well.

Notice how few of these are XML problems. They are data problems that XML makes visible. A PDF will happily display an invoice whose totals are 3 fils out and whose customer address is one unparsed string; structured validation will not.

Check an invoice's structure before you involve a provider

Layerbit's UAE PINT-AE Compliance Checker inspects invoice data against the PINT-AE field structure, shows what is missing, and exports a PINT-AE style XML file — free, no signup, entirely inside your browser. It is a readiness and learning aid, not an FTA-approved filing route: have your ASP or adviser verify anything you actually submit.

Open PINT-AE Checker

What to do now, regardless of your date

The compliance deadline is a deadline for data you already should have. Nothing below depends on a final timeline, and all of it takes longer than the integration itself.

1. Audit counterparty master data

Every customer needs a valid tax identifier and a structured address. In most systems today the identifier lives in a free-text notes field for some customers and nowhere for others, and the address is one line. Cleaning thousands of counterparty records is a months-long exercise with a long tail of customers who do not reply. Start it first.

2. Classify every product and service

Each line needs a tax category and a valid unit code. If your catalogue stores "5% VAT" as a number rather than a category, you cannot distinguish zero-rated from exempt from out-of-scope — and that distinction is mandatory in the XML.

3. Fix your rounding and numbering now

Decide where rounding happens and make it consistent. Confirm invoice numbers are genuinely unique and sequential per the rules you must follow — duplicates that a PDF workflow tolerated will be rejected outright.

4. Choose a provider early

ASP selection involves due diligence, contracts, integration effort and testing. Providers get busier as deadlines approach, and you will be sharing their onboarding capacity with everyone who waited.

5. Produce test documents against real data

Export your ten most complicated invoices — foreign currency, mixed tax categories, credit notes, partial discounts — and try to express each as PINT-AE XML. That exercise finds your genuine gaps faster than any amount of reading, because your edge cases are not the specification's examples.

Credit notes, and the thing that surprises people

Corrections are themselves structured documents. You cannot amend an issued e-invoice by editing it — you issue a credit note (InvoiceTypeCode 381) that references the original document. That reference is mandatory, which means your system must retain the original identifier and be able to link to it.

This tends to be the requirement that forces real change in older billing systems, because informal correction workflows — reissue the PDF, email it again, keep a note in a spreadsheet — have no equivalent. Every correction becomes a first-class document with its own lineage. Check early whether your system can even represent that.

It is a data project wearing an XML costume

Teams approaching e-invoicing usually budget for the integration — build the XML, connect the provider, test, done. The integration is the small part. The work that consumes the timeline is discovering that a third of your customer records lack a usable tax identifier, that your catalogue cannot distinguish exempt from zero-rated, and that your totals have been quietly rounding in two different places for years.

All of which is fixable, and none of which needs to wait for a confirmed date. Structured invoicing does not add requirements so much as it stops letting you ignore the ones you already had.