Codes internes (Exxx)
Les codes Exxx sont les codes internes de CashChap. Vous les rencontrez dans les webhooks (raison d'un échec), dans vos journaux d'API et, entre parenthèses, à côté du code v2 d'un échec (l'API v1, qui les renvoyait directement, est retirée). L'API v2 les traduit en codes lisibles (insufficient_funds…) : la colonne « API v2 » donne l'équivalent. Liste générée depuis le code de la plateforme (relevé du 11 octobre 2026), 89 codes.
Lire un code Exxx
- Les codes
E410àE429décrivent un échec constaté après la création de la transaction (refus du client, solde insuffisant…) : ils arrivent avec le statutFAILED. En v2, ils deviennentfailure.codede la transaction. - Les autres codes refusent la demande à l'entrée : aucune transaction n'est créée.
- Pour l'API v2, utilisez plutôt la page Erreurs de l'API v2.
E0xx — Service, compte et mode test
| Code | HTTP | Message (marchand) | API v2 |
|---|---|---|---|
E001 |
400 | Service non reconnu, vérifiez vos autorisations. | invalid_api_key |
E002 |
503 | Le service est actuellement en maintenance, veuillez contacter l'administrateur. | service_maintenance |
E003 |
404 | La compagnie liée à ce service n'est pas activée. Veuillez vérifier l'activation via votre compte ou contacter l'administrateur pour plus d'informations. | account_not_activated |
E004 |
404 | Collaborateur non trouvé. | operator_not_found |
E005 |
403 | Votre compte est suspendu ou vous n'avez pas accepté l'invitation du marchand, veuillez contacter l'administrateur. | operator_suspended |
E006 |
403 | Vous n'avez pas les autorisations nécessaires pour cette action. | permission_denied |
E007 |
503 | Les paiements par Carte Bancaire ne sont pas disponibles pour le moment. | card_payments_unavailable |
E008 |
400 | La passerelle demandée n'est pas active ou valide. | provider_unavailable |
E009 |
400 | Devise invalide. | currency_not_supported |
E010 |
400 | Le numéro de téléphone fourni n'est pas valide pour la passerelle. | invalid_phone_number |
E011 |
400 | Le numéro de téléphone fourni est bloqué. | phone_number_blocked |
E012 |
403 | Votre rôle de collaborateur ne vous permet pas d'encaisser des paiements pour ce service. | operator_cannot_collect |
E013 |
403 | Votre rôle de collaborateur ne vous permet pas d'effectuer des retraits pour ce service. | operator_cannot_payout |
E030 |
503 | Le mode test (SANDBOX) est momentanément indisponible pour ce service. | sandbox_unavailable |
E031 |
429 | Limite de transactions de test atteinte. Réessayez dans quelques minutes ou demain. | sandbox_rate_limited |
E040 |
503 | Ce service est temporairement bloqué par un contrôle de sécurité. Notre équipe est prévenue et vous recontactera. | service_temporarily_blocked |
E041 |
503 | Les retraits sont momentanément indisponibles. Notre équipe est prévenue ; réessayez plus tard. | payouts_temporarily_unavailable |
E042 |
403 | Ce bénéficiaire est momentanément indisponible pour un retrait : notre équipe est prévenue. Vous pouvez le supprimer puis l'ajouter de nouveau dans vos comptes de retrait autorisés. | recipient_unavailable |
E1xx — Traitement de la demande
| Code | HTTP | Message (marchand) | API v2 |
|---|---|---|---|
E100 |
500 | Une erreur s'est produite lors du traitement de la demande. | internal_error |
E101 |
400 | La transaction ID est déjà utilisée pour une autre transaction. | idempotency_conflict |
E102 |
403 | La méthode '{$method}' n'est pas autorisée. | unsupported_payment_method |
E3xx — Validation des champs, compte et tarification
| Code | HTTP | Message (marchand) | API v2 |
|---|---|---|---|
E300 |
400 | Le champ "montant" est requis, doit être un nombre entier et supérieur à 0. | invalid_amount |
E301 |
400 | La passerelle est requise. | provider_required |
E302 |
400 | La monnaie est requise. | currency_required |
E303 |
400 | Le code CVV est requis. | card_cvv_required |
E304 |
400 | La date d'expiration est requise. | card_expiry_required |
E305 |
400 | Le numéro de carte est requis. | card_number_required |
E306 |
400 | Le numéro de téléphone est requis. | phone_required |
E307 |
400 | Les informations du client sont requises. | customer_required |
E308 |
400 | Le prénom est requis. | customer_name_required |
E309 |
400 | L'adresse email est requise et doit être valide. | invalid_email |
E310 |
400 | L'external_id n'est pas valide. | invalid_reference |
E311 |
400 | La clé API Publique est manquante. Veuillez fournir une clé API valide. | missing_api_key |
E312 |
400 | L'identifiant de transaction est manquant. Veuillez fournir un identifiant de référence valide. | idempotency_key_required |
E313 |
400 | Une erreur s'est produite.Veuillez patienter et réessayer. | — |
E314 |
422 | Le numéro de téléphone doit être au format international, indicatif du pays compris (exemple pour le Bénin : 2290166000000). | phone_international_required |
E315 |
422 | Le pays indiqué (country) ne correspond pas à l'indicatif du numéro de téléphone : le pays est déduit de l'indicatif. | phone_country_mismatch |
E350 |
400 | Le compte associé à ce service n'existe pas. Veuillez contacter l'administrateur pour plus d'informations. | account_unavailable |
E351 |
400 | Le compte associé à ce service n'est pas activé. Veuillez contacter l'administrateur pour plus d'informations. | account_inactive |
E352 |
400 | Le compte associé à ce service est suspendu. Veuillez contacter l'administrateur pour plus d'informations. | account_suspended |
E356 |
403 | Accès interdit. Vous n'êtes pas autorisé à utiliser cette passerelle de transaction. | provider_not_allowed |
E357 |
400 | Le montant minimal à prélever est de {$amount}. | amount_too_small |
E358 |
400 | Le montant maximal à prélever est de {$amount}. | amount_too_large |
E360 |
400 | Le service n'existe pas ou a été désactivé. Veuillez vérifier vos autorisations ou contacter l'administrateur pour plus d'informations. | service_inactive |
E370 |
400 | Le taux de change de la devise {$method} est indisponible pour le moment. Veuillez réessayer plus tard ou utiliser une autre devise. | exchange_rate_unavailable |
E371 |
409 | Le montant à payer a changé : il est maintenant de {$amount}. Veuillez confirmer le nouveau montant. | amount_changed |
E372 |
400 | Le montant ({$amount}) est inférieur ou égal aux frais : aucun crédit ne resterait pour ce service. | amount_below_fees |
E373 |
400 | Les retraits en {$method} ne sont pas disponibles pour le moment : seuls les retraits en XOF sont acceptés. | payout_currency_not_supported |
E374 |
400 | Le montant comporte trop de décimales pour la devise {$method}. | amount_too_many_decimals |
E375 |
400 | Le montant minimal de retrait est de {$amount}. | payout_amount_too_small |
E376 |
400 | Le montant maximal de retrait est de {$amount}. | payout_amount_too_large |
E4xx — Opérateurs, retraits, virements, antifraude et choix de l'opérateur
| Code | HTTP | Message (marchand) | API v2 |
|---|---|---|---|
E410 |
402 | Le client a refusé ou annulé le paiement sur son téléphone. | customer_declined |
E411 |
402 | Le client n'a pas validé le paiement à temps sur son téléphone. | customer_timeout |
E412 |
402 | Le solde Mobile Money du client est insuffisant. | insufficient_funds |
E413 |
402 | Le compte Mobile Money du client a atteint son plafond de transactions. | customer_limit_reached |
E414 |
402 | Le numéro du client n'est pas inscrit au Mobile Money. | customer_not_registered |
E415 |
402 | Opération non autorisée sur le compte Mobile Money du client. | operation_not_allowed |
E416 |
402 | Montant non autorisé pour le compte Mobile Money du client. | amount_not_allowed |
E419 |
502 | L'opérateur n'a pas pu effectuer le paiement. | provider_error |
E420 |
402 | Le numéro bénéficiaire n'est pas inscrit au Mobile Money. | recipient_not_registered |
E421 |
402 | Le numéro bénéficiaire ne peut pas recevoir ce retrait (compte bloqué, inactif ou non autorisé). | recipient_not_allowed |
E422 |
402 | Le compte bénéficiaire ne peut pas recevoir ce montant (plafond atteint ou montant non autorisé). | recipient_limit_reached |
E423 |
503 | Retrait momentanément indisponible. Veuillez réessayer plus tard. | payouts_temporarily_unavailable |
E429 |
502 | L'opérateur n'a pas pu effectuer le retrait. Veuillez réessayer ultérieurement. | provider_error |
E430 |
403 | Ce compte bancaire n'est pas autorisé pour ce service, est inactif ou appartient à une autre banque. | bank_account_not_allowed |
E431 |
401 | La clé secrète est absente ou invalide. | secret_key_required |
E432 |
400 | Montant hors limites pour un retrait bancaire : {$amount}. | payout_amount_out_of_range |
E433 |
429 | Trop de demandes de retrait bancaire en attente pour ce service. Attendez leur traitement avant d'en faire une nouvelle. | too_many_pending_payouts |
E434 |
400 | Plusieurs comptes bancaires autorisés correspondent : indiquez l'identifiant du compte à utiliser. | bank_account_ambiguous |
E435 |
404 | Demande de retrait introuvable. | transaction_not_found |
E436 |
409 | Annulation impossible : la demande est déjà prise en charge ou traitée par l'équipe CashChap. | cannot_cancel |
E437 |
400 | Le solde disponible est insuffisant pour ce retrait. | insufficient_balance |
E438 |
503 | Les retraits vers un compte bancaire sont momentanément indisponibles. | bank_payouts_unavailable |
E439 |
400 | L'identifiant de transaction (X-Transaction-Id) doit être un UUID valide. | invalid_idempotency_key |
E440 |
409 | Cette demande a déjà été traitée. | — |
E441 |
409 | Cette demande est prise en charge par un autre agent. | — |
E442 |
403 | Vous n'avez pas la permission d'effectuer cette action sur les retraits bancaires. | — |
E443 |
409 | Cette référence de virement est déjà utilisée pour une autre demande de la même banque. | — |
E444 |
422 | Données invalides. | — |
E445 |
409 | La demande doit d'abord être prise en charge. | — |
E446 |
403 | Seuls le titulaire du service et les collaborateurs Administrateurs peuvent demander ou annuler un retrait bancaire. | payout_owner_only |
E470 |
429 | Trop de demandes de paiement pour ce marchand en peu de temps (ou trop de retraits pour ce service). Réessayez dans quelques minutes. | rate_limited |
E472 |
429 | Trop de demandes de paiement vers ce numéro en peu de temps. Réessayez dans quelques minutes. | too_many_pending_for_phone |
E477 |
503 | Le retrait est momentanément indisponible. Réessayez dans quelques minutes ; rien n'a été débité. | payouts_temporarily_unavailable |
E480 |
422 | Aucun opérateur ne correspond à ce numéro : vérifiez le numéro ou précisez l'opérateur (champ provider). | provider_required |
E481 |
422 | Plusieurs opérateurs correspondent à ce numéro : précisez l'opérateur (champ provider). | provider_required |
E490 |
403 | Ce numéro (ou ce compte bancaire) a été ajouté il y a moins de 24 h : pour votre sécurité, le premier retrait vers lui sera possible après ce délai (heure indiquée dans le message et dans disponible_le). | recipient_cooling_off |
E491 |
400 | Une partie de votre solde provient d'un crédit manuel récent : elle sera retirable 24 h après son application. Un montant plus petit peut être retiré tout de suite. | balance_not_yet_withdrawable |
E9xx — Erreur inconnue
| Code | HTTP | Message (marchand) | API v2 |
|---|---|---|---|
E999 |
500 | Une erreur inconnue est survenue. Veuillez réessayer plus tard. | internal_error |
Correspondance avec les raisons des opérateurs
Les motifs bruts renvoyés par MTN ou Moov ne sont jamais transmis tels quels : ils sont traduits en codes E41x (encaissement) ou E42x (retrait). Une raison inconnue prend le code générique de l'opération : E419 ou E429 (provider_error en v2).
Mise à jour de cette liste
La liste est une copie contrôlée des fichiers de référence de la plateforme, régénérée à chaque évolution des codes. Un code sans équivalent v2 (—) ne peut pas être renvoyé par l'API v2.