Facture NormaliséeDocumentation pour les logiciels Connexion

Relier votre logiciel

Cette page explique comment une caisse, un ERP ou une comptabilité crée des factures normalisées au nom d’une entreprise. Le logiciel parle à Facture Normalisée. La plateforme parle à la DGI.

1
Dans l’espace entreprise, menu Système → API, créez une clé. Vous obtenez une clé publique et une clé secrète.
2
Gardez la clé secrète comme un mot de passe. Le bouton Afficher, dans Système → API, la montre à nouveau après le mot de passe du compte.
3
Appelez https://www.facturenormalisee.com/api/v1 avec les deux clés.

Les deux clés

CléÀ quoi elle sertOù la mettre
Publique
fn_pub_…
Elle nomme votre logiciel. Elle peut apparaître dans un journal.En-tête X-Cle-Publique
Secrète
fn_sec_…
Elle prouve que l’appel vient de vous.En-tête Authorization: Bearer

Ce n’est pas une adresse e-mail, ni le jeton e-MCF du point de vente, ni le mot de passe d’un utilisateur.

Faire un appel

Vérifier que les clés fonctionnent
curl https://www.facturenormalisee.com/api/v1/compte \
  -H "X-Cle-Publique: fn_pub_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Authorization: Bearer fn_sec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

La réponse donne le nom de l’entreprise, son NIF, et les droits de la clé.

Droits

Chaque clé n’a que les actions cochées à sa création. Sans le droit, la réponse est 403.

DroitPermet
compte.lireLire l’entreprise et les droits
referentiels.lireLire les codes DGI
points.lireLire les points de vente
clients.lire / clients.ecrireLire, ou créer et modifier les clients
articles.lire / articles.ecrireLire, ou créer et modifier les articles
factures.lire / factures.ecrireLire le PDF, ou créer, renvoyer et annuler une facture

Ce qui limite les factures

L’abonnementSans abonnement actif, aucune facture. Le forfait peut limiter le nombre de factures du mois et le nombre de points de vente. Dix clés ne donnent pas dix factures : elles partagent le même abonnement.
Le plafond d’appelsL’administrateur peut limiter les appels par heure et les factures par minute. Au-delà, la réponse est 429. Ce plafond est commun, ou propre à une entreprise.
La DGIAu plus 10 factures peuvent attendre une confirmation. Passé 2 minutes, la demande expire. La plateforme confirme dans ce délai.
Le jeton du point de ventePour une facture normalisée, le point de vente doit avoir un jeton e-MCF valide. Le jeton n’est jamais renvoyé par l’API.

Lire des données

AdresseVous obtenez
GET /api/v1/referentielsTaxes A à P, types de facture, de client, d’article, paiements, natures d’avoir
GET /api/v1/points-de-venteLes points, leur numéro, et si le jeton est présent
GET /api/v1/clientsLes clients, page par page. Ajoutez ?recherche=
GET /api/v1/articlesLes articles. /articles/code/RIZ25 en cherche un par code
GET /api/v1/facturesLes factures, 100 par page. Filtres : recherche, statut, type, point, dates
GET /api/v1/compteL’entreprise, l’abonnement, les factures restantes du mois et le stock payé
GET /api/v1/factures/120Le détail d’une facture, avec le motif erreur si l’envoi n’est pas confirmé
GET /api/v1/factures/120/avoirLes quantités encore disponibles pour un avoir, et la référence DEF/DGI
GET /api/v1/factures/120/pdfLe PDF. ?duplicata=true pour une copie. ?ticket=true pour le ticket 80 mm (TICKET-). ?ticket=true&format=58 pour le ticket court (TICKET58-). L’imprimante se règle dans le logiciel de la caisse.

Clients et articles

Un client personne morale a un nom et un NIF de 9 caractères. Une personne physique peut rester sans NIF. Une ambassade (AO) a besoin d’une référence de document.

