---
id: test-cards
title: Test cards
summary: The reserved cards in test mode and what each does.
faces: ["public", "agent"]
section: front-end
group: Test and troubleshoot
order: 90
---
# Test cards

Test mode renders a simulated card form. Only the reserved cards exist; they start with 9 and the
last four digits pick the outcome. Any expiry in the future and any 3-digit code work.

| card | outcome |
|---|---|
| `9000 0000 0000 0000` | approved |
| `9000 0000 0000 0002` | soft decline — the form re-arms, three attempts |
| `9000 0000 0000 0003` | hard decline — terminal |
| `9000 0000 0000 0004` | 3-D Secure challenge, then approved |
| `9000 0000 0000 0005` | authentication failed — terminal |

```js run id=test-cards-approved card=0000
const result = await ripper.collect({ amount: 4200, currency: 'GBP' }); // pay with 9000 0000 0000 0000
```

```js run id=test-cards-challenge card=0004
const result = await ripper.collect({ amount: 4200, currency: 'GBP' }); // 9000 0000 0000 0004 shows the challenge, then pays
```

```js run id=test-cards-hard card=0003 outcome=error:declined
const result = await ripper.collect({ amount: 4200, currency: 'GBP' }); // 9000 0000 0000 0003 is declined
```
