All PlatformsAdvancedUpdated May 22, 2026

API & Webhooks

Programmatically send messages, listen for events, and integrate BotWave with your own backend.

API & Webhooks

BotWave exposes a REST API and outbound webhooks so you can integrate it with your own systems โ€” CRMs, ticketing, analytics, alerting.

Getting an API Key

  1. Dashboard โ†’ Settings โ†’ API Keys
  2. Click Generate new key
  3. Copy the key (shown once). Treat it like a password.

Authentication

Send the key as a bearer token:

bash
curl -H "Authorization: Bearer $BOTWAVE_API_KEY" \
  https://www.botwave.online/api/v1/sessions

Common Endpoints

MethodPathUse
GET/api/v1/sessionsList your sessions
POST/api/v1/messagesSend a message via a session
GET/api/v1/messages?session=...List recent messages
POST/api/v1/webhooksRegister an outbound webhook
DELETE/api/v1/webhooks/{id}Remove a webhook

Sending a Message

bash
curl -X POST https://www.botwave.online/api/v1/messages \
  -H "Authorization: Bearer $BOTWAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "sess_abc123",
    "to": "120363025xxxxxx@g.us",
    "text": "Hello from the BotWave API!"
  }'

Webhooks

Register a URL and BotWave will POST every incoming event to it. Payload:

json
{
  "event": "message.received",
  "session_id": "sess_abc123",
  "from": "+15551234567",
  "group_id": "120363025xxxxxx@g.us",
  "text": "Hi bot",
  "timestamp": "2026-05-22T10:31:46Z"
}

Supported events: message.received, message.sent, session.connected, session.disconnected, member.joined, member.left.

Rate Limits

PlanRequests / minuteWebhook event rate
Free6030 / min
Pro600300 / min
Business6,000Unlimited fair-use

Signing & Verification

Webhook requests include an X-Botwave-Signature header (HMAC-SHA256 of the body using your webhook secret). Always verify before trusting the payload.

js
import crypto from 'node:crypto';

const sig = req.headers['x-botwave-signature'];
const expected = crypto
  .createHmac('sha256', process.env.BOTWAVE_WEBHOOK_SECRET)
  .update(req.rawBody)
  .digest('hex');
if (sig !== expected) return res.status(401).end();
Was this page helpful? Found a typo? Open an issue.Edit this page on GitHub

Related guides

Need more help?

Browse more guides, the FAQ, or start using BotWave now.