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.

FieldTest value
nin12345678901
bvn22345678901

Do not use a customer's real identity values in the test environment.

Onramp

Set destination.address.

ValueResult
0x0000000000000000000000000000000000000001order.completed
0x000000000000000000000000000000000000deadorder.failed (payment_rejected)
0x0000000000000000000000000000000000fa11edorder.failed (payout_failed)
0x00000000000000000000000000000000000fadedorder.expired
0x00000000000000000000000000000000001a66edorder.completed, delayed

Offramp

Set beneficiary.bank_account.account_number.

ValueResult
1111111111order.completed
2222222222order.failed (payment_rejected)
5555555555order.failed (payout_failed)
9999999999order.expired
7777777777order.completed, delayed

What to expect

  • payment_rejected holds no money. payout_failed holds the funds, which Pulse reconciles. Do not retry a payout_failed order.
  • An unfunded order stays in awaiting_payment for 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.

On this page