Testing
Simulate any order outcome in the test environment.
Orders in the test environment complete without real customer payment. A reserved
value in the order selects the outcome. An onramp reads destination.address. An
offramp reads beneficiary.bank_account.account_number.
The test environment accepts only these reserved values. Any other value returns
400 bad_request and creates no order.
Watch the result on GET /v1/orders/{id} or your
webhook. Every event from this environment carries environment: test.
Test environment only
Reserved values are ordinary data in the live environment. There, an address can receive real crypto and an account number identifies a real bank account. Use reserved values only in the test environment.
Identity test values
The test environment accepts any 11-digit NIN and BVN. Use synthetic identities that match this format. Identity fields do not select the simulated outcome.
| Field | Test value |
|---|---|
nin | 12345678901 |
bvn | 22345678901 |
Do not use a customer's real identity values in the test environment.
Onramp
Set destination.address.
| Value | Result |
|---|---|
0x0000000000000000000000000000000000000001 | order.completed |
0x000000000000000000000000000000000000dead | order.failed (payment_rejected) |
0x0000000000000000000000000000000000fa11ed | order.failed (payout_failed) |
0x00000000000000000000000000000000000faded | order.expired |
0x00000000000000000000000000000000001a66ed | order.completed, delayed |
Offramp
Set beneficiary.bank_account.account_number.
| Value | Result |
|---|---|
1111111111 | order.completed |
2222222222 | order.failed (payment_rejected) |
5555555555 | order.failed (payout_failed) |
9999999999 | order.expired |
7777777777 | order.completed, delayed |
What to expect
payment_rejectedholds no money.payout_failedholds the funds, which Pulse reconciles. Do not retry apayout_failedorder.- An unfunded order stays in
awaiting_paymentfor about 30 seconds, then expires. - A delayed order advances one state per minute, so it settles in about ten minutes. Use it to test pending states and polling.
Example
Create a quote, then create the order with the payout-failure address.
curl https://engine-api.pilot.pulseshiga.io/v1/onramp/orders \
-H "X-API-Key: <your key>" \
-H "Content-Type: application/json" \
-d '{
"reference": "partner-order-88213",
"quote_id": "0198e2c1-…",
"payer": {
"name": "Ada Obi",
"email": "ada@example.com",
"nin": "12345678901",
"bvn": "22345678901"
},
"destination": { "address": "0x0000000000000000000000000000000000fa11ed" }
}'The order reaches the payout stage, then emits order.failed with reason
payout_failed.
Run the outcomes you handle, then walk the going-live checklist.