Going live
Test your integration, then switch to the live environment.
Test your integration
The test environment has the same endpoints as the live environment. It does not move real money. Use the test base URL and a test API key. Then trigger each outcome your integration handles. See Testing.
Every integration
- Send a request you know is wrong, and branch on the
coderather than the message. See Errors. - Repeat a create request with the same
reference, and confirm you get one result. See Idempotency. - Receive each event on a test webhook endpoint, and confirm your handler verifies the signature. See Webhooks.
Orders
- Quote, create an order, and read it back until it reaches
completed. - Drive an order to
failedandexpiredwith a reserved value, and confirm your handler branches on each. See Testing. - For an offramp, resolve the account first and handle
account_verification_failed.
Collections
- Add a payout account and handle
account_verification_failed. See Payout accounts. - Simulate a deposit of 10 or more, and confirm you match it to your customer by the
collection
reference. See Testing. - Simulate each held outcome, and confirm your handler for
order.heldrecords theheld_reason. - For a naira collection, add a wallet payout account and simulate a transfer of
₦15,000 or more. Confirm that you read
senderandpayoutfromorder.payment_received.
Switch to the live environment
Change the base URL
Point your client at the live base URL. See Environments.
Use your live API key
Replace the test key with the live key. Keep the key on your server, never in a browser or a mobile app. Rotate it if it ever leaks.
Register live webhook endpoints
Register every live endpoint in the Dashboard, and configure each handler with its live signing secret.
Confirm before you ship
One dry run
Complete this list in the live environment with a small amount. Then open the flow to your users.
Every integration
- Every live webhook endpoint has received a live event before launch.
- Every live webhook endpoint verifies
X-Pulse-Signatureagainst the raw request body. See Verify deliveries. - Your webhook handler stores event IDs durably, acknowledges duplicates, and does not depend on delivery order.
- You read
statusfirst, then branch on thecodewhen a request fails. - You repeat timeouts,
503, and500with the samereference, and never with a changed body. - You read amounts as decimal strings, never as numbers.
- Your logs exclude API keys, signing secrets, NINs, BVNs, and full bank account numbers.
Orders
- Your
referenceis unique for every order, and stored before each create. - You handle every terminal status:
completed,expired, andfailed, and stop reading once an order is terminal. See Order status. - You reconcile the delivered amount against
amountinorder.completed. Late funding can change the order'srateanddestination.amount.
Collections
- Your
referencefor each collection is your own ID for that customer, so a retry returns the same collection. - For a stablecoin collection, you show the customer every entry in
deposit_addresses, with the networks from the response. For a naira collection, you showdeposit_accountas the response returns it. - You show the customer the minimum payment, and a maximum below the payment limit.
- You handle
order.held. A held order is not terminal, and you resolve it with support. - You handle
order.failedon an order from a collection payment. Itsreasonispayout_failedorinternal_error. See order.failed.