One-time onboarding
Enter your VAT info once. We generate the CSR, fetch the compliance + production certificates, and store them safely in a per-client folder.
Sign up, onboard once, then post invoices from your own app with a single API call. We handle signing, hashing, QR codes, and submission to ZATCA — you keep building.
No credit card · 5-minute setup
All the ZATCA integration plumbing — packaged into one clean API.
Enter your VAT info once. We generate the CSR, fetch the compliance + production certificates, and store them safely in a per-client folder.
POST your invoice payload to /api/v1/invoices and get back the signed XML, hash and QR code in milliseconds. Crisp docs, copy-paste examples.
HMAC-SHA256 signed requests, replay protection, IP allow-lists, encrypted secrets at rest, and a full audit log of every API call.
We produce UBL 2.1 digitally-signed XML, the canonical invoice hash, and the TLV QR — all matching ZATCA mandatory requirements.
Flip between sandbox, simulation, and production with a click. Certificates and files are isolated per environment so you can test safely.
Track every invoice, inspect the ZATCA response, download signed XML, and manage API keys — in Arabic and English.
From signup to first invoice, the path is straight and well-documented.
No credit card needed — you start on the free plan immediately.
Enter your VAT number, OTP from the ZATCA portal, and we issue your certificates.
Grab an API key, POST your first invoice from your app, you're live.
No more wrestling with XAdES, XML namespaces or hash invariants. Send JSON, get the result.
# Submit a tax invoice to ZATCA curl -X POST "https://api.zatca-api.com/api/v1/invoices" \ -H "X-API-Key: zk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "X-API-Secret: zs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "invoice_number": "INV-1001", "type": "standard", "currency": "SAR", "seller": { "name": "ACME LLC", "vat_number": "399999999900003" }, "buyer": { "name": "Customer Co", "vat_number": "300000000000003" }, "lines": [ { "name": "Product 1", "quantity": 2, "unit_price": 100, "tax_percent": 15 } ] }'
<?php $ch = curl_init('https://api.zatca-api.com/api/v1/invoices'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'X-API-Key: ' . $apiKey, 'X-API-Secret: ' . $secret, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'invoice_number' => 'INV-1001', 'type' => 'standard', 'lines' => [/* ... */], ]), ]); $result = json_decode(curl_exec($ch), true); echo $result['data']['qr_code'];
const result = await fetch('https://api.zatca-api.com/api/v1/invoices', { method: 'POST', headers: { 'X-API-Key': apiKey, 'X-API-Secret': secret, 'Content-Type': 'application/json', }, body: JSON.stringify({ invoice_number: 'INV-1001', type: 'standard', lines: [ { name: 'Product 1', quantity: 2, unit_price: 100, tax_percent: 15 } ], }), }).then(r => r.json()); console.log(result.data.qr_code);
Start free, scale only when you need to. No hidden fees.
Perfect for testing your integration before going live.
For active small and medium businesses.
Custom solutions for large companies.
Quick answers to the most common questions.
Join dozens of Saudi businesses already using Zatca API to simplify their e-invoicing.
Create your account