Live sandbox available now

Connect your system to ZATCA-compliant e-invoicing with one API

One request in, a ZATCA-cleared invoice out. Built on BOT Solutions' proven ERPNext + ZATCA compliance stack — no need to manage customers, items, or invoice objects on our side. Your team keeps its own system; we handle compliance.

// One call. Real ZATCA clearance.
POST /api/method/zatca_gateway.api.submit_invoice

{
  "external_invoice_id": "POS-2026-00451",
  "invoice_type": "simplified",
  "items": [{
    "description": "Consulting service",
    "qty": 1,
    "rate": 250.00,
    "tax_rate": 15
  }],
  "payment_method": "cash"
}
200 · accepted_with_warnings real ZATCA UUID, hash & QR returned

Building ZATCA compliance in-house is a distraction, not your product

Clearance, reporting, credit notes, XML generation, certificate lifecycle — full e-invoicing compliance is a significant, ongoing engineering burden that has nothing to do with what your business actually does. Most teams underestimate it until they're deep into ZATCA's technical requirements.

  • Your system sends invoice details — customer, line items, payment method
  • The gateway resolves everything on the ERPNext side automatically
  • Submits to ZATCA and returns clearance data — UUID, hash, QR code, signed XML
  • Typically under a second, in the same response

Built for how real integrations actually work

Every capability below has been verified against the live ZATCA sandbox — not just designed on paper.

Idempotent by design

Safe to retry on network errors. The same request twice never creates a duplicate invoice.

Errors that actually explain

Every field-level problem is reported at once, with the exact reason — never a generic failure.

Full & partial credit notes

Return specific line items or the whole invoice — matched and validated against the original.

XML on every response

The signed UBL 2.1 record you're required to retain, included by default — or fetch it any time later.

ZATCA outage? Handled

Automatic hourly retry in the background if ZATCA itself is unreachable. You never resubmit.

Standard authentication

Plain API key/secret tokens. A dedicated, revocable identity for your integration — nothing custom.

See it work, before you commit to anything

The sandbox playground fires real requests at a live ZATCA-integrated environment. Edit the JSON, hit send, watch a genuine invoice get cleared — no signup required.

Everything your developer needs

Two ways in, depending on how you like to work.

Sandbox Playground

An interactive page — pick an endpoint, edit a real example, send it, and see the actual response come back from ZATCA. The fastest way to understand the API without reading a single page of documentation first.

Open Playground

Developer Integration Guide

The full field-by-field reference — every request field marked required or optional, every error shape, authentication, idempotency, and exactly what happens if ZATCA itself goes down. Browse it online, or grab the PDF to keep.

Read the Guide Download PDF