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

# Test cards and OTP codes

> Simulate every payment outcome in test mode.

## Test cards

Any name, any future expiry (e.g. `12/30`), any CVV (e.g. `123`).

| Card number | When | Result |
| - | - | - |
| `4111 1111 1111 1111` | After OTP | `success` (any other valid card too) |
| `4000 0000 0000 0002` | After OTP | `CARD400_DECLINED` |
| `4000 0000 0000 9995` | After OTP | `CARD400_INSUFFICIENT_FUNDS` |
| `4000 0000 0000 0069` | After OTP | `CARD400_EXPIRED` |
| `4000 0000 0000 0119` | Card entry | `SATIM503_UNAVAILABLE` |
| `4000 0000 0000 0127` | Card entry | `SATIM503_UNAVAILABLE` |

## Test OTP codes

| Code | Result |
| - | - |
| `123456` | Correct → `success` |
| Any other code | Wrong → `OTP400_INVALID` |

## Retries and webhooks

Each failed card uses one of the 3 attempts. The payment returns to `created` with **no webhook**. After the 3rd failure it becomes `failed` and one `payment.failed` is sent.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.