Skip to content
Log in

ZATCA

La résolution ZATCA sur la facturation électronique (Zakat, Tax and Customs Authority) impose aux entreprises opérant en Arabie saoudite de générer et soumettre des factures électroniques au format UBL XML. La REST API de B2Brouter permet à votre entreprise d’être totalement conforme à la ZATCA, en prenant en charge pour vous la génération XML, le chaînage de hash et le processus de clearance.

Qu’est-ce que la facturation électronique ZATCA ?

Section titled “Qu’est-ce que la facturation électronique ZATCA ?”

La facturation électronique ZATCA (Fatoorah) exige :

  • La génération de factures au format UBL 2.1 XML, avec des extensions spécifiques à l’Arabie saoudite.
  • Le calcul d’une chaîne de hash SHA-256 reliant chaque facture à la précédente.
  • L’envoi de chaque facture à la ZATCA Clearance API pour validation et signature numérique.
  • L’intégration dans la facture émise du code QR retourné par la ZATCA.

Avec B2Brouter, vous pouvez externaliser tout cela. Vous émettez des factures ou créez des déclarations fiscales via des appels REST, et B2Brouter gère le chaînage, le clearance et la génération du QR code.

Les factures ZATCA sont émises par des entreprises saoudiennes. Le compte doit avoir country: "sa". Les champs suivants sont obligatoires pour les comptes SA :

Paramètre APIDescriptionNotes
nameRaison sociale de l’entrepriseObligatoire
countryDoit être "sa"Obligatoire
addressNom de rueObligatoire
address2Numéro du bâtimentObligatoire, entier à 4 chiffres
cityVilleObligatoire
postalcodeCode postalObligatoire
provinceDistrictObligatoire
tin_valueNuméro d’immatriculation TVA (15 chiffres)Obligatoire
tin_schemeDoit être 9760 (TVA saoudienne)Obligatoire

Remarque : Les champs address2 et province correspondent respectivement aux notions saoudiennes de numéro du bâtiment et de district. Utilisez address2 et province comme noms de paramètres dans l’API ; les erreurs de validation feront référence à ces noms.

Les contacts (acheteurs) des factures ZATCA doivent également avoir des données d’adresse correctes. Les champs suivants s’appliquent lorsque country est "sa" :

Paramètre APIDescriptionNotes
nameRaison sociale de l’acheteurObligatoire
countryCode pays ISO-2Obligatoire
addressNom de rueObligatoire pour les contacts SA avec ZATCA activé
address2Numéro du bâtimentObligatoire pour les contacts SA avec ZATCA activé
cityVilleObligatoire pour les contacts SA avec ZATCA activé
postalcodeCode postalObligatoire pour les contacts SA avec ZATCA activé
provinceDistrictObligatoire pour les contacts SA avec ZATCA activé
tin_valueNuméro d’immatriculation TVAObligatoire pour les factures B2B
tin_scheme9760 pour la TVA saoudienne ; voir types d’identifiant de l’acheteur pour les acheteurs étrangersObligatoire

Les factures ZATCA utilisent SAR (riyal saoudien) comme devise. Les taxes doivent utiliser name: "VAT" et category: "S" pour le taux standard de 15 %.

Exemple minimal de facture :

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"send_after_import": true,
"invoice": {
"date": "2025-01-15",
"number": "INV-001",
"currency": "SAR",
"payment_method": 1,
"contact": {
"name": "Buyer Company Ltd",
"address": "King Fahd Road",
"address2": "1234",
"city": "Riyadh",
"postalcode": "12345",
"province": "Riyadh",
"country": "sa",
"tin_value": "310175397400003",
"tin_scheme": 9760,
"language": "en",
"currency": "SAR"
},
"invoice_lines_attributes": [
{
"quantity": 1.0,
"description": "Professional services",
"price": 100.0,
"taxes_attributes": [
{
"name": "VAT",
"percent": 15.0,
"category": "S"
}
]
}
]
}
}'

Catégories fiscales et codes d’exonération

Section titled “Catégories fiscales et codes d’exonération”

La ZATCA définit quatre catégories de TVA. Pour les catégories E (exonérée) et Z (taux zéro), un code de motif d’exonération valide (comment sur la ligne de taxe) est obligatoire ; sinon la facture sera rejetée.

CatégorieDescriptionTauxCode d’exonération requis ?
STaux standard15%Non
EExonérée de TVA0%Oui — VATEX-SA-29, VATEX-SA-29-7 ou VATEX-SA-30
ZTaux zéro0%Oui — voir tableau ci-dessous
OHors champ0%Non

Le code d’exonération se définit dans le champ comment de la ligne de taxe :

{
"name": "VAT",
"percent": 0.0,
"category": "Z",
"comment": "VATEX-SA-32"
}
CodeDescription
VATEX-SA-29Services financiers mentionnés à l’article 29 du règlement TVA
VATEX-SA-29-7Services d’assurance-vie mentionnés à l’article 29 du règlement TVA
VATEX-SA-30Opérations immobilières mentionnées à l’article 30 du règlement TVA
CodeDescription
VATEX-SA-32Exportation de biens
VATEX-SA-33Exportation de services
VATEX-SA-34-1Transport international de marchandises
VATEX-SA-34-2Transport international de passagers
VATEX-SA-34-3Services directement liés et accessoires à un transport international de passagers
VATEX-SA-34-4Fourniture d’un moyen de transport qualifié
VATEX-SA-34-5Tout service lié au transport de biens ou de passagers
VATEX-SA-35Médicaments et équipements médicaux
VATEX-SA-36Métaux qualifiés
VATEX-SA-EDUEnseignement privé au citoyen
VATEX-SA-HEASanté privée au citoyen
VATEX-SA-MLTRYFourniture de biens militaires qualifiés
VATEX-SA-DIPLOMATFournitures qualifiées à des missions diplomatiques
VATEX-SA-DUTYFREEFourniture qualifiée de biens en zone duty free
VATEX-SA-32(bis)Fourniture sous régime de suspension douanière
VATEX-SA-ROYALDECREEFourniture sur laquelle le gouvernement supporte la TVA
CodeDescription
VATEX-SA-OOSServices hors champ de la taxe / non soumis à la TVA

Pour les acheteurs étrangers (hors SA), utilisez tin_scheme pour préciser le type d’identifiant :

tin_schemeDescription
9760Numéro d’immatriculation TVA saoudien
0002Numéro de TVA UE
0003Numéro de passeport
0004Identifiant officiel (pays de résidence)
0005Certificat de résidence
0006Autre document
0007Non enregistré

Après la création ou l’envoi d’une facture, le clearance ZATCA est asynchrone. Le tax_report sera d’abord en état processing.

Suivez la progression via :

Mappage des champs : Invoice API → XML ZATCA

Section titled “Mappage des champs : Invoice API → XML ZATCA”
Champ de l’Invoice APIÉlément XML ZATCA
numbercbc:ID
datecbc:IssueDate
company.tin_valuecbc:CompanyID du fournisseur
company.address2cbc:BuildingNumber du fournisseur
company.provincecbc:District du fournisseur
contact.tin_valuecbc:CompanyID du client
contact.address2cbc:BuildingNumber du client
contact.provincecbc:District du client
tax.percentcbc:Percent
tax.categorycbc:ID dans cac:TaxCategory
tax.commentcbc:TaxExemptionReasonCode
invoice.totalcbc:TaxInclusiveAmount
invoice.subtotalcbc:TaxExclusiveAmount