Check a customer, confirm eligibility, invoice them.
Three entities. Three calls. One key.
This is an illustrative, non-executable example. Service availability, approvals, pricing, and results must be confirmed for your account. you verify their identity with SDAIA, read their employment status from Qiwa, then issue them a tax invoice through ZATCA. Three government entities in one function.
What if you connected to each entity directly?
A fair question — and the real alternative isn’t a competitor. The difference isn’t whether the API exists; they all do. It’s how much of it you carry.
And we won’t hide the other side: connecting directly removes an intermediary and gives you a direct relationship with the entity. If you consume only one API and don’t intend to add more, the gap is narrower than it looks.
step by step.
Verify the identity SDAIA
The ID number and date of birth come back with a matching name and validity status. The full ID isn’t stored in your record — only the reference and the outcome.
Read the employment status Qiwa
With the data subject’s consent: employer and contract status. Enough for a financing eligibility or credit-limit decision — with no payslip and no documents.
Issue the invoice ZATCA
A phase-two compliant tax invoice, signed and reported. It comes back with uuid and a print-ready QR code.
The whole recipe.
// استخدم مفتاح البيئة المفعّلة في حسابك const api = new API360({ key: process.env.API360_KEY }); async function onboard(nationalId, dob) { // 1 — SDAIA const id = await api.identity.verify({ national_id: nationalId, date_of_birth: dob }); if (!id.verified) throw new Error('IDENTITY_MISMATCH'); // 2 — Qiwa const job = await api.employment.status({ national_id: nationalId }); // 3 — ZATCA const inv = await api.zatca.einvoice({ customer: { name: id.full_name_ar, vat_number: job.employer_vat }, lines: [{ description: 'مثال توضيحي', amount: '<example>' }] }); return { verified: id.verified, employer: job.employer_name_ar, invoice: inv.uuid }; }