Skip to Content
APICertifier une facture

Certifier une facture

Cet endpoint certifie une facture en temps réel via l’API ERP. Le SFEC génère la signature, le numéro de certification et le QR code, puis les renvoie dans la réponse.

Authentification : X-API-Key - voir Authentification


OpenAPI / Swagger

Explorateur OpenAPI interactif


Endpoint

URL : POST /api/v1/invoices
Authentification : X-API-Key

POST https://api.sfec.gouv.cg/api/v1/invoices X-API-Key: YOUR_API_KEY Content-Type: application/json Accept: application/json

Paramètres de requête

Identification et statut

ParamètreTypeDescriptionObligatoire
invoice_idstringIdentifiant unique de la facture (ex: INV-2025-12)
invoice_typestringType de facture (salesInvoice, creditNote)
taxpayer_niustring|nullNIU du contribuable (vendeur) — max 20 caractères. Le vendeur est identifié par la clé API.
invoice_subjectstring|nullSujet ou description de la facture
invoice_due_datestring|nullDate d’échéance au format ISO 8601
reference_invoice_idstring|nullID de la facture de référence (pour avoirs)
scietstring|nullNuméro SCiET (identifiant interne SFEC)

Pour créer une facture d’avoir :

  • Définissez invoice_type à creditNote
  • Définissez reference_invoice_id avec le numéro de la facture de vente originale

Informations destinataire

ParamètreTypeDescriptionObligatoire
recipient_typestringType du destinataire (business, individual, government, foreign)
recipient_namestringNom ou raison sociale du destinataireConditionnel
recipient_niustring|nullNuméro d’identification fiscale du destinataireConditionnel
recipient_rccmstring|nullNuméro RCCM du destinataire
recipient_addressstring|nullAdresse physique complèteConditionnel
recipient_phonestring|nullNuméro de téléphone du destinataireConditionnel
recipient_emailstring|nullAdresse e-mail du destinataireConditionnel
is_recipient_taxablebooleanIndique si le destinataire est assujetti à la TVA

Champs conditionnels selon recipient_type : recipient_name est requis pour business, government et foreign ; recipient_niu pour business et government (16 ou 17 caractères) ; recipient_phone, recipient_email et recipient_address pour government et foreign. Pour individual, ces champs sont optionnels.

Montants et totaux

Tous les montants sont exprimés en valeur numérique simple, sans devise.

ParamètreTypeDescriptionObligatoire
subtotalnumberMontant hors taxe total
total_tax_t_amountnumberTVA au taux normal [T] (18%)
total_tax_r_amountnumberTVA au taux réduit [R] (5%)
total_exempt_amountnumberMontant total exonéré
total_tax_amountnumberTotal de la TVA (total_tax_t_amount + total_tax_r_amount)
discount_amountnumberEscompte — remise globale de la facture, appliquée uniquement sur amount_due
total_line_discount_amountnumberSomme des remises de tous les articles (Σ items[].discount_amount)
additional_cent_taxnumberTaxe additionnelle en centimes
electronic_stamp_dutynumberTimbre fiscal électronique — doit être défini à 0 (voir note ci-dessous)
total_amountnumberMontant global TTC
amount_duenumberMontant total à payer
⚠️

Timbre électronique : Après signature du décret, le champ electronic_stamp_duty doit être défini à 0. Le timbre électronique n’est plus calculé par le contribuable.

discount_amount (Escompte) et total_line_discount_amount (Total Remises) sont deux remises distinctes, affichées sur deux lignes séparées de la facture. total_line_discount_amount doit être la somme des remises de tous les articles (Σ items[].discount_amount), pas celle d’un seul article.

Taxes additionnelles

Le champ additional_taxes permet de spécifier des taxes additionnelles applicables à la facture. Ce champ est optionnel.

ParamètreTypeDescriptionObligatoire
additional_taxesarrayListe des taxes additionnelles

Chaque élément de additional_taxes contient :

ParamètreTypeDescriptionObligatoire
tax_codestringCode de la taxe (ex: "TAR")
tax_labelstring|nullLibellé de la taxe (ex: “Taxe sur les activités rémunérées”)
tax_amountnumberMontant de la taxe
tax_ratenumber|nullTaux de la taxe (en pourcentage)

Paiement

ParamètreTypeDescriptionObligatoire
currencystringCode de devise (XAF, USD)
payment_methodstringMéthode de paiement (bank_transfer, card, cash, mobile_money, cheque)
payment_referencestring|nullRéférence du paiement
payment_datestring|nullDate du paiement au format ISO 8601

