Quick Start
Go from zero to your first successful payment in under 10 minutes.
Authentication
Secure your API calls with your BillStack public and secret keys.
Virtual Accounts
Understand how virtual accounts work and when to use them.
API Reference
Explore the full BillStack REST API - endpoints, parameters, and responses.
Webhooks
Receive real-time payment notifications delivered straight to your server.
Create a Virtual Account
Follow a step-by-step guide to issuing your first virtual account.
How BillStack works
Getting up and running with BillStack takes four steps. Once you complete them, your integration will be able to issue virtual accounts to customers and automatically respond to incoming payments.1
Get your API keys
Sign in at dashboard.billstack.co and retrieve your API keys from Settings β API Keys. Each business has a public key (used for client-side and checkout flows) and a secret key (used to authenticate server-side API calls and to verify webhook signatures). Keep your secret key on your server - never expose it in client code.
2
Create a virtual account
Call the virtual accounts endpoint to generate a unique bank account number for a customer or order. BillStack returns a NUBAN account number, the bank it belongs to, and the reference you supplied, so your customer can pay into it immediately.
3
Receive a payment
When your customer makes a bank transfer to their virtual account, BillStack detects the credit and records the transaction against the account reference you provided.
4
Handle the webhook
BillStack sends a payment event to your configured webhook URL the moment funds arrive. Verify the signature, parse the payload, and fulfil the order - all in real time.
New to BillStack? The Quick Start guide walks through all four steps above with live code examples so you can test the full flow before going live.
Verifying webhooks
Every webhook BillStack sends is signed so you can confirm it genuinely came from us and was not tampered with in transit. Each request includes these headers:
To verify, recompute the HMAC over the raw request body (exactly as received, before any JSON parsing) prefixed with the timestamp, then compare it to
x-wiaxy-signature-256 using a constant-time comparison.
