Your number
Connect via QR in the dashboard. OTPs, alerts and notifications come from your business line.

Channel · WhatsApp OTP
Via your connected number. Transactional OTP and alerts from your business line. Guide v1.1. One API for Node, Python, PHP, or raw REST.
Same key as email and PushMirror.
npm install @zindua/sdkConnect via QR in the dashboard. OTPs, alerts and notifications come from your business line.

Switch channel to whatsapp in send(): templates and variables stay identical.

Protects your linked number from spam floods. Official SDKs cooperate automatically.
Pass lang: fr, en, sw, ar; template fallback is automatic.

Node, Python, PHP, WordPress on one REST contract for WhatsApp messages.

Trace delivery status in Dashboard → Logs for every WhatsApp send.

Send
Pick a stack. The snippet updates. Same payload everywhere.
REST / curl
POSTSame payload as the SDKs. Send OTP from any backend.
curl.sh
curl -X POST https://zindua.run/api/v1/send \ -H "Authorization: Bearer $ZINDUA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "to": "+243812345678", "channel": "whatsapp", "template": "otp-verification", "lang": "fr", "variables": { "code": "482910" } }'Setup
Five steps from QR scan to production OTP.
01
Sign up at zindua.run and create a project. Copy your API key from the dashboard.

02
Open Projects → WhatsApp, scan the QR with your business phone, then set a sender name.

03
Download the contact card from the dashboard and show it in your app before the first WhatsApp message. Recipients who save the contact see your name in the chat list.

04
Add any template (OTP, alert, receipt…) with variables. Zindua prefixes messages with your sender name automatically.

05
POST to /api/v1/send with channel: whatsapp. Optionally enable “Send contact card on first message” in the dashboard. Each new number gets the card once.

Webhooks
Subscribe in Dashboard → Settings. These events cover your linked WhatsApp line and delivery receipts for messages Zindua sent.
Session linked
whatsapp.session_linked
Fired once when a project successfully links a WhatsApp number (first connect). Use it to mark the line ready in your ops tools.
1# Subscribe in Dashboard → Settings → Webhooks, then handle POSTs.2# Header: X-Zindua-Event: whatsapp.session_linked | whatsapp.session_ended | whatsapp.message.status | campaign.launched3#4# Example body:5# {6# "id": "…",7# "type": "whatsapp.session_ended",8# "version": "2026-04-13",9# "created": "2026-08-01T00:00:00.000Z",10# "data": {11# "projectSlug": "my-app",12# "phoneE164": "+243812345678",13# "status": "ended",14# "reason": "logged_out",15# "dashboardUrl": "https://zindua.run/dashboard/developper/projects/my-app/whatsapp"16# }17# }Header: X-Zindua-Event. Subscribe in Dashboard → Settings → Webhooks.
Checklist
Smoke-test key and channels before production sends.
Phone number in E.164 format (+243…)
WhatsApp session connected and green in dashboard
Sender name set (brand prefix on every message)
Ask users to save your number before important WhatsApp traffic
Template slug exists with required variables (OTP, alerts, notifications…)
API key on server only, never in mobile or browser
Use a resend cooldown / queue so users cannot flood WhatsApp
Optional: subscribe to WhatsApp session webhooks in Dashboard → Settings
Test with the CLI
npx @zindua/cli@latest doctorOTP login and WooCommerce alerts with the official plugin.