Skip to main content

Vue d’ensemble

Lorsqu’une requête échoue, l’API Dodo Payments renvoie un code d’état HTTP et un corps JSON qui identifie l’erreur. Utilisez cette page pour déterminer la cause d’une erreur et savoir comment la résoudre. Chaque réponse d’erreur inclut :
  • Un code d’état HTTP indiquant la catégorie générale de l’erreur.
  • Un code qui identifie l’erreur exacte, par exemple UNSUPPORTED_COUNTRY.
  • Un message qui explique l’erreur en langage courant. Le message peut être null, par exemple pour les erreurs internes du serveur.
Basez votre gestion des erreurs sur code, et non sur message. Plusieurs codes renvoient plusieurs messages selon la cause. Utilisez ces codes d’erreur pour :
  • Déboguer les problèmes d’intégration.
  • Gérer correctement les erreurs dans votre application.
  • Afficher des informations utiles à vos clients.
  • Garantir la fiabilité du traitement de vos paiements.
Il s’agit d’erreurs liées à l’API et à la logique métier. Pour les raisons de refus de carte renvoyées lors d’un paiement échoué (telles que INSUFFICIENT_FUNDS ou CARD_DECLINED), consultez plutôt la référence Transaction Failures.

Codes d’erreur API standard

L’API utilise les codes d’état HTTP suivants pour les erreurs :

Format des réponses d’erreur

Le corps d’une réponse d’erreur contient deux champs, code et message :

Référence des codes d’erreur

Les codes d’erreur ci-dessous sont regroupés selon la zone de l’API à laquelle ils se rapportent. Chaque entrée indique la condition qui déclenche l’erreur et le message renvoyé par l’API. Les placeholders tels que {id} représentent des valeurs renseignées par l’API.

Authentification et compte

  • UNAUTHORIZED
    • Déclencheur : La requête ne contient aucune clé API ou contient une clé invalide (HTTP 401), ou la clé API ne possède pas le rôle requis par l’action (HTTP 403)
    • Message : Vous n’êtes pas autorisé à effectuer cette action
  • MERCHANT_NOT_LIVE
    • Déclencheur : Une requête en mode live concerne une entreprise pour laquelle les paiements live ne sont pas activés (HTTP 403). Cela concerne une entreprise ayant uniquement utilisé le mode test, ainsi qu’une entreprise dont les paiements live ne sont pas encore activés parce que la vérification est incomplète. Les requêtes en mode test ne sont pas affectées.
    • Message : Les paiements live ne sont pas activés pour le marchand
  • BUSINESS_ARCHIVED
    • Déclencheur : Toute requête destinée au client concernant une entreprise archivée (HTTP 403). Cela concerne le checkout, les liens de paiement, la vitrine, le Customer Portal et l’activation des clés de licence.
    • Message : Cette entreprise est archivée et n’accepte plus les requêtes

