Migrate from Paystack
Concept and API mapping from Paystack to Watenga's PayFac model — sub-merchants live inside Watenga's ledger with per-transaction statement descriptors.
Not legal advice
This documentation summarizes Watenga's integration and compliance posture for developers and merchants. It does not constitute legal, tax, or regulatory advice. Canonical policies live in our security documentation repository. Consult qualified counsel for jurisdiction-specific obligations.
Before you switch
- Export recent Paystack settlement reports for reconciliation.
- List active webhooks and map event types using the table below.
- Replace
sk_live_Paystack keys with Watengask_live_secret keys. - Embed Watenga.js instead of Paystack inline or popup flows.
Concept mapping
| Paystack | Watenga |
|---|---|
| Transaction | Checkout session → ledger transaction |
| Subaccount | Sub-merchant in Watenga PayFac ledger |
| Transfer recipient | Verified bank account (TOTP to add) |
| Transfer | Payout from Watenga balance |
| Dedicated NUBAN | Not used — aggregate PayFac settlement |
| Split | Transaction splits |
API mapping
| Paystack | Watenga | Notes |
|---|---|---|
| POST /transaction/initialize | POST /v1/checkout/create | Returns checkoutId + widget config |
| GET /transaction/verify/:reference | GET /v1/checkout/:id/status | — |
| GET /transaction/:id | GET /v1/transactions/:id | — |
| GET /transaction | GET /v1/transactions | — |
| POST /refund | POST /v1/transactions/:id/refund | — |
| POST /transfer | POST /v1/payouts/request | — |
| GET /transfer | GET /v1/payouts | — |
| POST /transferrecipient | POST /v1/merchant/bank-accounts | — |
| POST /subaccount | POST /v1/merchant/subaccounts | Subaccounts; PayFac ledger, no per-merchant gateway ID |
| POST /customer | POST /v1/merchant/customers | — |
| GET /customer/:id | GET /v1/merchant/customers/:id | — |
| POST /charge | Watenga.js + COPY&PAY | No direct charge API on merchant server |
| POST /charge_authorization | Not supported v1 | Use checkout per payment |
| POST /plan | POST /v1/subscriptions/subscription-plans | — |
| POST /subscription | POST /v1/subscriptions | — |
| POST /paymentrequest | POST /v1/payment-links | — |
| GET /balance | GET /v1/account/balance | — |
| GET /settlement | Dashboard reports / exports | — |
| POST /bulkcharge | Batch via payment links or API loop | — |
| POST /dedicated_account | Not applicable | Watenga uses unified PayFac settlement |
| POST /split | POST /v1/merchant/splits | Transaction splits |
| GET /bank | GET /v1/meta/markets/:iso2/banks | — |
| POST /decision/bin | Fraud rules (platform) | Contact support for enterprise rules |
Webhooks
Paystack signs with HMAC-SHA512; Watenga uses HMAC-SHA256. Update verification logic and event handlers. Full event catalogue: Webhook reference.
| Paystack event | Watenga event |
|---|---|
| charge.success | payment.capture.completed |
| charge.failed | payment.capture.declined |
| transfer.success | payment.payout-item.succeeded |
| transfer.failed | payment.payout-item.failed |
| transfer.reversed | payment.payout-item.returned |
| refund.processed | payment.refund.completed |
| refund.failed | payment.refund.failed |
| subscription.create | billing.subscription.created |
| subscription.disable | billing.subscription.cancelled |
| invoice.create | invoicing.invoice.created |
| invoice.payment_failed | billing.invoice.payment-failed |
| customeridentification.success | No equivalent event (customer identity) |
Example handler
javascript
// Watenga — verify signature first, then switch on event.type
const event = verifyWatengaWebhook(req.rawBody, req.headers['watenga-signature']);
switch (event.type) {
case 'payment.capture.completed':
await fulfillOrder(event.data.object);
break;
case 'payment.refund.completed':
await markRefunded(event.data.object);
break;
}API keys
- Paystack public key → Watenga publishable key (
pk_test_/pk_live_) - Paystack secret key → Watenga secret key (
sk_test_/sk_live_) - Create keys in the Developer Dashboard per API app.
Test checklist
- Create checkout with
sk_test_and complete a sandbox card payment. - Confirm
payment.capture.completedwebhook delivery. - Issue a partial refund and verify balance + webhook.
- Request a test payout to a verified bank account (sandbox limits apply).
Go live
- Complete market compliance and KYC (dashboard compliance wizard).
- Set statement descriptor suffix (max 14 chars, A–Z 0–9 space dot dash).
- Rotate to
sk_live_and enable live webhooks only on HTTPS endpoints.
Subaccounts
Paystack subaccounts map to Watenga sub-merchants. NMB and card networks see Watenga aggregate volume; Visa statement descriptors show
WATENGA*YOUR_SUFFIX per transaction.