Oman · · 8 min read

Zero-Rated and Exempt Supplies on an Oman E-Invoice

A zero-rated or exempt line on an Oman e-invoice needs a reason code, or rule IBR-069-OM rejects it. All 28 codes and where each goes in the file.

A zero-rated or exempt line on an Oman e-invoice must carry a reason code, or rule IBR-069-OM rejects the invoice. Zero-rated lines (category Z) take one of sixteen VATZR-OM codes. Exempt lines (category E) take one of twelve VATEX-OM codes. The category on its own is never enough.

This page lists the four VAT categories, all 28 codes, where the code goes in the file and what each kind of mistake triggers. It does not say whether a supply qualifies. That is a tax question, and the last section says where to take it.

Which VAT categories does an Oman e-invoice use?

Four, from the code list CL-04-OM: S, Z, E and O. A rule fails any document that uses another value for a line, a document-level allowance or charge, or a VAT breakdown.

Code Meaning Rate carried Reason code
S Standard rate 5 Must not have one
Z Zero-rated 0 Required, from VATZR-OM-01 to -16
E Exempt Not carried Required, from VATEX-OM-01 to -12
O Out of scope Not carried Must not have one

The rate for S is fixed at 5, because the pack tests the accounting-currency breakdown against it (IBR-053-OM). A zero-rated category must carry rate 0 and E and O carry no rate. These come from the Oman data dictionary's rules BR-OM-100 to BR-OM-104, which the data dictionary article explains.

Two columns. The left column, zero-rated lines with category Z, lists: needs a reason code, the code must be one of the sixteen VATZR-OM codes from VATZR-OM-01 to VATZR-OM-16, and the rate is 0. The right column, exempt lines with category E, lists: needs a reason code, the code must be one of the twelve VATEX-OM codes from VATEX-OM-01 to VATEX-OM-12, and no rate is carried. Out of scope category O and standard rate category S must carry no reason code at all.
A code from the wrong list fails the list check, even though the code itself is valid.

What does IBR-069-OM check?

It checks that a VAT breakdown for category E or Z has a reason code. The rule text in the pack we run is: "A VAT breakdown (IBG-23) with VAT Category code (IBT-118) "E" and/or "Z" must have a VAT exemption reason code (IBT-121)."

Four more rules finish the picture:

  • IBR-070-OM rejects a breakdown for category O that has a reason code.
  • ALIGNED-IBRP-S-10-OM rejects a breakdown for category S that has a reason code or reason text.
  • CL-10-OM checks that a reason code on a Z category is one of the sixteen VATZR-OM values.
  • CL-05-OM checks that a reason code on an E category is one of the twelve VATEX-OM values.

The same pair applies to document-level discounts and charges. IBR-062-OM and IBR-064-OM require a reason code on an allowance or a charge whose category is E or Z.

Which reason codes can a zero-rated line carry?

Sixteen, in the wording the Peppol Authority for Oman publishes for CL-10-OM.

Code Meaning
VATZR-OM-01 Qualifying supply of food items specified by a decision from the Chairman
VATZR-OM-02 Qualifying supply of medicines and medical equipment
VATZR-OM-03 Supply of investment gold, silver and platinum
VATZR-OM-04 Supplies of international and intra-GCC transport of goods or passengers
VATZR-OM-05 Supply of services related to international and intra-GCC transportation of goods or passengers
VATZR-OM-06 Supply of qualifying air, sea and land means of transport
VATZR-OM-07 Supply of rescue planes, and rescue and assistance boats
VATZR-OM-08 Supply of oil, oil derivatives and natural gas
VATZR-OM-09 Export of service
VATZR-OM-10 Direct export of goods
VATZR-OM-11 Indirect export of goods
VATZR-OM-12 Re-export of goods
VATZR-OM-13 Supply from a special zone to a special zone, or within a special zone
VATZR-OM-14 Supply from mainland to special zone
VATZR-OM-15 Customs duty suspension statuses to a special zone
VATZR-OM-16 Special zone to customs duty suspension statuses

Note the first and second entries. VATZR-OM-01 is food and VATZR-OM-02 is medicines. It is easy to pick the wrong neighbour from a drop-down list, and the rules cannot catch it.

Which reason codes can an exempt line carry?

Twelve, for CL-05-OM.

Code Meaning
VATEX-OM-01 Qualifying financial services
VATEX-OM-02 Educational services and related goods and services
VATEX-OM-03 Healthcare services and related goods and services
VATEX-OM-04 Rental of properties for residential purposes
VATEX-OM-05 Local passenger transport
VATEX-OM-06 Undeveloped land (bare land)
VATEX-OM-07 Resale of residential properties
VATEX-OM-08 Imported goods supplied to diplomatic and consular bodies, international organisations, and the heads and members of diplomatic and consular bodies
VATEX-OM-09 Imports for the Armed Forces and Internal Security Forces
VATEX-OM-10 Imported supplies for non-profit charities
VATEX-OM-11 Import of returned goods
VATEX-OM-12 Imported goods where the supply is exempt from tax, or taxed at zero percent, at the final destination point of entry

The code goes in as a single value. Both list checks refuse a value that contains a space, so two codes in one field, or a code followed by text, fail.