Paiements et checkout

  • CHECKOUT_SESSION_CONSUMED
    • Déclencheur : La session de checkout a déjà généré un paiement (HTTP 403). Créez une nouvelle session de checkout.
    • Message : Un paiement associé à la session de checkout fournie a déjà été généré.
  • MANUAL_RETRY_ALREADY_PAID
    • Déclencheur : Nouvelle tentative manuelle d’une facture de renouvellement pour laquelle un paiement a déjà réussi. Un nouvel envoi facturerait le client deux fois.
    • Message : Un paiement associé à cette facture a déjà réussi
  • MANUAL_RETRY_HARD_DECLINE
    • Déclencheur : Nouvelle tentative manuelle lorsque le dernier échec de la facture est un refus définitif ou ne contient aucun code d’erreur classifié. Un autre débit sur la même carte ne peut pas réussir ; mettez plutôt à jour le moyen de paiement.
    • Message : Le dernier échec de cette facture est un refus définitif ; une nouvelle tentative ne peut donc pas réussir (ou) Le dernier échec de cette facture ne peut pas être classifié et ne peut donc pas faire l’objet d’une nouvelle tentative
  • MANUAL_RETRY_IN_FLIGHT
    • Déclencheur : Nouvelle tentative manuelle alors qu’un paiement associé à la facture est processing ou n’a pas encore de statut enregistré. Attendez le résultat de ce paiement au lieu de le renvoyer.
    • Message : Un paiement associé à cette facture est toujours en cours
  • MANUAL_RETRY_LIMIT_REACHED
    • Déclencheur : Nouvelle tentative manuelle après l’épuisement des 3 envois de la facture, ou avant la fin du délai d’attente (HTTP 429). Le deuxième envoi attend 1 heure après le premier et le troisième attend 3 heures après le deuxième. Le corps contient uniquement code et message. Pour savoir quand le prochain envoi est autorisé, lisez retry_available_at dans GET /payments/{payment_id}/retry.
    • Message : Toutes les nouvelles tentatives manuelles pour cette facture ont été utilisées (ou) La nouvelle tentative n’est pas encore disponible pour cette facture
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Déclencheur : Aucun moyen de paiement ne reste disponible après filtrage (HTTP 422)
    • Message : Aucun moyen de paiement éligible trouvé
  • PAYMENT_NOT_PERMITTED
    • Déclencheur : Checkout ou tentative de paiement effectué par un client figurant sur la liste de blocage du marchand (HTTP 403). Le code et le message n’indiquent volontairement aucune cause.
    • Message : Ce paiement ne peut pas être traité.
  • PAYMENT_NOT_RETRYABLE
    • Déclencheur : Nouvelle tentative manuelle d’un paiement non prise en charge par cette fonctionnalité. Le paiement n’a pas de facture, sa facture n’est pas un renouvellement d’abonnement ouvert, aucun paiement de la facture n’a encore échoué, l’abonnement n’est pas configuré pour la facturation récurrente (par exemple, un abonnement à la demande), ou le client figure sur la liste de blocage.
    • Message : Varie selon la raison, par exemple : Seuls les paiements de renouvellement d’abonnement peuvent faire l’objet d’une nouvelle tentative
  • PAYMENT_NOT_SUCCEEDED
    • Déclencheur : Tentative de remboursement ou de traitement d’un paiement qui n’a pas réussi
    • Message : Le paiement fourni n’a pas réussi
  • PREVIOUS_PAYMENT_PENDING
    • Déclencheur : Tentative de créer un débit alors que le paiement précédent est dans un état non final. Également renvoyé pour une nouvelle tentative manuelle lorsque le paiement le plus récent de la facture n’est ni failed ni en cours de traitement, par exemple requires_customer_action ou cancelled.
    • Message : Impossible de créer un nouveau débit, car le paiement précédent n’a pas encore réussi (ou) Le paiement le plus récent de cette facture n’a pas échoué
  • UNSUCCESSFUL_PAYMENT_ID
    • Déclencheur : L’identifiant du paiement fait référence à un paiement qui n’a pas réussi
    • Message : L’identifiant du paiement possède un statut d’échec.

Connecteurs et BYOP

Ces erreurs concernent les connecteurs de paiement appartenant au marchand (Bring Your Own Processor, ou BYOP).
  • BYOP_CONNECTOR_DISABLED
    • Déclencheur : Mise à jour du moyen de paiement d’un abonnement acheminé via un connecteur BYOP désactivé. Dodo Payments ne bascule pas vers ses propres connecteurs ; réactivez d’abord le connecteur.
    • Message : L’abonnement est acheminé via le connecteur du marchand (BYOP), actuellement désactivé
  • BYOP_CUSTOM_INVOICE_ADDRESS_MISSING
    • Déclencheur : Un paiement acheminé via le connecteur du marchand (BYOP) ne possède aucune adresse de facture personnalisée
    • Message : Une adresse de facture BYOP personnalisée est requise lorsqu’un paiement est acheminé via le connecteur du marchand
  • CONNECTOR_LABEL_ALREADY_EXISTS
    • Déclencheur : Création d’un connecteur avec un libellé qui existe déjà
    • Message : Un connecteur portant ce libellé existe déjà. Choisissez un autre libellé.

