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

# Test Data

> Complete reference for sandbox test data

Use these test values when testing your integration in the Zentra sandbox environment.

<Warning>
  Test data only works in sandbox mode. Using test data in live mode will result in errors.
</Warning>

<Note>
  Use the values below with reviewed surfaces such as transfers, cards, virtual accounts, payments, and tenant-gated identity flows where your environment exposes them.
</Note>

## Test BVNs

Use these Bank Verification Numbers for testing KYC:

| BVN           | First Name | Last Name | DOB        | Result     |
| ------------- | ---------- | --------- | ---------- | ---------- |
| `22222222222` | John       | Doe       | 1990-01-15 | ✅ Success  |
| `11111111111` | Jane       | Smith     | 1985-05-20 | ❌ Failed   |
| `33333333333` | Bob        | Johnson   | 1992-03-10 | ⏱️ Pending |

## Test NINs

National Identification Numbers for testing:

| NIN           | Result     |
| ------------- | ---------- |
| `12345678901` | ✅ Valid    |
| `00000000000` | ❌ Invalid  |
| `99999999999` | ⏱️ Pending |

## Test Cards

### Successful Transactions

| Card Number           | Brand      | Type   | CVV | Expiry |
| --------------------- | ---------- | ------ | --- | ------ |
| `5060990580000217499` | Verve      | Debit  | 123 | 12/26  |
| `4084080000000409`    | Visa       | Debit  | 123 | 12/26  |
| `5399830000000062`    | Mastercard | Credit | 123 | 12/26  |
| `5531886652142950`    | Mastercard | Debit  | 564 | 09/26  |

### Failed Transactions

| Card Number        | Brand | Reason               |
| ------------------ | ----- | -------------------- |
| `4000000000000002` | Visa  | ❌ Declined           |
| `4000000000000127` | Visa  | ❌ Insufficient funds |
| `4000000000000119` | Visa  | ❌ Processing error   |
| `4000000000000341` | Visa  | ❌ Expired card       |

### 3D Secure Cards

| Card Number        | Brand | 3DS Outcome                   |
| ------------------ | ----- | ----------------------------- |
| `4000000000003220` | Visa  | ✅ Authentication successful   |
| `4000000000003063` | Visa  | ❌ Authentication failed       |
| `4000000000003196` | Visa  | ⚠️ Authentication unavailable |

**Default PIN for test cards**: `1234`

## Test Bank Accounts

### Valid Accounts

| Account Number | Bank Name   | Bank Code | Account Name   |
| -------------- | ----------- | --------- | -------------- |
| `0123456789`   | GTBank      | 058       | John Doe       |
| `9876543210`   | Zenith Bank | 057       | Jane Smith     |
| `1234567890`   | Access Bank | 044       | Bob Johnson    |
| `5555555555`   | First Bank  | 011       | Alice Williams |
| `7777777777`   | UBA         | 033       | Charlie Brown  |
| `3333333333`   | Wema Bank   | 035       | David Miller   |

### Invalid Accounts

| Account Number | Behavior            |
| -------------- | ------------------- |
| `0000000000`   | ❌ Invalid account   |
| `1111111111`   | ❌ Account not found |
| `9999999999`   | ❌ Account closed    |

## Test Phone Numbers

| Phone Number     | OTP    | Result        |
| ---------------- | ------ | ------------- |
| `+2348012345678` | 123456 | ✅ Success     |
| `+2348087654321` | 000000 | ❌ Invalid OTP |
| `+2348011111111` | Any    | ⏱️ Timeout    |

## Test Email Addresses

| Email                   | Behavior                   |
| ----------------------- | -------------------------- |
| `success@usezentra.com` | ✅ All operations succeed   |
| `fail@usezentra.com`    | ❌ All operations fail      |
| `pending@usezentra.com` | ⏱️ Operations stay pending |

## Test Amounts

Specific amounts trigger different behaviors:

| Amount (Kobo) | Amount (NGN) | Behavior                     |
| ------------- | ------------ | ---------------------------- |
| `10000`       | ₦100.00      | ✅ Success                    |
| `99999`       | ₦999.99      | ❌ Transaction limit exceeded |
| `12345`       | ₦123.45      | ⏱️ Stays pending             |
| `50000`       | ₦500.00      | ✅ Success (most common)      |

