Passer au contenu principal

Vue d’ensemble

L’API Dodo Payments utilise des codes d’état HTTP standard et des codes d’erreur personnalisés pour indiquer le succès ou l’échec des requêtes API. Lorsqu’une erreur se produit, l’API renvoie un code d’état HTTP approprié et une réponse JSON contenant des informations détaillées sur l’erreur. Chaque réponse d’erreur comprend :
  • Un code d’état HTTP indiquant la catégorie générale de l’erreur
  • Un code d’erreur spécifique qui identifie la nature exacte de l’erreur
  • Un message d’erreur lisible par l’homme expliquant ce qui s’est mal passé
  • Des détails supplémentaires sur l’erreur lorsque cela est applicable
Comprendre ces codes d’erreur et leurs significations est crucial pour :
  • Déboguer les problèmes d’intégration
  • Mettre en œuvre une gestion appropriée des erreurs dans votre application
  • Fournir des retours significatifs aux utilisateurs finaux
  • Maintenir un système de traitement des paiements robuste
Les sections suivantes fournissent des informations détaillées sur les codes d’état HTTP standard et les codes d’erreur spécifiques que vous pouvez rencontrer lors de l’utilisation de l’API Dodo Payments.

Codes d’erreur API standard

Code d’erreurStatut HTTPDescription
400Mauvaise requêteLa requête était mal formée ou contenait des paramètres invalides
401Non autoriséL’authentification a échoué ou la clé API est invalide
403InterditLa clé API n’a pas la permission d’accéder à la ressource demandée
404Non trouvéLa ressource demandée n’existe pas
405Méthode non autoriséeLa méthode HTTP n’est pas prise en charge pour ce point de terminaison
409ConflitLa requête entre en conflit avec l’état actuel de la ressource
422Entité non traitableLa requête était bien formée mais contenait des erreurs sémantiques
429Trop de requêtesLimite de taux dépassée
500Erreur interne du serveurUne erreur inattendue s’est produite sur nos serveurs
502Mauvaise passerelleLe serveur a reçu une réponse invalide d’un serveur en amont
503Service indisponibleLe service est temporairement indisponible
504Délai d’attente de la passerelleLe serveur a expiré en attendant une réponse en amont

Format de réponse d’erreur

Lorsqu’une erreur se produit, l’API renvoie une réponse JSON avec la structure suivante :
{
  "code": "UNSUPPORTED_COUNTRY",
  "message": "Country AI currently not supported"
}