Remboursements

  • EXISTING_REFUND_REQUEST_PROCESSING
    • Déclencheur : Une 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
  • LINE_ITEM_FULLY_REFUNDED
    • Déclencheur : Tentative de rembourser un élément de ligne déjà entièrement remboursé
    • Message : L’élément de ligne {id} a été entièrement remboursé et ne peut pas être remboursé davantage.
  • LINE_ITEM_NOT_FOUND
    • Déclencheur : L’identifiant de l’élément ne fait pas partie du paiement référencé
    • Message : Élément de ligne {id} introuvable dans le paiement
  • LINE_ITEM_PRORATED
    • Déclencheur : Remboursement ou mise à jour concernant un élément de ligne proratisé
    • Message : L’élément de ligne {id} ne peut pas être remboursé, car il est proratisé
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Déclencheur : Le montant du remboursement, taxes incluses, est supérieur au montant payé
    • Message : Le montant du remboursement demandé pour l’élément de ligne {id}, taxes incluses, est {amount}, ce qui dépasse le montant payé {amount}
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Déclencheur : Le montant du remboursement est inférieur au seuil minimal
    • Message : Le montant du remboursement demandé pour l’élément de ligne {id} est {amount}, ce qui est trop faible
  • NOTHING_TO_REFUND
    • Déclencheur : Aucun montant remboursable ne reste, car tous les éléments de ligne positifs ont déjà été entièrement remboursés
    • Message : Aucun montant remboursable restant. Tous les éléments de ligne positifs ont été entièrement remboursés.
  • PARTIAL_REFUND_NOT_ALLOWED
    • Déclencheur : Remboursement partiel tenté avec un moyen de paiement prenant uniquement en charge les remboursements complets
    • Message : Les remboursements partiels ne sont pas autorisés pour ce moyen de paiement
  • 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 été entièrement remboursé
    • Message : L’identifiant du paiement a été entièrement remboursé.
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Déclencheur : Le montant total du remboursement est supérieur au montant payé
    • Message : Le montant du remboursement calculé est supérieur au montant payé
  • REFUND_WINDOW_EXPIRED
    • Déclencheur : Le remboursement est demandé en dehors du délai autorisé
    • Message : Les remboursements ne peuvent pas être initiés {days} jours après la création du paiement. Contactez support@dodopayments.com.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Déclencheur : Tentative de rembourser un paiement d’un montant nul
    • Message : Impossible de rembourser un paiement dont le montant monétaire est nul

