Flick.
PINT AE CompliantCountry guide

United Arab Emirates - eInvoicing Mandates

Comprehensive guide for implementing PINT AE-compliant e-invoicing in the United Arab Emirates. Built on Peppol International standards with UAE-specific requirements for seamless FTA integration and compliance.

PINT AESpecifications
DCTCEModel
PeppolNetwork
PhasedRollout

Reporting Mandates

  • FTA Peppol eInvoicing
  • PINT AE Framework

Exchange Networks

  • Peppol Network
  • Accredited Service Providers

Supported Documents

  • Commercial Invoices (380)
  • Self-Billed Invoices (389)
  • Credit Notes (381, 81, 361)
  • Out of Scope Invoices (480)

Introduction

UAE e-invoicing runs on Peppol. You send a JSON document to Flick. One submission delivers the invoice to the buyer over Peppol and reports tax data to the Federal Tax Authority (FTA). Those two jobs succeed and fail independently.

The model is Decentralized Continuous Transaction Control and Exchange (DCTCE). There is no clearance step. The FTA is not in the delivery path, and an invoice is not held for FTA approval before it moves.

You do not build UBL, sign documents, run Schematron, or call the FTA. You send a payload and track two status values.

Scope

DocumentsB2B and B2G invoices, credit notes, self-billed invoices and credit notes, and out-of-scope documents
BusinessesAll UAE-operating entities, VAT-registered or not
RoutePeppol only. A PDF emailed to a customer does not meet the obligation
ReportingAutomatic. Both access points report a Tax Data Document. You never call the FTA

B2C is out of scope today. Phase dates are published by the Ministry of Finance.

Roles

CornerWhoDoes
C1SupplierIssues the invoice
C2Supplier's access pointValidates, renders, transmits, reports the TDD
C3Buyer's access pointReceives, validates, delivers, reports the TDD, returns an MLS
C4BuyerReceives the invoice
C5FTACollects the Tax Data Document from both sides

Flick is C2 for what you send and C3 for what you receive. Both sides report the same transaction, so the FTA can reconcile two views.

Delivery and reporting

Reporting is your obligation to the FTA. Delivery is the exchange with your customer. They can fail independently.

exchange.status becomes delivered only when the recipient's Message Level Status arrives. Until then it stays processing, even after the document has left your access point.

status folds both tracks into one value for routing. When it reads failed, check reporting.settled and exchange.settled. Settled failure means the document was assessed and refused: correct and reissue. Unsettled failure means retries are still in progress: do nothing. Reissuing an unsettled failure creates a second document for one transaction.

What changes in your system

  • document_identifier must be unique per participant per financial year of issue_date.
  • Domestic invoices need the buyer's Peppol id, and usually a TRN or legal registration id.
  • PINT AE adds fields beyond classic UAE VAT (transaction flags, emirate codes, HS/SAC, exemption reasons, AED amounts on foreign-currency documents).
  • Corrections are credit notes (381 plus reason and reference), not edits to the original.
  • Delivery is asynchronous. Plan for status that resolves after the API call returns.

Document types

CodeDocument
380Commercial invoice
480Invoice out of scope of tax
381Credit note
81, 83, 396, 532Credit note variants
389Self-billed invoice
261Self-billed credit note

Use the type code. A 380 with is_selfbilled: true still renders as a plain invoice.

Transaction flags

Eight flags compose the PINT AE transaction type code. Send all nine flag keys (including is_selfbilled) on every document so the code is always built.

FlagCode list nameDescription (PINT AE)Also requires
is_ftzFree trade zone (position 1)Supply of goods or services in Free trade zonefz_beneficiary_id
is_deemedDeemed supply (position 2)Supply of goods or services without consideration
is_marginProfit Margin Scheme (position 3)Supply of goods under the profit margin schemeEvery line in the margin category
is_summarySummary invoice (position 4)Taxable person makes more than one supply of Goods or Services to the same person in the same calendar monthinvoice_period
is_continuousContinuous Supply (position 5)Supply of goods and/or services made on recurrent basis
is_dabAgent billing (position 6)Agent who is a registrant makes a supply on behalf of the principalprincipal_id, different from the seller TRN
is_ecommerceSupply through E-commerce (position 7)Supply of goods or services via E-commercedelivery.address
is_exportExports (position 8)Supply of goods or services outside the countrydelivery.address with a non-AE country

Source: PINT AE Transaction type.

Reverse charge and zero-rating are line VAT categories (AE, Z), not flags. Exempt uses E plus a reason code.

Business use cases

The specification covers sixteen business cases. Baseline cases map to document types. Conditional cases map to transaction flags and VAT categories. You do not declare a use case by name. It falls out of the type code, flags, and categories.

#ScenarioHow you express it
1Tax invoicedocument_type 380
2Credit notedocument_type 381
3Commercial invoicedocument_type 380
4Self-billed invoicedocument_type 389
5Self-billed credit notedocument_type 261
6Out of scope of taxdocument_type 480
7Reverse chargeLine tax_category AE
8Zero-ratedLine tax_category Z
9ExemptLine tax_category E plus a reason code
10Profit Margin Schemeflags.is_margin, category N on every line
11Deemed supplyflags.is_deemed
12Continuous Supplyflags.is_continuous
13Agent billingflags.is_dab plus principal_id
14Summary invoiceflags.is_summary plus invoice_period
15Free trade zoneflags.is_ftz plus fz_beneficiary_id
16Supply through E-commerce / Exportsflags.is_ecommerce or flags.is_export, plus a delivery address

What you build vs what Flick does

YouFlick
Map your invoice model to the Regional API payloadUBL generation, Schematron, XSD
Handle 400 responses during developmentPeppol routing, SMP lookup, AS4 transport
Track reporting and exchange statusFTA reporting and retries
Consume the events feed, or pollArtifact storage (UBL, SBD, MLS, TDD)

Regional API: UAE only. Endpoints under /v1/participants/{participant_id}/. The body is the document.

Unified API: Same document body plus a country discriminator, for multi-market use.

Specification

Base standardPeppol BIS Billing 3.0
UAE profilePINT AE (Peppol International, UAE)
FormatUBL 2.1 XML, UTF-8
TransportPeppol AS4
AddressingScheme 0235
ValidationPINT AE Schematron plus UBL XSD
ModelDCTCE (no clearance)

Official sources

ResourceURL
Ministry of Finance eInvoicing portalhttps://mof.gov.ae/einvoicing/
PINT AE Billing specificationhttps://docs.peppol.eu/poac/ae/v1.0.1/pint-ae/

eInvoicing Lifecycle

You send an invoice as JSON. Flick turns it into compliant UBL XML and does two jobs with it: it reports the tax data to the Federal Tax Authority (FTA), and it delivers the invoice to your buyer over the Peppol network. Both jobs finish after the API call returns, so the core skill on this API is submitting a document and then tracking what happens to it.

This page walks the whole journey: submit, track, receive, acknowledge.


The big picture

The big picture

  1. You POST the invoice JSON.
  2. Flick validates it. If anything is wrong, you get a 400 with a list of issues and nothing is stored.
  3. A valid invoice gets a 202 response with a document_id. Save that id.
  4. Flick then works on two tracks at the same time: reporting tax data to the FTA, and delivering the invoice to the buyer.
  5. Your app finds out how both tracks ended by polling or by reading the events feed.

The one rule to remember: 202 means accepted and queued, never delivered. Delivery and reporting finish later, on their own schedule.


Step 1: Authenticate and submit

Authenticate and submit

Every request carries one auth header. There are two kinds of credential, told apart by prefix:

HTTP
X-Flick-Auth-Key: flick_ae_...   # long-lived API key
X-Flick-Auth-Key: flick_at_...   # OAuth access token, valid 1 hour

The standard Authorization: Bearer header works too, with the same credentials. If you were given a client_id and client_secret instead of an API key, exchange them for a token first:

Shell
curl -X POST "https://{BASE_URL}/v1/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"

Then submit the invoice:

Shell
curl -X POST "https://{BASE_URL}/v1/participants/{participant_id}/documents" \
  -H "X-Flick-Auth-Key: flick_ae_..." \
  -H "Content-Type: application/json" \
  -d @invoice.json

A valid document comes back as a 202:

JSON
{
  "status": "success",
  "message": "Document accepted for Peppol network delivery.",
  "data": {
    "document_id": "01a02885-b49b-7e49-a972-f76ed024bf03",
    "document_identifier": "INV-2026-0142",
    "status": "processing",
    "reporting_status": "processing",
    "exchange_status": "processing"
  }
}

Save data.document_id. It is how you track this invoice from now on.

Two things to know about the payload:

  • Amounts are decimal strings: "total_amount": "1200.00", never a bare JSON number.
  • A 400 means the document was refused and nothing was filed. Fix the payload and submit again. See Examples for complete payloads and Validation & Errors for how to read a rejection.

Step 2: The three status fields

Every document carries three status fields: two detailed tracks, plus one coarse summary that folds them together.

FieldMeaningValues you will see
reportingThe FTA obligationprocessing, reported, failed, not_required
exchangePeppol delivery to the buyerprocessing, delivered, received, failed, not_required
statusBoth tracks folded into one wordprocessing, completed, failed

Read them like this:

  • processing means still in flight. Everything starts there.
  • exchange becomes delivered only when the buyer's access point confirms receipt. received is what you see on invoices that arrived for you.
  • status is safe to branch on for display and routing: completed means both tracks ended well.

If a track says failed

failed covers two very different situations. The settled field on the track (in the single-document response) tells them apart:

  • settled: true means the FTA or the recipient looked at the document and refused it. This is final. Correct the document and issue a new one.
  • settled: false means they could not be reached yet. Flick is still retrying. Do nothing and wait.

Never reissue on an unsettled failure. You would end up filing two documents for one transaction.


Step 3: Track your document

Once the invoice is submitted, there are two ways to learn what happened to it.

Track your document

Option A: Poll the document

Ask for the document by id until its status settles:

HTTP
GET /v1/participants/{participant_id}/documents/{document_id}
JSON
{
  "status": "success",
  "message": "Document retrieved",
  "data": {
    "id": "01a02885-b49b-7e49-a972-f76ed024bf03",
    "document_identifier": "INV-2026-0142",
    "direction": "outgoing",
    "status": "processing",
    "reporting": { "status": "processing", "settled": false, "ok": null },
    "exchange": { "status": "processing", "settled": false, "ok": null }
  }
}

The response is trimmed here; the real one also carries the counterparty, network references and the stored document body.

Polling is simple and fine at low volume: one invoice, one loop. It gets wasteful when you are tracking many documents at once.

One endpoint tells you everything that changed, in order, across all your documents:

HTTP
GET /v1/participants/{participant_id}/events?direction=sent
JSON
{
  "status": "success",
  "message": "Events retrieved",
  "data": {
    "events": [
      {
        "id": "MDFhMDI4ODY6NDI",
        "occurred_at": "2026-08-22T08:11:01.840Z",
        "type": "exchange.status_changed",
        "document_id": "01a02885-b49b-7e49-a972-f76ed024bf03",
        "status": "completed",
        "reporting": "reported",
        "exchange": "delivered"
      }
    ],
    "pagination": {
      "next_cursor": "MDFhMDI4ODY6NDM",
      "has_more": false,
      "limit": 20
    }
  }
}
Event typeRaised when
document.receivedAn invoice arrived for you over Peppol
reporting.status_changedThe FTA reporting track moved
exchange.status_changedThe delivery track moved
document.completedThe whole document ended well. Raised once
document.failedEither track failed. Raised once

Each event carries the three status fields, so most of the time you do not need to fetch the document at all.

There are two feeds: one for what you send, and one for what arrives for you. direction is required and has no default, and it accepts either vocabulary: sent and outgoing name the same feed, as do received and incoming. Paging and acknowledgement work the same on both, and are explained below.


Receiving invoices

When a supplier sends you an invoice over Peppol, it simply appears on your account with direction: incoming. Nothing pushes it to you; your app has to look. Again, there are two ways.

Receiving invoices

Option A: Poll the document list

HTTP
GET /v1/participants/{participant_id}/documents?direction=incoming&since_id={newest_id_you_have_seen}

since_id returns only documents newer than an id you already know, so you do not reread the same rows forever. The catch: you own the bookkeeping. Your app must store the newest id it has processed, and if that record is lost or wrong, you will miss invoices or process them twice.

Every arriving invoice raises a document.received event on the received feed:

HTTP
GET /v1/participants/{participant_id}/events?direction=received

The loop for handling incoming invoices:

  1. Fetch a page of events.
  2. For each document.received event, fetch the full invoice with GET /documents/{document_id} and process it in your system.
  3. Acknowledge the page. The server now remembers you are done with those events.

That third step is why the events feed wins for incoming invoices. The server keeps your position for you, so "which invoices have I already handled" survives crashes and restarts. The document list cannot do that.

One naming detail. The document list takes only direction=incoming and outgoing; the events feed takes those as well as received and sent. Whichever you send, the events response echoes the incoming and outgoing pair back in data.direction, so match on those when you read it rather than on what you asked for.

Two more things about the feed that are easy to get wrong. GET /events/position for a feed you have never acknowledged answers 200 with acked: null, not 404, so branch on acked rather than on the status code. And the cursor in a POST /events/ack body must be the opaque string from an event id; a number is reported back as a missing parameter.


How acknowledgement works

Acknowledging is like marking mail as read, except the marker is stored on the server.

Every page of events comes with a next_cursor. When you tell the API "I am done through this cursor", that becomes your stored position, and the feed continues from there for you, even after a crash or redeploy.

How acknowledgement works

Three tools drive it:

ToolWhat it does
GET /events?...&ack_cursor={cursor}Acknowledges everything through the cursor, then returns the next page. The normal loop needs only this
POST /events/ack with {direction, cursor}Acknowledges without fetching a page. For when you are done and idle
GET /events/position?direction=...Reads your stored position without changing anything. Use it on startup

The crash-safe loop, step by step:

  1. On startup, call GET /events/position. If it returns a cursor, continue from it with ?cursor={acked}. If not, start with no cursor at all; you begin at the oldest event.
  2. Fetch a page and process every event in it.
  3. Fetch the next page with ack_cursor set to the next_cursor of the page you just finished. This one call commits your progress and gets more work.
  4. Repeat from step 2. An empty page means you are caught up; keep its next_cursor and poll again after a pause.
  5. Shutting down, or idle after an empty page? Commit the last cursor with POST /events/ack.

Two rules make the loop safe:

  • Acknowledge only after your side of the work is done (saved to your database), never before. If you crash mid-page, the unacknowledged events are simply served again.
  • Because events can be served again, they can repeat. Keep a record of processed event ids and skip the ones you have seen. event.id is the deduplication key.

Cursors only move forward. An acknowledgement behind your stored position is ignored, so two workers polling the same feed cannot rewind each other.


Endpoint quick reference

EndpointUse it to
POST /v1/oauth/tokenExchange client credentials for an access token
POST /v1/participants/{participant_id}/documentsSubmit an invoice
GET /v1/participants/{participant_id}/documents/{document_id}Read one document with full track detail
GET /v1/participants/{participant_id}/documentsList and filter documents, both directions
GET /v1/participants/{participant_id}/eventsRead the status feed, with cursor or ack_cursor
POST /v1/participants/{participant_id}/events/ackCommit a position without fetching
GET /v1/participants/{participant_id}/events/positionRead your stored position

Full request and response schemas for every endpoint, including bulk submission, document XML and artifacts, are in the UAE API Reference.

Invoice Datapoints

Every field the Regional API accepts on a UAE document, with its requirement, allowed values and the PINT AE rules that touch it. Fields are grouped in payload order. Unless a field is tagged otherwise, it exists on all four document types.

190 fields

Document header

Identity, dates and currency. Everything here sits at the root of the payload.

Nature
mandatory
Data type
string
Format
freetext
Size
n

Your own invoice number; must be unique per seller.

{
  "document_identifier": "INV-3001/2026"
}
Example INV-3001/2026
Nature
mandatory
Data type
string
Format
date
Size
10 characters

Date the document was issued.

{
  "issue_date": "2026-07-23"
}
Example 2026-07-23
Nature
optional
Data type
string
Format
time
Size
n

Time of issue, with a UTC offset.

{
  "issue_time": "10:30:00+04:00"
}
Example 10:30:00+04:00
Nature
conditional
Data type
string
Format
date
Size
10 characters

Date payment is due.

{
  "due_date": "2026-08-22"
}
Example 2026-08-22
Nature
mandatory
Data type
string
Format
enum
Size
9 allowed values

UNTDID 1001 document type. The four documented types are 380, 381, 389 and 261; the schema also accepts 480, 81, 83, 396 and 532.

