Référence

Tout ce que l'API accepte et renvoie. Schémas détaillés dans la référence interactive.

Toutes les routes

Méthode et cheminRôle
POST/taxpayersAjouter une entreprise (jeton vérifié auprès de la DGI)
GET/taxpayersLister vos entreprises
GET/taxpayers/{id}Lire une entreprise
PATCH/taxpayers/{id}Modifier ses coordonnées
PUT/taxpayers/{id}/tokenRemplacer son jeton e-MECeF (expiré ou renouvelé)
DELETE/taxpayers/{id}Supprimer une entreprise sans facture
POST/invoicesCertifier une facture
GET/invoicesLister vos factures (taxpayer_id, limit jusqu'à 100, offset)
GET/invoices/{id}Lire une facture
GET/invoices/{id}/pdfTélécharger le PDF
GET/healthÉtat du service (sans clé)

Lister les factures d'une entreprise, les plus récentes d'abord :

curl "https://sandbox.otampa.com/invoices?taxpayer_id=3f1c2a8e-5b7d-4c1e-9a2f-6d8e0b4c7a19&limit=20" \
  -H "Authorization: Bearer $TAMPA_API_KEY"
import os

import requests

response = requests.get(
    "https://sandbox.otampa.com/invoices",
    headers={
        "Authorization": f"Bearer {os.environ['TAMPA_API_KEY']}",
    },
    params={"taxpayer_id": "3f1c2a8e-5b7d-4c1e-9a2f-6d8e0b4c7a19", "limit": "20"},
    timeout=120,
)
print(response.status_code, response.json())
const response = await fetch("https://sandbox.otampa.com/invoices?taxpayer_id=3f1c2a8e-5b7d-4c1e-9a2f-6d8e0b4c7a19&limit=20", {
  headers: {
    Authorization: `Bearer ${process.env.TAMPA_API_KEY}`,
  },
});
console.log(response.status, await response.json());
<?php
$ch = curl_init("https://sandbox.otampa.com/invoices?taxpayer_id=3f1c2a8e-5b7d-4c1e-9a2f-6d8e0b4c7a19&limit=20");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("TAMPA_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $body, "\n";

Le détail de chaque champ est dans la référence interactive.

Champs d'une facture

ChampObligatoireContenu
typeouiFV, EV, FA ou EA (voir Codes DGI)
itemsouiAu moins une ligne : name, price (prix unitaire TTC), quantity, taxGroup. Facultatifs : code, taxSpecific, originalPrice, priceModification.
operatorouiname du vendeur ou de la caisse, id facultatif
clientnonifu, name, contact, address
paymentnonListe de { "name": "…", "amount": … }
aibnonA (1 %) ou B (5 %), voir Facture avec AIB
referencepour un avoirCode MECeF/DGI de la facture d'origine, sans tirets (24 caractères)

L'IFU du vendeur n'est pas à envoyer : Tampa le prend dans l'entreprise désignée par taxpayer_id.

Codes DGI

Types de facture

FVFacture de vente
EVFacture de vente à l'exportation
FAFacture d'avoir (avec reference)
EAFacture d'avoir à l'exportation (avec reference)

Groupes de taxe (taxGroup)

AExonéré
BTaxable (TVA 18 %)
CExportation de produits taxables
DTVA régime d'exception
ERégime fiscal TPS
FRé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": "5c2e9f0a7b1d4e38"
}

Quand la DGI refuse une facture, detail donne son code et son message :

{
  "detail": {
    "code": "11",
    "description": "(texte de la DGI, en français)"
  },
  "request_id": "8a1f3c5e7d9b2046"
}
CodeSignificationQue faire
400En-tête Idempotency-Key absentL'ajouter (1 à 255 caractères)
401Clé API absente, invalide ou révoquéeVérifier l'en-tête Authorization
404Entreprise ou facture introuvable pour votre compteVérifier l'identifiant
409Entreprise déjà enregistrée, certification en cours, confirmation incertaine, ou facture non certifiée (PDF)Lire le detail ; pour « en cours », réessayer avec la même clé
422Donné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 factureCorriger la demande ; pour un jeton refusé, utiliser PUT /taxpayers/{id}/token
502Confirmation incertaine : la DGI a peut-être enregistré la factureVérifier sur le portail e-MECeF avant de refaire la facture avec une nouvelle clé
503DGI injoignableRéessayer plus tard avec la même clé d'idempotence

Avant la production

La production Tampa ouvrira après la validation de la DGI. Pour être prêt le jour venu :

Changements

3 nov. 2026Exemples en Python, JavaScript et PHP, collection Postman, fichier OpenAPI, guides avoir, export, AIB et reprises.
2 nov. 2026Documentation publique et inscription en libre-service au bac à sable.
30 oct. 2026Ouverture du bac à sable sur le serveur de test de la DGI.

Une question ? contact@otampa.com