{
  "typeClient": "PM",
  "nom": "ACME RDC",
  "nif": "A1234567B"
}

Un article a un code, un nom, un type (BIE, SER ou TAX), un groupe de A à P, et un prix ht ou ttc. Le type TAX n’existe que pour les groupes L et N. Le groupe A hors champ impose le code HORS CHAMP.

Créer une facture

POST /api/v1/factures. Le total envoyé à la DGI reste en francs congolais. Le dollar, si vous le demandez avec "curCode": "USD", est seulement indicatif.

Exemple
{
  "pointDeVenteId": 3,
  "operateurNom": "Caisse 1",
  "typeFacture": "FV",
  "modePrix": "ttc",
  "normaliser": true,
  "client": { "id": 15 },
  "lignes": [{ "articleId": 42, "quantite": 2 }],
  "paiements": [{ "mode": "ESPECES", "montant": 116000 }]
}

Types : FV vente, FT acompte, FA avoir, EV exportation, ET acompte export, EA avoir export.

Paiements : ESPECES, VIREMENT, CARTEBANCAIRE, MOBILEMONEY, CHEQUES, CREDIT, AUTRE. Plusieurs paiements doivent sommer le total TTC. Un seul paiement est ajusté à ce total.

normaliser: true envoie la facture à e-MCF. La réponse contient le statut, le champ erreur et, après confirmation, le code DEF/DGI. Un refus définitif répond 400 et libère le quota. Une panne passagère répond 200 avec erreur : ne créez pas une autre facture. POST /api/v1/factures/120/renvoyer relance cet envoi. POST /api/v1/factures/120/annuler annule une facture non confirmée et rend son quota. normaliser: false enregistre un brouillon. Pour le reprendre, renvoyez le même corps avec son factureId. Le PDF porte aussi le QR, le NIM, l’ISF et les compteurs. L’ISF est celui de la plateforme : vous ne l’envoyez pas.

Créer un avoir

Même adresse, type FA ou EA.

NatureQuand
CORCorrection avant paiement
RANAnnulation avant paiement
RAMReprise après paiement
RRRRemise. Sans facture d’origine, la référence envoyée est RRR

Appelez d’abord GET /api/v1/factures/120/avoir. Il donne le type, la référence, le point, l’opérateur, et la quantité encore disponible sur chaque ligne. Pour COR, RAN et RAM, indiquez le code DEF/DGI de la facture d’origine, avec ou sans tirets. La plateforme envoie les 24 caractères demandés par e-MCF. La description fait au plus 20 caractères.

Webhook

L’API sert à interroger la plateforme. Le webhook fait l’inverse : la plateforme prévient votre logiciel dès qu’un événement concerne votre entreprise. Créez-le dans Système → API, onglet Webhooks. Dix au maximum. L’adresse commence par https://.

Le secret s’affiche à la création, puis à nouveau avec Afficher et le mot de passe du compte, comme une clé API. Chaque message est un POST. Son corps est signé en SHA-256 avec ce secret. La signature est dans l’en-tête X-Webhook-Signature. Vous ne recevez pas les factures des autres entreprises.

Événements : facture créée, facture normalisée, facture expirée, échec d’envoi DGI, abonnement expiré, point de vente inactif, jeton e-MCF expiré.

{
  "event": "facture.validee",
  "timestamp": "2026-10-22T11:00:00.000Z",
  "data": { "factureId": 12, "numero": "2026/0001", "entrepriseId": 7 }
}

Erreurs

CodeSens
400Donnée refusée, ou facture refusée par la DGI. Le quota de cette facture est libéré
401Clé absente ou refusée
403API fermée, droit manquant, abonnement inactif, essai terminé, quota du mois épuisé
404Introuvable, ou appartenant à une autre entreprise
409Doublon : code article, NIF, trop de clés
429Trop d’appels cette heure, ou trop de créations cette minute. Le quota d’abonnement, lui, répond 403
503Plateforme en maintenance