Loading…

VendStack — Merchant Integration Guide

VendStack lets your customers buy from you over WhatsApp, Telegram, USSD and SMS without you building those channels. You keep your wallet, pricing and vending logic; we handle the conversations and hand each order to your backend.

Customer (WhatsApp / Telegram / USSD / SMS)
        ↓
   VendStack  ── menus, sessions, safety ──▶  Your backend (the Merchant API)
        ↓                                          wallet · pricing · vending
   Reply to customer

What you have to do — 3 steps

  1. Create an account & connect your Merchant API in the dashboard — one base URL and a signing secret, set up once. Every channel uses it. → Connecting channels
  2. Turn on a channel. USSD is one click (we assign you a code); WhatsApp is a short guided setup.
  3. Implement the Merchant API — a handful of small HTTP endpoints we call to list products and complete purchases — then test and go live. → Merchant API reference · Going live

Shortcut: grab a starter kit for Laravel, PHP, Node.js or ASP.NET Core — one drop-in file that implements the whole contract, so you write only your wallet and vending logic.

New here? Follow the Setup Guide — a screenshot-by-screenshot walkthrough of everything below, from creating your account to a first test purchase.

That's the whole integration. You implement your backend once; most merchants only need 2–4 endpoints, and we send you a signing secret so you can verify every request is really from us.

Key ideas (read once)

  • One backend, every channel. You configure the Merchant API once (base URL + signing secret) on the Merchant API card. WhatsApp, Telegram, USSD and future channels all call it — you never integrate twice.
  • You own the money. VendStack never holds funds or validates PINs. On every purchase we pass the customer's PIN straight to your /vend endpoint — you validate it and debit the wallet.
  • The customer is identified by their phone number. The payer's number arrives as customer_msisdn on every /vend; the PIN and wallet debit apply to that account. For USSD it's the number they dial from; for WhatsApp it's the number they chat from; for Telegram they share it once (Telegram gives us a chat, not a number), and we key the account on it from then on.
  • Purchases are idempotent. Every order carries a unique reference; if you see the same one twice, treat it as one purchase.
  • We speak plain JSON over HTTPS. No SDK required — though a starter kit will save you the signature, idempotency and routing work if you want one.

Connecting channels

From Dashboard → Integrations:

Merchant API (do this first)

Open the Merchant API card, enter your backend's base URL, and save. We generate your signing secret (shown there to copy). This is the one backend every channel calls — set it up before turning on USSD or WhatsApp.

USSD

Click Set up, enter your business name, and tick the products you sell (Data, Airtime, Cable, Power, Betting). We assign you a dial code like *347*321*1#. Your customers can dial that code (or jump straight in, e.g. *347*321*1*1*08012345678#).

WhatsApp

Click Set up and paste your Meta WhatsApp details (Phone Number ID, Access Token, App ID & Secret). We wire up the webhook with Meta for you — you never touch Meta's webhook screens.

Telegram

Create a bot with @BotFather (about a minute), click Set up, paste the bot token, and tick the products you sell. We wire up the webhook for you. Customers chat your bot — a numbered menu, or the AI assistant, depending on your plan — and share their phone number once so orders map to the right account.

Next

→ Merchant API reference — the endpoints you implement, with request/response examples you can copy.

→ Starter kits — a drop-in file for Laravel, PHP, Node.js or ASP.NET Core that implements the contract for you.