TuagoDevelopers

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.

create-checkout.sh
# 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"}'
→ 200 OK
{
  "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.

pay-by-bank-transfer.sh
curl -X POST https://api.gettaugo.com.ng/v1/whatsapp/checkout/sessions/wsp_sess_…/pay/bank-transfer
→ 200 OK
{
  "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.

Prefer plain REST over the WhatsApp-specific flow? 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.

checkout.ts
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);