WhatsApp API, shipped to you

Wasapin is a hosted WhatsApp Business API — no Meta review, no phone setup, no infrastructure hassles. Integrate in minutes and start sending messages.

🚀 3-min setup 🔒 HMAC-signed webhooks ✅ 99.9% uptime SLA

Quickstart

Send your first WhatsApp message in 3 steps.

1. Create a customer

# Register your business on Wasapin
curl -X POST https://api.wasapin.com/v1/customers \
  -H "Content-Type: application/json" \
  -d '{
   "name": "My Business",
   "email": "owner@mybusiness.com",
   "phoneNumber": "15551234567"
  }'

# Response: { "id": "cst_abc123", ... }

2. Create an API key

# Generate an API key for your customer
curl -X POST https://api.wasapin.com/v1/customers/cst_abc123/keys \
  -H "Content-Type: application/json" \
  -d '{ "label": "production" }'

# Response: { "key": "wap_live_xxxxxxxxxxxx", ... }

3. Send your first message

# Send a WhatsApp message
curl -X POST https://api.wasapin.com/v1/messages \
  -H "Authorization: Bearer wap_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
   "to": "15559876543",
   "template": "welcome",
   "params": { "name": "Alice", "company": "Acme Inc" }
  }'

# Response: { "id": "msg_xyz789", "status": "queued", ... }

📖 API Reference

Base URL: https://api.wasapin.com/v1

MethodEndpointDescription
POST /customers Create a customer account
GET /customers/:id Get customer details
POST /customers/:id/keys Create API key for customer
GET /customers/:id/keys List API keys
DELETE /customers/:id/keys/:keyId Revoke an API key
POST /messages Send a WhatsApp message
GET /messages/:id Get message status and details
GET /messages?status=...&page=1 List messages with optional filters
POST /webhooks Register a webhook endpoint
GET /webhooks List webhooks
PATCH /webhooks/:id Update webhook configuration
DELETE /webhooks/:id Delete a webhook

🔐 Authentication

All API requests (except creating a customer) require a Bearer token in the Authorization header:

Authorization: Bearer wap_live_xxxxxxxxxxxx

API keys are automatically scoped to a single customer. Generate keys from the Customers dashboard or via POST /v1/customers/:id/keys. Keys start with wap_live_ (production) or wap_test_ (sandbox).


💎 Pricing

Pay only for what you use. No hidden fees.

Starter

Free /mo
  • Up to 100 messages / month
  • 1 customer account
  • 3 API keys
  • Webhook support
  • Community support

Enterprise

Custom
  • Unlimited messages
  • Unlimited customers
  • Dedicated WhatsApp number
  • Custom rate limits
  • Priority support 24/7
  • On-premise option

🔔 Webhook Setup

Receive real-time notifications when message statuses change. Wasapin delivers events as HTTP POST requests to your registered endpoints.

Registering an endpoint

curl -X POST https://api.wasapin.com/v1/webhooks \
  -H "Authorization: Bearer wap_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
   "url": "https://myapp.com/webhooks/wasapin",
   "secret": "my-strong-secret-at-least-8-chars",
   "events": ["message.sent", "message.delivered", "message.failed"]
  }'

Event payload

{
  "eventType": "message.delivered",
  "data": {
    "messageId": "msg_xyz789",
    "to": "15559876543",
    "status": "delivered",
    "providerMessageId": "wamid.H4sSOMETHING"
  },
  "timestamp": "2026-07-11T03:30:00.000Z"
}

Verifying signatures

When a secret is configured, every webhook request carries an X-Wasapin-Signature header — an HMAC-SHA256 hex digest of the raw JSON body, keyed with your secret. Always verify this signature before processing the payload.

// Node.js signature verification example
const crypto = require('crypto');

function verifyWasapinSignature(body, secret, signature) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Available events

📨 message.sent

Message was accepted by the WhatsApp provider and queued for delivery.

message.delivered

Message was successfully delivered to the recipient's device.

👁️ message.read

Recipient has read the message (blue ticks).

message.failed

Message delivery failed. Check data.error for the reason.