> ## 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.

# Sandbox et tests

> Valeurs de test, montant minimum et cas à couvrir avant de passer en production.

L'environnement Sandbox utilise les mêmes opérations que le Live, avec une clé Sandbox et
`Ipay-Target-Environment: sandbox` ; aucune transaction réelle n'est déclenchée. Les requêtes elles-mêmes
ne sont pas répétées ici : reprenez la [page « Créer une transaction »](/api-reference/transactions/creer-un-paiement)
et celle de [« Consulter une transaction »](/api-reference/transactions/consulter-un-paiement), et remplacez
seulement les valeurs par celles ci-dessous.

## Numéros de test mobile

Pour `Ipay-Payment-Type: mobile` en Sandbox, avec `country: NE` (exemple de la doc), seuls les dix numéros ci-dessous sont acceptés et
simulent chacun un résultat fixe. Tout autre `msisdn` sur ce type renvoie
`400 Bad Request: Incorrect MSISDN`, même bien formé : ce n'est pas un simulateur générique
acceptant n'importe quel numéro.

| MSISDN        | Résultat simulé                              | Statut final renvoyé par l'API                  |
| ------------- | -------------------------------------------- | ----------------------------------------------- |
| `40410000000` | Succès                                       | `succeeded`                                     |
| `40410000001` | Succès                                       | `succeeded`                                     |
| `40410000002` | Erreur                                       | `failed`                                        |
| `40410000003` | Erreur                                       | `failed`                                        |
| `40410000004` | Fonds insuffisants                           | `failed`                                        |
| `40410000005` | Fonds insuffisants                           | `failed`                                        |
| `40410000006` | Refusé                                       | `failed`                                        |
| `40410000007` | Refusé                                       | `failed`                                        |
| `40410000008` | Mise en attente, puis résolution automatique | `pending`, puis `succeeded` après \~90 secondes |
| `40410000009` | Mise en attente, puis résolution automatique | `pending`, puis `succeeded` après \~90 secondes |

« Erreur », « Fonds insuffisants » et « Refusé » partagent le même statut final `failed` : l'API
n'expose pas de sous-catégorie supplémentaire dans le champ `status` pour distinguer ces trois cas.
Les deux numéros de mise en attente ne restent pas indéfiniment `pending` : ils passent
automatiquement à `succeeded` après une résolution différée d'environ 90 secondes — ce n'est ni un
état bloqué à corriger manuellement, ni un résultat aléatoire.

## Montant minimum en Sandbox

Pour `mobile`, le minimum accepté **en Sandbox** est de `50` XOF, alors que le minimum Live du même
type est de `25` XOF. Un montant compris entre `25` et `49` XOF est donc refusé en Sandbox alors
qu'il serait accepté en Live : n'en déduisez pas le comportement de production, et testez votre
gestion d'erreur avec un montant clairement inférieur aux deux seuils.

## Cas à couvrir avant la production

| Cas                  | Valeurs à utiliser                                                                                                                       | Résultat attendu                                                                                                                                                                                                                                                                                              |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Transaction réussie  | `msisdn` `40410000000`, montant ≥ `50` XOF, `transaction_id` neuf — [requête](/api-reference/transactions/creer-un-paiement)             | `200`, puis `succeeded` à la [consultation](/api-reference/transactions/consulter-un-paiement)                                                                                                                                                                                                                |
| Erreur de validation | même corps, montant sous le minimum (ex. `10` XOF) — [requête](/api-reference/transactions/creer-un-paiement)                            | `400 Bad Request: Amount Not Valid`, aucune transaction créée                                                                                                                                                                                                                                                 |
| Doublon de référence | même corps que le premier cas, en réutilisant le `transaction_id` déjà envoyé — [requête](/api-reference/transactions/creer-un-paiement) | Refus, sans seconde transaction créée. **La forme de la réponse en Sandbox n'est pas garantie identique au `422 External Reference Not Valid` du Live** (à confirmer auprès du support) : n'en faites pas une assertion de test — voir [Créer une transaction](/api-reference/transactions/creer-un-paiement) |
| Référence inconnue   | une référence jamais créée sur votre compte — [requête](/api-reference/transactions/consulter-un-paiement)                               | `404 Payment Not Found`                                                                                                                                                                                                                                                                                       |

Traitez l'erreur de validation comme une erreur de saisie côté client, pas comme un incident à
relancer automatiquement. La liste complète des codes et messages est dans
[Erreurs](/api-reference/erreurs).
