Docs

Going live

Test on pilot, then switch to production with a short checklist.

Build and test on pilot first, then move to production. This page covers both.

Test on pilot

Pilot is the staging environment. It has the same endpoints as production, and nothing on it moves real money. Point at the pilot host with a pilot key, and run the whole flow.

  • Quote, create an order, and read it back until it reaches completed.
  • Drive an order to failed and expired with a reserved value, and confirm your handler branches on each. See Testing on pilot.
  • Create the same order twice with one reference, and confirm you get one order. See Errors and retries.
  • Send a request you know is wrong, and branch on the code rather than the message. See Errors and retries.
  • For an offramp, resolve the account first and handle account_verification_failed.

Moving a pilot order forward

On production, an order leaves awaiting_payment when the customer sends money. Pilot has no real customer payment, so it advances the order for you. A pilot order completes on its own, and a reserved value drives it to any other outcome. See Testing on pilot.

Switch to production

Change the base URL

Point your client at the production host.

Pilot        https://engine-api.pilot.pulseshiga.io
Production   https://engine-api.pulseshiga.io

Use your production key

Swap the pilot key for the production key. Keep the key on your server, never in a browser or a mobile app. Rotate it if it ever leaks.

Confirm before you ship

One dry run

Walk this list once against production, with a small real amount, before you open the flow to your users.

  • Your reference is unique for every order, and stored before each create. See Errors and retries.
  • You repeat timeouts, 503, and 500 with the same reference, and never with a changed body.
  • You read status first, then branch on the code when a request fails.
  • Your production webhook endpoint verifies X-Pulse-Signature against the raw request body before processing an event. See Webhooks.
  • Your webhook handler stores event ids durably, acknowledges duplicates, and does not depend on delivery order.
  • You handle every terminal status: completed, expired, and failed, and stop reading once an order is terminal. See Order status.
  • You read amounts as decimal strings, never as numbers.
  • Your logs exclude API keys, signing secrets, NINs, BVNs, and full bank account numbers.

destination.amount is quoted, not delivered

The delivered amount can differ from the quote. Reconcile against the amount in order.completed.

On this page