Skip to content

CloudVisan — WhatsApp, Voice AI and workflow automation for modern businesses

Developers

Webhooks and an API that fit into what you already run

Send approved templates from your own systems with a workspace API key. Give your store, CRM or payment gateway a webhook URL that starts a workflow for the customer's number. All samples use placeholders; never put a real key in client-side code.

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

Create a webhook in the workspace, bind it to a workflow, and give its URL to the other system. The workflow runs for the phone number found in the payload.

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 · 200
POST /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

  1. Method. The webhook's configured method only; anything else gets 405.

  2. Secret. If a secret is set, X-Webhook-Secret must match. Compared in constant time; stored hashed.

  3. Rate limit. 120 calls a minute per webhook; the rest get 429.

  4. Log. Method, event type and payload (first 64 KB) are logged, received or failed.

  5. 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.

New webhook

Demo: nothing is created. In the product, the URL and any secret are shown once, then the secret is stored hashed.

Demo Store webhooks

Outbound events

Signed event webhooks are on the roadmap

Today CloudVisan receives webhooks and exposes its logs in the workspace; it does not yet push events to your endpoint. This is the planned design, published so you can plan for it.
  • 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.