Abonnements et modules complémentaires

  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Déclencheur : Tentative d’ajouter des modules complémentaires à un abonnement avec facturation basée sur l’utilisation
    • Message : Les modules complémentaires des 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’ajouter des modules complémentaires à un abonnement à la demande
    • Message : Les modules complémentaires ne sont pas autorisés pour les abonnements à la demande
  • CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Déclencheur : Le Customer Portal tente d’annuler une modification de plan programmée alors que l’entreprise a désactivé cette action
    • Message : L’annulation d’une modification de plan programmée est désactivée pour le Customer Portal.
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Déclencheur : Tentative de facturer un abonnement programmé pour être annulé
    • Message : Abonnement programmé pour être annulé
  • CUSTOMER_HAS_EXISTING_SUBSCRIPTION
    • Déclencheur : Création d’un abonnement pour un client qui en possède déjà un, lorsque l’entreprise n’autorise pas plusieurs abonnements par client
    • Message : Le client {id} possède déjà un abonnement. Pour autoriser plusieurs abonnements par client, modifiez les paramètres de l’entreprise
  • DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL
    • Déclencheur : Le mode de proratisation do_not_bill est utilisé dans une modification de plan du Customer Portal
    • Message : Le mode de proratisation do_not_bill n’est pas autorisé dans le Customer Portal
  • DUPLICATE_ADDON_IDS_IN_REQUEST
    • Déclencheur : Le même addon_id apparaît plusieurs fois dans la requête
    • Message : Les identifiants de modules complémentaires en double ne sont pas autorisés
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Déclencheur : Modification de plan sur un abonnement inactif
    • Message : La modification de plan n’est pas prise en charge pour les abonnements inactifs
  • INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE
    • Déclencheur : Utilisation d’un mode de proratisation autre que full_immediately avec effective_at: next_billing_date
    • Message : Seul le mode de proratisation full_immediately est autorisé avec effective_at: next_billing_date
  • MISSING_ADDON_IDS
    • Déclencheur : La liste addon_id est vide ou contient des identifiants inconnus
    • Message : Un ou plusieurs identifiants de produit n’existent pas : {id}
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Déclencheur : Modification de plan sur un abonnement à la demande
    • Message : La modification de plan n’est pas prise en charge pour les abonnements à la demande
  • 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
  • ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND
    • Déclencheur : Produit ponctuel ajouté à un abonnement à la demande
    • Message : Les produits ponctuels ne sont pas autorisés pour les abonnements à la demande
  • PENDING_PLAN_CHANGE_EXISTS
    • Déclencheur : Une nouvelle modification de plan est demandée alors qu’une précédente attend toujours le paiement
    • Message : Une modification de plan est déjà en attente pour cet abonnement. Attendez que le paiement actuel soit terminé.
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Déclencheur : Modification de plan via le Customer Portal alors que l’entreprise l’a désactivée
    • Message : La modification du plan d’abonnement via le Customer Portal est désactivée.
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Déclencheur : Modification de plan sur un abonnement programmé pour être annulé
    • Message : Abonnement programmé pour être annulé
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Déclencheur : Programmation d’une modification de plan via le Customer Portal alors que l’entreprise l’a désactivée
    • Message : La programmation des modifications de plan est désactivée pour cette entreprise.
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Déclencheur : Création d’une modification de plan programmée alors qu’il en existe déjà une
    • Message : Une modification de plan programmée existe déjà pour cet abonnement. Annulez la modification programmée existante avant d’en créer une nouvelle.
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Déclencheur : Référence ou annulation d’une modification de plan programmée qui n’existe pas
    • Message : Aucune modification de plan programmée trouvée pour cet abonnement.
  • SUBSCRIPTION_EXPIRED
    • Déclencheur : Facturation d’un abonnement après sa date expires_at
    • Message : L’abonnement a expiré ; impossible de créer de nouveaux débits
  • SUBSCRIPTION_HAS_NO_PAYMENT_METHOD
    • Déclencheur : Nouvelle tentative manuelle d’un abonnement sans moyen de paiement enregistré pour un débit hors session
    • Message : Aucun moyen de paiement enregistré à débiter pour cet abonnement
  • SUBSCRIPTION_INACTIVE
    • Déclencheur : Le statut de l’abonnement n’est pas active
    • Message : L’abonnement n’est pas actif (ou) Cet abonnement n’est pas live ; son annulation ne peut donc pas être programmée
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Déclencheur : Action à la demande sur un abonnement facturé à intervalle fixe
    • Message : L’abonnement n’est déjà plus à la demande
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Déclencheur : Les nouvelles tentatives de paiement de l’abonnement ont dépassé le nombre maximal d’essais
    • Message : La limite maximale de 10 tentatives a été dépassée pour cet abonnement

Clients et liste de blocage

  • CUSTOMER_ALREADY_BLOCKED
    • Déclencheur : Blocage d’un client déjà présent sur la liste de blocage et n’ayant plus d’abonnement live à annuler (HTTP 409)
    • Message : Ce client figure déjà sur la liste de blocage
  • PORTAL_ACTION_NOT_PERMITTED
    • Déclencheur : Un client bloqué appelle une route d’écriture du Customer Portal : annulation, suspension, reprise, modification de plan ou mise à jour du moyen de paiement (HTTP 403). Les routes de lecture restent ouvertes. Le code et le message n’indiquent volontairement aucune cause.
    • Message : Cette action n’est pas disponible.

