Where to Find an Invoice UUID in Odoo (Peppol Message ID) · Calibre Consulting

Find the unique ID your customer wants for an Odoo invoice.

Odoo invoices have no general UUID, but invoices sent through Peppol carry a message ID. This guide shows where it lives and how to export it.

This guide shows where Odoo keeps an invoice's unique identifiers and how to read one for an invoice that has already been sent, for example when a customer asks for the invoice UUID. The short answer: standard Odoo has no general UUID on invoices and no button to generate one, but an invoice sent through Peppol carries a Peppol message ID that you can export from the invoice list. Without Peppol, the invoice number is the unique reference Odoo holds.

It is written for accountants and finance staff.

Before you start

Where Odoo keeps unique invoice identifiers

The core invoice record in Odoo does not carry a UUID. It carries the invoice number, such as INV/2026/00042, and Odoo will not let two posted entries in the same journal share a number. The invoice number is also what Odoo writes into the identifier element of the UBL file, the structured XML version of the invoice used for Peppol. That XML file contains no separate UUID.

Identifiers that look like a UUID appear only when an invoice passes through an e-invoicing network or a national e-invoicing system:

Country UUIDs exist only for companies using that country's module. Fiscal Folio, for example, is filled in by the Mexican tax authority when it stamps the invoice, so it will not appear on an invoice from a Belgian company.

Export the Peppol message ID

Odoo saves the Peppol message ID when the invoice is sent, but the invoice form does not display it. The simplest way to read it is an export from the invoice list:

  1. Open the Accounting app, then go to Customers > Invoices. The list of customer invoices appears.
  2. Tick the checkbox next to the invoice. You can select several invoices at once. An Actions menu (the gear icon) appears above the list.
  3. Open the Actions menu and choose Export. The Export Data window opens.
  4. Type "Peppol" in the search box under Available fields. The PEPPOL message ID field appears in the list.
  5. Add PEPPOL message ID to the Fields to export list.
  6. Click Export. Odoo downloads a spreadsheet file.

The file shows one row per invoice with the message ID in its own column. You can save the field list as a template in the same window for next time.

If Export is missing from the Actions menu, your user lacks the export right and an administrator needs to grant it.

Check that it worked

  1. In the Invoices list, enable the optional PEPPOL status column, or group the list by Peppol status from the search options.
  2. Pick one invoice whose status is Done and export it as described above.
  3. Open the file. Success looks like a filled PEPPOL message ID cell that does not start with "demo_".

To cross-check a single invoice on screen, turn on developer mode, a setting that shows extra technical options: open the Settings app, scroll to Developer Tools and click Activate the developer mode. The invoice's Other Info tab then shows a Peppol info section. It shows the Peppol status, and it appears only when the invoice has a message ID.

What the Peppol statuses mean

A message ID exists only if the invoice actually reached the Peppol access point:

An empty cell means the invoice was never sent through Peppol. A message ID that starts with "demo_" was created while the Peppol connection was in demo mode, a test mode that sends no real data, so it does not correspond to a real Peppol message and should not be given to the customer.

When the invoice was not sent through Peppol

If the invoice went out by email or post, Odoo holds no UUID for it, and there is no standard way to generate one afterwards. Ask the customer which reference their system expects:

Storing a randomly generated UUID on invoices that never went through an e-invoicing network is not available in standard Odoo and would need a customization.

Differences between Odoo 17, 19 and 20

In Odoo 17 the field has the same label, PEPPOL message ID, and the export steps are the same. The Odoo 17 invoice form shows the Peppol status but not the message ID.

In Odoo 19 the invoice form shows the Peppol status only in developer mode, on the Other Info tab. For vendor bills received through Peppol, Odoo 19 also writes the line "Peppol document UUID" with the ID into the bill's chatter, the message log at the side or bottom of the record.

In Odoo 20 the label changes to Peppol message ID, and the status list gains Received, Approved and Rejected for invoices where the customer has sent back a business response. The message ID is still not on the invoice form, so the export still applies.

Steps verified on Odoo 19. Menus and labels can differ on other versions.

Common questions

Does Odoo generate a UUID for every invoice?

No. Standard Odoo stores no general UUID on invoices and has no button to generate one. A UUID-style identifier exists only when the invoice goes through Peppol or a country e-invoicing integration that stores one.

Where is the Peppol message ID on an Odoo invoice?

Odoo stores it on the invoice when the Peppol access point accepts the document, but the invoice form does not display it. In the Accounting app, open Customers > Invoices, select the invoice, choose Export from the Actions menu and add the PEPPOL message ID field.

Is the Fiscal Folio the invoice UUID?

Only for Mexican companies. Fiscal Folio is the UUID the Mexican tax authority returns when it stamps an electronic invoice, and the field comes from the Mexican e-invoicing module, so it does not exist on a Belgian invoice.

Why does my Peppol message ID start with demo_?

The invoice was sent while the Peppol connection was in demo mode, a test mode that sends no real data and creates placeholder IDs. That ID does not match a real Peppol message, so it should not be given to the customer.

What can I send a customer if the invoice was not sent through Peppol?

The invoice number, which Odoo keeps unique within the journal for posted invoices and writes into the invoice's UBL file as its identifier. If the customer receives invoices through Peppol, sending the invoice that way gives it a message ID.

Talk to the team.

If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.

Book the call →