BR-KSA-18 Rejects the invoice

Tax category code not accepted

The VAT category on a line is written as one of exactly four letters: S for the standard rate, Z for zero-rated, E for exempt and O for out of scope. Any other value — a numeric rate, a lower-case letter, a European code — is rejected.

The message text as the Authority sends it in English, unedited

VAT category code must contain one of the values (S, Z, E, O).

What does this mean?

The list is closed at four codes: S standard rate 15%, Z zero-rated, E exempt, and O outside the scope of VAT.

The code is not the rate: the category is a letter and the rate is a number, and each has its own field. Writing 15 where S belongs fails here.

The European specification knows other codes, such as AE for reverse charge — those are not adopted in the Saudi version, which is why imported systems fail here so often.

Why does it happen?

Ordered from the most common to the least — your cause is most likely the first or the second.

  • An integration that passes the tax rate, or a name such as zero or exempt, in the category field instead of the adopted letter.
  • The right letter in the wrong case: a lower-case s is not S.
  • A system built on the European specification sending AE or other codes outside the four.
  • Confusing zero-rated with exempt during setup, then fixing it by writing an invented value.

How to fix it

2 steps, then send the invoice again.

  1. 1
    Correct the code to the adopted letter

    Look at what the line really is: a taxable local sale gives S; exports, medicines and other zero-rated goods give Z; financial services, life insurance and the like give E; and anything outside the scope of VAT gives O. Then resend the same invoice.

  2. 2
    Separate the category from the rate in the integration

    Have the integration pass the letter in the category field (BT-151) and the rate in its own field, and never derive one from the other by guessing. Zero-rated and exempt are both 0%, but their categories differ and so does their VAT treatment.

Once corrected, send the invoice again. A rejected invoice was never recorded with the Authority, so it needs no credit note — send the corrected invoice itself.

Does ZATCA Tools prevent it?

Yes. The category code in ZATCA Tools is generated by the system from the four adopted values and is never typed by hand, so a code from outside the list never reaches the Authority.

Related codes

BR-KSA-84
The official message text is in the Full reference.
BR-KSA-11
The official message text is in the Full reference.

Frequently asked questions

What is the practical difference between Z and E when the rate is zero either way? +
Zero-rated Z is a taxable sale at 0% and you may deduct the input VAT on it; exempt E is outside that deduction. The wrong letter does not change the invoice total, but it does change your VAT return.
My European system sends AE for reverse charge — what do I do? +
The Saudi version does not adopt AE in this field. Reverse charge cases are handled by another mechanism in the local specification, so do not pass the European code straight through.
You fixed this one — now avoid the next

ZATCA Tools builds the signature, the PIH, the counter and the encoding for you, and validates your data before it is sent. Completely free for now, and no credit card.

Start for free

← All ZATCA error codes