Produits, panier et marques

  • BRAND_ALREADY_ARCHIVED
    • Déclencheur : Archivage d’une marque déjà archivée
    • Message : La marque est déjà archivée
  • BRAND_ARCHIVED
    • Déclencheur : Mise à jour d’une marque archivée, soumission pour vérification, ou association d’un nouveau produit, d’une collection de produits ou d’un abonnement à cette marque
    • Message : La marque est archivée (ou) La marque est archivée et ne peut pas être mise à jour (ou) La marque est archivée et ne peut pas être soumise à la vérification
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Déclencheur : Archivage d’une marque contenant encore des produits, des abonnements live ou des collections de produits sans cible move_products_to
    • Message : La marque possède {count} produit(s). Définissez move_products_to sur une marque cible pour les réassocier. Le message mentionne plutôt les abonnements live ou les collections de produits lorsque ceux-ci empêchent l’archivage.
  • BRAND_MISMATCH
    • Déclencheur : Les articles du panier appartiennent à différentes marques
    • Message : Tous les articles du panier de produits 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 nouvelle soumission de la vérification de la marque n’est pas activée
    • Message : Brand verificatin resubmission is not enabled (orthographié exactement comme le renvoie l’API)
  • CANNOT_ARCHIVE_PRIMARY_BRAND
    • Déclencheur : Archivage de la marque principale, dont l’identifiant est l’identifiant de l’entreprise
    • Message : La marque principale ne peut pas être archivée
  • FILE_IN_USE
    • Déclencheur : Suppression d’un fichier de produit numérique encore référencé par des droits actifs
    • Message : Le fichier numérique est référencé par des droits actifs
  • INVALID_BRAND_ARCHIVE_TARGET
    • Déclencheur : move_products_to désigne la marque archivée, une marque déjà archivée ou une marque appartenant à une autre entreprise
    • Message : move_products_to doit être une marque de cette entreprise qui n’est pas archivée (ou) move_products_to ne peut pas être la marque que vous archivez
  • INVALID_SUGGESTED_PRICE
    • Déclencheur : Un prix suggéré Pay What You Want est inférieur au prix minimal
    • Message : Le prix suggéré ne peut pas être inférieur au prix minimal. Avec Pay What You Want, le prix est considéré comme le montant minimal accepté
  • LOCALIZED_PRICE_ALREADY_EXISTS
    • Déclencheur : Un prix localisé existe déjà pour ce produit et ce pays ou cette devise
    • Message : Un prix localisé pour ce produit et ce pays/cette devise existe déjà
  • LOCALIZED_PRICE_DUPLICATES_BASE
    • Déclencheur : Le prix localisé duplique la devise ou le pays de base du produit
    • Message : Le prix localisé duplique la devise/le pays de base du produit
  • LOCALIZED_PRICE_SHAPE_MISMATCH
    • Déclencheur : La structure du prix localisé ne correspond pas à pricing_mode du produit
    • Message : La structure du prix localisé ne correspond pas au pricing_mode du produit
  • MISSING_PRODUCT_INFORMATION
    • Déclencheur : Le produit existe, mais des informations obligatoires sont manquantes
    • Message : Le produit {id} existe, mais d’autres informations obligatoires sont manquantes ou invalides
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Déclencheur : Le montant est manquant pour un produit Pay What You Want
    • Message : Le montant est obligatoire pour un produit Pay What You Want
  • PRODUCT_CART_EMTPY
    • Déclencheur : Un panier de produits vide est envoyé
    • Message : product_cart est vide (le code d’erreur est volontairement orthographié EMTPY pour correspondre exactement à la valeur renvoyée par l’API)
  • PRODUCT_COLLECTION_IS_DELETED
    • Déclencheur : Opération sur une collection de produits supprimée
    • Message : Aucun message
  • PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS
    • Déclencheur : Suppression du dernier produit, ou du dernier groupe contenant des produits, d’une collection
    • Message : Impossible de supprimer le dernier produit d’une collection. Archivez plutôt la collection. (ou) Impossible de supprimer le dernier groupe contenant des produits. Archivez plutôt la collection.
  • PRODUCT_IS_DELETED
    • Déclencheur : Le produit a été supprimé
    • Message : Aucun message
  • PRODUCT_PRICING_MODE_REQUIRED
    • Déclencheur : Ajout de prix localisés avant la définition de pricing_mode du produit
    • Message : Le pricing_mode du produit doit être défini avant l’ajout de prix localisés
  • SLUG_ALREADY_TAKEN
    • Déclencheur : Le slug ou l’URL courte du produit demandé est déjà utilisé
    • Message : Le slug est déjà utilisé
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Déclencheur : Tentative de mise à jour de la marque principale via l’API standard des marques
    • Message : La marque principale ne peut pas être mise à jour via cet endpoint API.

