wabiss

API Documentation

Developer / API Documentation

Enterprise REST API Reference

v1.0 Live

Comprehensive documentation, interactive payload testing, Postman collections, and webhook integration guide.

Base URL
https://app.wabiss.com/api/v1
Payload Format application/json
UTF-8
Rate Limit 1,000 req / hour
Burst
Authentication Bearer Token
Required

Getting Started with Wabiss API

v1.0 Standard

Use this API to send messages (Text, Image, Document, Audio, Location, Interactive Buttons, Lists, Meta Templates) and query delivery status, message logs, and usage analytics programmatically from any application.

Base URLhttps://app.wabiss.com/api/v1
Formatapplication/json
Rate Limit1,000 requests / hour

3-Step Quick Integration

  1. Create and connect one WhatsApp instance (WhatsApp Web QR or Meta Cloud API) from the dashboard.
  2. Generate a secure API key from the API Keys page.
  3. Pass Authorization: Bearer <api_key> in the request header for all /api/v1/* endpoints.

Authentication

Required Header

All requests to /api/v1/* require Bearer token authentication via the standard HTTP Authorization header.

Authorization: Bearer wa_your_api_key_here

Messaging APIs

1 Credit per Message

Credits are deducted only for successfully dispatched messages. If a send fails due to an invalid recipient or disconnected instance, no credits are deducted.

Meta Cloud API 24-Hour Customer Service Window: Custom messages (Text, Image, Document, Audio, Location) can be sent using both WhatsApp Web and Meta Cloud API instances. For Meta instances, custom messages can only be sent if the recipient messaged you within the last 24 hours. Outside this window, you must use the approved template endpoint (/send/template).
POST /send/text1 credit
POST /send/image1 credit
POST /send/document1 credit
POST /send/audio1 credit
POST /send/location1 credit
POST /send/buttons1 credit
POST /send/list1 credit
POST /send/template1 credit
POST /send/bulk1 per message
POST /send/template-bulk1 per message
POST /media/uploadFree (Host & Meta Sync)
GET /message/:idFree (Dual ID & Content)
GET /message/:id/contentFree (Direct Content)
GET POST /limitsFree (Quota & Cap Check)
GET POST /report/usageFree
POST /report/messagesFree
POST /report/templatesFree
POST /api/v1/send/text

Send a standard plain text message to any international WhatsApp number.

{
  "to": "919876543210",
  "message": "Hello from Wabiss"
}
POST /api/v1/send/image

Send an image by public URL (or base64 data + mimetype in payload).

{
  "to": "919876543210",
  "url": "https://example.com/photo.jpg",
  "caption": "Invoice image"
}
POST /api/v1/send/document

Send documents (PDF, DOCX, XLSX) with custom filenames and captions.

{
  "to": "919876543210",
  "url": "https://example.com/report.pdf",
  "caption": "Monthly report"
}
POST /api/v1/send/audio

Send voice notes or audio files (MP3, OGG, AAC).

{
  "to": "919876543210",
  "url": "https://example.com/audio.mp3"
}
POST /api/v1/send/location

Share GPS coordinates with a named venue or address label.

{
  "to": "919876543210",
  "latitude": 12.9716,
  "longitude": 77.5946,
  "name": "Bengaluru Office"
}
POST /api/v1/send/buttons

Send interactive quick-reply buttons (supported for WWebJS instances).

{
  "to": "919876543210",
  "message": "Choose one",
  "buttons": [
    { "body": "Yes" },
    { "body": "No" }
  ],
  "title": "Confirmation",
  "footer": "Reply now"
}
POST /api/v1/send/list

Send an interactive menu list with selectable options.

{
  "to": "919876543210",
  "message": "Pick a plan",
  "buttonText": "View plans",
  "sections": [
    {
      "title": "Plans",
      "rows": [
        { "id": "starter", "title": "Starter", "description": "500 credits" },
        { "id": "pro", "title": "Pro", "description": "2000 credits" }
      ]
    }
  ]
}
POST /api/v1/send/bulk

Send one message to multiple recipients. Automatically throttled with a safety interval.

{
  "numbers": ["919876543210", "919999999999"],
  "message": "Bulk campaign notification"
}
POST /api/v1/send/template-bulk

Send an approved Meta template to multiple recipients, each with individualized variables.

{
  "templateName": "password_reset_v1",
  "languageCode": "en",
  "recipients": [
    {
      "to": "919876543210",
      "templateParams": ["Jenesh"],
      "templateButtonParams": ["?token=abc123"]
    },
    {
      "to": "919999999999",
      "templateParams": ["Rahul"],
      "templateButtonParams": ["?token=xyz789"]
    }
  ]
}

Standard Success Response

All messaging endpoints return this uniform JSON structure:

{
  "success": true,
  "requestId": "req_7f83e8a2c5f0d9ab",
  "timestamp": "2026-03-20T11:52:10.225Z",
  "message": "Message sent successfully",
  "data": {
    "messageId": "3EB09ABD621F9593655F51",
    "waMessageId": "true_919876543210@c.us_3EB09ABD621F9593655F51",
    "to": "919876543210",
    "type": "text",
    "messageContent": "Hello! Your verification code is 123456.",
    "status": "sent",
    "sentAt": "2026-03-20T11:52:10.224Z",
    "credits": {
      "used": 1,
      "remaining": 636
    }
  },
  "meta": {
    "version": "v1",
    "endpoint": "/api/v1/send/text",
    "instanceId": "inst_abc123",
    "apiKey": "wa_abcd...wxyz"
  }
}

Usage & Reporting APIs

Free Endpoints

Programmatically fetch your API key's real-time message volume, charges, category splits, and delivery rates.

Strict API Key Scoping: Usage reports are strictly isolated. Each API key can only access the message volumes, billing charges, categories, and delivery rates generated exclusively by that specific API key.
GET POST /api/v1/limits or /quota

Retrieve real-time API key spending caps, quota utilization, account balances, plan capacity, and rate limits. Supports both GET and POST.

Example Request (cURL)

curl -X GET "https://app.wabiss.com/api/v1/limits" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response

{
  "success": true,
  "requestId": "req_84f910a3",
  "timestamp": "2026-10-23T04:15:00.000Z",
  "message": "API limits fetched successfully",
  "data": {
    "keyName": "Production Key",
    "channel": "wwebjs",
    "mode": "capped",
    "unit": "messages",
    "limit": 5000,
    "used": 1250,
    "remaining": 3750,
    "usagePercent": 25.0,
    "isExceeded": false,
    "usedMessages": 1250,
    "messagesRemaining": 3750,
    "walletBalance": 479.64,
    "currency": "INR",
    "rates": {
      "utility": 0.17,
      "marketing": 0.91,
      "authentication": 0.17
    },
    "estimatedMessagesRemaining": {
      "utility": 2821,
      "marketing": 527,
      "authentication": 2821
    }
  }
}
GET POST /api/v1/report/usage

Get usage analytics and charges for the authenticated API key. Both GET (query params) and POST (JSON body) are supported.

Parameters

period (string)today, yesterday, week, last_week, month (default), last_month, quarter, all, custom
from & to (string)Custom date range in YYYY-MM-DD format (when period=custom)
groupBy (string)summary (default), day (daily breakdown), month (monthly breakdown), logs (detailed message logs)
status (string)Optional filter: sent, delivered, read, failed
type (string)Optional filter: text, image, document, template, buttons, list
category (string)Optional filter: MARKETING, UTILITY, AUTHENTICATION, SERVICE
page & limit (int)Pagination for day and logs views (default limit: 25, max: 100)

Example Request (cURL)

curl -X GET "https://app.wabiss.com/api/v1/report/usage?period=month&groupBy=day" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response

{
  "success": true,
  "requestId": "req_a1b2c3d4e5f6",
  "timestamp": "2026-09-15T11:45:00.000Z",
  "message": "Usage report fetched successfully",
  "data": {
    "currency": "INR",
    "currencySymbol": "₹",
    "filter": {
      "period": "month",
      "groupBy": "day"
    },
    "summary": {
      "totalSent": 450,
      "totalCharges": 54.00,
      "deliveryRate": "98.2%",
      "delivered": 442,
      "failed": 8
    },
    "categories": {
      "MARKETING": { "count": 250, "charges": 30.00 },
      "UTILITY": { "count": 150, "charges": 18.00 },
      "AUTHENTICATION": { "count": 50, "charges": 6.00 }
    }
  }
}
GET /api/v1/message/:id

Get real-time delivery status and lifecycle timeline for a single message. Supports both internal Wabiss ID (_id) and Meta WhatsApp Message ID (wamid).

// Example: GET /api/v1/message/6ab0cbe9c3e90174fe98ce1d
// Or:      GET /api/v1/message/wamid.HBgMNDY3OTc0NDcyNzExNAUCABEYEkQ0...

{
  "success": true,
  "data": {
    "id": "6ab0cbe9c3e90174fe98ce1d",
    "messageId": "6ab0cbe9c3e90174fe98ce1d",
    "waMessageId": "wamid.HBgMNDY3OTc0NDcyNzExNAUCABEYEkQ0...",
    "to": "919876543210",
    "type": "template",
    "status": "delivered",
    "creditsUsed": 1,
    "timeline": {
      "sentAt": "2026-09-23T10:00:02.000Z",
      "deliveredAt": "2026-09-23T10:00:05.000Z",
      "readAt": "2026-09-23T10:01:20.000Z"
    }
  }
}
POST /api/v1/report/messages

Query message delivery history and status logs for your account.

{
  "status": "delivered",
  "startDate": "2026-09-01",
  "endDate": "2026-09-15",
  "limit": 50
}
POST /api/v1/report/templates

Retrieve aggregate performance metrics for approved Meta templates.

{
  "templateName": "order_update"
}

Meta Cloud API Instances

Official Meta Cloud

The same send endpoints work for both WhatsApp Web QR instances and Meta Cloud API instances. Wabiss routes automatically based on the instance attached to your API key.

WWebJSQR session
MetaOfficial Cloud API
Billing1 credit per message

Send Template Message

Meta requires approved templates for the first message outside the 24-hour customer service window.

  1. Create or fetch approved template in your selected Meta instance.
  2. Use POST /api/v1/send/template with templateName, languageCode, and variables.
  3. If the template has URL buttons with {{1}}, pass values in templateButtonParams.
{
  "to": "919876543210",
  "templateName": "password_reset_v1",
  "languageCode": "en",
  "templateParams": ["Jenesh"],
  "templateButtonParams": ["?token=abc123"]
}

Bulk Personalized Template Send

Use one template and send to many users with per-recipient variables via /send/template-bulk.

{
  "templateName": "password_reset_v1",
  "languageCode": "en",
  "recipients": [
    {
      "to": "919876543210",
      "templateParams": ["Jenesh"],
      "templateButtonParams": ["?token=abc123"]
    },
    {
      "to": "919999999999",
      "templateParams": ["Rahul"],
      "templateButtonParams": ["?token=xyz789"]
    }
  ]
}

Send Media with Meta

For Meta instances, use a public HTTPS media URL. Supported media types are image, document, audio, and video.

{
  "to": "919876543210",
  "mediaUrl": "https://example.com/invoice.pdf",
  "mediaType": "document",
  "message": "Invoice attached"
}

Get Approved Templates

Your API key is automatically linked to your instance, so no instance ID is needed.

GET https://app.wabiss.com/api/v1/templates
Authorization: Bearer YOUR_API_KEY

Media Upload & Hosting (with Meta Cloud Sync)

No Credits Deducted

Upload any document (PDF/DOCX/XLSX), image, video, or audio file directly without base64 encoding, or pass an external URL. Wabiss permanently hosts it on high-speed public storage (guaranteeing Meta download crawlers will never be blocked by 403 or Cloudflare errors), syncs it directly to Meta's Cloud Media API, and returns both the Hosted Public URL and Meta's official mediaId.

Endpoint

POST https://app.wabiss.com/api/v1/media/upload
Authorization: Bearer YOUR_API_KEY
No Base64 Conversion Required!
You can directly upload binary files from your local computer, code, or Postman using standard multipart/form-data. Wabiss takes care of storing and registering it with Meta Cloud.

Option 1: Direct File Upload (multipart/form-data) — Recommended

Upload a local binary file directly from your system or script.

Form Field Type Required Description
file File Required Attach the binary file (PDF, JPG, PNG, DOCX, XLSX, MP4, etc.)
name Text Optional Friendly display title or document name (e.g. August Salary Slip)
curl -X POST "https://app.wabiss.com/api/v1/media/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@/path/to/salary-slip.pdf" \
  -F "name=August Salary Slip"

Option 2: Ingest from External URL (JSON)

curl -X POST "https://app.wabiss.com/api/v1/media/upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/salary-slip.pdf",
    "filename": "August_Salary_Slip.pdf",
    "name": "August Salary Slip"
  }'

Sample Success Response

{
  "success": true,
  "message": "Media uploaded and hosted successfully",
  "data": {
    "id": "673cf824e81992019ab1",
    "mediaId": "1088984423898536",
    "url": "https://app.wabiss.com/uploads/media/1726567890_a1b2_August_Salary_Slip.pdf",
    "fileType": "document",
    "mimeType": "application/pdf",
    "filename": "August_Salary_Slip.pdf",
    "fileSizeBytes": 20480
  }
}

Meta Template Guide

Field Reference

Use this section when sending template APIs from Postman or your backend service.

Field Mapping (/send/template)

to Recipient phone in digits (example: 919876543210)
templateName Approved template name in the same Meta instance
languageCode Exact approved language code (en, en_US, etc.)
templateParams BODY variables in order ({{1}}, {{2}}...)
templateButtonParams URL button variables in order

URL Button Example

For template button URLs like https://site.com/reset/{{1}}, pass only the replacement token in templateButtonParams.

{
  "to": "919876543210",
  "templateName": "password_reset_v1",
  "languageCode": "en",
  "templateParams": ["Jenesh"],
  "templateButtonParams": ["abc123token"]
}

Meta Developer Webhook Setup

Facebook Console

To receive incoming messages and delivery status updates for your Meta instances, you must configure a webhook inside your Facebook Developer console.

Callback URL
https://app.wabiss.com/webhook/meta
Verify Token
wabiss_meta_global_verify
Setup Steps in Meta Developer Console:
  1. Go to WhatsApp > Configuration in your Facebook App Dashboard.
  2. Click Edit next to Webhooks, paste the Callback URL and Verify Token from above, and click Verify and Save.
  3. Under Webhook fields, click Manage and subscribe to the messages event.

Webhook Events

Instance Webhook

Wabiss pushes WhatsApp events to your endpoint using the instance webhook URL configured in your Instance settings.

MethodPOST
Content-Typeapplication/json
Timeout5 seconds

incoming_message Event Payload

{
  "event": "incoming_message",
  "instanceId": "inst_abc123",
  "message": {
    "from": "919876543210@c.us",
    "body": "Hello",
    "timestamp": 1712143512
  }
}

Receiver Example (Node.js Express)

app.post('/my-webhook', express.json(), (req, res) => {
  const payload = req.body;
  console.log('Received WhatsApp Event:', payload.event, payload.message);
  return res.status(200).json({ ok: true });
});

Postman Collection & Environment

1-Click Import

Import the collection and environment into Postman to instantly test all endpoints without manual URL or header setup.

  1. Download the collection and environment from the buttons below.
  2. Import both files into Postman (File > Import).
  3. Set the api_key variable in the active Postman environment.
  4. Execute requests across folders (Messaging, Media, Meta Cloud, Reports).

Common Errors & Troubleshooting

Error Codes
Status Code Meaning Common Cause & Remedy
401 Unauthorized Missing or invalid API key in Authorization header.
402 Payment Required Insufficient credits balance or message limit reached.
409 Conflict Instance disconnected or QR scanning required.
429 Too Many Requests Rate limit exceeded (1,000 requests/hr). Slow down send frequency.
500 Internal Server Error Upstream provider timeout or temporary system exception.

Standard JSON Error Response

{
  "success": false,
  "requestId": "req_7f83e8a2c5f0d9ab",
  "timestamp": "2026-03-20T11:53:22.111Z",
  "error": "Insufficient credits (1 credit required)",
  "code": "BILLING_INSUFFICIENT_CREDITS",
  "details": null
}

Interactive API Playground

Live Execution

Select any endpoint, customize the JSON payload, and execute the request directly from your browser.

No active key found. Generate one here.
Automatically substitutes YOUR_INSTANCE_ID in paths.

Live cURL Command

Server Response

{ "status": "Awaiting request dispatch" }