Get started
Quickstart
Collect a payment through WhatsApp, confirmed by the bank the instant it lands, no screenshots, no manual reconciliation.
1. Get your API keys
Sign up, create a project, and you'll get a test key pair immediately (pk_test_… / sk_test_…). Test mode uses the sandbox bank rail, nothing moves real money. Live keys unlock after business KYC.
2. Create a checkout session
One call returns everything you need to render payment options in a WhatsApp chat, no redirect to a hosted page required.
# amount is always integer minor units (kobo), never floats
curl https://api.gettaugo.com.ng/v1/whatsapp/checkout/sessions \
-H "Authorization: Bearer sk_test_…" \
-H "Content-Type: application/json" \
-d '{"amount": 1850000, "customerEmail": "customer@example.com", "mode": "headless"}'{
"status": true,
"data": {
"id": "wsp_sess_…",
"mode": "headless",
"amountMinor": "1850000",
"currency": "NGN",
"status": "PENDING",
"paymentMethods": [
{ "method": "bank_transfer", "status": "available", "action": { "verb": "POST", "endpoint": "/v1/whatsapp/checkout/sessions/wsp_sess_…/pay/bank-transfer" } },
{ "method": "ussd", "status": "available", "action": { "verb": "POST", "endpoint": "/v1/whatsapp/checkout/sessions/wsp_sess_…/pay/ussd" } }
]
}
}3. Generate payment instructions only for the method the customer picks
Sessions are lazy, like Stripe/Paystack: creating a session never touches the bank rail. Only once the customer actually picks a method do you call its endpoint, this is the only point a virtual account gets created.
curl -X POST https://api.gettaugo.com.ng/v1/whatsapp/checkout/sessions/wsp_sess_…/pay/bank-transfer{
"status": true,
"data": {
"bankName": "Wema Bank",
"accountNumber": "9012345678",
"accountName": "Tuago Gateway",
"amount": "18500",
"reference": "wsp_ref_…",
"expiresAt": "2026-08-05T14:30:00.000Z"
}
}4. Listen for the webhook
The moment the bank confirms the transfer, you get a signed charge.success webhook, no polling, no screenshot from the customer. See Webhooks for signature verification.
POST /v1/charges works the same way, see the Node SDK reference.Node SDK
@tuago/node wraps all of this with types, full reference here.
import { Tuago } from "@tuago/node";
const tuago = new Tuago({ secretKey: process.env.TUAGO_SECRET_KEY! });
const session = await tuago.checkout.create({
amount: 1850000,
customerEmail: "customer@example.com",
mode: "headless",
});
// once the customer picks a method:
const instructions = await tuago.checkout.payByBankTransfer(session.id);