Réductions

  • DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION
    • Déclencheur : Nouvelle application d’une réduction déjà utilisée pour cet abonnement
    • Message : Cette réduction a déjà été utilisée pour cet abonnement
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Déclencheur : Création d’un code de réduction qui existe déjà
    • 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 : Le code de réduction a expiré
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Déclencheur : Le code de réduction est utilisé après l’atteinte de son usage_limit
    • Message : La limite d’utilisation ne peut pas être inférieure à times_used (ou) Le code de réduction a atteint sa limite d’utilisation
    • Remarque : Final. Le code est épuisé ; ne réessayez pas.
  • DISCOUNT_CONCURRENT_REDEMPTION
    • Déclencheur : Une autre utilisation du même code a conservé le verrou de limite d’utilisation trop longtemps (HTTP 503)
    • Message : La réduction est utilisée simultanément ; veuillez réessayer
    • Remarque : Temporaire. Le code peut encore être disponible ; la requête peut donc être relancée sans risque. Ne présentez pas ce message au client comme un code épuisé.
  • DISCOUNT_CURRENCY_OPTION_INVALID
    • Déclencheur : currency_options invalide lors de la création ou de la mise à jour
    • Message : Une réduction fixe nécessite au moins une option de devise avec une valeur par défaut résoluble (ou) Les options de devise en double ne sont pas autorisées (ou) Une seule option de devise peut être définie comme valeur par défaut
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Déclencheur : Le client ne respecte pas le customer_eligibility du code (first_time, existing, ou n’est pas autorisé par la liste d’autorisation d’un code specific)
    • Message : Le client n’est pas éligible à ce code de réduction
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Déclencheur : Le sous-total du panier est inférieur au minimum_subtotal configuré pour la devise du checkout
    • Message : Le sous-total du panier est inférieur au sous-total minimal requis par la réduction
  • DISCOUNT_NOT_YET_ACTIVE
    • Déclencheur : Le code est utilisé avant sa date starts_at
    • Message : Le code de réduction n’est pas encore actif (starts_at est dans le futur)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Déclencheur : Le client a déjà utilisé le code per_customer_usage_limit fois
    • Message : La limite d’utilisation par client a été dépassée pour ce code de réduction
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Déclencheur : Modification de plan vers un produit auquel la réduction existante ne s’applique pas
    • Message : La réduction ne s’applique pas au produit du nouveau plan
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Déclencheur : Le code est 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 : Le code est appliqué à des produits qu’il ne couvre pas
    • Message : Le coupon de réduction n’est pas disponible pour ce produit
  • INVALID_DISCOUNT_CODE
    • Déclencheur : Le code n’existe pas ou ne s’applique à aucun produit du panier
    • Message : Code de réduction invalide (ou) Le code de réduction ne peut être appliqué à aucun produit du panier
  • INVALID_PERCENTAGE
    • Déclencheur : Le pourcentage est supérieur à 100 % (10 000 points de base)
    • Message : Le pourcentage ne peut pas dépasser 10000 (ou) Le montant du code de réduction ne peut pas dépasser 100 %
  • UNSUPPORTED_DISCOUNT_TYPE
    • Déclencheur : Type de réduction non pris en charge. percentage et flat sont pris en charge ; les réductions par montant unitaire ne le sont pas.
    • Message : Seuls les codes de réduction en pourcentage et fixes sont pris en charge (ou) Seuls les codes de réduction en pourcentage sont actuellement pris en charge

