For software, POS and accounting vendors

One integration, and every customer of yours is ZATCA-compliant

Your system serves many merchants. One integration with us gives each of them a complete invoicing establishment with the Authority — their own certificate, their own chain, unlimited invoices — from inside your screen, without ever leaving it.

We reply within business hours · Full documentation in English

One API Key for all your merchants The Fatoora OTP is typed in your screen Made in Saudi Arabia
ZATCA Tools
Partner portal
Smart POS Co.
ztkp_live_7f3a…
Your seats
50
Connected
37
Invoices this month
2,918
Your merchants4 / 37
Gourmet Restaurant — Muruj branch ICV 1,204 Connected
Al Noor Pharmacy Onboarding Link Awaiting connection
Gulf Auto Workshop ICV 388 Connected
Elegance Fashion Gallery ICV 92 Connected
Your system ZATCA Tools ZATCA Tools Fatoora platform
One key issues for all your merchants
An Onboarding Link ready for every merchant
Branches and devices per merchant
A partner portal for your operations team
Complete REST documentation in English

How the integration works

You create the accounts. We handle the Authority.

Certificates, signing, the hash chain, clearance and reporting, archiving — all behind a handful of REST calls. What stays with you is what is really yours: your screen and your relationship with your customer.

One key issues for all your merchants

No key per merchant, no secret stored per customer. Your one partner key issues invoices for any merchant on your platform with a single header naming them — one secret in your vault, one rotation when needed.

Tax and simplified invoices Credit and debit notes Archive and PDF for every document
POST /api/v1/invoices
Authorization: Bearer ztkp_live_7f3a…
X-Merchant-Id: 34

{ "type": "simplified", "lines": [ … ] }

201 { "number": "INV-2026-01204",
      "status": "accepted", "qr": "…" }

The Fatoora OTP, inside your own screen

The Authority issues the code to the taxpayer and no API can fetch it. Where it gets typed is free, though: your system collects it from the merchant and passes it to us, and we run the whole onboarding — compliance certificate, the six checks, production certificate — without the merchant ever leaving your screen.

POST /merchants/34/connect
{ "otp": "482917" }

202 connecting → poll /status

A merchant who has not started costs you nothing

A seat is reserved when you create the merchant and its clock starts the day they actually connect to ZATCA. A merchant you created who never finished connecting costs you nothing, and a merchant who left frees their seat for someone else.

Connected — counted 37
Awaiting connection — not counted 5
Available 8

A portal for your operations team

Who is connected, who is stuck at the OTP, and whose invoices were rejected. Mint an Onboarding Link for a stuck merchant, and rotate your key yourself at two in the morning without waiting for anyone.

Branches and devices per merchant

A restaurant chain on your system? Each branch gets its own device, certificate and independent chain through the same API, with reports per branch.

Who this is for

A system that serves many merchants,
each of them a taxpayer before the Authority.

If e-invoicing is a question your customers keep asking you, this integration is your answer — without building the Authority's plumbing yourself.

01
Point-of-sale systems
The restaurants, shops and pharmacies on your system issue their simplified invoices from the till itself, reported to the Authority within the deadline.
02
Accounting software and ERP
Your customers issue their tax invoices from their books, cleared by the Authority before they reach the buyer — with no integration module for you to build and maintain.
03
Development and integration firms
Building systems for many clients? Connect them all under one partner account instead of a manual onboarding per project.
04
Platforms that invoice for their merchants
A SaaS platform or marketplace issuing invoices on behalf of its merchants: each merchant gets their own establishment and certificate, and the issuing comes from your side.

How to start

Three steps. Your first merchant on day one.

01
We agree, and issue your key
One conversation: how many merchants, which system, and when. We open your partner account with its seats and hand you the key and portal access.
02
Create the merchant from your system
One call with the name, email, VAT number and short address. You get back the merchant id and a ready onboarding link.
POST /api/partner/merchants
{ "name": "مطعم الذواقة",
  "vat_number": "3101…", … }

201 { "merchant": { "id": 34 },
      "onboarding_url": "…" }
03
The merchant types the Fatoora OTP and issues
From your screen through the connect endpoint, or from their link if you prefer. Within two minutes their certificate is issued, and from that day their seat starts counting — not before.

Every endpoint, parameter and error code is in the API reference — in English, the way your developer reads it.

Trust and security

Every merchant has their own certificate.
And nobody sees anyone's keys.

The Authority issues certificates to the taxpayer, not to the software, and there is no such thing as a shared certificate. So every merchant on your platform is a separate establishment with its own certificate, chain and archive — and your key acts on its behalf without touching any of it.

0
key for all your merchants, rotated by you
0
compliance checks per merchant before production
0
Authority error codes documented for your developer
0
years of XML archive for every invoice
A complete establishment per merchant
Their VAT number, their own production certificate from the Authority, and their invoice chain — isolated from every other merchant on your platform.
Keys that are never displayed
Private keys and certificates are encrypted in the database and never appear on a screen or in a log — not to you, not to the merchant.
Releasing a seat deletes nothing
A merchant who left your system frees their seat for someone else, while their documents, chain and login stay as they are: the Authority requires a six-year archive.
A registered Saudi establishment
Commercial registration 1009005197, with every establishment's data isolated from every other.

Contact us

Tell us about your system,
and we arrange the rest with you.

Seat counts and terms are agreed according to your size and your system — which is why there is no price on this page. Write to us and we reply within business hours.

We reply within business hours — and no marketing mail afterwards.

FAQ

What every partner asks before the first call

All the technical detail is in the API reference.

One is created automatically when you create them through the API, but they never have to open it: their invoices are issued from your system with your key, and the Fatoora OTP is typed in your screen. The account is there if they want it — the archive and the documents are theirs.
No, and nobody can. The Authority issues the code to the taxpayer on the Fatoora portal. What we change is where it gets typed: your system collects it from the merchant and passes it to us in one call, and we run the whole onboarding from there.
You do. You buy a number of seats and every connected merchant occupies one. The merchant never sees a bill from us, and what you charge them is your business. A seat is reserved at creation and starts counting the day the merchant actually connects, so one who never finishes costs you nothing.
You release their seat from the portal or the API and it comes back to you for another merchant. Nothing is deleted: the Authority requires a six-year archive and an unbroken chain, so their documents and login remain and only new issuing stops. If they return, you reinstate them and the chain resumes where it left off.
Yes, all of it: every endpoint, parameter and error code, with curl examples, in the API reference. There is also a short Arabic guide for those who read Arabic first.
There are few endpoints: create a merchant, connect them, issue an invoice. One developer gets the first merchant to production in a working day. Before your first real customer you can try it on the Authority's sandbox under its test identity.

Are your customers asking you about e-invoicing?

Tell us how many merchants and which system, and we set up your partner account and key in one conversation.

GET /api/partner/account
{
  "partner": {
    "name": "Smart POS Co.",
    "status": "active",
    "seats": { "limit": 50, "used": 37, "remaining": 13 }
  }
}