Developers
Webhooks and an API that fit into what you already run
REST API
Send a template
POST /api/v1/send_templet sends an approved template to one number. The API key goes in the JSON body; your plan must include API access. The response carries Meta's own answer, including the message id.Send an approved template
curl -X POST https://waba.visansoft.com/api/v1/send_templet \
-H "Content-Type: application/json" \
-d '{
"token": "YOUR_API_KEY",
"sendTo": "919876543210",
"templetName": "order_status_update",
"language": "en",
"exampleArr": ["Asha", "#ORD-1042", "out for delivery"]
}'Inbound webhooks
Start a workflow from any system
Call a CloudVisan webhook
curl -X POST https://waba.visansoft.com/api/webhook/webhook/YOUR_WEBHOOK_ID \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: YOUR_WEBHOOK_SECRET" \
-H "X-Event-Type: payment.captured" \
-d '{ "mobile": "919876543210", "order_id": "ORD-1042", "amount": 84000 }'Incoming request
POST · 200POST /api/webhook/webhook/••••••••
X-Webhook-Secret: •••••••••••• (redacted)
X-Event-Type: payment.captured
Content-Type: application/json
{
"mobile": "91987654XXXX",
"order_id": "ORD-1042",
"amount": 84000
}What the receiver checks
Method. The webhook's configured method only; anything else gets 405.
Secret. If a secret is set, X-Webhook-Secret must match. Compared in constant time; stored hashed.
Rate limit. 120 calls a minute per webhook; the rest get 429.
Log. Method, event type and payload (first 64 KB) are logged, received or failed.
Workflow. The bound workflow starts for the phone number found in the payload.
Recent calls (webhook log)
- 09:14Received200
- 09:02Received200
- 08:47Received200
- 08:31Rejected401
A caller that gets a non-2xx answer retries on its own schedule; every attempt is logged.
Demo Store webhooks
Outbound events
Signed event webhooks are on the roadmap
- message.receivedA customer sent a message.On the roadmap
- message.statusSent, delivered, read or failed.On the roadmap
- template.updatedMeta approved, rejected or paused a template.On the roadmap
- flow.completedA customer submitted a WhatsApp Flow.On the roadmap
- payment.receivedRelayed from your gateway's webhook.On the roadmap
- voice.transcribedA voice message was transcribed.On the roadmap
- call.completedA Voice AI call ended, with its transcript.On the roadmap
- workflow.completedA workflow reached its end.On the roadmap
Planned signing
Each delivery will carry a timestamp and an HMAC-SHA256 of the timestamp and the raw body, keyed with a per-endpoint secret. Verify it with a constant-time compare, reject timestamps older than five minutes, and treat retried deliveries as idempotent by event id.
X-CloudVisan-Signature: t=1758700000,v1=<hex HMAC-SHA256 of "t.body">
Sample payload (redacted)
{
"id": "evt_01J8Z…",
"type": "message.received",
"created_at": "2026-09-24T09:12:44Z",
"tenant": "ten_…",
"data": {
"from": "91987654XXXX",
"type": "text",
"text": "Where is my order ORD-1042?"
}
}Connect CloudVisan to your stack
API access and webhooks are part of plans that include the API. Request access and we will set up a workspace for your integration.