What we do for you

You send the invoice data. We do everything ZATCA-specific.

Build the invoice as UBL XML in the format ZATCA requires.
Sign it with your own certificate, which we obtain for you during onboarding.
Add the QR code the invoice must carry.
Send it to ZATCA and read the answer.
Keep the result, so you can ask for it again at any time.

The four steps

Ready in four steps

1

Register

Create your account with your company data: names, VAT number, commercial registration number and national address. They go into your ZATCA certificate request and onto every invoice, so they must match what ZATCA has for you.

2

Onboard with ZATCA

Generate a one-time password (OTP) in the Fatoora portal and enter it in your dashboard. We create your keys, request your certificate from ZATCA and complete its compliance check. It takes a few minutes: do not submit it twice.

3

Create your token

Create your API token in the dashboard. You send it as a Bearer token with every call. If you lose it, you can create a new one and the old one stops working.

4

Send your invoices

Send each invoice as JSON to the invoice endpoint. We answer with ZATCA's result: the status, any warnings or errors, and the signed XML.

Invoice types

Standard and simplified invoices, credit and debit notes

Standard invoice (B2B)

Sent to ZATCA for clearance: ZATCA checks it and returns the stamped invoice. According to ZATCA's rules the buyer's details, including the address, are required.

Simplified invoice (B2C)

Reported to ZATCA. According to ZATCA's rules the buyer's address is not required.

Credit notes and debit notes are sent the same way, for both types.

Good to know

Sending the same invoice twice is safe

Send your own invoice number with each invoice. If ZATCA already accepted that number, you get the stored result back and nothing is sent again.

What ZATCA says, you see

ZATCA's warnings and errors come back unchanged in the answer, so you know exactly what to fix.

Arabic or English

Our messages are in Arabic. Add lang=en to a call to get them in English.

Your plan sets the limit

Each plan allows a number of invoices. Contact us for a free trial, or to move to another plan.

Ready to connect?

Create your account, or read the API documentation first.

Register API documentation