380Tax invoice
381Credit note
389Self-billed invoice
261Self-billed credit note
480Out of scope of VAT
81Credit note related to goods or services
83Credit note related to financial adjustments
396Factored invoice
532Forwarder's invoice discrepancy report
{
  "document_type": "380"
}
Nature
optional
Data type
string
Format
freetext
Size
n

Free-text note carried on the document.

{
  "note": "Tax invoice - sample"
}
Example Tax invoice - sample
Nature
optional
Data type
string
Format
date
Size
10 characters

Date the VAT becomes due, if different from the issue date. Optional, but when present it must fall before the issue date.

{
  "tax_point_date": "2026-07-15"
}
Example 2026-07-15
Nature
mandatory
Data type
string
Format
code
Size
3 letters

Currency all amounts on the document are expressed in.

{
  "document_currency": "USD"
}
Example USD
Nature
conditional
Data type
number
Format
decimal
Size
max 6 decimals

Rate used to convert the document currency to AED. Required whenever the document currency is not AED.

{
  "currency_exchange_rate": 3.6725
}
Example 3.6725
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer-side cost centre / accounting reference.

{
  "accounting_cost": "4025:123:4343"
}
Example 4025:123:4343
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer's own reference for routing the document internally.

{
  "buyer_reference": "BR-2026-001"
}
Example BR-2026-001

credit_note_reason_code

Credit notes only
Nature
mandatory
Data type
string
Format
enum
Size
6 allowed values

Why the credit note is being issued. Mandatory on a 381.

  • Reason for issuing the credit note. Confirm the exact key name against the Flick credit-note schema.
DL8.61.1.AThe supply was cancelled
DL8.61.1.BTax treatment changed with the nature of the supply
DL8.61.1.CThe agreed consideration was altered
DL8.61.1.DGoods or services returned, consideration returned
DL8.61.1.ETax was charged or applied in error
VDVolume discount: the one code that discharges ibr-055-ae
{
  "credit_note_reason_code": "DL8.61.1.D"
}

Flags

Mandatory block: the API rejects a document without it (ibr-154-ae), so send at least flags: {}. Every key inside is optional and defaults to false. The eight transaction-type flags are read in code-list order to compose the PINT AE transaction type code (BTAE-02).

Nature
optional
Data type
boolean
Format
true / false
Size
n

The buyer issued this document on the supplier's behalf.

  • true = self-billed document (buyer issues). Also switches the Peppol customization/profile to self-billing.
  • Not part of the 8-bit transaction type code.
{
  "flags": {
    "is_selfbilled": false
  }
}
Example false
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods or services in Free trade zone.

  • Transaction type code list: Free trade zone (position 1). Pair with fz_beneficiary_id.
{
  "flags": {
    "is_ftz": true
  }
}
Example true
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods or services without consideration.

  • Transaction type code list: Deemed supply (position 2).
{
  "flags": {
    "is_deemed": false
  }
}
Example false
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods under the profit margin scheme.

  • Transaction type code list: Profit Margin Scheme (position 3). Every line must use the margin VAT category.
{
  "flags": {
    "is_margin": false
  }
}
Example false
Nature
optional
Data type
boolean
Format
true / false
Size
n

Taxable person makes more than one supply of Goods or Services to the same person in the same calendar month.

  • Transaction type code list: Summary invoice (position 4). Pair with invoice_period, which becomes mandatory.
{
  "flags": {
    "is_summary": false
  }
}
Example false
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods and/or services made on recurrent basis.

  • Transaction type code list: Continuous Supply (position 5). Pair with invoice_period.
{
  "flags": {
    "is_continuous": true
  }
}
Example true
Nature
optional
Data type
boolean
Format
true / false
Size
n

Agent who is a registrant makes a supply on behalf of the principal.

  • Transaction type code list: Agent billing (position 6). Pair with principal_id.
{
  "flags": {
    "is_dab": true
  }
}
Example true
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods or services via E-commerce.

  • Transaction type code list: Supply through E-commerce (position 7). Pair with delivery.address.
{
  "flags": {
    "is_ecommerce": true
  }
}
Example true
Nature
optional
Data type
boolean
Format
true / false
Size
n

Supply of goods or services outside the country.

  • Transaction type code list: Exports (position 8). Pair with a non-AE delivery.address. Relaxes several buyer-identification rules.
{
  "flags": {
    "is_export": false
  }
}
Example false

Invoicing period

The period the document covers. Mandatory on a summary invoice.

Nature
conditional
Data type
string
Format
date
Size
10 characters

First day of the period the document covers.

{
  "invoice_period": {
    "start_date": "2026-07-01"
  }
}
Example 2026-07-01
Nature
conditional
Data type
string
Format
date
Size
10 characters

Last day of the period the document covers.

{
  "invoice_period": {
    "end_date": "2026-07-31"
  }
}
Example 2026-07-31
Nature
optional
Data type
string
Format
enum
Size
1 allowed values

How often invoices are issued for this period.

MTHmonthly
{
  "invoice_period": {
    "description_code": "MTH"
  }
}

Order & preceding-document references

Links to the purchase order and, on a credit note, to the invoice being corrected.

Nature
optional
Data type
string
Format
freetext
Size
n

Buyer's purchase order number.

{
  "order_reference": {
    "purchase_order_id": "PO-88951"
  }
}
Example PO-88951
Nature
optional
Data type
string
Format
freetext
Size
n

Seller's sales order number.

{
  "order_reference": {
    "sales_order_id": "SO-55673"
  }
}
Example SO-55673
Nature
conditional
Data type
string
Format
freetext
Size
n

Reference to a preceding invoice (e.g. the invoice being corrected/credited).

{
  "document_references": [
    {
      "document_identifier": "INV-2900/2026"
    }
  ]
}
Example INV-2900/2026
Nature
optional
Data type
string
Format
date
Size
10 characters

Issue date of the referenced document.

{
  "document_references": [
    {
      "issue_date": "2026-06-23"
    }
  ]
}
Example 2026-06-23

Other references

Despatch, receipt, tender, contract, customs and project references.

Nature
optional
Data type
string
Format
freetext
Size
n

Reference to the despatch advice for this delivery.

{
  "other_references": {
    "despatch_document_reference": "DESP-2026-001"
  }
}
Example DESP-2026-001
Nature
optional
Data type
string
Format
freetext
Size
n

Reference to the buyer's goods receipt.

{
  "other_references": {
    "receipt_document_reference": "REC-2026-001"
  }
}
Example REC-2026-001
Nature
optional
Data type
string
Format
freetext
Size
n

Tender or lot the supply was awarded under.

{
  "other_references": {
    "tender_or_lot_reference": "TEND-2026-001"
  }
}
Example TEND-2026-001
Nature
optional
Data type
string
Format
freetext
Size
n

Reference to the contract governing the supply.

{
  "other_references": {
    "contract_document_reference": {
      "id": "CTR-2026-009"
    }
  }
}
Example CTR-2026-009
Nature
optional
Data type
string
Format
freetext
Size
n

Customs declaration number for an import or export.

{
  "other_references": {
    "customs_reference_number": "CUS-778812"
  }
}
Example CUS-778812
Nature
optional
Data type
string
Format
freetext
Size
n

Project the supply belongs to.

{
  "other_references": {
    "project_reference": "PRJ-FLK-77"
  }
}
Example PRJ-FLK-77

Supporting documents & attachments

Attach files by URI or embed them base64. Embedded files come back with an index the attachment endpoints take.

Nature
optional
Data type
string
Format
freetext
Size
n

Identifier of the supporting document. An entry without it is accepted and dropped rather than rejected.

{
  "additional_document_references": [
    {
      "document_identifier": "DR-INV-001 / SUBSCRIPTION-889-X"
    }
  ]
}
Example DR-INV-001 / SUBSCRIPTION-889-X
Nature
optional
Data type
string
Format
enum
Size
1 allowed values

Marks the reference as an invoiced object rather than a plain supporting document.

130invoiced object
{
  "additional_document_references": [
    {
      "document_type_code": "130"
    }
  ]
}
Nature
optional
Data type
string
Format
code
Size
n

Scheme the invoiced object identifier belongs to.

{
  "additional_document_references": [
    {
      "scheme_id": "ON"
    }
  ]
}
Example ON
Nature
optional
Data type
string
Format
freetext
Size
n

Human-readable label for the attachment.

{
  "additional_document_references": [
    {
      "document_description": "Signed delivery note"
    }
  ]
}
Example Signed delivery note
Nature
optional
Data type
string
Format
URL
Size
n

External URL the attachment can be fetched from.

{
  "additional_document_references": [
    {
      "attachment_uri": "https://.../DR-INV-001.pdf"
    }
  ]
}
Example https://.../DR-INV-001.pdf
Nature
conditional
Data type
string
Format
code
Size
n

Media type of the embedded file.

{
  "additional_document_references": [
    {
      "embedded_document": {
        "mime_code": "application/pdf"
      }
    }
  ]
}
Example application/pdf
Nature
conditional
Data type
string
Format
freetext
Size
n

Filename the embedded file is stored and served under.

{
  "additional_document_references": [
    {
      "embedded_document": {
        "filename": "timesheet-july.pdf"
      }
    }
  ]
}
Example timesheet-july.pdf
Nature
optional
Data type
string
Format
base64
Size
n

The file itself, base64 encoded.

{
  "additional_document_references": [
    {
      "embedded_document": {
        "content": "base64 string"
      }
    }
  ]
}
Example base64 string

Seller (issuing_party)

Optional block, prefilled from the entity profile you onboarded with Flick. peppol_id and legal_name always come from your registration and values sent for them are ignored. On a self-billed document the issuer is the buyer, so this block carries the buyer's details.

Nature
optional
Data type
string
Format
freetext
Size
n

Trading name the seller operates under, when it differs from the legal name.

  • The whole issuing_party block is OPTIONAL: anything you omit is prefilled from the entity profile onboarded in Flick. Send values only to override the profile.
{
  "issuing_party": {
    "trade_name": "Flick Trading"
  }
}
Example Flick Trading
Nature
optional
Data type
string
Format
freetext
Size
n

N/A in self-billed documents: the issuer is the buyer, and PINT AE has no legal-form field on the buyer side. Value is ignored.

{
  "issuing_party": {
    "company_legal_form": "Limited Liability Company"
  }
}
Example Limited Liability Company
Nature
optional
Data type
string
Format
freetext
Size
n

Additional seller identifier beyond the tax and licence identifiers.

{
  "issuing_party": {
    "party_identifier": "SELLER-REF-001"
  }
}
Example SELLER-REF-001
Nature
optional
Data type
string
Format
TRN
Size
15 digits

Seller TRN (VAT registration number).

{
  "issuing_party": {
    "identifiers": {
      "AE:VAT": {
        "value": "112345678900003"
      }
    }
  }
}
Example 112345678900003
Nature
optional
Data type
string
Format
TIN
Size
10 digits

Seller TIN - used when not VAT-registered.

{
  "issuing_party": {
    "identifiers": {
      "AE:TIN": {
        "value": "1012345678"
      }
    }
  }
}
Example 1012345678
Nature
optional
Data type
string
Format
freetext
Size
n

Commercial/trade licence number (seller legal registration id).

{
  "issuing_party": {
    "identifiers": {
      "AE:TL": {
        "value": "CN-2233445"
      }
    }
  }
}
Example CN-2233445
Nature
conditional
Data type
string
Format
freetext
Size
n

Authority that issued the seller trade licence. Mandatory whenever a seller AE:TL identifier is sent.

{
  "issuing_party": {
    "identifiers": {
      "AE:TL": {
        "authority_name": "Abu Dhabi DED"
      }
    }
  }
}
Example Abu Dhabi DED
Nature
optional
Data type
string
Format
freetext
Size
n

Seller contact person.

{
  "issuing_party": {
    "contact_name": "Ahmed Hassan"
  }
}
Example Ahmed Hassan
Nature
optional
Data type
string
Format
freetext
Size
n

Seller contact telephone number.

{
  "issuing_party": {
    "contact_telephone": "+97125550100"
  }
}
Example +97125550100
Nature
optional
Data type
string
Format
email
Size
n

Seller contact email address.

{
  "issuing_party": {
    "contact_email": "billing@flicktrading.ae"
  }
}
Example billing@flicktrading.ae

Buyer (receiving_party)

Mandatory. peppol_id is what routes the document, and a submission without it is rejected before validation. On a self-billed document this block carries the supplier's details.

Nature
mandatory
Data type
string
Format
freetext
Size
n

Buyer's registered legal name.

{
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC"
  }
}
Example Gulf Retail Trading LLC
Nature
optional
Data type
string
Format
freetext
Size
n

Trading name the buyer operates under, when it differs from the legal name.

{
  "receiving_party": {
    "trade_name": "Gulf Retail"
  }
}
Example Gulf Retail
Nature
mandatory
Data type
string
Format
enum
Size
10 digits (1XXXXXXXXX)

Peppol address the document is routed to, as scheme:value. A submission without it is rejected.

0235UAE TRN scheme
{
  "receiving_party": {
    "peppol_id": "0235:112345679000003"
  }
}
Nature
optional
Data type
string
Format
freetext
Size
n

Additional buyer identifier beyond the tax and licence identifiers.

{
  "receiving_party": {
    "party_identifier": "BUY-REF-889"
  }
}
Example BUY-REF-889
Nature
mandatory
Data type
string
Format
freetext
Size
n

First line of the buyer's postal address.

{
  "receiving_party": {
    "street_address": "Khalifa Street 12"
  }
}
Example Khalifa Street 12
Nature
optional
Data type
string
Format
freetext
Size
n

Second line of the buyer's postal address.

{
  "receiving_party": {
    "additional_street_address": "Building 7, Floor 3"
  }
}
Example Building 7, Floor 3
Nature
optional
Data type
string
Format
freetext
Size
n

Any further address detail that does not fit the other lines.

{
  "receiving_party": {
    "additional_address_lines": "Opposite Central Mall"
  }
}
Example Opposite Central Mall
Nature
mandatory
Data type
string
Format
freetext
Size
n

Buyer's city.

{
  "receiving_party": {
    "city_address": "Abu Dhabi"
  }
}
Example Abu Dhabi
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer's post code.

{
  "receiving_party": {
    "postal_zone": "51133"
  }
}
Example 51133
Nature
mandatory
Data type
string
Format
enum
Size
7 allowed values

Emirate the buyer is located in. A wrong value is one of the few that produces a clean field error rather than a Schematron rule.

AUHAbu Dhabi
DXBDubai
SHJSharjah
AJMAjman
UAQUmm Al Quwain
RAKRas Al Khaimah
FUJFujairah
{
  "receiving_party": {
    "emirates_code": "AUH"
  }
}
Nature
mandatory
Data type
string
Format
code
Size
2 letters

Buyer's country, ISO 3166-1 alpha-2.

{
  "receiving_party": {
    "country_code": "AE"
  }
}
Example AE
Nature
conditional
Data type
string
Format
TRN
Size
15 digits

Buyer TRN.

{
  "receiving_party": {
    "identifiers": {
      "AE:VAT": {
        "value": "112345679000003"
      }
    }
  }
}
Example 112345679000003
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer trade licence number. Optional; when sent it must carry authority_name.

{
  "receiving_party": {
    "identifiers": {
      "AE:TL": {
        "value": "CN-1234567"
      }
    }
  }
}
Example CN-1234567
Nature
conditional
Data type
string
Format
freetext
Size
n

Authority that issued the buyer trade licence. Mandatory whenever the buyer AE:TL identifier is sent.

{
  "receiving_party": {
    "identifiers": {
      "AE:TL": {
        "authority_name": "Abu Dhabi DED"
      }
    }
  }
}
Example Abu Dhabi DED
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer contact person.

{
  "receiving_party": {
    "contact_name": "Fatima Al Mansoori"
  }
}
Example Fatima Al Mansoori
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer contact telephone number.

{
  "receiving_party": {
    "contact_telephone": "+97125550101"
  }
}
Example +97125550101
Nature
optional
Data type
string
Format
email
Size
n

Buyer contact email address.

{
  "receiving_party": {
    "contact_email": "ap@gulfretail.ae"
  }
}
Example ap@gulfretail.ae
Nature
optional
Data type
string
Format
TIN
Size
10 digits

Buyer tax identification number. The service currently rejects this identifier for the buyer under ibr-133-ae, whether or not another identifier is present.

{
  "receiving_party": {
    "identifiers": {
      "AE:TIN": {
        "value": "1012345678"
      }
    }
  }
}
Example 1012345678

Other parties

Payee and tax representative. Both blocks are optional; sending a tax representative makes its name, address and VAT id mandatory.

Nature
conditional
Data type
string
Format
freetext
Size
n

Free-trade-zone beneficiary TRN - required for FTZ scenarios (is_ftz).

{
  "fz_beneficiary_id": "189098765401003"
}
Example 189098765401003
Nature
conditional
Data type
string
Format
freetext
Size
n

Principal TRN for disclosed agent billing (is_dab).