## Test Transfer References

| Reference     | Behavior                |
| ------------- | ----------------------- |
| `TRF_SUCCESS` | ✅ Completes immediately |
| `TRF_FAIL`    | ❌ Fails with error      |
| `TRF_PENDING` | ⏱️ Stays pending        |
| `TRF_TIMEOUT` | ⏱️ Times out            |

## Test Webhooks

### Virtual Account Credits

Simulate a credit by transferring from these accounts:

| Sender Account | Sender Bank | Amount | Delay      |
| -------------- | ----------- | ------ | ---------- |
| `0123456789`   | GTBank      | Any    | Instant    |
| `9876543210`   | Zenith      | Any    | 5 seconds  |
| `5555555555`   | First Bank  | Any    | 30 seconds |

### Manual Webhook Trigger

Use the sandbox tooling available to your tenant to trigger or replay webhook events rather than relying on undocumented direct trigger endpoints.

## Test API Keys

Example sandbox API keys (these are public and safe to share):

```
Secret Key: sk_sandbox_1234567890abcdefghijklmnopqrstuvwxyz
Public Key: pk_sandbox_1234567890abcdefghijklmnopqrstuvwxyz
```

<Info>
  Generate your own keys in the [Developer Console](https://api.usezentra.com/developer/signin?callbackUrl=%2Fdeveloper%2Fapi-keys)
</Info>

## Test Scenarios

### Successful Flow

```javascript theme={null}
// 1. Verify BVN
const verification = await client.identity.verifyBvn({
  bvn: '22222222222',
  firstName: 'John',
  lastName: 'Doe',
  dateOfBirth: '1990-01-15'
});

// 2. Make transfer (when your sandbox tenant is funded)
const transfer = await client.transfers.create({
  amountMinor: 50000,
  destinationBankCode: '058',
  destinationAccountNumber: '0123456789',
  destinationAccountName: 'Sandbox Beneficiary',
  narration: 'Test',
  reference: 'TRF_SUCCESS'
});
```

### Error Handling Flow

```javascript theme={null}
try {
  // This will fail - invalid BVN
  await client.identity.verifyBvn({
    bvn: '11111111111',
    firstName: 'John',
    lastName: 'Doe',
    dateOfBirth: '1990-01-15'
  });
} catch (error) {
  console.log('Expected error:', error.code);
  // Output: 'invalid_bvn'
}

try {
  // This will fail - insufficient balance
  const transfer = await client.transfers.create({
    amountMinor: 999999999,
    destinationAccountNumber: '0123456789',
    destinationBankCode: '058',
    narration: 'Test'
  });
} catch (error) {
  console.log('Expected error:', error.code);
  // Output: 'insufficient_balance'
}
```

## Testing Tips

<AccordionGroup>
  <Accordion title="Mix Success and Failure">
    Test both successful and failed scenarios to ensure proper error handling.
  </Accordion>

  <Accordion title="Use Realistic Data">
    While values are fake, use realistic formats for better testing.
  </Accordion>

  <Accordion title="Test Edge Cases">
    Test with minimum amounts, maximum amounts, and special characters.
  </Accordion>

  <Accordion title="Verify Webhooks">
    Ensure webhooks are properly received and processed.
  </Accordion>

  <Accordion title="Test Idempotency">
    Try submitting the same request twice with the same reference.
  </Accordion>
</AccordionGroup>

## Regional Test Data

### Nigeria-Specific

| Data Type | Test Value     |
| --------- | -------------- |
| Phone     | +2348012345678 |
| BVN       | 22222222222    |
| NIN       | 12345678901    |
| Bank Code | 058 (GTBank)   |

## Next Steps

<CardGroup cols={2}>
  <Card title="Sandbox Guide" icon="flask" href="/resources/sandbox">
    Learn about sandbox environment
  </Card>

  <Card title="API Reference" icon="book" href="/api-reference/overview">
    Explore all endpoints
  </Card>

  <Card title="Testing Guide" icon="vial" href="/guides/going-live">
    Best testing practices
  </Card>

  <Card title="Webhooks" icon="webhook" href="/guides/handling-webhooks">
    Test webhook events
  </Card>
</CardGroup>