Autres champs optionnels : notes (texte libre).

Champs générés par le SFEC (ne pas envoyer)

Les champs de certificationcertification_number, signature, short_signature, qr_code, certification_date, invoice_number — sont générés automatiquement par le SFEC et renvoyés dans la réponse. Ne les incluez pas dans votre requête.

Articles (items)

Chaque article de la facture doit contenir :

ParamètreTypeDescriptionObligatoire
designationstringNom du produit ou service
classification_codestring|nullCode de classification (C01, S01, etc.)
typestringType d’article (product, service)
unit_pricenumberPrix unitaire hors taxe
quantitynumberQuantité vendue
subtotalnumberMontant HT pour l’article
discount_amountnumberRemise appliquée sur cet article
discount_typestringType de remise (fixed, percentage)
net_amountnumberMontant net après remise (subtotal − discount_amount)
tax_ratestringTaux de TVA applicable (0, 18, etc.)
tax_amountnumberMontant de taxe pour cet article
total_amountnumberMontant TTC de la ligne

Exemple de requête

{ "invoice_id": "INV-2025-12", "taxpayer_niu": "M25000000561080T", "invoice_type": "salesInvoice", "invoice_subject": "Vente matériel informatique", "invoice_due_date": "2025-02-15T00:00:00Z", "reference_invoice_id": null, "sciet": "SFEC-API-001", "subtotal": 13280, "total_tax_t_amount": 2390.4, "total_tax_r_amount": 0, "total_exempt_amount": 0, "total_tax_amount": 2390.4, "discount_amount": 0, "amount_due": 15670.4, "total_line_discount_amount": 2000, "additional_cent_tax": 0, "electronic_stamp_duty": 0, "total_amount": 15670.4, "currency": "XAF", "recipient_type": "business", "recipient_name": "Test Buyer Company", "recipient_niu": "BUYER123456789", "recipient_rccm": "CG-BZV-2025-B-001", "recipient_address": "123 Buyer Street, Brazzaville", "recipient_phone": "+237123456789", "recipient_email": "contact@buyer.com", "is_recipient_taxable": true, "payment_method": "bank_transfer", "payment_reference": "PAY-2025-001", "payment_date": "2025-01-15T14:30:00Z", "notes": "Facture API pour test d'intégration", "additional_taxes": [ { "tax_code": "TAR", "tax_label": "Taxe sur les activités rémunérées", "tax_amount": 500, "tax_rate": 2.5 } ], "items": [ { "designation": "iPhone 16 Pro", "classification_code": "C01", "discount_amount": 1000, "discount_type": "fixed", "net_amount": 3320, "quantity": 6, "subtotal": 4320, "tax_amount": 597.6, "tax_rate": "18", "total_amount": 3917.6, "type": "product", "unit_price": 720 }, { "designation": "MacBook Pro M3", "classification_code": "C01", "discount_amount": 1000, "discount_type": "fixed", "net_amount": 7960, "quantity": 6, "subtotal": 8960, "tax_amount": 1792.8, "tax_rate": "18", "total_amount": 11752.8, "type": "product", "unit_price": 1493.33 } ] }

Réponse

Réponse de succès (201 Created)

ParamètreTypeDescription
certification_numberstringNuméro de certification SFEC officiel unique
signaturestringSignature cryptographique complète
short_signaturestringVersion courte de la signature pour affichage
invoice_numberstringNuméro de facture confirmé par le système
certification_datestringDate/heure de certification au format ISO 8601
identifierstringRéférence interne de la facture SFEC
qr_codestringCode QR au format base64

Exemple de réponse

{ "certification_number": "SFEC-API-2025-0000123456", "invoice_number": "INV-2025-12", "certification_date": "2025-01-15T10:30:00.000Z", "signature": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...", "short_signature": "SFEC-API-2025-001", "identifier": "SFEC-REF-2025-0000123456", "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEA..." }

Codes d’erreur

CodeDescription
400Données invalides (format incorrect, champs manquants, incohérences dans les totaux)
401Clé d’authentification invalide ou manquante
422Erreur de validation des données métier (règles ou incohérences des montants)
409Facture déjà certifiée (numéro de facture en doublon)
500Erreur interne du serveur

⚠️

Assurez-vous que tous les montants sont cohérents et que les totaux correspondent à la somme des articles avant soumission.


Étape suivante → Lister les factures