{
  "principal_id": "155667745601003"
}
Example 155667745601003
Nature
conditional
Data type
string
Format
freetext
Size
n

Only needed when the payee differs from the seller.

{
  "payee_party": {
    "name": "Flick Collections FZ-LLC"
  }
}
Example Flick Collections FZ-LLC
Nature
optional
Data type
string
Format
freetext
Size
n

Identifier for the payee, when payment goes to someone other than the seller.

{
  "payee_party": {
    "identifier": {
      "value": "132345679670003"
    }
  }
}
Example 132345679670003
Nature
optional
Data type
string
Format
code
Size
n

Scheme the payee identifier belongs to.

{
  "payee_party": {
    "identifier": {
      "scheme_id": "0060"
    }
  }
}
Example 0060
Nature
optional
Data type
string
Format
freetext
Size
n

Payee's legal registration identifier.

{
  "payee_party": {
    "legal_registration_id": {
      "value": "112345679350001"
    }
  }
}
Example 112345679350001
Nature
optional
Data type
string
Format
freetext
Size
n

Payee's SEPA-style creditor reference.

{
  "payee_party": {
    "bank_creditor_id": "AE98ZZZ0999999999"
  }
}
Example AE98ZZZ0999999999
Nature
conditional
Data type
string
Format
freetext
Size
n

Legal name of the tax representative acting for the seller.

  • The whole tax_representative block is OPTIONAL - send it only when a tax/fiscal representative acts for the seller. If sent, the name, the postal address (at least the country) and the VAT identifier become mandatory [ibr-018, ibr-019, ibr-020, ibr-056].
{
  "tax_representative": {
    "name": "AE Tax Agents LLC"
  }
}
Example AE Tax Agents LLC
Nature
conditional
Data type
string
Format
TRN
Size
15 digits

Tax representative's VAT registration number.

  • Required when the tax_representative block is sent - a tax representative must have a VAT identifier [ibr-056].
{
  "tax_representative": {
    "vat_number": "123349792700003"
  }
}
Example 123349792700003
Nature
optional
Data type
string
Format
freetext
Size
n

Required only when the tax_representative block is sent (fields inside the block are 1..1 within it; the block itself is optional).

{
  "tax_representative": {
    "street_address": "Al Bateen Street 4"
  }
}
Example Al Bateen Street 4
Nature
optional
Data type
string
Format
freetext
Size
n

Second line of the tax representative's address.

{
  "tax_representative": {
    "additional_street_address": "Office 210"
  }
}
Example Office 210
Nature
optional
Data type
string
Format
freetext
Size
n

Any further address detail for the tax representative.

{
  "tax_representative": {
    "additional_address_lines": "PO Box 4451"
  }
}
Example PO Box 4451
Nature
optional
Data type
string
Format
freetext
Size
n

Required only when the tax_representative block is sent (fields inside the block are 1..1 within it; the block itself is optional).

{
  "tax_representative": {
    "city_address": "Abu Dhabi"
  }
}
Example Abu Dhabi
Nature
optional
Data type
string
Format
freetext
Size
n

Tax representative's post code.

{
  "tax_representative": {
    "postal_zone": "51100"
  }
}
Example 51100
Nature
conditional
Data type
string
Format
enum
Size
7 allowed values

Required only when the tax_representative block is sent (fields inside the block are 1..1 within it; the block itself is optional).

AllowedAUHDXBSHJAJMUAQRAKFUJ
{
  "tax_representative": {
    "emirates_code": "AUH"
  }
}
Nature
conditional
Data type
string
Format
code
Size
2 letters

Tax representative's country. Mandatory once the block is sent.

  • Required only when the tax_representative block is sent (fields inside the block are 1..1 within it; the block itself is optional). The address must at least state the country [ibr-020].
{
  "tax_representative": {
    "country_code": "AE"
  }
}
Example AE

Delivery

Required when the e-commerce or export flag is raised.

Nature
optional
Data type
string
Format
date
Size
10 characters

Date the goods or services were actually delivered.

{
  "delivery": {
    "actual_delivery_date": "2026-07-20"
  }
}
Example 2026-07-20
Nature
optional
Data type
string
Format
freetext
Size
n

Identifier of the place of delivery.

{
  "delivery": {
    "location_id": "112345679000003"
  }
}
Example 112345679000003
Nature
optional
Data type
string
Format
code
Size
n

Scheme the delivery location identifier belongs to.

{
  "delivery": {
    "location_id_scheme": "0060"
  }
}
Example 0060
Nature
optional
Data type
string
Format
freetext
Size
n

Name of the party receiving the goods, when it is not the buyer.

{
  "delivery": {
    "party_name": "Gulf Retail - Mussafah Warehouse"
  }
}
Example Gulf Retail - Mussafah Warehouse
Nature
conditional
Data type
string
Format
freetext
Size
n

First line of the delivery address.

{
  "delivery": {
    "address": {
      "street_address": "Warehouse Lane 9"
    }
  }
}
Example Warehouse Lane 9
Nature
optional
Data type
string
Format
freetext
Size
n

Second line of the delivery address.

{
  "delivery": {
    "address": {
      "additional_street_address": "Gate 4"
    }
  }
}
Example Gate 4
Nature
optional
Data type
string
Format
freetext
Size
n

Any further delivery address detail.

{
  "delivery": {
    "address": {
      "additional_address_lines": "Mussafah Industrial Area"
    }
  }
}
Example Mussafah Industrial Area
Nature
conditional
Data type
string
Format
freetext
Size
n

Delivery city.

{
  "delivery": {
    "address": {
      "city_address": "Abu Dhabi"
    }
  }
}
Example Abu Dhabi
Nature
optional
Data type
string
Format
freetext
Size
n

Delivery post code.

{
  "delivery": {
    "address": {
      "postal_zone": "51244"
    }
  }
}
Example 51244
Nature
conditional
Data type
string
Format
enum
Size
7 allowed values

Emirate the goods are delivered to.

AllowedAUHDXBSHJAJMUAQRAKFUJ
{
  "delivery": {
    "address": {
      "emirates_code": "AUH"
    }
  }
}
Nature
conditional
Data type
string
Format
code
Size
2 letters

Delivery country. Must not be AE on an export.

{
  "delivery": {
    "address": {
      "country_code": "AE"
    }
  }
}
Example AE
Nature
optional
Data type
string
Format
enum
Size
6 allowed values

Incoterms rule governing the delivery.

AllowedEXWFCAFOBCIFDAPDDP
{
  "delivery": {
    "delivery_terms": {
      "incoterms": "DDP"
    }
  }
}

Payment

How and when payment is made. A payment means with its type_code is mandatory except on credit notes and deemed supplies (ibr-191-ae). Common type_code values: 10 cash, 30 credit transfer, 48 card, 49 direct debit.

Nature
conditional
Data type
string
Format
enum
Size
6 allowed values

How payment is made.

10Cash
30Credit transfer
48Card payment
49Direct debit
54Credit card
68Online payment service
{
  "payment_means": [
    {
      "type_code": "30"
    }
  ]
}
Nature
optional
Data type
string
Format
freetext
Size
n

Ties a payment_terms installment to this payment instruction.

{
  "payment_means": [
    {
      "payment_instruction_id": "PMI-001"
    }
  ]
}
Example PMI-001
Nature
optional
Data type
string
Format
freetext
Size
n

Remittance reference the buyer should quote when paying.

{
  "payment_means": [
    {
      "payment_id": "RF18539007547034"
    }
  ]
}
Example RF18539007547034
Nature
conditional
Data type
string
Format
IBAN
Size
n

IBAN or account number payment should reach.

{
  "payment_means": [
    {
      "payment_account_id": "AE07033...3456"
    }
  ]
}
Example AE07033...3456
Nature
optional
Data type
string
Format
freetext
Size
n

Name the receiving account is held under.

{
  "payment_means": [
    {
      "payment_account_name": "Flick Trading - AED Current"
    }
  ]
}
Example Flick Trading - AED Current
Nature
optional
Data type
string
Format
BIC
Size
n

BIC or sort code of the receiving bank.

{
  "payment_means": [
    {
      "payment_service_provider_id": "EBILAEAD"
    }
  ]
}
Example EBILAEAD
Nature
optional
Data type
object
Format
—
Size
n

Optional financial-institution address (same address layout as other addresses).

Example (address block)
Nature
optional
Data type
string
Format
PAN
Size
n

Masked card number, last four digits kept. Accepted but not required on a card payment.

{
  "payment_means": [
    {
      "card": {
        "primary_account_number": "XXXXXXXXXXXX4321"
      }
    }
  ]
}
Example XXXXXXXXXXXX4321
Nature
optional
Data type
string
Format
freetext
Size
n

Last four digits, or the network identifier, of the card used.

{
  "payment_means": [
    {
      "card": {
        "network_id": "VISA"
      }
    }
  ]
}
Example VISA
Nature
optional
Data type
string
Format
freetext
Size
n

Name on the card used.

{
  "payment_means": [
    {
      "card": {
        "holder_name": "Gulf Retail Trading LLC"
      }
    }
  ]
}
Example Gulf Retail Trading LLC
Nature
optional
Data type
string
Format
freetext
Size
n

Direct-debit mandate reference.

{
  "payment_means": [
    {
      "mandate": {
        "id": "MNDT-2026-004"
      }
    }
  ]
}
Example MNDT-2026-004
Nature
optional
Data type
string
Format
IBAN
Size
n

Account the direct debit is taken from.

{
  "payment_means": [
    {
      "mandate": {
        "debited_account_id": "AE21033...9999"
      }
    }
  ]
}
Example AE21033...9999
Nature
optional
Data type
string
Format
freetext
Size
n

Reference the buyer should quote when paying.

{
  "payment_terms": [
    {
      "payment_instruction_id": "PMI-001"
    }
  ]
}
Example PMI-001
Nature
optional
Data type
string
Format
freetext
Size
n

Payment terms in words, for example Net 30.

{
  "payment_terms": [
    {
      "note": "50% on delivery"
    }
  ]
}
Example 50% on delivery
Nature
optional
Data type
number
Format
decimal
Size
n

Amount due under this instalment.

{
  "payment_terms": [
    {
      "amount": 1206.5
    }
  ]
}
Example 1206.50
Nature
optional
Data type
string
Format
date
Size
n

Date this instalment falls due.

{
  "payment_terms": [
    {
      "installment_due_date": "2026-08-22"
    }
  ]
}
Example 2026-08-22

Document-level allowances & charges

The key is plural: allowance_charges. charge_indicator false is an allowance, true is a charge.

Nature
mandatory
Data type
boolean
Format
enum
Size
2 allowed values

false for an allowance, true for a charge. Mandatory in every allowance_charges entry.

falseallowance (discount)
truecharge
{
  "allowance_charges": [
    {
      "charge_indicator": false
    }
  ]
}
Nature
optional
Data type
string
Format
enum
Size
1 allowed values

Coded reason for the document-level allowance or charge.

Allowances: UNCL5189 (95discount). Charges: UNCL7161 (FC=freight)
{
  "allowance_charges": [
    {
      "reason_code": "95 / FC"
    }
  ]
}
Nature
optional
Data type
string
Format
freetext
Size
n

Reason for the allowance or charge in words.

{
  "allowance_charges": [
    {
      "reason": "Volume discount"
    }
  ]
}
Example Volume discount
Nature
conditional
Data type
number
Format
decimal
Size
n

Percentage the allowance or charge was calculated at. Must be sent together with base_amount; either both or neither.

{
  "allowance_charges": [
    {
      "percentage": 5
    }
  ]
}
Example 5
Nature
conditional
Data type
number
Format
decimal
Size
n

Value of the allowance or charge.

{
  "allowance_charges": [
    {
      "amount": 50.0
    }
  ]
}
Example 50.00
Nature
conditional
Data type
number
Format
decimal
Size
n

Amount the percentage was applied to. Must be sent together with percentage; either both or neither.

{
  "allowance_charges": [
    {
      "base_amount": 1000.0
    }
  ]
}
Example 1000.00
Nature
conditional
Data type
string
Format
enum
Size
5 allowed values

VAT category the allowance or charge is taxed under.

Sstandard 5%
Zzero-rated
Eexempt
AEreverse charge
Oout of scope
{
  "allowance_charges": [
    {
      "tax_category": "S"
    }
  ]
}
Nature
conditional
Data type
number
Format
percentage
Size
n

VAT rate the allowance or charge is taxed at. Mandatory when its tax_category is standard rated.

{
  "allowance_charges": [
    {
      "tax_percentage": 5
    }
  ]
}
Example 5

Invoice lines

At least one line is mandatory. name and description are marked optional by the schema but Schematron rejects a document without either.

Nature
mandatory
Data type
string
Format
freetext
Size
n

Line number, unique within the document.

{
  "invoice_lines": [
    {
      "id": "1"
    }
  ]
}
Example 1
Nature
optional
Data type
string
Format
freetext
Size
n

Free-text note on this line.

{
  "invoice_lines": [
    {
      "note": "July 2026 device shipment"
    }
  ]
}
Example July 2026 device shipment
Nature
mandatory
Data type
string
Format
freetext
Size
n

Short name of the item. Marked optional by the schema, but ibr-025 rejects the document without it.

{
  "invoice_lines": [
    {
      "name": "Smart POS Terminal X9"
    }
  ]
}
Example Smart POS Terminal X9
Nature
mandatory
Data type
string
Format
freetext
Size
n

Fuller description of the item. Marked optional by the schema, but ibr-125-ae rejects the document without it.

{
  "invoice_lines": [
    {
      "description": "Handheld smart POS terminal..."
    }
  ]
}
Example Handheld smart POS terminal...
Nature
mandatory
Data type
number
Format
decimal
Size
n

How much of the item is being invoiced.

{
  "invoice_lines": [
    {
      "quantity": 10
    }
  ]
}
Example 10
Nature
mandatory
Data type
string
Format
enum
Size
6 allowed values

Unit of measure, from UN/ECE Recommendation 20. The value is passed through without being checked against the code list, so a wrong code reaches the invoice.

H87piece
DAYday
KGMkg
MTRmetre
LTRlitre
C62unit
{
  "invoice_lines": [
    {
      "uom": "H87"
    }
  ]
}
Nature
mandatory
Data type
number
Format
decimal
Size
n

Net price after the price discount.

{
  "invoice_lines": [
    {
      "unit_price": 100.0
    }
  ]
}
Example 100.00
Nature
populated
Data type
number
Format
decimal
Size
n

Auto-set to 1 by Flick if omitted.

{
  "invoice_lines": [
    {
      "base_quantity": 1
    }
  ]
}
Example 1
Nature
optional
Data type
string
Format
code
Size
n

Unit the price base quantity is measured in. Must match the invoiced quantity unit.

{
  "invoice_lines": [
    {
      "base_quantity_uom": "H87"
    }
  ]
}
Example H87
Nature
populated
Data type
number
Format
decimal
Size
n

Unit price before the line discount.

  • Populated by Flick if omitted (= unit_price + price_discount; equals unit_price when there is no discount). If you send it, gross_price - price_discount must equal unit_price.
{
  "invoice_lines": [
    {
      "gross_price": 105.0
    }
  ]
}
Example 105.00
Nature
optional
Data type
number
Format
decimal
Size
n

Discount taken off the gross unit price.

{
  "invoice_lines": [
    {
      "price_discount": 5.0
    }
  ]
}
Example 5.00
Nature
populated
Data type
number
Format
decimal
Size
n

Net total for this line.

  • Populated by Flick if omitted: quantity x (unit_price / base_quantity) + line charges - line allowances. If you send it, that arithmetic is enforced.
{
  "invoice_lines": [
    {
      "line_extension_amount": 1010.0
    }
  ]
}
Example 1010.00
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer's cost centre for this line.

{
  "invoice_lines": [
    {
      "accounting_cost": "CC-4425"
    }
  ]
}
Example CC-4425
Nature
optional
Data type
string
Format
date
Size
n

First day of the period this line covers.

{
  "invoice_lines": [
    {
      "invoice_period_start_date": "2026-07-01"
    }
  ]
}
Example 2026-07-01
Nature
optional
Data type
string
Format
date
Size
n

Last day of the period this line covers.

{
  "invoice_lines": [
    {
      "invoice_period_end_date": "2026-07-31"
    }
  ]
}
Example 2026-07-31
Nature
optional
Data type
string
Format
freetext
Size
n

Line number on the buyer's purchase order this line answers.

{
  "invoice_lines": [
    {
      "order_line_reference": "PO-88951-1"
    }
  ]
}
Example PO-88951-1
Nature
optional
Data type
string
Format
freetext
Size
n

Purchase order this line belongs to, when it differs from the document-level order.

{
  "invoice_lines": [
    {
      "order_reference_id": "PO-88951"
    }
  ]
}
Example PO-88951
Nature
optional
Data type
string
Format
freetext
Size
n