Référence des codes d’erreur

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Déclencheur : Activations de clés de licence : nouvelle limite < nombre d’instances existantes
    • Message : La nouvelle limite d’activations ne peut pas être inférieure au nombre d’instances actuel
  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Déclencheur : Tentative d’ajout d’addons aux abonnements à facturation basée sur l’utilisation
    • Message : Les addons dans les abonnements ne sont pas pris en charge pour la facturation basée sur l’utilisation
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Déclencheur : Tentative d’ajout d’addons aux abonnements à la demande
    • Message : Les addons ne sont pas autorisés pour les abonnements à la demande
  • BRAND_MISMATCH
    • Déclencheur : Les éléments du panier appartiennent à des marques différentes
    • Message : Tous les éléments du panier doivent appartenir à la même marque
  • BRAND_NOT_ENABLED
    • Déclencheur : La marque est désactivée ou inactive
    • Message : La marque fournie n’est pas activée
  • BRAND_SUBMISSION_NOT_ENABLED
    • Déclencheur : La fonctionnalité de resoumission de la vérification de marque n’est pas activée
    • Message : La resoumission de la vérification de marque n’est pas activée
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Déclencheur : Tentative de facturer un abonnement programmé pour annulation
    • Message : Abonnement programmé pour annulation
  • CHECKOUT_SESSION_CONSUMED
    • Déclencheur : La session de paiement a déjà généré un paiement
    • Message : La session de paiement a déjà été consommée
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Déclencheur : Création d’un code de réduction en double
    • Message : Le code de réduction existe déjà
  • DISCOUNT_CODE_EXPIRED
    • Déclencheur : Le code de réduction a dépassé sa date expires_at
    • Message : Code de réduction expiré
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Déclencheur : Le code de réduction est réutilisé après que usage_limit a été atteint
    • Message : La limite d’utilisation ne peut pas être inférieure à times_used / Le code de réduction a atteint sa limite d’utilisation
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Déclencheur : Code appliqué à un abonnement à la demande
    • Message : Le coupon de réduction n’est pas disponible pour les abonnements à la demande
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Déclencheur : Code appliqué à un (des) produit(s) non concerné(s)
    • Message : Le coupon de réduction n’est pas disponible pour ce produit
  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Déclencheur : Le même item_id apparaît deux fois dans items[]
    • Message : Des item_ids en double sont spécifiés dans le tableau d’items
  • DUPLICATE_METER_IDS_IN_REQUEST
    • Déclencheur : Le même ID de compteur apparaît plusieurs fois dans la requête
    • Message : Les ID de compteur en double ne sont pas autorisés
  • EXCHANGE_RATE_NOT_FOUND
    • Déclencheur : Aucun taux de change pour la paire de devises from → to
    • Message : Aucun taux de change trouvé pour convertir Currency en Currency
  • EXISTING_REFUND_REQUEST_PROCESSING
    • Déclencheur : La demande de remboursement précédente est toujours en cours de traitement
    • Message : Une demande de remboursement avec le statut « Pending » est toujours en cours de traitement
  • INACTIVE_LICENSE_KEY
    • Déclencheur : Statut de la clé ≠ ACTIVE
    • Message : La clé de licence n’est pas active
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Déclencheur : Changement de forfait sur un abonnement inactif
    • Message : Le changement de forfait n’est pas pris en charge pour les abonnements inactifs
  • INSUFFICIENT_WALLET_FUNDS
    • Déclencheur : Solde du portefeuille < montant du débit
    • Message : Fonds insuffisants dans le portefeuille
  • INTEGER_CONVERSION_FAILURE
    • Déclencheur : Toute conversion entier ↔ chaîne/décimal échouant côté serveur
    • Message : Échec de conversion d’entier
  • INTERNAL_SERVER_ERROR
    • Déclencheur : Exceptions non interceptées ; vous devez consigner les détails côté serveur
    • Message : Pas de message public (500 générique)
  • INVALID_DISCOUNT_CODE
    • Déclencheur : Le code n’existe pas / n’est pas applicable
    • Message : Code de réduction invalide / Le code de réduction ne peut pas être appliqué à un produit dans le panier
  • INVALID_PERCENTAGE
    • Déclencheur : Montant en pourcentage > 100 % (ou 10 000 points de base)
    • Message : Le montant en pourcentage ne peut pas dépasser 10000 / Le montant du code de réduction ne peut pas dépasser 100 %
  • INVALID_QUANTITY
    • Déclencheur : Quantité invalide spécifiée pour la tarification basée sur l’utilisation
    • Message : Une seule quantité est autorisée pour les produits à prix basé sur l’utilisation
  • INVALID_QUERY_PARAMS
    • Déclencheur : Paramètres de requête mutuellement exclusifs / mal formés
    • Message : Les paramètres de requête ne doivent contenir que time_frame ou (start, end)
  • INVALID_REQUEST_BODY
    • Déclencheur : JSON mal formé ou violation de schéma
    • Message : Le corps de votre requête est invalide. Veuillez vérifier vos en-têtes et votre objet.
  • INVALID_REQUEST_PARAMETERS
    • Déclencheur : Sémantique incorrecte (par ex. date passée)
    • Message : Impossible de changer next_billing_date pour une date passée
  • INVALID_SUGGESTED_PRICE
    • Déclencheur : Prix PWYW < prix minimum autorisé
    • Message : Le prix suggéré ne peut pas être inférieur au prix minimum. En cas de « payez ce que vous voulez », le prix est considéré comme le montant minimum accepté
  • INVALID_TAX_ID
    • Déclencheur : Échec de validation de la TVA/GST/TIN
    • Message : L’identifiant fiscal est invalide
  • LICENSE_KEY_LIMIT_REACHED
    • Déclencheur : Activations = limite
    • Message : Limite d’activation de la clé de licence atteinte
  • LICENSE_KEY_NOT_FOUND
    • Déclencheur : ID d’instance ou de clé invalide
    • Message : L’instance de la clé de licence est introuvable ou n’appartient pas à cette clé
  • LINE_ITEM_FULLY_REFUNDED
    • Déclencheur : Tentative de rembourser une ligne déjà intégralement remboursée
    • Message : La ligne a déjà été entièrement remboursée et ne peut plus être remboursée.
  • LINE_ITEM_NOT_FOUND
    • Déclencheur : L’ID de l’élément ne fait pas partie du paiement référencé
    • Message : La ligne est introuvable dans le paiement
  • LINE_ITEM_PRORATED
    • Déclencheur : Tentative de remboursement ou de mise à jour d’une ligne proratisée
    • Message : La ligne ne peut pas être remboursée car elle est proratisée
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Déclencheur : Montant du remboursement > montant payé (taxes incluses)
    • Message : Le montant de remboursement demandé pour la ligne , taxes incluses, est de , ce qui dépasse le montant payé
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Déclencheur : Montant du remboursement inférieur au seuil minimum
    • Message : Le montant de remboursement demandé pour la ligne est de , ce qui est trop faible
  • MAXIMUM_KEYS_REACHED
    • Déclencheur : Métadonnées / champs personnalisés dépassant 50 paires
    • Message : Dépasse 50 paires clé-valeur
  • MERCHANT_NOT_LIVE
    • Déclencheur : L’entreprise est toujours en mode test/sandbox
    • Message : Le marchand n’est pas en production
  • METER_IS_DELETED
    • Déclencheur : Tentative d’utiliser un compteur supprimé
    • Message : Le compteur a déjà été supprimé
  • MISSING_ADDON_IDS
    • Déclencheur : La liste addon_id est vide ou contient des ID inconnus
    • Message : Un ou plusieurs ID de produit n’existent pas :
  • MISSING_METER_IDS
    • Déclencheur : La liste des ID de compteur est vide ou contient des ID invalides
    • Message : Un ou plusieurs ID de compteur n’existent pas :
  • MISSING_PRODUCT_INFORMATION
    • Déclencheur : Le produit existe mais des informations obligatoires manquent
    • Message : Le produit existe mais d’autres informations obligatoires sont manquantes ou invalides
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Déclencheur : Tentative de rendre le solde du portefeuille négatif
    • Message : Le solde du portefeuille ne peut pas devenir négatif
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Déclencheur : Après filtrage, plus rien ne reste
    • Message : Aucun moyen de paiement éligible trouvé
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Déclencheur : Tentative de définir une date d’expiration pour une clé basée sur un abonnement
    • Message : Impossible de définir une date d’expiration pour une clé de licence basée sur un abonnement
  • NOT_FOUND
    • Déclencheur : 404 générique pour toute ressource manquante
    • Message : Élément introuvable (ou plus précis)
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Déclencheur : Échange de forfait non autorisé pour les abonnements à la demande
    • Message : Le changement de forfait n’est pas pris en charge pour les abonnements à la demande
  • ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED
    • Déclencheur : L’entreprise a désactivé le flag de fonctionnalité
    • Message : Les abonnements à la demande ne sont pas activés pour cette entreprise
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Déclencheur : Tentative d’utiliser un abonnement à la demande avec une facturation basée sur l’utilisation
    • Message : Les abonnements à la demande ne sont pas pris en charge pour la facturation basée sur l’utilisation
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Déclencheur : Prix manquant pour un produit PWYW
    • Message : Le montant est obligatoire pour un produit « payez ce que vous voulez »
  • PAYMENT_ALREADY_REFUNDED
    • Déclencheur : Remboursement en double
    • Message : Ce paiement a déjà été remboursé
  • PAYMENT_HAS_BEEN_REFUNDED
    • Déclencheur : Le paiement a déjà été totalement remboursé
    • Message : L’ID de paiement a été totalement remboursé.
  • PAYMENT_NOT_SUCCEEDED
    • Déclencheur : Tentative de rembourser/traiter un paiement échoué
    • Message : Le paiement fourni n’a pas abouti
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Déclencheur : Changement de forfait tenté sur un abonnement programmé pour annulation
    • Message : Abonnement programmé pour annulation
  • PREVIOUS_PAYMENT_PENDING
    • Déclencheur : Tentative de créer une charge alors que la précédente est dans un état non terminal
    • Message : Impossible de créer une nouvelle charge tant que le précédent paiement n’a pas abouti
  • PRODUCT_CART_EMPTY
    • Déclencheur : Panier produit vide envoyé
    • Message : product_cart est vide
  • PRODUCT_IS_DELETED
    • Déclencheur : Produit marqué comme supprimé en douceur
    • Message : Pas de messages
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Déclencheur : Montant total du remboursement > montant payé
    • Message : Le montant du remboursement calculé est supérieur au montant payé
  • REFUND_WINDOW_EXPIRED
    • Déclencheur : Hors de la fenêtre de remboursement autorisée
    • Message : Les remboursements ne peuvent pas être initiés jours après la création du paiement. Contactez support@dodopayments.com.
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Déclencheur : Montant < minimum du produit
    • Message : Le montant ne peut pas être inférieur au montant minimum spécifié pour le produit
  • SUBSCRIPTION_EXPIRED
    • Déclencheur : Facturation après ends_at
    • Message : L’abonnement est expiré et ne peut pas créer de nouvelles charges
  • SUBSCRIPTION_INACTIVE
    • Déclencheur : Statut ≠ ACTIVE
    • Message : L’abonnement n’est pas actif
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Déclencheur : Attendu à la demande mais intervalle fixe détecté
    • Message : L’abonnement n’est déjà plus à la demande
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Déclencheur : Les tentatives de paiement sur l’abonnement ont dépassé le nombre maximal
    • Message : La limite maximale de 10 tentatives a été dépassée pour cet abonnement
  • TOO_MANY_REQUESTS
    • Déclencheur : Limite de débit 429
    • Message : Pas de messages
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Déclencheur : Total combiné du panier < minimum passerelle
    • Message : Un montant minimum de est requis pour traiter le paiement
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Déclencheur : Tentative de mise à jour de la marque principale via l’API standard
    • Message : La marque principale ne peut pas être mise à jour via ce point de terminaison API.
  • UNAUTHORIZED
    • Déclencheur : Pas de clé API ou jeton/scope invalide
    • Message : Vous n’êtes pas autorisé à effectuer cette action
  • UNSUPPORTED_ACTION
    • Déclencheur : Action non prise en charge pour ce type de ressource
    • Message : Le changement de forfait pour les abonnements basés sur l’utilisation n’est pas pris en charge
  • UNSUPPORTED_BILLING_CURRENCY
    • Déclencheur : Abonnements limités au USD
    • Message : Les devises de facturation non USD ne sont pas prises en charge pour les abonnements
  • UNSUPPORTED_COUNTRY
    • Déclencheur : Zone géographique encore non prise en charge
    • Message : Le pays n’est pas encore pris en charge
  • UNSUPPORTED_CURRENCY
    • Déclencheur : Devise du produit ou de l’addon invalide
    • Message : La devise n’est pas actuellement prise en charge / Seuls USD et INR sont pris en charge actuellement pour les produits / Seuls USD et INR sont pris en charge pour le prix des addons / Vous ne pouvez demander que USD ou INR pour billing_currency / Devise non prise en charge / Devise inattendue pour les abonnements par carte indienne
  • UNSUPPORTED_DISCOUNT_TYPE
    • Déclencheur : Les remises à montant fixe, etc., ne sont pas encore disponibles
    • Message : Seuls les codes de réduction en pourcentage sont pris en charge pour le moment
  • UNSUPPORTED_PAYMENT_CURRENCY
    • Déclencheur : Devise de paiement bloquée pour le connecteur
    • Message : Les transactions INR ne sont pas prises en charge pour cette transaction
  • UNSUPPORTED_TAX_CATEGORY
    • Déclencheur : Chaîne de catégorie fiscale non présente dans l’énumération
    • Message : La catégorie n’est pas prise en charge pour le moment
  • UNSUCCESSFUL_PAYMENT_ID
    • Déclencheur : L’ID de paiement fait référence à un paiement échoué
    • Message : L’ID de paiement a un statut échoué.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Déclencheur : Tentative de remboursement d’un paiement de montant zéro
    • Message : Impossible de rembourser un paiement d’un montant de devise nul

Meilleures pratiques

  1. Gérez toujours les erreurs de manière élégante dans votre application
  2. Mettez en œuvre une journalisation appropriée des erreurs
  3. Utilisez des messages d’erreur appropriés pour les utilisateurs finaux
  4. Mettez en œuvre une logique de réessai pour les erreurs transitoires
  5. Contactez le support pour les problèmes non résolus

Support

Pour une aide supplémentaire concernant les codes d’erreur ou les problèmes d’intégration, veuillez contacter notre équipe de support à support@dodopayments.com.