API douanière DOM-TOM
L'API REST qui calcule droits de douane, octroi de mer et TVA pour La Réunion, la Guadeloupe, la Martinique, la Guyane et Mayotte — par code HS, pour un article ou un envoi de 50 lignes.
Pourquoi une API douane pour les DOM-TOM ?
Calculer les taxes d'importation vers les Outre-mer est complexe : chaque territoire vote ses propres taux d'octroi de mer, produit par produit, la TVA varie de 0 % à 8,5 % selon la destination, et une marchandise venue de l'Union européenne ne paie pas les droits de douane d'un pays tiers. Vous envoyez le prix, le code HS, le territoire, l'origine de la marchandise et le profil de l'acheteur : l'API renvoie le détail des taxes.
E-commerce & marketplaces
Affichez les taxes au panier pour vos clients ultramarins : moins de colis refusés à la livraison, moins de SAV. Le calcul se fait en une requête, depuis votre serveur (la clé ne doit jamais être dans le navigateur).
Transitaires & logistique
Automatisez vos cotations : envoyez jusqu'à 50 lignes d'un envoi par appel et récupérez octroi de mer, OMR, droits de douane, TVA et total pour chaque marchandise et pour l'envoi.
Transitaire ou déclarant en douane ? Essai sur 10 de vos factures →ERP & facturation
Intégrez les taxes des DOM dans vos devis et factures. La recherche de codes HS en français aide vos équipes à trouver la nomenclature douanière.
Comparateurs & fintech
Enrichissez vos produits d'un coût de revient rendu DOM. Les taux sont maintenus à jour à partir des sources officielles : délibérations des collectivités, RITA (douane) et TARIC (Union européenne).
Démarrage rapide
1. Créez un compte et souscrivez le plan Premium (accès API inclus)
2. Générez votre clé API depuis le tableau de bord
3. Envoyez vos requêtes depuis votre serveur, avec l'en-tête X-API-Key
curl -X POST https://tropicadouane.com/api/v1/public/calculate \
-H "Content-Type: application/json" \
-H "X-API-Key: td_votre_cle_ici" \
-d '{
"product_price": 100,
"shipping_cost": 15,
"hs_code": "6109.10",
"territory": "REU",
"origin": "EU",
"recipient_profile": "individual"
}'Réponse : 18 € de taxes (octroi de mer 5 €, OMR 3 €, TVA 10 €, pas de droit de douane pour une marchandise venue de l'UE), 133 € au total. Le même t-shirt expédié de Chine (origin NON_EU) à un particulier : forfait de 3 € par article au lieu du droit de douane (plus 2 € de frais de traitement de l'UE depuis le 1er novembre 2026) ; à un professionnel : droit de douane de 12 %.
Authentification
Chaque requête doit inclure votre clé API dans l'en-tête HTTP :
X-API-Key: td_XXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX- Les clés commencent par
td_. La clé n'est montrée qu'à sa création ; ne la partagez jamais. - Appelez l'API depuis votre serveur : les navigateurs sont refusés pour les autres domaines (CORS), pour que la clé ne soit jamais visible de vos visiteurs.
- Une clé révoquée depuis le tableau de bord est refusée aussitôt (401).
Champs du calcul
Corps JSON, montants en euros. Les trois champs de l'envoi (territory, origin, recipient_profile) sont obligatoires : ils changent fortement le montant, l'API ne les devine pas. Un champ inconnu (faute de frappe) est ignoré et signalé dans warnings. « lot : envoi » : champ donné une fois pour tout le lot ; « lot : ligne » : dans chaque ligne de « items ».
product_priceobligatoirelot : ligne- Prix d'un exemplaire, en euros (nombre, point décimal : 120.5).
hs_codeobligatoirelot : ligne- Code douanier (code HS / NC), en texte entre guillemets : 4 à 10 chiffres, avec ou sans points ("6109.10", "6109100010"). Un nombre JSON est refusé (6109.10 deviendrait 6109.1).
territoryobligatoirelot : envoi- Destination : REU, GLP, MTQ, GUF ou MYT (minuscules acceptées).
originobligatoirelot : envoi- EU : marchandise expédiée de métropole ou d'un pays de l'Union européenne (pas de droit de douane). NON_EU : expédiée d'ailleurs (Chine, États-Unis…).
recipient_profileobligatoirelot : envoi- individual (particulier : forfait de 3 € et franchises des petits colis), business (professionnel), gift (cadeau entre particuliers).
quantityfacultatiflot : ligne- Nombre d'exemplaires ou d'unités, 1 par défaut ; décimale possible (0.5 kg). Les montants rendus portent sur la ligne entière.
shipping_costfacultatiflot : envoi- Port jusqu'au territoire, en euros (0 par défaut). Dans un lot : port de tout l'envoi, réparti selon la valeur des lignes.
insurancefacultatiflot : envoi- Assurance, en euros (0 par défaut). Dans un lot : répartie comme le port.
pays_originefacultatiflot : envoi ou ligne- Hors UE : pays d'origine (2 lettres : CN, VN…). Sert aux préférences tarifaires et aux droits antidumping.
preuve_originefacultatiflot : envoi ou ligne- true si le vendeur fournit la preuve d'origine : la préférence tarifaire du pays est alors appliquée.
carrier_idfacultatiflot : envoi- Transporteur, pour ses frais de dédouanement : champ « id » de la liste GET https://tropicadouane.com/api/v1/carriers (sans clé).
weight_kgfacultatif- Calcul d'un article seulement : poids, pour les frais de certains transporteurs.
descriptionfacultatiflot : ligne- Lot seulement : libellé de la ligne, renvoyé tel quel (200 caractères au plus).
Principaux champs de la réponse (« calculation ») : valeur_en_douane (prix, port et assurance, arrondis à l'euro), octroi_mer, octroi_mer_regional, droits_douane (forfait de 3 € compris), tva, total_taxes (taxes perçues par la douane), carrier_fee (frais du transporteur), total_with_product (coût total, marchandise comprise). Les détails (franchises, préférence, exonérations, taux à préciser) sont dans les champs *_detail.
Territoires supportés
La Réunion
REUGuadeloupe
GLPMartinique
MTQGuyane
GUFMayotte
MYTEndpoints
Taxes d'un type d'article, en « quantity » exemplaires (1 par défaut). Exemple : un t-shirt en coton à 100 €, 15 € de port, acheté en métropole par un particulier de La Réunion.
Corps de la requête
{
"product_price": 100,
"shipping_cost": 15,
"hs_code": "6109.10",
"territory": "REU",
"origin": "EU",
"recipient_profile": "individual"
}Réponse (réelle, raccourcie : « ... »)
{
"success": true,
"data": {
"input": {
"product_price": 100, "shipping_cost": 15, "insurance": 0, "quantity": 1,
"hs_code": "6109.10", "hs_description": "T-shirts, maillots en coton",
"territory": "REU", "origin": "EU", "recipient_profile": "individual",
"pays_origine": null, "preuve_origine": false, ...
},
"calculation": {
"base_caf": 115,
"valeur_en_douane": 115,
"octroi_mer": 5,
"octroi_mer_regional": 3,
"droits_douane": 0,
"frais_traitement_ue": 0,
"taxe_petits_colis": 0,
"antidumping": 0,
"accises": 0,
"base_tva": 115,
"tva": 10,
"droits_port": 0,
"carrier_fee": 0,
"total_taxes": 18,
"total_taxes_and_fees": 18,
"total_with_product": 133,
...
},
"rates_applied": { "om_rate": 4, "omr_rate": 2.5, "tva_rate": 8.5, "effective_date": "2026-10-28", ... },
"carrier": null,
"warnings": [],
"disclaimer": "Estimation non contractuelle. Les taux réels peuvent varier."
}
}Jusqu'à 50 lignes d'un même envoi, comme le devis multi-lignes du site. Le territoire, l'origine, le profil, le port, l'assurance et le transporteur se donnent une fois pour tout le lot. Le port et l'assurance sont répartis entre les lignes selon leur valeur ; les seuils (22 €, 150 €…) portent sur la valeur de tout l'envoi ; les frais du transporteur sont comptés une fois. Un lot compte pour un appel. Exemple : t-shirts et smartphones achetés en Chine par une entreprise de La Réunion.
Corps de la requête
{
"territory": "REU",
"origin": "NON_EU",
"recipient_profile": "business",
"pays_origine": "CN",
"shipping_cost": 120,
"insurance": 10,
"items": [
{ "hs_code": "6109.10", "product_price": 4, "quantity": 200, "description": "T-shirts coton" },
{ "hs_code": "8517.13", "product_price": 180, "quantity": 10, "description": "Smartphones" }
]
}Réponse (réelle, raccourcie : « ... »)
{
"success": true,
"data": {
"territory": "REU", "origin": "NON_EU", "recipient_profile": "business",
"shipping_cost": 120, "insurance": 10, "carrier_id": null,
"total": 2, "calculated": 2, "failed": 0,
"lines": [
{ "index": 0, "description": "T-shirts coton", "hs_code": "6109.10", "quantity": 200, "unit_price": 4,
"calculation": { "base_caf": 840, "octroi_mer": 34, "octroi_mer_regional": 21,
"droits_douane": 101, "tva": 80, "total_taxes": 236, ... },
"rates_applied": { ... }, "line_total_taxes": 236, "line_total_with_product": 1076 },
{ "index": 1, "description": "Smartphones", "hs_code": "8517.13", "quantity": 10, "unit_price": 180,
"calculation": { "base_caf": 1890, "octroi_mer": 76, "octroi_mer_regional": 47,
"droits_douane": 0, "tva": 161, "total_taxes": 284, ... },
"rates_applied": { ... }, "line_total_taxes": 284, "line_total_with_product": 2174 }
],
"grand_total_taxes": 520,
"grand_total_carrier_fees": 0,
"grand_total_with_product": 3250,
"customs_rounding": { "base_taxation": 2831, "om": 110, "omr": 68, "droits_douane": 101,
"frais_traitement_ue": 0, "taxe_petits_colis": 0, "tva": 241, "total_taxes": 520 },
"warnings": [],
"disclaimer": "Estimation non contractuelle. Les taux réels peuvent varier."
}
}
// Ligne non calculée : { "index": 2, ..., "error": "Code HS \"abc\" non trouvé" }, sans calculation.
// Elle n'entre pas dans les totaux ; "failed" la compte.Plans & limites
Standard
29 €/mois
API : Pas d'accès à l'API
- Simulateur web complet (3 000 calculs par mois)
- Historique et exports PDF
Premium
99 €/mois
API : 30 requêtes par minute, 30 000 appels réussis par mois
- Accès à l'API (clés X-API-Key, 5 au plus)
- Calcul d'un article, lot de 50 lignes, recherche de codes
- Simulateur web complet (30 000 calculs par mois)
- Par minute : 30 requêtes par adresse IP, limite commune à toute l'API. En-têtes de chaque réponse :
RateLimit-Limit,RateLimit-Remaining,RateLimit-Reset(secondes avant la remise à zéro). - Par mois : 30 000 appels réussis (réponse 200) pour toutes les clés du compte, remis à zéro le 1er du mois. Un lot compte pour un appel ; un appel refusé (saisie invalide, limite) ne compte pas. En-têtes :
X-Quota-Limit,X-Quota-Remaining,X-Quota-Reset(prochain 1er du mois à minuit, heure de La Réunion, écrit en UTC : « 2026-10-31T20:00:00.000Z » pour le 1er novembre). - Lot : 50 lignes au plus par appel.
- Le quota de l'API est distinct des calculs faits sur le site.
Gestion des erreurs
Toute erreur a la même forme : success vaut false, error est un texte lisible ; s'y ajoutent errors (détail par champ, saisie invalide) ou code (limites).
{
"success": false,
"error": "origin obligatoire : EU (marchandise expédiée de métropole ou de l'UE) ou NON_EU (hors UE)",
"errors": [ { "field": "origin", "message": "origin obligatoire : EU (...) ou NON_EU (hors UE)" } ]
}- 400
- Saisie invalide : champ obligatoire absent ou valeur refusée (le message dit lequel), JSON mal formé, code HS ou territoire inconnu.
- Lisez « error » ; « errors » donne le détail par champ.
- 401
- Clé absente, au mauvais format, inconnue ou révoquée.
- Vérifiez l'en-tête X-API-Key.
- 403
- Formule sans accès à l'API, ou compte désactivé.
- Vérifiez votre abonnement Premium.
- 404
- Chemin inconnu (« Route non trouvée »).
- Vérifiez l'adresse et la méthode (GET, POST).
- 429
- code « DEBIT » : trop de requêtes dans la minute. code « QUOTA_MENSUEL » : quota du mois épuisé.
- DEBIT : attendez quelques secondes. QUOTA_MENSUEL : attendez le 1er du mois ou écrivez-nous.
- 500
- Erreur interne.
- Réessayez ; si elle persiste, écrivez au support.
Questions fréquentes sur l'API
Qu'est-ce qu'une API douanière ?
C'est une interface de programmation qui permet à un logiciel (site e-commerce, ERP, outil logistique) de calculer automatiquement les taxes d'importation d'un produit. L'API TropicaDouane est spécialisée dans les DOM : elle renvoie l'octroi de mer, l'octroi de mer régional, les droits de douane, la TVA locale et le total des taxes à partir du prix, du code HS, du territoire, de l'origine de la marchandise et du profil de l'acheteur.
Les taux utilisés sont-ils à jour ?
Oui. L'octroi de mer et l'OMR suivent les délibérations des collectivités : nous les comparons chaque nuit à RITA, l'outil tarifaire de la douane. Les droits de douane viennent du TARIC de l'Union européenne et la TVA du code général des impôts. Chaque changement est vérifié avant d'être appliqué. Chaque réponse indique les taux appliqués (rates_applied) et leur date (effective_date).
Pourquoi les montants sont-ils ronds ?
Comme la douane, l'API arrondit la valeur en douane et chaque taxe à l'euro le plus proche. Pour un lot, « customs_rounding » donne l'arrondi d'une déclaration unique (chaque taxe arrondie une fois sur la somme des lignes).
Comment obtenir une clé API ?
Créez un compte puis souscrivez le plan Premium, qui inclut l'accès à l'API. Générez ensuite votre clé depuis le tableau de bord (onglet API) : elle n'est montrée qu'une fois. Envoyez-la dans l'en-tête X-API-Key de chaque requête, depuis votre serveur. Vous pouvez essayer gratuitement le moteur de calcul avec le simulateur en ligne avant de souscrire.
Quelles sont les limites ?
30 requêtes par minute et par adresse IP (limite commune à toute l'API), et 30 000 appels réussis par mois avec le plan Premium (un lot compte pour un appel, un appel refusé ne compte pas). Un lot contient 50 lignes au plus. Au-delà, l'API répond 429 avec le code DEBIT ou QUOTA_MENSUEL. Pour un volume plus élevé, écrivez-nous.
Que ne calcule pas l'API ?
Les droits de port de la voie maritime, les accises (alcools, tabacs, carburants), la tranche de cylindrée ou de puissance des véhicules à La Réunion et la conversion des devises : envoyez des prix en euros. Le simulateur du site les gère.
Où l'API est-elle hébergée ?
L'API est hébergée en France (infrastructure OVH), les échanges sont chiffrés en TLS et aucune donnée personnelle de vos clients n'est requise pour un calcul : seuls le prix, le code HS, le territoire, l'origine et le profil de l'acheteur sont nécessaires.
Les plans détaillés sont sur la page Tarifs. Pour tester le moteur de calcul sans clé API, utilisez le simulateur en ligne.