Identifier of the object being invoiced, such as a meter or subscription.

{
  "invoice_lines": [
    {
      "object_id": "ASSET-TAG-889"
    }
  ]
}
Example ASSET-TAG-889
Nature
optional
Data type
string
Format
freetext
Size
n

Buyer's own code for the item.

{
  "invoice_lines": [
    {
      "buyers_item_code": "B-ITEM-001"
    }
  ]
}
Example B-ITEM-001
Nature
optional
Data type
string
Format
freetext
Size
n

Seller's own code for the item.

{
  "invoice_lines": [
    {
      "supplier_item_code": "S-ITEM-001"
    }
  ]
}
Example S-ITEM-001
Nature
conditional
Data type
string
Format
GTIN
Size
n

Global item identifier such as a GTIN. Mandatory on a reverse-charge line.

{
  "invoice_lines": [
    {
      "standard_item_id": "04012345123456"
    }
  ]
}
Example 04012345123456
Nature
conditional
Data type
string
Format
enum
Size
1 allowed values

Scheme the standard item identifier belongs to; 0160 for a GTIN.

0160GS1 GTIN
{
  "invoice_lines": [
    {
      "standard_item_id_scheme": "0160"
    }
  ]
}
Nature
optional
Data type
string
Format
code
Size
2 letters

Country the item was produced in.

{
  "invoice_lines": [
    {
      "origin_country": "AE"
    }
  ]
}
Example AE
Nature
optional
Data type
string
Format
enum
Size
2 allowed values

Whether the line is goods or a service. Sending G makes hs_code mandatory, sending S makes sac_code mandatory.

Ggoods
Sservices
{
  "invoice_lines": [
    {
      "commodity_code": "G"
    }
  ]
}
Nature
conditional
Data type
string
Format
code
Size
n

Harmonised System code for the item. Mandatory when commodity_code is G.

{
  "invoice_lines": [
    {
      "hs_code": "85171200"
    }
  ]
}
Example 85171200
Nature
optional
Data type
string
Format
freetext
Size
n

Version of the HS nomenclature the code comes from.

{
  "invoice_lines": [
    {
      "hs_code_version": "2022"
    }
  ]
}
Example 2022
Nature
conditional
Data type
string
Format
code
Size
n

Service Accounting Code for the item. Mandatory when commodity_code is S.

{
  "invoice_lines": [
    {
      "sac_code": "998313"
    }
  ]
}
Example 998313
Nature
optional
Data type
string
Format
freetext
Size
n

Version of the service accounting code list used.

{
  "invoice_lines": [
    {
      "sac_code_scheme_version": "1.0"
    }
  ]
}
Example 1.0
Nature
conditional
Data type
string
Format
enum
Size
5 allowed values

Required when the line uses VAT category AE (reverse charge).

DL8.48.8.1Gold and diamonds
DL8.48.8.2Electronic devices
DL8.48.3.1Crude or refined oil
DL8.48.3.2Unprocessed or processed natural gas
DL8.48.3.3Pure hydrocarbons
{
  "invoice_lines": [
    {
      "reverse_charge_item_type": "DL8.48.8.1"
    }
  ]
}
Nature
optional
Data type
string
Format
freetext
Size
n

Batch or lot the goods came from.

{
  "invoice_lines": [
    {
      "batch_number": "BATCH-2026-07"
    }
  ]
}
Example BATCH-2026-07
Nature
optional
Data type
object
Format
key value
Size
n

Extra item characteristics as name and value pairs.

{
  "invoice_lines": [
    {
      "item_attributes": "{\"Colour\": \"Graphite\"}"
    }
  ]
}
Example {"Colour": "Graphite"}
Nature
mandatory
Data type
string
Format
enum
Size
6 allowed values

VAT category for this line.

  • Mandatory on every line. Only exception: out-of-scope documents (type 81 / Out of scope of VAT), where the line VAT block is not required [ibr-123-ae].
SStandard rate: carries a rate of exactly 5.00
ZZero rated: carries a rate of exactly 0
EExempt: no rate, needs an exemption reason code
OOutside scope of tax: no rate
AEReverse charge: keeps its rate, needs a goods type
NMargin scheme
{
  "invoice_lines": [
    {
      "tax_category": "S"
    }
  ]
}
Nature
conditional
Data type
number
Format
percentage
Size
n

VAT rate for this line. Mandatory for S, Z, O and AE categories; an E line validates without it.

  • Conditional by category: S must state exactly 5.00, Z must state exactly 0, AE must state a rate. For E and O lines a rate is not needed - you may still pass one (e.g. 0) and Flick drops it when generating the UBL, since PINT forbids a rate on those lines.
{
  "invoice_lines": [
    {
      "tax_percentage": 5
    }
  ]
}
Example 5
Nature
conditional
Data type
string
Format
enum
Size
4 allowed values

Required when tax_category is E, Z or O.

DL8.46.1Certain financial services
DL8.46.2Supply of residential units, lease or sale
DL8.46.3Bare land
DL8.46.4Local passenger transport
{
  "invoice_lines": [
    {
      "tax_exemption_reason_code": "DL8.46.1"
    }
  ]
}
Nature
optional
Data type
string
Format
freetext
Size
n

Exemption reason in words.

{
  "invoice_lines": [
    {
      "tax_exemption_reason": "Certain financial services"
    }
  ]
}
Example Certain financial services
Nature
optional
Data type
number
Format
decimal
Size
n

Line VAT amount in document currency. Used by Flick for the VAT breakdown; not sent as a separate UBL line element.

{
  "invoice_lines": [
    {
      "tax_line_amount": 50.5
    }
  ]
}
Example 50.50
Nature
optional
Data type
number
Format
decimal
Size
n

Line net amount converted to AED. Accepted on any document but not required, and the value is not reconciled.

{
  "invoice_lines": [
    {
      "line_amount_aed": 3894.69
    }
  ]
}
Example 3894.69
Nature
optional
Data type
number
Format
decimal
Size
n

Line VAT converted to AED. Accepted on any document but not required, and the value is not reconciled.

{
  "invoice_lines": [
    {
      "tax_line_amount_aed": 185.46
    }
  ]
}
Example 185.46
Nature
mandatory
Data type
boolean
Format
enum
Size
2 allowed values

false for an allowance, true for a charge. Mandatory in every line allowance_charges entry.

falseline allowance
trueline charge
{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "charge_indicator": false
        }
      ]
    }
  ]
}
Nature
optional
Data type
string
Format
code
Size
n

Coded reason for the line allowance or charge.

{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "reason_code": "95 / AAC"
        }
      ]
    }
  ]
}
Example 95 / AAC
Nature
optional
Data type
string
Format
freetext
Size
n

Reason for the line allowance or charge in words.

{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "reason": "Promo discount"
        }
      ]
    }
  ]
}
Example Promo discount
Nature
conditional
Data type
number
Format
percentage
Size
n

Percentage the line allowance or charge was calculated at. Must be sent together with base_amount; either both or neither.

{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "percentage": 2
        }
      ]
    }
  ]
}
Example 2
Nature
conditional
Data type
number
Format
decimal
Size
n

Value of the line allowance or charge.

{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "amount": 20.0
        }
      ]
    }
  ]
}
Example 20.00
Nature
conditional
Data type
number
Format
decimal
Size
n

Amount the percentage was applied to. Must be sent together with percentage; either both or neither.

{
  "invoice_lines": [
    {
      "allowance_charges": [
        {
          "base_amount": 1000.0
        }
      ]
    }
  ]
}
Example 1000.00

Tax breakdown

Optional: Flick computes it from the lines when omitted. Inside this block the rate field is tax_rate, not tax_percentage; the wrong name is silently dropped. A breakdown you send is rendered as sent and is not reconciled for you.

Nature
conditional
Data type
string
Format
code
Size
n

VAT category for this breakdown row. Derived from the lines when the whole block is omitted; mandatory inside a row you send.

{
  "tax_totals": [
    {
      "tax_category": "S"
    }
  ]
}
Example S
Nature
conditional
Data type
number
Format
percentage
Size
n

VAT rate for this breakdown row. Derived from the lines when the whole block is omitted; mandatory inside a row you send. The key is tax_rate here, not tax_percentage.

{
  "tax_totals": [
    {
      "tax_rate": 5
    }
  ]
}
Example 5
Nature
conditional
Data type
number
Format
decimal
Size
n

Net amount taxed at this category and rate. Derived when the whole block is omitted; mandatory inside a row you send, and reconciled against the lines.

{
  "tax_totals": [
    {
      "taxable_amount": 1060.0
    }
  ]
}
Example 1060.00
Nature
conditional
Data type
number
Format
decimal
Size
n

VAT charged at this category and rate. Derived when the whole block is omitted; mandatory inside a row you send, and reconciled against the lines.

{
  "tax_totals": [
    {
      "tax_amount": 53.0
    }
  ]
}
Example 53.00
Nature
conditional
Data type
string
Format
code
Size
n

Exemption reason code for this breakdown row. Allowed only on an exempt or out-of-scope row; a standard-rated row carrying it is rejected.

  • Echoes the line-level exemption reason for this category (E / Z / O).
{
  "tax_totals": [
    {
      "tax_exemption_reason_code": "DL8.46.1"
    }
  ]
}
Example DL8.46.1
Nature
conditional
Data type
string
Format
freetext
Size
n

Exemption reason text for this breakdown row. Allowed only on an exempt or out-of-scope row; a standard-rated row carrying it is rejected.

{
  "tax_totals": [
    {
      "tax_exemption_reason": "Certain financial services"
    }
  ]
}
Example Certain financial services

Document totals

Optional and fill-missing-only: state a value and yours is used, omit it and it derives from the lines. The two AED conversion totals are never derived and are required on a non-AED document.

Nature
populated
Data type
number
Format
decimal
Size
n

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • Sum of all line net amounts.
{
  "invoice_totals": {
    "line_extension_amount": 2810.0
  }
}
Example 2810.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

{
  "invoice_totals": {
    "allowance_total_amount": 50.0
  }
}
Example 50.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

{
  "invoice_totals": {
    "charge_total_amount": 100.0
  }
}
Example 100.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • = line total - document allowances + document charges.
{
  "invoice_totals": {
    "tax_exclusive_amount": 2860.0
  }
}
Example 2860.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • Total VAT in document currency; must equal the sum of tax_totals[].tax_amount.
{
  "invoice_totals": {
    "tax_amount": 53.0
  }
}
Example 53.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • = tax_exclusive_amount + tax_amount.
{
  "invoice_totals": {
    "tax_inclusive_amount": 2913.0
  }
}
Example 2913.00
Nature
populated
Data type
number
Format
decimal
Size
n

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

{
  "invoice_totals": {
    "prepaid_amount": 500.0
  }
}
Example 500.00
Nature
populated
Data type
number
Format
decimal
Size
n

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

{
  "invoice_totals": {
    "payable_rounding_amount": 0.0
  }
}
Example 0.00
Nature
populated
Data type
number
Format
decimal
Size
max 2 decimals

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • = tax_inclusive_amount - prepaid_amount + rounding.
{
  "invoice_totals": {
    "payable_amount": 2413.0
  }
}
Example 2413.00
Nature
populated
Data type
boolean
Format
true / false
Size
n

Optional - computed by Flick from the lines if you do not send it. If you do send it, the rules below are enforced on your values.

  • true when line prices are quoted VAT-inclusive.
{
  "invoice_totals": {
    "tax_included_indicator": false
  }
}
Example false
Nature
conditional
Data type
number
Format
decimal
Size
n

Total VAT converted to AED. Mandatory on any document not issued in AED; it is not derived from the exchange rate.

  • Total VAT converted to AED. Required when document currency is not AED.
{
  "invoice_totals": {
    "total_tax_amount_in_aed": 194.64
  }
}
Example 194.64
Nature
conditional
Data type
number
Format
decimal
Size
n

Total payable converted to AED. Mandatory on any document not issued in AED; it is not derived from the exchange rate.

  • Total incl. VAT converted to AED. Required when document currency is not AED.
{
  "invoice_totals": {
    "total_amount_with_tax_in_aed": 10697.99
  }
}
Example 10697.99

Set by Flick

Do not send these. The platform fills them in from your registration and the specification.

Nature
populated
Data type
string
Format
freetext
Size
n

{
  "(auto) specification identifier": "urn:peppol:pint:billing-1@ae-1"
}
Example urn:peppol:pint:billing-1@ae-1
Nature
populated
Data type
string
Format
freetext
Size
n

{
  "(auto) business process": "urn:peppol:bis:billing"
}
Example urn:peppol:bis:billing
Nature
populated
Data type
string
Format
freetext
Size
n

{
  "(auto) document UUID": "68205910-ac6b-4e35-9fe7-d1f0a3e3ae72"
}
Example 68205910-ac6b-4e35-9fe7-d1f0a3e3ae72
Nature
populated
Data type
string
Format
freetext
Size
n

{
  "(auto) tax accounting currency": "AED"
}
Example AED
Nature
populated
Data type
string
Format
freetext
Size
n

{
  "(auto) issuer name, address & Peppol endpoint": "Seller Legal Name"
}
Example Seller Legal Name

Examples

Every payload here was validated, submitted and read back on pre-production. The third tab is the real response from GET /v1/participants/{participant_id}/documents/{document_id}/xml, reformatted for reading, with the seller's registration details swapped for presentable ones.

Each sample is a complete document. Copy one, change the document_identifier, and it files.

  • Regional API and Unified API differ only in the envelope. Regional takes the document at the root or under a document key, unified adds country beside it. The document itself is identical.
  • Unknown keys are dropped in silence. A misspelt key is not an error, so it surfaces later as an arithmetic or Schematron complaint about something else. Suspect a key name first.
  • Validating consumes the document number. A document_identifier that has been through /validate cannot be submitted afterwards, and the second call answers 500 with "The operation was blocked by a retention rule." Use throwaway numbers while you develop.

Invoices

Minimal invoice

The floor. Remove anything here and the document is rejected: nine root keys, one buyer, one line.

  • No issuing_party: your name, address, VAT number and Peppol endpoint come from registration.
  • No tax_totals or invoice_totals: both compute from the line.
  • No uuid or customization_id: the platform stamps them.
  • flags is mandatory (ibr-154-ae) because the nine booleans compose the transaction-type code. Every key inside defaults to false, so "flags": {} is enough. The nine are spelled out in each sample to show which one the scenario raises.
  • Derived here: cbc:CustomizationID, cbc:UUID, cac:AccountingSupplierParty, cac:TaxTotal, cac:LegalMonetaryTotal, cac:ItemPriceExtension. Net 1000.00, VAT 50.00, payable 1050.00, none of it sent.

Regional API

