> ## Documentation Index
> Fetch the complete documentation index at: https://docs.i-pay.money/llms.txt
> Use this file to discover all available pages before exploring further.

# Erreurs

> Diagnostiquez les réponses d'authentification et de paiement.

Une erreur renvoie un code HTTP non-2xx et un objet JSON qui contient au minimum un champ `message`.
Certaines réponses ajoutent un champ `status` (par exemple `{"status": "failed", "message": "…"}`),
ou remplacent `message` par un tableau `errors` — c'est le cas des erreurs de validation d'un lien de
paiement. Les messages exacts sont listés ci-dessous, d'abord par étape d'authentification, puis par
opération.

## Authentification et en-têtes

Ces vérifications s'exécutent dans cet ordre exact, sur toute opération authentifiée : la première
condition non satisfaite est celle qui détermine la réponse.

| Ordre | HTTP  | Message                                   | Cause                                                                                                                   |
| ----- | ----- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| 1     | `400` | `Bad Request: Missing params`             | Un des quatre en-têtes requis est absent.                                                                               |
| 2     | `406` | `Not Acceptable: Invalid Content Type`    | `Content-Type` n'est pas exactement `application/json`.                                                                 |
| 3     | `400` | `Bad Request: Not Allowed Environment`    | `Ipay-Target-Environment` n'est ni `sandbox` ni `live`.                                                                 |
| 4     | `400` | `Bad Request: Not Allowed Payment Type`   | `Ipay-Payment-Type` n'est pas une valeur acceptée. Pour `POST /payments`, seule la valeur `mobile` est prise en charge. |
| 5     | `400` | `Bad Request: Missing Authentication Key` | `Authorization: Bearer <clé>` absent ou mal formé.                                                                      |
| 6     | `401` | `Unauthorized: No Valid Key`              | La clé ne correspond à aucun compte pour cet environnement.                                                             |
| 7     | `403` | `Forbidden: Environment Not Available`    | Le compte n'est pas validé pour cet environnement.                                                                      |

Une clé Sandbox utilisée avec `Ipay-Target-Environment: live` (ou l'inverse) échoue à l'étape 6, pas
avant : elle est syntaxiquement valide mais ne correspond à aucun compte pour l'environnement
demandé.

## Créer un paiement

| HTTP  | Message                                                                                       | Cause                                                                                                                                                                                                                                                                                                                                                                                 |
| ----- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400` | `Bad Request: Missing Body Params`                                                            | `amount`, `country`, `currency`, `msisdn`, `transaction_id` ou `customer_name` manquant.                                                                                                                                                                                                                                                                                              |
| `400` | `Bad Request: Country Not Allowed`                                                            | `country` différent de `NE` ou `BJ`.                                                                                                                                                                                                                                                                                                                                                  |
| `400` | `Bad Request: Currency Not Allowed`                                                           | `currency` différent de `XOF`.                                                                                                                                                                                                                                                                                                                                                        |
| `400` | `Bad Request: Amount Not Valid`                                                               | `amount` sous le minimum applicable (25 XOF en Live, 50 XOF en Sandbox ; voir [Créer une transaction](/api-reference/transactions#post-payments)).                                                                                                                                                                                                                                    |
| `400` | `Bad Request: Incorrect MSISDN`                                                               | `msisdn` dans un format invalide pour la méthode utilisée.                                                                                                                                                                                                                                                                                                                            |
| `403` | `Contact le support: support@i-pay.money`                                                     | Le compte n'est pas actif (différent de « non validé pour l'environnement », voir la section précédente).                                                                                                                                                                                                                                                                             |
| `422` | `External Reference Not Valid` (avec `status: failed`) — **comportement établi pour le Live** | `transaction_id` déjà utilisé pour ce compte (il devient l'`external_reference` du paiement) : détection de doublon appliquée au niveau applicatif, **non garantie sous appels concurrents**. L'API n'expose aucune clé d'idempotence. **En Sandbox, la réponse à un doublon n'est pas garantie identique** (à confirmer auprès du support) ; le paiement n'est pas créé pour autant. |

## Consulter ou lister des paiements

| HTTP  | Message             | Cause                                                                                                  |
| ----- | ------------------- | ------------------------------------------------------------------------------------------------------ |
| `404` | `Payment Not Found` | Aucun paiement pour cette référence sur le compte authentifié (référence interne ou `transaction_id`). |

## Lien de paiement

| Opération | HTTP  | Message                             | Cause                                                                                |
| --------- | ----- | ----------------------------------- | ------------------------------------------------------------------------------------ |
| Créer     | `404` | `Account not found`                 | Compte introuvable ou inactif pour l'environnement ciblé.                            |
| Créer     | `422` | tableau `errors` (contenu variable) | Échec de validation, par exemple une `reference` fournie manuellement déjà utilisée. |
| Consulter | `404` | `External payment not found`        | Aucun lien pour cette référence.                                                     |

## Traitement recommandé

* Ne relancez jamais automatiquement une erreur `400`, `401`, `403`, `404`, `406` ou `422` sans
  corriger la requête à l'origine du refus : ce sont toutes des erreurs de validation, pas des
  incidents transitoires.
* En cas d'absence de réponse (timeout, coupure réseau) sur une création de paiement, ne rejouez pas
  l'appel à l'aveugle : commencez par vérifier l'état réel avec
  [Consulter une transaction](/api-reference/transactions#get-payments-reference), qui accepte votre
  `transaction_id`. La détection de doublon sur `external_reference` est appliquée au niveau
  applicatif et **n'est pas garantie sous appels concurrents** : deux requêtes envoyées au même
  instant avec le même `transaction_id` peuvent toutes les deux aboutir. Le `422` ci-dessus est le
  comportement établi du Live ; **en Sandbox, la réponse à un doublon n'est pas garantie
  identique** (à confirmer auprès du support). Recommandation (et non
  comportement garanti par l'API) : générez un `transaction_id` unique par tentative et vérifiez le
  statut avant de retenter.
* Journalisez le code HTTP, le message renvoyé, et vos propres références (`transaction_id`,
  `reference` iMoney Encaissement) pour le support — jamais les clés d'API ni les données de paiement du
  client.
* Aucune limite de débit n'est documentée par ce contrat à ce jour : à confirmer auprès du support
  avant un envoi massif ou un sondage fréquent.