Clés de licence

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Déclencheur : La nouvelle limite d’activation d’une clé de licence est inférieure à son nombre actuel d’instances
    • Message : La nouvelle limite d’activation ne peut pas être inférieure au nombre actuel d’instances
  • INACTIVE_LICENSE_KEY
    • Déclencheur : Le statut de la clé de licence n’est pas active
    • Message : La clé de licence n’est pas active
  • LICENSE_KEY_LIMIT_REACHED
    • Déclencheur : Le nombre d’activations a atteint la limite d’activation
    • Message : La limite d’activation de la clé de licence a été atteinte
  • LICENSE_KEY_NOT_FOUND
    • Déclencheur : L’identifiant d’instance ou l’identifiant de clé de licence est invalide
    • Message : Instance de clé de licence introuvable ou n’appartenant pas à cette clé de licence
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Déclencheur : Tentative de définir une date d’expiration sur une clé de licence basée sur un abonnement
    • Message : Impossible de définir une date d’expiration pour une clé de licence basée sur un abonnement

Facturation basée sur l’utilisation et compteurs

  • DUPLICATE_METER_IDS_IN_REQUEST
    • Déclencheur : Le même identifiant de compteur apparaît plusieurs fois dans la requête
    • Message : Les identifiants de compteur en double ne sont pas autorisés
  • INVALID_QUANTITY
    • Déclencheur : Quantité différente de 1 pour un produit dont la tarification est basée sur l’utilisation
    • Message : Seule une quantité de 1 est autorisée pour les produits à tarification basée sur l’utilisation
  • METER_IS_DELETED
    • Déclencheur : Tentative d’utiliser un compteur supprimé
    • Message : Le compteur a déjà été supprimé
  • MISSING_METER_IDS
    • Déclencheur : La liste des identifiants de compteurs est vide ou contient des identifiants invalides
    • Message : Un ou plusieurs identifiants de compteur n’existent pas : {id}

Facturation basée sur les crédits

  • CREDIT_ENTITLEMENT_IS_DELETED
    • Déclencheur : Opération sur un droit de crédit supprimé
    • Message : Le droit de crédit a déjà été supprimé
  • CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS
    • Déclencheur : Création d’un droit de crédit avec un nom qui existe déjà
    • Message : Un droit de crédit portant ce nom existe déjà
  • OVERAGE_LIMIT_EXCEEDED
    • Déclencheur : Une utilisation ou une déduction de crédits dépasserait la limite de dépassement configurée
    • Message : La limite de dépassement a été dépassée

Wallet

  • INSUFFICIENT_WALLET_FUNDS
    • Déclencheur : Le solde du wallet est inférieur au montant du débit
    • Message : Fonds insuffisants dans le wallet
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Déclencheur : Tentative de rendre le solde du wallet négatif
    • Message : Le solde du wallet ne peut pas être négatif

Devise, taxes et région

  • EXCHANGE_RATE_NOT_FOUND
    • Déclencheur : Aucun taux de change n’existe pour la paire de devises
    • Message : Taux de change introuvable pour convertir {currency} en {currency}
  • INVALID_TAX_ID
    • Déclencheur : Le VAT, le GST ou le TIN n’a pas été validé
    • Message : L’identifiant fiscal est invalide
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Déclencheur : Le montant est inférieur au minimum défini pour le produit
    • Message : Le montant ne peut pas être inférieur au montant minimal spécifié pour le produit
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Déclencheur : Le total combiné du panier est inférieur au montant minimal requis pour traiter un paiement
    • Message : Un montant minimal de {display_str} est requis pour traiter le paiement
  • UNSUPPORTED_BILLING_CURRENCY
    • Déclencheur : La devise de facturation demandée n’est pas prise en charge pour cet abonnement
    • Message : Les devises de facturation autres que l’USD ne sont pas prises en charge pour les abonnements
  • UNSUPPORTED_COUNTRY
    • Déclencheur : Le pays n’est pas pris en charge
    • Message : Le pays {country_name} n’est actuellement pas pris en charge
  • UNSUPPORTED_CURRENCY
    • Déclencheur : La devise du produit ou du module complémentaire n’est pas prise en charge pour les débits Dodo Payments. Les prix de base peuvent être définis dans toute devise permettant les débits ; cette erreur signifie généralement que le code de devise est invalide ou non pris en charge.
    • Message : La devise n’est actuellement pas prise en charge (ou) Seuls les produits en USD et INR sont actuellement pris en charge (ou) Seuls USD et INR sont actuellement pris en charge pour le prix du module complémentaire (ou) Seuls USD ou INR peuvent être demandés pour billing_currency (ou) Devise non prise en charge (ou) Devise inattendue pour les abonnements par carte indienne
  • UNSUPPORTED_TAX_CATEGORY
    • Déclencheur : La catégorie fiscale ne fait pas partie des valeurs prises en charge
    • Message : La catégorie {category} n’est actuellement pas prise en charge

