Documentation de l'API
Bac à sable · Dernière mise à jour : 2 novembre 2026
Le bac à sable est branché sur le serveur de test e-MECeF de la DGI. Les factures qu'il produit sont des factures de test : elles n'ont aucune valeur fiscale.
Avant de commencer
Il vous faut deux choses :
- Une clé API Tampa. Remplissez le formulaire d'inscription : la clé vous est envoyée par e-mail tout de suite. La clé commence par
tk_et n'est affichée qu'une fois : gardez-la côté serveur, jamais dans une application mobile ou une page web. - Un jeton e-MECeF de test pour l'entreprise qui facture. Il s'obtient sur le portail développeur de la DGI (developper.impots.bj), avec l'IFU de l'entreprise. Tampa vérifie ce jeton auprès de la DGI, le chiffre et ne le renvoie jamais.
Adresse et clé
| Adresse du bac à sable | https://sandbox.otampa.com |
|---|---|
| Authentification | En-tête Authorization: Bearer tk_… sur chaque appel |
| Format | JSON en UTF-8. Montants en FCFA, entiers, TTC. |
| Référence interactive | sandbox.otampa.com/docs (schémas complets, essai depuis le navigateur) |
Dans les exemples, la clé est lue dans la variable d'environnement TAMPA_API_KEY : définissez-la dans votre terminal plutôt que de coller la clé dans vos commandes.
Un compte Tampa peut gérer plusieurs entreprises, chacune avec son IFU et son jeton. Une entreprise n'est visible que par le compte qui l'a ajoutée.
1. Ajouter une entreprise
Enregistrez une fois chaque entreprise qui facture. Tampa vérifie le jeton auprès de la DGI et contrôle qu'il correspond bien à l'IFU.
curl -X POST https://sandbox.otampa.com/taxpayers \
-H "Authorization: Bearer $TAMPA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ifu": "0000000000000",
"name": "Boutique Exemple",
"emecef_token": "JETON_E_MECEF_DE_TEST",
"address": "Rue 123, Cotonou",
"city": "Cotonou",
"phone": "+229 01 00 00 00 00",
"email": "contact@boutique-exemple.bj"
}'
Réponse 201 : notez l'id, il sert à facturer pour cette entreprise.
{
"id": "3f1c2a8e-…",
"ifu": "0000000000000",
"name": "Boutique Exemple",
"nim": "TS01…",
"token_valid_until": "2027-…",
…
}
Seuls ifu (13 chiffres), name et emecef_token sont obligatoires. Les coordonnées apparaissent sur le PDF.
2. Certifier une facture
Tampa transmet la facture à la DGI, vérifie le total calculé par la DGI, puis confirme. La réponse arrive quand la facture est certifiée (quelques secondes).
curl -X POST https://sandbox.otampa.com/invoices \
-H "Authorization: Bearer $TAMPA_API_KEY" \
-H "Idempotency-Key: commande-0001" \
-H "Content-Type: application/json" \
-d '{
"taxpayer_id": "3f1c2a8e-…",
"invoice": {
"type": "FV",
"operator": { "name": "Caisse 1" },
"client": { "name": "Client Exemple", "contact": "+229 01 00 00 00 01" },
"items": [
{ "name": "Sac de riz 25 kg", "price": 11800, "quantity": 2, "taxGroup": "B" },
{ "name": "Livraison", "price": 1000, "quantity": 1, "taxGroup": "B" }
],
"payment": [ { "name": "MOBILEMONEY", "amount": 24600 } ]
}
}'
Réponse 201 (extrait) :
{
"id": "9b0d…",
"status": "certified",
"totals": { "uid": "…", "total": 24600, … },
"security": {
"code_mecef_dgi": "TEST-XXXX-XXXX-XXXX-XXXX-XXXX",
"counters": "…",
"nim": "TS01…",
"date_time": "…",
"qr_code": "F;TS01…"
},
"pdf_url": "/invoices/9b0d…/pdf"
}
La clé d'idempotence
L'en-tête Idempotency-Key est obligatoire : une valeur unique par facture, par exemple votre numéro de commande. Si la connexion coupe, renvoyez la même requête avec la même clé : Tampa renvoie la facture déjà certifiée (code 200) au lieu d'en créer une deuxième.
Les champs de la facture
| Champ | Obligatoire | Contenu |
|---|---|---|
type | oui | FV, EV, FA ou EA (voir plus bas) |
items | oui | Au moins une ligne : name, price (prix unitaire TTC), quantity, taxGroup. Facultatifs : code, taxSpecific, originalPrice, priceModification. |
operator | oui | name du vendeur ou de la caisse, id facultatif |
client | non | ifu, name, contact, address |
payment | non | Liste de { "name": "…", "amount": … } |
aib | non | A (1 %) ou B (5 %) |
reference | pour un avoir | Code MECeF/DGI (24 caractères) de la facture d'origine |
L'IFU du vendeur n'est pas à envoyer : Tampa le prend dans l'entreprise désignée par taxpayer_id.
3. Récupérer le PDF
curl https://sandbox.otampa.com/invoices/9b0d…/pdf \
-H "Authorization: Bearer $TAMPA_API_KEY" \
-o facture.pdf
Le PDF reprend les lignes, les totaux par groupe de taxe, le code MECeF/DGI, les compteurs et le QR code. Il est généré à la demande pour une facture certifiée.
Toutes les routes
| Méthode et chemin | Rôle |
|---|---|
POST /taxpayers | Ajouter une entreprise (jeton vérifié auprès de la DGI) |
GET /taxpayers | Lister vos entreprises |
GET /taxpayers/{id} | Lire une entreprise |
PATCH /taxpayers/{id} | Modifier ses coordonnées |
PUT /taxpayers/{id}/token | Remplacer son jeton e-MECeF (expiré ou renouvelé) |
DELETE /taxpayers/{id} | Supprimer une entreprise sans facture |
POST /invoices | Certifier une facture |
GET /invoices | Lister vos factures (taxpayer_id, limit jusqu'à 100, offset) |
GET /invoices/{id} | Lire une facture |
GET /invoices/{id}/pdf | Télécharger le PDF |
GET /health | État du service (sans clé) |
Codes DGI
Types de facture
FV | Facture de vente |
EV | Facture de vente à l'exportation |
FA | Facture d'avoir (avec reference) |
EA | Facture d'avoir à l'exportation (avec reference) |
Groupes de taxe (taxGroup)
A | Exonéré |
B | Taxable (TVA 18 %) |
C | Exportation de produits taxables |
D | TVA régime d'exception |
E | Régime fiscal TPS |
F | Réservé |
Le choix du groupe dépend de la situation fiscale du vendeur et du produit : en cas de doute, demandez à son comptable.
Moyens de paiement (payment[].name)
ESPECES, VIREMENT, CARTEBANCAIRE, MOBILEMONEY, CHEQUES, CREDIT, AUTRE.
Erreurs
Chaque erreur renvoie un detail en français et un request_id. Citez ce request_id si vous écrivez au support.
{ "detail": "Clé API invalide ou révoquée.", "request_id": "…" }
| Code | Signification | Que faire |
|---|---|---|
400 | En-tête Idempotency-Key absent | L'ajouter (1 à 255 caractères) |
401 | Clé API absente, invalide ou révoquée | Vérifier l'en-tête Authorization |
404 | Entreprise ou facture introuvable pour votre compte | Vérifier l'identifiant |
409 | Entreprise déjà enregistrée, certification en cours, ou facture non certifiée (PDF) | Lire le detail ; pour « en cours », réessayer avec la même clé |
422 | Données invalides, facture refusée par la DGI (detail.code et detail.description), jeton refusé, totaux divergents, ou clé d'idempotence déjà utilisée pour une autre facture | Corriger la demande ; pour un jeton refusé, utiliser PUT /taxpayers/{id}/token |
502 | Confirmation incertaine : la DGI a peut-être enregistré la facture | Vérifier sur le portail e-MECeF avant de refaire la facture avec une nouvelle clé |
503 | DGI injoignable | Réessayer plus tard avec la même clé d'idempotence |
Besoin d'aide ?
Question technique, clé API ou démonstration : contact@otampa.com. L'utilisation du bac à sable est soumise aux conditions d'utilisation.