Where does the reason code go in the file?

In cbc:TaxExemptionReasonCode, in two places that both have to agree.

<cac:TaxCategory>
  <cbc:ID>Z</cbc:ID>
  <cbc:Percent>0</cbc:Percent>
  <cbc:TaxExemptionReasonCode>VATZR-OM-09</cbc:TaxExemptionReasonCode>
  <cbc:TaxExemptionReason>Export of service</cbc:TaxExemptionReason>
  <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:TaxCategory>
  • On the VAT breakdown, in cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory. This is business term BT-121, and IBR-069-OM reads it.
  • On each line, in cac:Item/cac:ClassifiedTaxCategory. This is the Oman term BT-OM-90, with a text twin in BT-OM-89.

The list rules read both places, so a wrong code fails whichever one holds it. The reason text is optional, and the code is what is checked.

What do the export codes need alongside them?

Four codes describe nothing but an export, and two of them pull other fields in. These are rules in the pack:

  • VATZR-OM-09, export of service. IBR-012-OM rejects the invoice if the deliver-to country is OM on an export invoice, and IBR-155-OM requires a service type from the list CL-12-OM on the line.
  • VATZR-OM-12, re-export of goods. IBR-013-OM requires a supporting document reference and its UUID.
  • VATZR-OM-10 and -11, direct and indirect export of goods, need no extra field, but they describe an export, so the document must be marked as one in its transaction type (BT-OM-1).

That last point is a GoRoute check and not a Schematron rule. Our API refuses a line carrying one of the four export codes on a document that is not marked as an export, with validation error BUS_029, because the schematron does not catch it and the document would otherwise be filed as a domestic supply zero-rated as an export. The transaction types are in the format article.

What happens when a 0% line has no code?

The invoice is rejected with IBR-069-OM, and no part of it is sent. The same is true of a code from the wrong list, of two codes in one field, and of a reason code on an S or O line.

The mistake that is not rejected is the worst one. Every code on both lists is valid, so a valid code that does not describe the supply goes through. The invoice is accepted and a misdeclared exemption is filed. No rule can protect you from that. It is why most accounting integrations treat the reason code as a field that a person chooses on the tax rate, rather than one the software infers. The Xero guide and the TallyPrime guide cover how those two systems hold it.

To see a rejection before you send anything, validate a real document: how to test an Oman e-invoice before you send it. For every other rejection, by identifier, see why Oman e-invoices get rejected.

What is not settled here

Whether a supply qualifies. The lists are the Authority's. Which of your supplies fall under which code is for your tax adviser and the Oman Tax Authority, working from the VAT Law (Royal Decree 121/2020) and the Authority's decisions. Nothing here says that a given supply is zero-rated or exempt.

The wording of the codes. The meanings above are copied from the code lists we ship. Lists change with the specification, and the version history is tracked here.

What to do with this

If you hold your tax rates in an ERP, check that every zero-rated and exempt rate has a reason code attached, and that the code is chosen by someone who knows the supply. Then validate a batch of real invoices.

GoRoute's API takes the reason code as a field on each line and validates it before anything is sent. The Oman e-invoicing page sets out the service, and the documentation has the field names. The tutorials show a full run. To walk through your own tax rates with us, book a demo.


GoRoute is accredited by the Oman Tax Authority on 29 July 2026 through Union Digital Technologies SPC, and is a certified Peppol Access Point (POP000991).

Primary sources: Oman Tax Authority — the authority that publishes the Oman e-invoicing rules and the VAT Law, Royal Decree 121/2020; Peppol technical documentation — the PINT specification this profile extends.

Frequently asked questions

Does a zero-rated line on an Oman e-invoice need a reason code?
Yes. Rule IBR-069-OM rejects a VAT breakdown with category Z or E that has no VAT exemption reason code. For category Z the code must be one of the sixteen VATZR-OM codes (list CL-10-OM).
Which VAT category codes does Oman use?
Four: S for the standard rate, which is 5%, Z for zero-rated, E for exempt and O for out of scope. Document-level allowances and charges, the VAT breakdown and each invoice line must all use one of these four (list CL-04-OM).
What is the difference between VATZR-OM and VATEX-OM codes?
VATZR-OM codes explain why a line is zero-rated, and there are sixteen. VATEX-OM codes explain why a line is exempt, and there are twelve. A Z line with a VATEX code, or an E line with a VATZR code, fails the list check.
Does an out-of-scope line need a reason code?
No, and it must not have one. Rule IBR-070-OM rejects a VAT breakdown with category O that carries a reason code. A standard-rated line must not carry one either (ALIGNED-IBRP-S-10-OM).
Will the rules tell me if I chose the wrong code?
No. Every code on the lists is valid, so a valid code that does not describe the supply is accepted. Choosing the right one is a tax decision, and the Oman Tax Authority is the place to ask when no code fits.
Where does the reason code go in the XML?
On the VAT breakdown, in cac:TaxCategory under cac:TaxSubtotal, as cbc:TaxExemptionReasonCode, and on each line, in cac:ClassifiedTaxCategory under cac:Item. Document-level allowances and charges carry their own.

Related posts

Building on Peppol?

GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.

Book a demo Read the docs