Validation et requêtes

  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Déclencheur : Le même item_id apparaît plusieurs fois dans items[]
    • Message : Des item_ids en double ont été spécifiés dans le tableau items
  • INVALID_QUERY_PARAMS
    • Déclencheur : Paramètres de requête mutuellement exclusifs ou malformés
    • Message : Les paramètres de requête doivent contenir soit time_frame, soit (start, end) (ou) Le début de la plage ne doit pas être postérieur à la fin
  • INVALID_REQUEST_BODY
    • Déclencheur : JSON malformé ou violation du schéma
    • Message : Le corps de votre requête est invalide. Vérifiez les en-têtes et l’objet de votre requête.
  • INVALID_REQUEST_PARAMETERS
    • Déclencheur : Valeurs de paramètres valides du point de vue du format, mais sémantiquement invalides, par exemple une date passée
    • Message : Impossible de modifier next_billing_date vers une date passée
  • MAXIMUM_KEYS_REACHED
    • Déclencheur : Les métadonnées ou champs personnalisés dépassent 50 paires clé-valeur
    • Message : Plus de 50 paires clé-valeur

Général et système

  • INTEGER_CONVERSION_FAILURE
    • Déclencheur : Une conversion côté serveur entre un entier et une chaîne ou un nombre décimal échoue, par exemple lorsqu’un total de panier est trop élevé pour être traité
    • Message : Échec de conversion d’entier (ou) Le total du panier est trop élevé pour être traité. Réduisez la quantité ou sélectionnez une autre devise de facturation.
  • INTERNAL_SERVER_ERROR
    • Déclencheur : Erreur serveur inattendue. Consignez les détails de la requête de votre côté.
    • Message : Aucun message public (500 générique, message est généralement null)
  • NOT_FOUND
    • Déclencheur : 404 générique pour toute ressource manquante
    • Message : Élément introuvable (ou un message plus précis indiquant ce qui manque)
  • TOO_MANY_REQUESTS
    • Déclencheur : Une limite de débit a été dépassée (HTTP 429)
    • Message : Aucun message
  • UNSUPPORTED_ACTION
    • Déclencheur : Action non prise en charge par le type de ressource
    • Message : La modification de plan des abonnements avec facturation basée sur l’utilisation n’est pas prise en charge

Bonnes pratiques

Suivez ces pratiques lorsque vous gérez les erreurs de l’API :
  1. Gérez chaque réponse d’erreur dans votre application et basez-vous sur code plutôt que sur message.
  2. Consignez le statut HTTP, code et message de chaque requête échouée.
  3. Affichez aux utilisateurs finaux un message adapté plutôt que le message brut de l’API.
  4. Ne relancez que les erreurs temporaires, telles que les réponses 429 et 5xx ou DISCOUNT_CONCURRENT_REDEMPTION, après un délai.
  5. Contactez l’assistance pour les erreurs que vous ne pouvez pas résoudre.

Assistance

Pour obtenir davantage d’aide concernant les codes d’erreur ou les problèmes d’intégration, contactez l’équipe d’assistance à l’adresse support@dodopayments.com.
Dernière modification le 26 septembre 2026