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.
https://www.facturenormalisee.com/api/v1 avec les deux clés.Les deux clés
| Clé | À quoi elle sert | Où la mettre |
|---|---|---|
Publiquefn_pub_… | Elle nomme votre logiciel. Elle peut apparaître dans un journal. | En-tête X-Cle-Publique |
Secrètefn_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
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.
| Droit | Permet |
|---|---|
compte.lire | Lire l’entreprise et les droits |
referentiels.lire | Lire les codes DGI |
points.lire | Lire les points de vente |
clients.lire / clients.ecrire | Lire, ou créer et modifier les clients |
articles.lire / articles.ecrire | Lire, ou créer et modifier les articles |
factures.lire / factures.ecrire | Lire le PDF, ou créer, renvoyer et annuler une facture |
Ce qui limite les factures
Lire des données
| Adresse | Vous obtenez |
|---|---|
GET /api/v1/referentiels | Taxes A à P, types de facture, de client, d’article, paiements, natures d’avoir |
GET /api/v1/points-de-vente | Les points, leur numéro, et si le jeton est présent |
GET /api/v1/clients | Les clients, page par page. Ajoutez ?recherche= |
GET /api/v1/articles | Les articles. /articles/code/RIZ25 en cherche un par code |
GET /api/v1/factures | Les factures, 100 par page. Filtres : recherche, statut, type, point, dates |
GET /api/v1/compte | L’entreprise, l’abonnement, les factures restantes du mois et le stock payé |
GET /api/v1/factures/120 | Le détail d’une facture, avec le motif erreur si l’envoi n’est pas confirmé |
GET /api/v1/factures/120/avoir | Les quantités encore disponibles pour un avoir, et la référence DEF/DGI |
GET /api/v1/factures/120/pdf | Le 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.
{
"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.
| Nature | Quand |
|---|---|
COR | Correction avant paiement |
RAN | Annulation avant paiement |
RAM | Reprise après paiement |
RRR | Remise. 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
| Code | Sens |
|---|---|
| 400 | Donnée refusée, ou facture refusée par la DGI. Le quota de cette facture est libéré |
| 401 | Clé absente ou refusée |
| 403 | API fermée, droit manquant, abonnement inactif, essai terminé, quota du mois épuisé |
| 404 | Introuvable, ou appartenant à une autre entreprise |
| 409 | Doublon : code article, NIF, trop de clés |
| 429 | Trop d’appels cette heure, ou trop de créations cette minute. Le quota d’abonnement, lui, répond 403 |
| 503 | Plateforme en maintenance |