JSON
{
  "document_identifier": "INV-2026-0001",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0001",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0001</cbc:ID>
  <cbc:UUID>6a214c9a-4656-4cec-b020-f2725513fd10</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Stated totals and VAT breakdown

The same invoice with the breakdown and totals declared rather than derived, plus the optional header fields most integrations end up sending: issue_time, note, buyer_reference, order_reference and payment_terms.

  • The rate key is tax_rate inside tax_totals and tax_percentage everywhere else, including on lines and on allowances and charges.
  • tax_percentage inside tax_totals is dropped without an error. The breakdown renders with no category rate and you get four arithmetic complaints instead: aligned-ibrp-048, ibr-119-ae, aligned-ibrp-s-08 and aligned-ibrp-s-09.
  • Omit invoice_totals and everything derives. Send it and every value is reconciled: a wrong payable_amount fails ibr-co-16, a wrong line_extension_amount fails ibr-co-10 and ibr-co-13, a wrong taxable_amount fails aligned-ibrp-s-08.
  • Partial is allowed. {"payable_amount": 1050.00} alone validates, but only because it is right.
  • The four keys in a tax_totals row are a set. Drop tax_category, tax_rate, taxable_amount or tax_amount and it fails on invalid_type or invalid_union before Schematron runs.

Regional API

JSON
{
  "document_identifier": "INV-2026-0002",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "issue_time": "10:30:00+04:00",
  "note": "Quarterly hardware supply",
  "buyer_reference": "PO-88213",
  "order_reference": {
    "purchase_order_id": "PO-88213",
    "sales_order_id": "SO-4471"
  },
  "payment_terms": [
    {
      "note": "Net 30"
    }
  ],
  "tax_totals": [
    {
      "tax_category": "S",
      "tax_rate": 5,
      "taxable_amount": 1000.00,
      "tax_amount": 50.00
    }
  ],
  "invoice_totals": {
    "line_extension_amount": 1000.00,
    "tax_exclusive_amount": 1000.00,
    "tax_amount": 50.00,
    "tax_inclusive_amount": 1050.00,
    "payable_amount": 1050.00
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0002",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "issue_time": "10:30:00+04:00",
    "note": "Quarterly hardware supply",
    "buyer_reference": "PO-88213",
    "order_reference": {
      "purchase_order_id": "PO-88213",
      "sales_order_id": "SO-4471"
    },
    "payment_terms": [
      {
        "note": "Net 30"
      }
    ],
    "tax_totals": [
      {
        "tax_category": "S",
        "tax_rate": 5,
        "taxable_amount": 1000.00,
        "tax_amount": 50.00
      }
    ],
    "invoice_totals": {
      "line_extension_amount": 1000.00,
      "tax_exclusive_amount": 1000.00,
      "tax_amount": 50.00,
      "tax_inclusive_amount": 1050.00,
      "payable_amount": 1050.00
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0002</cbc:ID>
  <cbc:UUID>0afcb617-a053-4ace-bb04-11f1a672a3f8</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:IssueTime>10:30:00+04:00</cbc:IssueTime>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:Note>Quarterly hardware supply</cbc:Note>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cbc:BuyerReference>PO-88213</cbc:BuyerReference>
  <cac:OrderReference>
    <cbc:ID>PO-88213</cbc:ID>
    <cbc:SalesOrderID>SO-4471</cbc:SalesOrderID>
  </cac:OrderReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:PaymentTerms>
    <cbc:Note>Net 30</cbc:Note>
  </cac:PaymentTerms>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Allowances and charges

Document-level allowance

A discount against the whole invoice rather than against a line.

  • charge_indicator: false makes the entry an allowance, true makes it a charge. Both live in the same array.
  • The key is plural. Singular allowance_charge is dropped in silence, so the discount never reaches the invoice and the totals you sent stop adding up.
  • charge_indicator is mandatory in every entry, not optional, as is amount. Either one missing fails with a field-level Required.
  • Renders as a document-level cac:AllowanceCharge with its own cac:TaxCategory, and cbc:AllowanceTotalAmount picks up the 100.00.
  • State invoice_totals.allowance_total_amount and it must equal the sum of the entries (ibr-co-11), with the tax-exclusive amount absorbing it (ibr-co-13).

Regional API

JSON
{
  "document_identifier": "INV-2026-0003",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "allowance_charges": [
    {
      "charge_indicator": false,
      "amount": 100.00,
      "reason": "Volume discount",
      "reason_code": "95",
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "invoice_totals": {
    "allowance_total_amount": 100.00
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0003",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "allowance_charges": [
      {
        "charge_indicator": false,
        "amount": 100.00,
        "reason": "Volume discount",
        "reason_code": "95",
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "invoice_totals": {
      "allowance_total_amount": 100.00
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0003</cbc:ID>
  <cbc:UUID>8a727e6d-7cd8-484f-a168-056e87aa7e7c</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Volume discount</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="AED">100</cbc:Amount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>5</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:AllowanceCharge>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">45.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">900.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">45.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">900.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">945.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">100</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">945.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Document-level charge

The same block with the indicator flipped. A charge adds to the invoice instead of reducing it.

  • Lands in charge_total_amount rather than allowance_total_amount.
  • Reason codes come from a different list per direction: 95 is a volume discount on the allowance side, FC is freight on the charge side.
  • An allowance code on a charge passes the schema and fails the code-list rule.

Regional API

JSON
{
  "document_identifier": "INV-2026-0004",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "allowance_charges": [
    {
      "charge_indicator": true,
      "amount": 75.00,
      "reason": "Freight",
      "reason_code": "FC",
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "invoice_totals": {
    "charge_total_amount": 75.00
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0004",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "allowance_charges": [
      {
        "charge_indicator": true,
        "amount": 75.00,
        "reason": "Freight",
        "reason_code": "FC",
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "invoice_totals": {
      "charge_total_amount": 75.00
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0004</cbc:ID>
  <cbc:UUID>d09356fd-3775-4ad8-b813-c74aa8fc9253</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Freight</cbc:AllowanceChargeReason>
    <cbc:Amount currencyID="AED">75</cbc:Amount>
    <cac:TaxCategory>
      <cbc:ID>S</cbc:ID>
      <cbc:Percent>5</cbc:Percent>
      <cac:TaxScheme>
        <cbc:ID>VAT</cbc:ID>
      </cac:TaxScheme>
    </cac:TaxCategory>
  </cac:AllowanceCharge>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">53.75</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1075.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">53.75</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1075.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1128.75</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">75</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1128.75</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Line-level allowance

A discount belonging to one line. It reduces that line's net amount, so the document total follows without you touching invoice_totals.

  • Thinner than the document-level entry: no tax_category and no tax_percentage, because the line already carries both.
  • charge_indicator is still mandatory.
  • The line's cbc:LineExtensionAmount comes back as 950.00 rather than 1000.00.
  • The allowance appears as a cac:AllowanceCharge inside cac:InvoiceLine. That is a different element from the cac:AllowanceCharge always present inside cac:Price, which carries the price discount and is 0.00 here.

Regional API

JSON
{
  "document_identifier": "INV-2026-0005",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5,
      "allowance_charges": [
        {
          "charge_indicator": false,
          "amount": 50.00,
          "reason": "Launch promotion",
          "reason_code": "95"
        }
      ]
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0005",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5,
        "allowance_charges": [
          {
            "charge_indicator": false,
            "amount": 50.00,
            "reason": "Launch promotion",
            "reason_code": "95"
          }
        ]
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0005</cbc:ID>
  <cbc:UUID>58787b92-0549-4988-9922-7f0c564cf19c</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">47.50</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">950.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">47.50</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">950.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">950.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">997.50</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">997.50</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">950.00</cbc:LineExtensionAmount>
    <cac:AllowanceCharge>
      <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
      <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
      <cbc:AllowanceChargeReason>Launch promotion</cbc:AllowanceChargeReason>
      <cbc:Amount currencyID="AED">50</cbc:Amount>
    </cac:AllowanceCharge>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">950.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">47.50</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Credit notes

Credit note

A 381 correcting an invoice that is already filed.

  • credit_note_reason_code is mandatory and must come from the official list (ibr-158-ae, ibr-001-ae).
  • document_references points at the invoice being corrected (ibr-055-ae).
  • No due_date, because no payment is expected. ibr-127-ae asks for one only when an amount is still owed.
  • payment_means becomes optional, where a 380 requires it under ibr-191-ae.

Regional API

JSON
{
  "document_identifier": "CN-2026-0001",
  "issue_date": "2026-08-21",
  "document_type": "381",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "note": "Credit for returned goods",
  "credit_note_reason_code": "DL8.61.1.D",
  "document_references": [
    {
      "document_identifier": "INV-2026-0001",
      "issue_date": "2026-08-21"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "CN-2026-0001",
    "issue_date": "2026-08-21",
    "document_type": "381",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "note": "Credit for returned goods",
    "credit_note_reason_code": "DL8.61.1.D",
    "document_references": [
      {
        "document_identifier": "INV-2026-0001",
        "issue_date": "2026-08-21"
      }
    ]
  }
}

PINT AE

XML
<?xml version="1.0" encoding="UTF-8"?>
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-CreditNote-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>CN-2026-0001</cbc:ID>
  <cbc:UUID>5038ee00-f2b6-465e-a5d2-63936805307d</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:CreditNoteTypeCode>381</cbc:CreditNoteTypeCode>
  <cbc:Note>Credit for returned goods</cbc:Note>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:DiscrepancyResponse>
    <cbc:ResponseCode>DL8.61.1.D</cbc:ResponseCode>
  </cac:DiscrepancyResponse>
  <cac:BillingReference>
    <cac:InvoiceDocumentReference>
      <cbc:ID>INV-2026-0001</cbc:ID>
      <cbc:IssueDate>2026-08-21</cbc:IssueDate>
    </cac:InvoiceDocumentReference>
  </cac:BillingReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:CreditNoteLine>
    <cbc:ID>1</cbc:ID>
    <cbc:CreditedQuantity unitCode="H87">10</cbc:CreditedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:CreditNoteLine>
</CreditNote>

Credit note without a reference

The one credit note that carries no reference to a preceding invoice.

  • Reason code VD is a retrospective volume discount, which settles against a period rather than against a single document.
  • ibr-055-ae exempts it, so document_references is omitted.
  • Any other reason code without that block is rejected.

Regional API

JSON
{
  "document_identifier": "CN-2026-0002",
  "issue_date": "2026-08-21",
  "document_type": "381",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "note": "Retrospective volume discount",
  "credit_note_reason_code": "VD"
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "CN-2026-0002",
    "issue_date": "2026-08-21",
    "document_type": "381",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "note": "Retrospective volume discount",
    "credit_note_reason_code": "VD"
  }
}

PINT AE

XML
<?xml version="1.0" encoding="UTF-8"?>
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-CreditNote-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>CN-2026-0002</cbc:ID>
  <cbc:UUID>769634f6-3b07-4333-9203-19bac3214914</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:CreditNoteTypeCode>381</cbc:CreditNoteTypeCode>
  <cbc:Note>Retrospective volume discount</cbc:Note>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:DiscrepancyResponse>
    <cbc:ResponseCode>VD</cbc:ResponseCode>
  </cac:DiscrepancyResponse>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:CreditNoteLine>
    <cbc:ID>1</cbc:ID>
    <cbc:CreditedQuantity unitCode="H87">10</cbc:CreditedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:CreditNoteLine>
</CreditNote>

Self-billing

Self-billed invoice

You raise the invoice on your supplier's behalf, so the parties swap. The supplier is the receiving_party and you are the seller merged in from registration.

  • Use the type code: 389 is the self-billed invoice, 261 its credit note.
  • is_selfbilled: true on a 380 does not produce a self-billed document, it produces ibr-cl-01, because that combination is not a valid UNTDID 1001 pairing.
  • The flag is not what makes it self-billed. A 389 with is_selfbilled: false validates and files identically. The flag contributes a bit to the transaction-type code, the type code decides what the document is.

Regional API

JSON
{
  "document_identifier": "SB-2026-0001",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "389",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": true, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "SB-2026-0001",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "389",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": true, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:selfbilling-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:selfbilling</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>SB-2026-0001</cbc:ID>
  <cbc:UUID>9adb6bec-e134-4543-ab01-0f061993ddd5</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>389</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Self-billed credit note

261 is to 389 what 381 is to 380.

  • Same reason code, and the same reference to the self-billed invoice it corrects.
  • Drops due_date for the same reason a 381 does.

Regional API

JSON
{
  "document_identifier": "SBCN-2026-0001",
  "issue_date": "2026-08-21",
  "document_type": "261",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": true, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "credit_note_reason_code": "DL8.61.1.D",
  "document_references": [
    {
      "document_identifier": "SB-2026-0001",
      "issue_date": "2026-08-21"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "SBCN-2026-0001",
    "issue_date": "2026-08-21",
    "document_type": "261",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": true, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "credit_note_reason_code": "DL8.61.1.D",
    "document_references": [
      {
        "document_identifier": "SB-2026-0001",
        "issue_date": "2026-08-21"
      }
    ]
  }
}

PINT AE

XML
<?xml version="1.0" encoding="UTF-8"?>
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-CreditNote-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:selfbilling-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:selfbilling</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>SBCN-2026-0001</cbc:ID>
  <cbc:UUID>ad3b0881-5169-4bd0-a667-c860dbd5d828</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:CreditNoteTypeCode>261</cbc:CreditNoteTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:DiscrepancyResponse>
    <cbc:ResponseCode>DL8.61.1.D</cbc:ResponseCode>
  </cac:DiscrepancyResponse>
  <cac:BillingReference>
    <cac:InvoiceDocumentReference>
      <cbc:ID>SB-2026-0001</cbc:ID>
      <cbc:IssueDate>2026-08-21</cbc:IssueDate>
    </cac:InvoiceDocumentReference>
  </cac:BillingReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:CreditNoteLine>
    <cbc:ID>1</cbc:ID>
    <cbc:CreditedQuantity unitCode="H87">10</cbc:CreditedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:CreditNoteLine>
</CreditNote>

Transaction-type flags

Free trade zone

A supply from a designated zone.

  • is_ftz: true sets the free-trade-zone bit in the transaction-type code, and that bit makes fz_beneficiary_id mandatory (ibr-007-ae).
  • Raising the flag without the beneficiary is the most common conditional-flag failure, and the error names the flag rather than the missing field, so it reads as though the flag were wrong.
  • The flag surfaces as cbc:ProfileExecutionID, the eight-digit transaction-type code. All nine flags false gives 00000000, this document gives 10000000. The beneficiary lands in cac:AdditionalDocumentReference.

Regional API

JSON
{
  "document_identifier": "INV-2026-0010",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": true, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "fz_beneficiary_id": "189098765401003"
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0010",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": true, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "fz_beneficiary_id": "189098765401003"
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>10000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0010</cbc:ID>
  <cbc:UUID>cad49873-1b24-4c72-ade9-84df764a4741</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:BuyerCustomerParty>
    <cac:Party>
      <cac:PartyIdentification>
        <cbc:ID>189098765401003</cbc:ID>
      </cac:PartyIdentification>
    </cac:Party>
  </cac:BuyerCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Disclosed agent billing

You invoice as a disclosed agent acting for a named principal.

  • is_dab: true makes principal_id mandatory (ibr-137-ae).
  • It must differ from your own VAT number (ibr-176-ae), since an agent billing for itself is not agency.
  • Unlike reverse charge, this does not make the buyer's VAT number mandatory.

Regional API

JSON
{
  "document_identifier": "INV-2026-0011",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": true, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "principal_id": "155667745601003"
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0011",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": true, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "principal_id": "155667745601003"
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000100</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0011</cbc:ID>
  <cbc:UUID>cc538187-371b-4034-ade5-8b10f6e43ffa</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:SellerSupplierParty>
    <cac:Party>
      <cac:PartyIdentification>
        <cbc:ID>155667745601003</cbc:ID>
      </cac:PartyIdentification>
    </cac:Party>
  </cac:SellerSupplierParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

E-commerce supply

A supply made through an electronic channel.

  • is_ecommerce: true makes a delivery address mandatory (ibr-142-ae).
  • The rule wants four parts, not one: street_address, city_address, emirates_code and country_code.
  • Sending three of the four fails, and the message lists all of them rather than naming the one you left out, so check the whole group.

Regional API

JSON
{
  "document_identifier": "INV-2026-0012",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": true, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "delivery": {
    "actual_delivery_date": "2026-08-22",
    "address": {
      "street_address": "Sheikh Zayed Road 44",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    }
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0012",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": true, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "delivery": {
      "actual_delivery_date": "2026-08-22",
      "address": {
        "street_address": "Sheikh Zayed Road 44",
        "city_address": "Dubai",
        "emirates_code": "DXB",
        "country_code": "AE"
      }
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000010</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0012</cbc:ID>
  <cbc:UUID>4226cd09-0a30-4da8-93a2-88ff5b3a08de</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:Delivery>
    <cbc:ActualDeliveryDate>2026-08-22</cbc:ActualDeliveryDate>
    <cac:DeliveryLocation>
      <cac:Address>
        <cbc:StreetName>Sheikh Zayed Road 44</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:Address>
    </cac:DeliveryLocation>
  </cac:Delivery>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Export

Goods leaving the country, zero rated.

  • is_export: true asks for the same four-part delivery address as e-commerce, this time under ibr-152-ae.
  • emirates_code is still mandatory even though the address is in another country. The rule wants a country subdivision and does not special-case a foreign one.
  • The destination half of the rule text is not enforced. is_export: true with an AE delivery country validates, so do not rely on the service to catch a wrongly flagged export.
  • The line is category Z rather than S, the usual pairing for an export, though nothing forces it.

Regional API

JSON
{
  "document_identifier": "INV-2026-0013",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": true
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "Z",
      "tax_percentage": 0
    }
  ],
  "delivery": {
    "actual_delivery_date": "2026-08-25",
    "address": {
      "street_address": "12 Dock Road",
      "city_address": "London",
      "emirates_code": "DXB",
      "country_code": "GB"
    }
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0013",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": true
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "Z",
        "tax_percentage": 0
      }
    ],
    "delivery": {
      "actual_delivery_date": "2026-08-25",
      "address": {
        "street_address": "12 Dock Road",
        "city_address": "London",
        "emirates_code": "DXB",
        "country_code": "GB"
      }
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000001</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0013</cbc:ID>
  <cbc:UUID>baf722c7-568e-47cc-80a8-6f5cd1fe7613</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:Delivery>
    <cbc:ActualDeliveryDate>2026-08-25</cbc:ActualDeliveryDate>
    <cac:DeliveryLocation>
      <cac:Address>
        <cbc:StreetName>12 Dock Road</cbc:StreetName>
        <cbc:CityName>London</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>GB</cbc:IdentificationCode>
        </cac:Country>
      </cac:Address>
    </cac:DeliveryLocation>
  </cac:Delivery>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">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="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1000.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1000.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</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="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Summary invoice

One invoice covering a period of supplies instead of a single event.

  • is_summary: true makes invoice_period mandatory (ibr-138-ae), and both bounds are needed.
  • ibr-029 requires the end date to fall on or after the start date.

Regional API

JSON
{
  "document_identifier": "INV-2026-0014",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": true, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "invoice_period": {
    "start_date": "2026-07-01",
    "end_date": "2026-07-31"
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0014",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": true, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "invoice_period": {
      "start_date": "2026-07-01",
      "end_date": "2026-07-31"
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00010000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0014</cbc:ID>
  <cbc:UUID>40464ba0-078a-49e9-9d83-d491cd024140</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:InvoicePeriod>
    <cbc:StartDate>2026-07-01</cbc:StartDate>
    <cbc:EndDate>2026-07-31</cbc:EndDate>
  </cac:InvoicePeriod>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Tax treatment

Foreign currency

An invoice priced in something other than AED.

  • currency_exchange_rate becomes mandatory (ibr-153-ae, ibr-159-ae).
  • Both AED conversion totals become mandatory (ibr-053, ibr-084, ibr-175-ae): total_tax_amount_in_aed and total_amount_with_tax_in_aed. Neither is derived from the rate, so omitting either one is a rejection.
  • Line-level line_amount_aed and tax_line_amount_aed are accepted but never required, on any document.
  • No AED amount is checked against the rate. A document declaring 1.00 AED of VAT against a 50.00 USD VAT amount validates, so the AED figures are yours to get right.
  • Renders cbc:TaxCurrencyCode, a cac:PaymentExchangeRate block carrying source and target currencies, and a second cac:TaxTotal denominated in AED beside the USD one. Every other amount stays in USD with currencyID="USD".

Regional API

JSON
{
  "document_identifier": "INV-2026-0015",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "USD",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "currency_exchange_rate": 3.6725,
  "invoice_totals": {
    "total_tax_amount_in_aed": 183.63,
    "total_amount_with_tax_in_aed": 3855.13
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0015",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "USD",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "currency_exchange_rate": 3.6725,
    "invoice_totals": {
      "total_tax_amount_in_aed": 183.63,
      "total_amount_with_tax_in_aed": 3855.13
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0015</cbc:ID>
  <cbc:UUID>fd9e3c8c-e32b-40cd-be9f-ed690c66d9ee</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
  <cbc:TaxCurrencyCode>AED</cbc:TaxCurrencyCode>
  <cac:AdditionalDocumentReference>
    <cbc:ID>AED</cbc:ID>
    <cbc:DocumentTypeCode>aedtotal-incl-vat</cbc:DocumentTypeCode>
    <cbc:DocumentDescription>AED 3855.13</cbc:DocumentDescription>
  </cac:AdditionalDocumentReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxExchangeRate>
    <cbc:SourceCurrencyCode>USD</cbc:SourceCurrencyCode>
    <cbc:TargetCurrencyCode>AED</cbc:TargetCurrencyCode>
    <cbc:CalculationRate>3.6725</cbc:CalculationRate>
  </cac:TaxExchangeRate>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="USD">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="USD">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="USD">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">183.63</cbc:TaxAmount>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="USD">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="USD">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="USD">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="USD">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="USD">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="USD">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="USD">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="USD">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="USD">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="USD">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">3672.50</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">183.63</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Mixed tax categories

Standard, zero rated and exempt on one document.

  • S and Z need a tax_percentage: exactly 5 for standard (ibr-190-ae), exactly 0 for zero rated.
  • E needs tax_exemption_reason_code from the official list (ibr-167-ae), and is the one category that validates with no tax_percentage at all.
  • A 380 or 381 cannot be made up only of E and O lines (ibr-151-ae). The fix is document type 480, not a different category. Mixing one exempt line into an otherwise standard-rated invoice, as here, is fine.
  • The derived breakdown carries one cac:TaxSubtotal per category, three here. The exempt row carries cbc:TaxExemptionReasonCode and cbc:TaxExemptionReason, the standard row carries cbc:Percent, and a row mixing the two is rejected by aligned-ibrp-s-10.

Regional API

JSON
{
  "document_identifier": "INV-2026-0016",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    },
    {
      "id": "2",
      "name": "Exported goods",
      "description": "Goods exported outside the GCC",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 200.00,
      "tax_category": "Z",
      "tax_percentage": 0
    },
    {
      "id": "3",
      "name": "Bus fare",
      "description": "Local passenger transport",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 50.00,
      "tax_category": "E",
      "tax_exemption_reason_code": "DL8.46.4",
      "tax_exemption_reason": "Local passenger transport"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0016",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      },
      {
        "id": "2",
        "name": "Exported goods",
        "description": "Goods exported outside the GCC",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 200.00,
        "tax_category": "Z",
        "tax_percentage": 0
      },
      {
        "id": "3",
        "name": "Bus fare",
        "description": "Local passenger transport",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 50.00,
        "tax_category": "E",
        "tax_exemption_reason_code": "DL8.46.4",
        "tax_exemption_reason": "Local passenger transport"
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0016</cbc:ID>
  <cbc:UUID>e5fa1edb-9462-4f36-bd94-3304743cf4c8</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">5.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">100.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">5.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">200.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">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:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">50.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>E</cbc:ID>
        <cbc:TaxExemptionReasonCode>DL8.46.4</cbc:TaxExemptionReasonCode>
        <cbc:TaxExemptionReason>Local passenger transport</cbc:TaxExemptionReason>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">350.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">350.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">355.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">355.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">100.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">100.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">5.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">200.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Goods exported outside the GCC</cbc:Description>
      <cbc:Name>Exported goods</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="AED">200</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">200.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">200.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>3</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">50.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Local passenger transport</cbc:Description>
      <cbc:Name>Bus fare</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>E</cbc:ID>
        <cbc:TaxExemptionReasonCode>DL8.46.4</cbc:TaxExemptionReasonCode>
        <cbc:TaxExemptionReason>Local passenger transport</cbc:TaxExemptionReason>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">50</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">50.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">50.00</cbc:Amount>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Reverse charge

A domestic reverse-charge supply, where the buyer accounts for the VAT rather than you.

  • Category AE keeps its rate, unlike Z, E and O.
  • The line needs a standard_item_id with standard_item_id_scheme set to 0160 (ibr-174-ae, ibr-064).
  • The line needs a reverse_charge_item_type from the reverse-charge goods list (ibr-166-ae).
  • The buyer's VAT number becomes mandatory (ibr-103-ae), the one rule here that sits on the buyer rather than on the line.
  • That last one is worth remembering, because the buyer's VAT number is otherwise entirely optional: a standard-rated invoice to a buyer with no identifiers block validates fine.

Regional API

JSON
{
  "document_identifier": "INV-2026-0017",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Imported smartphones",
      "description": "Consignment of mobile handsets under domestic reverse charge",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 5000.00,
      "tax_category": "AE",
      "tax_percentage": 5,
      "standard_item_id": "09876543210987",
      "standard_item_id_scheme": "0160",
      "reverse_charge_item_type": "DL8.48.8.2"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0017",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Imported smartphones",
        "description": "Consignment of mobile handsets under domestic reverse charge",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 5000.00,
        "tax_category": "AE",
        "tax_percentage": 5,
        "standard_item_id": "09876543210987",
        "standard_item_id_scheme": "0160",
        "reverse_charge_item_type": "DL8.48.8.2"
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0017</cbc:ID>
  <cbc:UUID>1f55951d-9ca7-4403-a61e-41d0380a901b</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">5000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>AE</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">5000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">5000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">5000.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">5000.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">5000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Consignment of mobile handsets under domestic reverse charge</cbc:Description>
      <cbc:Name>Imported smartphones</cbc:Name>
      <cac:StandardItemIdentification>
        <cbc:ID schemeID="0160">09876543210987</cbc:ID>
      </cac:StandardItemIdentification>
      <cac:CommodityClassification>
        <cbc:NatureCode>DL8.48.8.2</cbc:NatureCode>
      </cac:CommodityClassification>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>AE</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">5000</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">5000.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">5000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Goods and services classification

Classifying a line as goods or as a service.

  • commodity_code is the switch. G makes hs_code mandatory (ibr-184-ae), S makes sac_code mandatory (ibr-185-ae).
  • Leaving commodity_code out means neither is required, and an hs_code sent on its own is accepted.
  • This is why hs_code and sac_code are conditional rather than optional. Nothing about the item requires them, but declaring what kind of item it is does.

Regional API

JSON
{
  "document_identifier": "INV-2026-0018",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5,
      "commodity_code": "G",
      "hs_code": "85171200",
      "hs_code_version": "2022",
      "origin_country": "CN"
    },
    {
      "id": "2",
      "name": "Installation service",
      "description": "On-site terminal installation and staff training",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 500.00,
      "tax_category": "S",
      "tax_percentage": 5,
      "commodity_code": "S",
      "sac_code": "998313",
      "sac_code_scheme_version": "1.0"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0018",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5,
        "commodity_code": "G",
        "hs_code": "85171200",
        "hs_code_version": "2022",
        "origin_country": "CN"
      },
      {
        "id": "2",
        "name": "Installation service",
        "description": "On-site terminal installation and staff training",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 500.00,
        "tax_category": "S",
        "tax_percentage": 5,
        "commodity_code": "S",
        "sac_code": "998313",
        "sac_code_scheme_version": "1.0"
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0018</cbc:ID>
  <cbc:UUID>0c758fb5-634d-479a-ab8d-41a824ba6a47</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">30.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">600.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">30.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">600.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">600.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">630.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">630.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">100.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:OriginCountry>
        <cbc:IdentificationCode>CN</cbc:IdentificationCode>
      </cac:OriginCountry>
      <cac:CommodityClassification>
        <cbc:CommodityCode>G</cbc:CommodityCode>
        <cbc:ItemClassificationCode listID="HS" listVersionID="2022">85171200</cbc:ItemClassificationCode>
      </cac:CommodityClassification>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">100.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">5.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
  <cac:InvoiceLine>
    <cbc:ID>2</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">500.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>On-site terminal installation and staff training</cbc:Description>
      <cbc:Name>Installation service</cbc:Name>
      <cac:AdditionalItemIdentification>
        <cbc:ID schemeID="SAC" schemeVersionID="1.0">998313</cbc:ID>
      </cac:AdditionalItemIdentification>
      <cac:CommodityClassification>
        <cbc:CommodityCode>S</cbc:CommodityCode>
      </cac:CommodityClassification>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">500</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">500.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">500.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">25.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Out of scope document

The document type for supplies that carry no VAT at all.

  • 480 is the answer to ibr-151-ae, the rule that rejects a 380 or 381 made up entirely of exempt and out-of-scope lines. A document whose only line is category E has to be a 480.
  • The reverse also holds: a 480 carrying an ordinary standard-rated line is rejected by ibr-122-ae.
  • The type and the lines have to agree.

Regional API

JSON
{
  "document_identifier": "OOS-2026-0001",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "480",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Disbursement recharge",
      "description": "Government fee recharged at cost, outside the scope of VAT",
      "quantity": 1,
      "uom": "H87",
      "unit_price": 250.00,
      "tax_category": "E",
      "tax_exemption_reason_code": "DL8.46.4",
      "tax_exemption_reason": "Local passenger transport"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "OOS-2026-0001",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "480",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Disbursement recharge",
        "description": "Government fee recharged at cost, outside the scope of VAT",
        "quantity": 1,
        "uom": "H87",
        "unit_price": 250.00,
        "tax_category": "E",
        "tax_exemption_reason_code": "DL8.46.4",
        "tax_exemption_reason": "Local passenger transport"
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>OOS-2026-0001</cbc:ID>
  <cbc:UUID>f6b80dd0-42dd-4466-b554-eadb658d6eaa</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>480</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">250.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">0.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>E</cbc:ID>
        <cbc:TaxExemptionReasonCode>DL8.46.4</cbc:TaxExemptionReasonCode>
        <cbc:TaxExemptionReason>Local passenger transport</cbc:TaxExemptionReason>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">250.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">250.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">250.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">250.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">1</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">250.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Government fee recharged at cost, outside the scope of VAT</cbc:Description>
      <cbc:Name>Disbursement recharge</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>E</cbc:ID>
        <cbc:TaxExemptionReasonCode>DL8.46.4</cbc:TaxExemptionReasonCode>
        <cbc:TaxExemptionReason>Local passenger transport</cbc:TaxExemptionReason>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">250</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">250.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">250.00</cbc:Amount>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Supporting detail

Attachments and supporting documents

Three ways to attach something, all in the same array.

  • A plain reference is an identifier plus document_type_code and scheme_id, pointing at something the recipient already has.
  • A URI reference adds attachment_uri.
  • An embedded document carries the bytes: mime_code, filename and base64 content, where the first two are mandatory once embedded_document exists.
  • An entry with no document_identifier is accepted rather than rejected, and dropped quietly, so a mistyped key here costs you the attachment without an error.

Read back, an embedded attachment is described rather than inlined:

JSON
{
  "embedded_document": {
    "index": 0,
    "filename": "timesheet.pdf",
    "mime_code": "application/pdf",
    "size_bytes": 29
  }
}

That index is what /documents/{document_id}/attachments/{index} takes. The 20 MiB ceiling is checked against the recorded size_bytes before any bytes are read.

Regional API

JSON
{
  "document_identifier": "INV-2026-0019",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "additional_document_references": [
    {
      "document_identifier": "CONTRACT-889",
      "document_type_code": "130",
      "scheme_id": "ON"
    },
    {
      "document_identifier": "DN-4471",
      "document_description": "Signed delivery note",
      "attachment_uri": "https://files.example.ae/DN-4471.pdf"
    },
    {
      "document_identifier": "TS-2026-08",
      "embedded_document": {
        "mime_code": "application/pdf",
        "filename": "timesheet.pdf",
        "content": "JVBERi0xLjQKJcTl8uXrp0Zha2VQZGZTYW1wbGU="
      }
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0019",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "additional_document_references": [
      {
        "document_identifier": "CONTRACT-889",
        "document_type_code": "130",
        "scheme_id": "ON"
      },
      {
        "document_identifier": "DN-4471",
        "document_description": "Signed delivery note",
        "attachment_uri": "https://files.example.ae/DN-4471.pdf"
      },
      {
        "document_identifier": "TS-2026-08",
        "embedded_document": {
          "mime_code": "application/pdf",
          "filename": "timesheet.pdf",
          "content": "JVBERi0xLjQKJcTl8uXrp0Zha2VQZGZTYW1wbGU="
        }
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0019</cbc:ID>
  <cbc:UUID>ac2577a1-4113-4a98-846f-f7a752da925f</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AdditionalDocumentReference>
    <cbc:ID schemeID="ON">CONTRACT-889</cbc:ID>
    <cbc:DocumentTypeCode>130</cbc:DocumentTypeCode>
  </cac:AdditionalDocumentReference>
  <cac:AdditionalDocumentReference>
    <cbc:ID>DN-4471</cbc:ID>
    <cbc:DocumentDescription>Signed delivery note</cbc:DocumentDescription>
    <cac:Attachment>
      <cac:ExternalReference>
        <cbc:URI>https://files.example.ae/DN-4471.pdf</cbc:URI>
      </cac:ExternalReference>
    </cac:Attachment>
  </cac:AdditionalDocumentReference>
  <cac:AdditionalDocumentReference>
    <cbc:ID>TS-2026-08</cbc:ID>
    <cac:Attachment>
      <cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="timesheet.pdf">JVBERi0xLjQKJcTl8uXrp0Zha2VQZGZTYW1wbGU=</cbc:EmbeddedDocumentBinaryObject>
    </cac:Attachment>
  </cac:AdditionalDocumentReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Payment details and instalments

A credit transfer with bank details, settled in two instalments.

  • payment_means[].type_code is where the conditionals sit. 30, credit transfer, makes payment_account_id mandatory (ibr-192-ae).
  • The common codes are 10 cash, 30 credit transfer, 48 card payment, 49 direct debit, 54 credit card and 68 online payment service.
  • Card codes do not make card.primary_account_number mandatory, despite what the pairing suggests. 48 with no card block validates.
  • payment_means itself is required on a 380 (ibr-191-ae), and not on a credit note or a deemed supply.
  • Instalments are repeated payment_terms entries, each with its own amount and installment_due_date. Nothing reconciles them against payable_amount, so two halves that do not add up will file.

Regional API

JSON
{
  "document_identifier": "INV-2026-0020",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "30",
      "payment_id": "INV-2026-0020",
      "payment_account_id": "AE070331234567890123456",
      "payment_account_name": "Flick Technologies FZ-LLC",
      "payment_service_provider_id": "EBILAEAD"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "payment_terms": [
    {
      "note": "50% on delivery",
      "amount": 525.00,
      "installment_due_date": "2026-09-05"
    },
    {
      "note": "50% net 30",
      "amount": 525.00,
      "installment_due_date": "2026-09-20"
    }
  ]
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0020",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "30",
        "payment_id": "INV-2026-0020",
        "payment_account_id": "AE070331234567890123456",
        "payment_account_name": "Flick Technologies FZ-LLC",
        "payment_service_provider_id": "EBILAEAD"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "payment_terms": [
      {
        "note": "50% on delivery",
        "amount": 525.00,
        "installment_due_date": "2026-09-05"
      },
      {
        "note": "50% net 30",
        "amount": 525.00,
        "installment_due_date": "2026-09-20"
      }
    ]
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0020</cbc:ID>
  <cbc:UUID>92f001b6-10b5-4299-a560-9b30f8bebfc3</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="Credit transfer">30</cbc:PaymentMeansCode>
    <cbc:PaymentID>INV-2026-0020</cbc:PaymentID>
    <cac:PayeeFinancialAccount>
      <cbc:ID>AE070331234567890123456</cbc:ID>
      <cbc:Name>Flick Technologies FZ-LLC</cbc:Name>
      <cac:FinancialInstitutionBranch>
        <cbc:ID>EBILAEAD</cbc:ID>
      </cac:FinancialInstitutionBranch>
    </cac:PayeeFinancialAccount>
  </cac:PaymentMeans>
  <cac:PaymentTerms>
    <cbc:Note>50% on delivery</cbc:Note>
    <cbc:Amount currencyID="AED">525</cbc:Amount>
    <cbc:InstallmentDueDate>2026-09-05</cbc:InstallmentDueDate>
  </cac:PaymentTerms>
  <cac:PaymentTerms>
    <cbc:Note>50% net 30</cbc:Note>
    <cbc:Amount currencyID="AED">525</cbc:Amount>
    <cbc:InstallmentDueDate>2026-09-20</cbc:InstallmentDueDate>
  </cac:PaymentTerms>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Every reference field

Everything optional at the document level on one invoice, so you can see where each block goes and what it renders as.

  • other_references collects the six reference types with nowhere else to live: despatch, receipt, tender or lot, contract, customs and project.
  • delivery carries a location and a party name as well as the address, none of it required without an e-commerce or export flag.
  • payee_party names a third party to be paid. Once it exists name is mandatory (ibr-017), though an entirely empty payee_party: {} is accepted and dropped.
  • contract_value is a string, not a number, and reads like "AED 250000". Sending it as a number fails with a field-level Expected string, received number.

Regional API

JSON
{
  "document_identifier": "INV-2026-0021",
  "issue_date": "2026-08-21",
  "due_date": "2026-09-20",
  "document_type": "380",
  "document_currency": "AED",
  "flags": {
    "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
    "is_margin": false, "is_summary": false, "is_continuous": false,
    "is_dab": false, "is_ecommerce": false, "is_export": false
  },
  "receiving_party": {
    "legal_name": "Gulf Retail Trading LLC",
    "peppol_id": "0235:1020260020",
    "identifiers": {
      "AE:VAT": {
        "value": "102026002000003"
      },
      "AE:TL": {
        "value": "1020260020",
        "authority_name": "Dubai DED"
      }
    },
    "street_address": "Khalifa Street 12",
    "city_address": "Dubai",
    "emirates_code": "DXB",
    "country_code": "AE"
  },
  "payment_means": [
    {
      "type_code": "10"
    }
  ],
  "invoice_lines": [
    {
      "id": "1",
      "name": "Smart POS Terminal X9",
      "description": "Handheld smart POS terminal, dual-SIM, 256GB",
      "quantity": 10,
      "uom": "H87",
      "unit_price": 100.00,
      "tax_category": "S",
      "tax_percentage": 5
    }
  ],
  "accounting_cost": "COST-CENTRE-42",
  "buyer_reference": "PO-88213",
  "tax_point_date": "2026-08-15",
  "invoice_period": {
    "start_date": "2026-08-01",
    "end_date": "2026-08-31"
  },
  "order_reference": {
    "purchase_order_id": "PO-88213",
    "sales_order_id": "SO-4471"
  },
  "other_references": {
    "despatch_document_reference": "DSP-7781",
    "receipt_document_reference": "RCP-9912",
    "tender_or_lot_reference": "TND-2026-14",
    "contract_document_reference": {
      "id": "CT-2026-01",
      "contract_value": "AED 250000"
    },
    "customs_reference_number": "CUS-4471209",
    "project_reference": "PRJ-ROLLOUT-26"
  },
  "delivery": {
    "actual_delivery_date": "2026-08-22",
    "location_id": "7300010000001",
    "location_id_scheme": "0088",
    "party_name": "Gulf Retail Trading LLC Warehouse",
    "address": {
      "street_address": "Warehouse Lane 9",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    }
  },
  "payee_party": {
    "name": "Flick Collections FZ-LLC",
    "identifier": {
      "value": "PAYEE-0091",
      "scheme_id": "0235"
    },
    "bank_creditor_id": "AE-CRED-88"
  }
}

Unified API

JSON
{
  "country": "AE",
  "document": {
    "document_identifier": "INV-2026-0021",
    "issue_date": "2026-08-21",
    "due_date": "2026-09-20",
    "document_type": "380",
    "document_currency": "AED",
    "flags": {
      "is_selfbilled": false, "is_ftz": false, "is_deemed": false,
      "is_margin": false, "is_summary": false, "is_continuous": false,
      "is_dab": false, "is_ecommerce": false, "is_export": false
    },
    "receiving_party": {
      "legal_name": "Gulf Retail Trading LLC",
      "peppol_id": "0235:1020260020",
      "identifiers": {
        "AE:VAT": {
          "value": "102026002000003"
        },
        "AE:TL": {
          "value": "1020260020",
          "authority_name": "Dubai DED"
        }
      },
      "street_address": "Khalifa Street 12",
      "city_address": "Dubai",
      "emirates_code": "DXB",
      "country_code": "AE"
    },
    "payment_means": [
      {
        "type_code": "10"
      }
    ],
    "invoice_lines": [
      {
        "id": "1",
        "name": "Smart POS Terminal X9",
        "description": "Handheld smart POS terminal, dual-SIM, 256GB",
        "quantity": 10,
        "uom": "H87",
        "unit_price": 100.00,
        "tax_category": "S",
        "tax_percentage": 5
      }
    ],
    "accounting_cost": "COST-CENTRE-42",
    "buyer_reference": "PO-88213",
    "tax_point_date": "2026-08-15",
    "invoice_period": {
      "start_date": "2026-08-01",
      "end_date": "2026-08-31"
    },
    "order_reference": {
      "purchase_order_id": "PO-88213",
      "sales_order_id": "SO-4471"
    },
    "other_references": {
      "despatch_document_reference": "DSP-7781",
      "receipt_document_reference": "RCP-9912",
      "tender_or_lot_reference": "TND-2026-14",
      "contract_document_reference": {
        "id": "CT-2026-01",
        "contract_value": "AED 250000"
      },
      "customs_reference_number": "CUS-4471209",
      "project_reference": "PRJ-ROLLOUT-26"
    },
    "delivery": {
      "actual_delivery_date": "2026-08-22",
      "location_id": "7300010000001",
      "location_id_scheme": "0088",
      "party_name": "Gulf Retail Trading LLC Warehouse",
      "address": {
        "street_address": "Warehouse Lane 9",
        "city_address": "Dubai",
        "emirates_code": "DXB",
        "country_code": "AE"
      }
    },
    "payee_party": {
      "name": "Flick Collections FZ-LLC",
      "identifier": {
        "value": "PAYEE-0091",
        "scheme_id": "0235"
      },
      "bank_creditor_id": "AE-CRED-88"
    }
  }
}

PINT AE

XML
<?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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
  <cbc:CustomizationID>urn:peppol:pint:billing-1@ae-1</cbc:CustomizationID>
  <cbc:ProfileID>urn:peppol:bis:billing</cbc:ProfileID>
  <cbc:ProfileExecutionID>00000000</cbc:ProfileExecutionID>
  <cbc:ID>INV-2026-0021</cbc:ID>
  <cbc:UUID>dd508b0a-642b-4d2d-b9cd-95f53e00f053</cbc:UUID>
  <cbc:IssueDate>2026-08-21</cbc:IssueDate>
  <cbc:DueDate>2026-09-20</cbc:DueDate>
  <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
  <cbc:TaxPointDate>2026-08-15</cbc:TaxPointDate>
  <cbc:DocumentCurrencyCode>AED</cbc:DocumentCurrencyCode>
  <cbc:AccountingCost>COST-CENTRE-42</cbc:AccountingCost>
  <cbc:BuyerReference>PO-88213</cbc:BuyerReference>
  <cac:InvoicePeriod>
    <cbc:StartDate>2026-08-01</cbc:StartDate>
    <cbc:EndDate>2026-08-31</cbc:EndDate>
  </cac:InvoicePeriod>
  <cac:OrderReference>
    <cbc:ID>PO-88213</cbc:ID>
    <cbc:SalesOrderID>SO-4471</cbc:SalesOrderID>
  </cac:OrderReference>
  <cac:DespatchDocumentReference>
    <cbc:ID>DSP-7781</cbc:ID>
  </cac:DespatchDocumentReference>
  <cac:ReceiptDocumentReference>
    <cbc:ID>RCP-9912</cbc:ID>
  </cac:ReceiptDocumentReference>
  <cac:StatementDocumentReference>
    <cbc:ID>CUS-4471209</cbc:ID>
  </cac:StatementDocumentReference>
  <cac:OriginatorDocumentReference>
    <cbc:ID>TND-2026-14</cbc:ID>
  </cac:OriginatorDocumentReference>
  <cac:ContractDocumentReference>
    <cbc:ID>CT-2026-01</cbc:ID>
    <cbc:DocumentDescription>AED 250000</cbc:DocumentDescription>
  </cac:ContractDocumentReference>
  <cac:ProjectReference>
    <cbc:ID>PRJ-ROLLOUT-26</cbc:ID>
  </cac:ProjectReference>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260015</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Building 4, Dubai Internet City</cbc:StreetName>
        <cbc:AdditionalStreetName>Office 210</cbc:AdditionalStreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:PostalZone>12345</cbc:PostalZone>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:AddressLine>
          <cbc:Line>Al Sufouh 2</cbc:Line>
        </cac:AddressLine>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026001500003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Flick Technologies FZ-LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260015</cbc:CompanyID>
      </cac:PartyLegalEntity>
      <cac:Contact>
        <cbc:Name>Accounts Receivable</cbc:Name>
        <cbc:Telephone>+971 4 555 0100</cbc:Telephone>
        <cbc:ElectronicMail>billing@flick.example.ae</cbc:ElectronicMail>
      </cac:Contact>
    </cac:Party>
  </cac:AccountingSupplierParty>
  <cac:AccountingCustomerParty>
    <cac:Party>
      <cbc:EndpointID schemeID="0235">1020260020</cbc:EndpointID>
      <cac:PostalAddress>
        <cbc:StreetName>Khalifa Street 12</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:PostalAddress>
      <cac:PartyTaxScheme>
        <cbc:CompanyID>102026002000003</cbc:CompanyID>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:PartyTaxScheme>
      <cac:PartyLegalEntity>
        <cbc:RegistrationName>Gulf Retail Trading LLC</cbc:RegistrationName>
        <cbc:CompanyID schemeAgencyID="TL" schemeAgencyName="Dubai DED">1020260020</cbc:CompanyID>
      </cac:PartyLegalEntity>
    </cac:Party>
  </cac:AccountingCustomerParty>
  <cac:PayeeParty>
    <cac:PartyIdentification>
      <cbc:ID schemeID="0235">PAYEE-0091</cbc:ID>
    </cac:PartyIdentification>
    <cac:PartyIdentification>
      <cbc:ID schemeID="SEPA">AE-CRED-88</cbc:ID>
    </cac:PartyIdentification>
    <cac:PartyName>
      <cbc:Name>Flick Collections FZ-LLC</cbc:Name>
    </cac:PartyName>
  </cac:PayeeParty>
  <cac:Delivery>
    <cbc:ActualDeliveryDate>2026-08-22</cbc:ActualDeliveryDate>
    <cac:DeliveryLocation>
      <cbc:ID schemeID="0088">7300010000001</cbc:ID>
      <cac:Address>
        <cbc:StreetName>Warehouse Lane 9</cbc:StreetName>
        <cbc:CityName>Dubai</cbc:CityName>
        <cbc:CountrySubentity>DXB</cbc:CountrySubentity>
        <cac:Country>
          <cbc:IdentificationCode>AE</cbc:IdentificationCode>
        </cac:Country>
      </cac:Address>
    </cac:DeliveryLocation>
    <cac:DeliveryParty>
      <cac:PartyName>
        <cbc:Name>Gulf Retail Trading LLC Warehouse</cbc:Name>
      </cac:PartyName>
    </cac:DeliveryParty>
  </cac:Delivery>
  <cac:PaymentMeans>
    <cbc:PaymentMeansCode name="In cash">10</cbc:PaymentMeansCode>
  </cac:PaymentMeans>
  <cac:TaxTotal>
    <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
    <cac:TaxSubtotal>
      <cbc:TaxableAmount currencyID="AED">1000.00</cbc:TaxableAmount>
      <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      <cac:TaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:TaxCategory>
    </cac:TaxSubtotal>
  </cac:TaxTotal>
  <cac:LegalMonetaryTotal>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cbc:TaxExclusiveAmount currencyID="AED">1000.00</cbc:TaxExclusiveAmount>
    <cbc:TaxInclusiveAmount currencyID="AED">1050.00</cbc:TaxInclusiveAmount>
    <cbc:AllowanceTotalAmount currencyID="AED">0.00</cbc:AllowanceTotalAmount>
    <cbc:ChargeTotalAmount currencyID="AED">0.00</cbc:ChargeTotalAmount>
    <cbc:PayableAmount currencyID="AED">1050.00</cbc:PayableAmount>
  </cac:LegalMonetaryTotal>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    <cbc:InvoicedQuantity unitCode="H87">10</cbc:InvoicedQuantity>
    <cbc:LineExtensionAmount currencyID="AED">1000.00</cbc:LineExtensionAmount>
    <cac:Item>
      <cbc:Description>Handheld smart POS terminal, dual-SIM, 256GB</cbc:Description>
      <cbc:Name>Smart POS Terminal X9</cbc:Name>
      <cac:ClassifiedTaxCategory>
        <cbc:ID>S</cbc:ID>
        <cbc:Percent>5</cbc:Percent>
        <cac:TaxScheme>
          <cbc:ID>VAT</cbc:ID>
        </cac:TaxScheme>
      </cac:ClassifiedTaxCategory>
    </cac:Item>
    <cac:Price>
      <cbc:PriceAmount currencyID="AED">100</cbc:PriceAmount>
      <cbc:BaseQuantity unitCode="H87">1</cbc:BaseQuantity>
      <cac:AllowanceCharge>
        <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
        <cbc:Amount currencyID="AED">0.00</cbc:Amount>
        <cbc:BaseAmount currencyID="AED">100.00</cbc:BaseAmount>
      </cac:AllowanceCharge>
    </cac:Price>
    <cac:ItemPriceExtension>
      <cbc:Amount currencyID="AED">1000.00</cbc:Amount>
      <cac:TaxTotal>
        <cbc:TaxAmount currencyID="AED">50.00</cbc:TaxAmount>
      </cac:TaxTotal>
    </cac:ItemPriceExtension>
  </cac:InvoiceLine>
</Invoice>

Validation & Errors

A document passes two checks before it is filed. Field-level validation runs against the payload and reports dotted field paths. PINT AE Schematron runs against the rendered UBL and reports rule codes. Both come back as 400, both use the same issue shape, and the second is where most real integration time goes.

Diagram
flowchart LR
    P["Payload"] --> S["Unknown keys<br/>SILENTLY STRIPPED"]
    S --> F["Field validation"]
    F -->|"fails"| FE["400 · path names a field<br/>receiving_party.peppol_id"]
    F -->|"passes"| U["Render PINT AE UBL"]
    U --> SC["Schematron + XSD"]
    SC -->|"fails"| SE["400 · path is 'Document'<br/>code names a rule, ibr-172-ae"]
    SC -->|"passes"| OK["202 Accepted"]

Every response quoted on this page was captured from the pre-production service.


Telling the two phases apart

Read message before you read errors. It names the phase, and the phase decides how you debug.

messagePhasepath looks likeWhat to do
Document does not satisfy the regional schema.Field validationreceiving_party.peppol_idThe named key is missing, the wrong type, or carries a value outside its enum. Fix that key.
Document is invalidSchematronDocumentRead code, not path. Every issue reports the same useless path.

The two phases never mix in one response. Field validation aborts before the UBL is rendered, so a payload with both a bad enum and a broken total reports only the enum.


Field validation errors

Four codes cover everything this phase reports.

custom: a mandatory field is missing

The most helpful error on the surface. These carry hand-written messages that tell you what the field is for, not just that it is absent.

JSON
{
  "status": "bad_request",
  "message": "Document does not satisfy the regional schema.",
  "errors": [
    {
      "path": "receiving_party.peppol_id",
      "code": "custom",
      "message": "receiving_party.peppol_id is required — the recipient's routing identity is not derived, state it explicitly (e.g. \"0235:1234567890\").",
      "severity": "error"
    }
  ]
}

invalid_type: wrong JSON type, or absent

invalid_type with the message Required is how the plainer mandatory fields report themselves. An empty body {} returns one of these per missing field: document_identifier, issue_date, document_type, document_currency, receiving_party.legal_name, receiving_party.street_address and the rest.

The same code covers a value of the wrong type:

JSON
{
  "status": "bad_request",
  "message": "Document does not satisfy the regional schema.",
  "errors": [
    {
      "path": "other_references.contract_document_reference.contract_value",
      "code": "invalid_type",
      "message": "Expected string, received number",
      "severity": "error"
    }
  ]
}

contract_value is the field this catches most often, because it reads like an amount and is a string.

invalid_enum_value: outside the allowed set

The most useful error of the four, because the message lists the whole accepted set:

JSON
{
  "status": "bad_request",
  "message": "Document does not satisfy the regional schema.",
  "errors": [
    {
      "path": "receiving_party.emirates_code",
      "code": "invalid_enum_value",
      "message": "Invalid enum value. Expected 'AUH' | 'DXB' | 'SHJ' | 'AJM' | 'UAQ' | 'RAK' | 'FUJ', received 'ZZZ'",
      "severity": "error"
    }
  ]
}

document_type behaves the same way and is worth quoting, because the accepted set is wider than the four types the guides describe:

Text
Invalid enum value. Expected '389' | '380' | '480' | '81' | '83' | '381' | '261' | '396' | '532', received '383'

invalid_union: an incomplete repeated entry

Raised when an entry in a repeated block is missing something the block needs. Sending a tax_totals row with only its category and rate reports the two amounts it still wants, with an array index in the path and no message worth reading:

JSON
{
  "status": "bad_request",
  "message": "Document does not satisfy the regional schema.",
  "errors": [
    {
      "path": "tax_totals.0.taxable_amount",
      "code": "invalid_union",
      "message": "Invalid input",
      "severity": "error"
    },
    {
      "path": "tax_totals.0.tax_amount",
      "code": "invalid_union",
      "message": "Invalid input",
      "severity": "error"
    }
  ]
}

The path uses dots for array indexes, so tax_totals.0.tax_amount rather than tax_totals[0].tax_amount.

Which blocks are all-or-nothing

Repeated blocks with keys that become mandatory the moment the entry exists:

BlockMandatory inside every entry
tax_totals[]tax_category, tax_rate, taxable_amount, tax_amount
allowance_charges[]charge_indicator, amount
invoice_lines[].allowance_charges[]charge_indicator, amount
additional_document_references[].embedded_documentmime_code, filename
invoice_lines[]id, name, description, quantity, uom, unit_price, tax_category

payment_terms[] is the exception: an entry of {} is accepted.


Schematron errors

These arrive after the UBL is rendered, with message: "Document is invalid" and path: "Document" on every issue. The code is the only part that identifies anything.

Conditional requirements, grouped by what triggers them

Most first rejections are here. Each row is a thing you sent that made something else mandatory.

You sentWhich requiresCode
flags.is_ftz: truefz_beneficiary_idibr-007-ae
flags.is_dab: trueprincipal_id, and it must differ from your own VAT numberibr-137-ae, ibr-176-ae
flags.is_ecommerce: truedelivery.address with street, city, emirates and countryibr-142-ae
flags.is_export: truedelivery.address with street, city, emirates and countryibr-152-ae
flags.is_summary: trueinvoice_period with both boundsibr-138-ae
document_currency other than AEDcurrency_exchange_rateibr-153-ae, ibr-159-ae
document_currency other than AEDinvoice_totals.total_tax_amount_in_aed and total_amount_with_tax_in_aedibr-053, ibr-084, ibr-175-ae
document_type: "381"credit_note_reason_codeibr-158-ae
document_type: "381" with any reason but VDdocument_referencesibr-055-ae
tax_category: "AE" on a linestandard_item_id with scheme 0160ibr-174-ae, ibr-064
tax_category: "AE" on a linereverse_charge_item_typeibr-166-ae
tax_category: "AE" on a linethe buyer's VAT numberibr-103-ae
tax_category: "E" on a linetax_exemption_reason_codeibr-167-ae
commodity_code: "G" on a linehs_codeibr-184-ae
commodity_code: "S" on a linesac_codeibr-185-ae
payment_means[].type_code: "30"payment_account_idibr-192-ae
any AE:TL identifierits authority_nameibr-172-ae seller, ibr-101-ae buyer
a tax_representative blockname, vat_number, emirates_code, country_codeibr-018, ibr-056, ibr-128-ae, ibr-020
a non-empty payee_partynameibr-017
document_type: "380"payment_means, unless the supply is deemedibr-191-ae
a due amount above zerodue_dateibr-127-ae

Two of these surprise people. ibr-103-ae is the only rule that makes the buyer's VAT number mandatory; without a reverse-charge line the buyer needs no identifiers at all. And ibr-152-ae still wants emirates_code on an export delivery address even when the country is not AE, because it asks for a country subdivision and does not special-case a foreign one.

Value constraints

CodeRule
ibr-190-aeA standard-rated line carries a rate of exactly 5
ibr-120-aeA zero-rated breakdown row states its rate as exactly 0
ibr-121-aeAn exempt breakdown row states no rate at all
aligned-ibrp-s-10A standard-rated breakdown row must not carry an exemption reason
ibr-141-aetax_point_date, when present, falls before issue_date
ibr-029invoice_period.end_date is not before start_date
aligned-ibrp-057percentage and base_amount on an allowance or charge are both present or both absent
ibr-133-aeA party tax identifier must sit in the VAT scheme
ibr-104The buyer carries at most one tax identifier

Document composition

CodeRule
ibr-016An invoice has at least one line
ibr-025Line item name required, despite the schema calling it optional
ibr-125-aeLine item description required, likewise
ibr-154-aeTransaction-type code required, which is why flags is mandatory
ibr-cl-01The document type code must be a valid UNTDID 1001 pairing, which is why is_selfbilled: true on a 380 fails
ibr-151-aeA 380 or 381 cannot be made up only of E and O lines; use 480
ibr-122-aeA 480 or 81 cannot carry an ordinary standard-rated line
ibr-116-aeA margin-scheme document needs the margin tax category
ibr-001-aeThe credit note reason code comes from the code list
ibr-150-aeSeller legal registration id required when the scheme is 0235
ibr-010-aeAE:PAS requires a passport issuing country

Arithmetic

These fire only on values you sent. Omit tax_totals and invoice_totals and none of them can trigger.

CodeEquation
ibr-co-10line_extension_amount = sum of line net amounts
ibr-co-11allowance_total_amount = sum of document allowances
ibr-co-12charge_total_amount = sum of document charges
ibr-co-13tax_exclusive_amount = line net total, less allowances, plus charges
ibr-co-14tax_amount = sum of breakdown tax amounts
ibr-co-15tax_inclusive_amount = tax_exclusive_amount + tax_amount
ibr-co-16payable_amount = tax_inclusive_amount - prepaid_amount + rounding
aligned-ibrp-s-08Each standard-rated breakdown row's taxable amount matches its lines
aligned-ibrp-s-09Each standard-rated breakdown row's tax = taxable amount x rate
ibr-147-aeLine net amount = quantity x (unit price / base quantity)

Stating a total is a commitment, not a hint. A single wrong figure is enough:

JSON
{
  "status": "bad_request",
  "message": "Document is invalid",
  "errors": [
    {
      "path": "Document",
      "code": "ibr-co-16",
      "message": "[ibr-co-16]-Amount due for payment (ibt-115) = Invoice total amount with Tax (ibt-112) - Paid amount (ibt-113) + Rounding amount (ibt-114).",
      "severity": "error"
    }
  ]
}

Partial totals are fine, so {"payable_amount": 1050.00} alone validates. It validates because the number is right, not because it was the only one.


Silently stripped keys

Every payload mistake found while verifying this API was a correctly spelled but wrong key, and none of them produced an error naming that key. Unknown keys never reach the renderer, so the failure surfaces several steps later as an arithmetic or Schematron complaint about something else entirely.

Diagram
flowchart TD
    A["You send tax_percentage<br/>inside tax_totals"] --> B["Key is not recognised<br/>silently stripped"]
    B --> C["Breakdown renders with<br/>no VAT category rate"]
    C --> D["aligned-ibrp-048 · ibr-119-ae<br/>aligned-ibrp-s-08 · aligned-ibrp-s-09"]
    D --> E["Four errors about<br/>totals arithmetic"]
    E --> F["Real cause: one wrong key name"]
What you sendWhat happensWhat you see
tax_totals[].tax_percentage instead of tax_rateThe rate is dropped from the breakdown rowaligned-ibrp-048, ibr-119-ae, aligned-ibrp-s-08, aligned-ibrp-s-09
allowance_charge instead of allowance_chargesThe whole allowance is droppedibr-co-11, ibr-co-13, if you stated matching totals
flags.is_self_billed instead of is_selfbilledThe transaction-type bit is never setNothing. 200, and a document with the wrong transaction type
An unknown key at the root, or on a lineRemovedNothing. 200
additional_document_references: [{}]The entry is droppedNothing. 200, and no attachment
payee_party: {}The block is droppedNothing. 200, and no payee

The tax_rate case is the cruellest, because tax_percentage is correct on lines and on allowances and charges. It is wrong only inside tax_totals.

When an error message does not match anything you can see in your payload, check key spelling before anything else.


What is not validated

Just as important as what is checked. Everything here is accepted without complaint, so it is yours to get right.

FieldWhat is not checked
invoice_lines[].uomNot checked against UN/ECE Recommendation 20. "XYZ" is accepted and reaches the invoice
invoice_totals.total_tax_amount_in_aedRequired on a non-AED document, but never reconciled against currency_exchange_rate
invoice_totals.total_amount_with_tax_in_aedSame: required, never reconciled
invoice_lines[].line_amount_aedAccepted on any document, never required, never reconciled
invoice_lines[].tax_line_amount_aedSame
payment_terms[].amountInstalments are not summed against payable_amount
delivery.address.country_code under is_exportThe rule text calls for a destination outside the UAE, but an AE country validates

Authentication and authorization

Three distinct failures, and the status code does not separate them the way you would expect. A missing credential is 401; both a bad credential and a credential pointed at someone else's participant are 403. All three use the bare { error, message } shape rather than the { status, message, errors } envelope.

No credential at all, 401:

JSON
{
  "error": "Authentication Required",
  "message": "Missing credential — send X-Flick-Auth-Key or an Authorization: Bearer token."
}

Unknown, revoked or expired key, 403:

JSON
{
  "error": "Authentication Failed",
  "message": "Invalid or revoked API Key."
}

A valid key, aimed at a participant it does not cover, 403. The message names the participant, which makes this the easiest of the three to diagnose:

JSON
{
  "error": "Authorization Failed",
  "message": "Credential is not scoped to participant '019fc2bd-0000-0000-0000-000000000000'."
}

The token exchange is the one endpoint that does not follow either shape. It answers 401 in OAuth's own vocabulary:

JSON
{
  "error": "invalid_client",
  "error_description": "Invalid or expired client credentials."
}

Transport and framework errors

A request that never reaches the application is answered by the web framework, not by the API. These come back as text/html with no JSON at all, so check Content-Type before you parse an error body.

RequestStatusBody
Unknown path404HTML, Cannot GET /v1/participants/…/no-such-thing
Malformed JSON body400HTML, Bad Request
Wrong method on a known path500HTML, Internal Server Error, not the 405 you would expect
A document_identifier where a document_id belongs500HTML, not the 404 you would expect

Application-level 404s do return JSON, and are deliberately indistinguishable between "no such document" and "not yours":

JSON
{
  "status": "not_found",
  "message": "Document not found"
}

An artifact that exists as a type but not yet for this document is also a 404, with detail:

JSON
{
  "status": "not_found",
  "message": "Artifact not available",
  "errors": {
    "message": "DOCUMENT_SBD_SIGNED artifact not available for this document"
  }
}

That means not yet rather than never. DOCUMENT_XML is there as soon as the document is accepted; DOCUMENT_SBD_SIGNED, DOCUMENT_MLS_RECVD and DOCUMENT_TDD appear once the exchange reaches delivered. Poll the event feed rather than retrying blindly.


Status codes

StatusstatusMeaning
400bad_requestValidation failure, or a bad parameter
401absentNo credential. Bare { error, message }
403absentBad credential, or outside participant scope. Bare { error, message }
404not_foundNo such document, or not yours, deliberately indistinguishable
409conflictDUPLICATE_DOCUMENT. Not yet what you get; see the defect below
429absentRate limited; carries Retry-After and the X-RateLimit-* headers
500server_errorAnything else; errors is omitted
503absentRate limiter unavailable, so the request is refused rather than served unchecked

Error shape

The key is errors, not error, and it is omitted entirely when there is no detail to report. status here is an error kind, not the document status vocabulary.

errors is an array for validation failures:

JSON
{
  "status": "bad_request",
  "message": "Document is invalid",
  "errors": [
    {
      "path": "Document",
      "code": "ibr-007-ae",
      "severity": "error",
      "message": "[ibr-007-ae]-When Invoice Transaction-type code (BTAE-02) has value 1XXXXXXX (Free trade zone), then Beneficiary ID (BTAE-01) MUST be provided."
    }
  ]
}

and an object for most other errors:

JSON
{
  "status": "bad_request",
  "message": "Unknown artifact type",
  "errors": {
    "code": "VALIDATION_FAILED",
    "message": "Unknown artifact type 'ubl'. Expected one of: DOCUMENT_XML, DOCUMENT_SBD_SIGNED, DOCUMENT_MLS_SENT, DOCUMENT_MLS_RECVD, DOCUMENT_TDD."
  }
}

Handle both shapes.

A validation issue carries path, code, message and severity. path is a dotted field path for field validation and the literal "Document" for a Schematron rule. Only severity: "error" aborts the submission.

Schematron messages repeat the code inside the text, in the form [ibr-007-ae]-…, so strip the prefix before showing a message to a user.


Known defects

Each of these was reproduced against the live service.

Duplicates return 500, not 409. Resubmitting a document_identifier already used in the same calendar year answers:

JSON
{
  "status": "server_error",
  "message": "The operation was blocked by a retention rule."
}

A client following normal retry conventions will retry something that can never succeed. Until this is fixed, treat that exact message as "already filed, do not retry".

validate consumes the document number. The same 500 answers a POST /documents for a number that has been through /validate, and a second /validate of it. Validation is not a dry run as far as the identifier is concerned. Use throwaway numbers while you are developing.

The rate-limit headers disagree. X-RateLimit-Limit reports 2000 while X-RateLimit-Remaining reports 3999, and the remaining count does not decrement across requests. Do not drive client-side throttling off them yet.

events/position returns 200, not 404, for a feed with no stored position. The body carries acked: null and behind: null. Branch on acked rather than on the status code.

events/ack reports a numeric cursor as missing. The cursor must be the opaque string from an event id. Sending {"direction": "outgoing", "cursor": 1} answers Both 'direction' and 'cursor' are required., which points at the wrong problem.

The margin scheme cannot be filed. flags.is_margin: true fails ibr-116-ae for every tax category, and category N fails ibr-108-ae or ibr-111-ae whether or not the flag is set. There is currently no accepted combination.

A buyer AE:TIN is always rejected. receiving_party.identifiers carrying AE:TIN fails ibr-133-ae whether or not another identifier is present, because the rule requires the buyer's tax identifier to sit in the VAT scheme. Use AE:VAT for the buyer.

A wrong ?issue_date on a by-id read gives 404, not a slower lookup. The parameter narrows the search rather than filtering the result.

Peppol lookups query the production SML, so pre-production participants always report is_registered: false. Correct behaviour, not a fault.


Debugging a rejection

Diagram
flowchart TD
    E["400"] --> M{"message"}
    M -->|"'does not satisfy<br/>the regional schema'"| F["Field validation.<br/>Read path. Fix that key."]
    M -->|"'Document is invalid'"| S["Schematron.<br/>Read code. Ignore path."]
    S --> K{"Does the message describe<br/>something you did send?"}
    K -->|"yes"| FIX["Fix the value."]
    K -->|"no"| SPELL["Check key spelling.<br/>A stripped key is the usual cause."]
    FIX --> V["Re-validate under a<br/>THROWAWAY number"]
    SPELL --> V