Getting Started with Wabiss API
v1.0 StandardUse 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.
3-Step Quick Integration
- Create and connect one WhatsApp instance (WhatsApp Web QR or Meta Cloud API) from the dashboard.
- Generate a secure API key from the API Keys page.
- 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 MessageCredits are deducted only for successfully dispatched messages. If a send fails due to an invalid recipient or disconnected instance, no credits are deducted.
/send/template).
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 EndpointsProgrammatically fetch your API key's real-time message volume, charges, category splits, and delivery rates.
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, customfrom & 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, failedtype (string)Optional filter: text, image, document, template, buttons, listcategory (string)Optional filter: MARKETING, UTILITY, AUTHENTICATION, SERVICEpage & 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 CloudThe 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.
Send Template Message
Meta requires approved templates for the first message outside the 24-hour customer service window.
- Create or fetch approved template in your selected Meta instance.
- Use
POST /api/v1/send/templatewithtemplateName,languageCode, and variables. - If the template has URL buttons with
{{1}}, pass values intemplateButtonParams.
{
"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 standardmultipart/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 ReferenceUse 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 instancelanguageCode Exact approved language code (en, en_US, etc.)templateParams BODY variables in order ({{1}}, {{2}}...)templateButtonParams URL button variables in orderURL 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 ConsoleTo receive incoming messages and delivery status updates for your Meta instances, you must configure a webhook inside your Facebook Developer console.
- Go to WhatsApp > Configuration in your Facebook App Dashboard.
- Click Edit next to Webhooks, paste the Callback URL and Verify Token from above, and click Verify and Save.
- Under Webhook fields, click Manage and subscribe to the messages event.
Webhook Events
Instance WebhookWabiss pushes WhatsApp events to your endpoint using the instance webhook URL configured in your Instance settings.
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 ImportImport the collection and environment into Postman to instantly test all endpoints without manual URL or header setup.
- Download the collection and environment from the buttons below.
- Import both files into Postman (File > Import).
- Set the
api_keyvariable in the active Postman environment. - 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 ExecutionSelect any endpoint, customize the JSON payload, and execute the request directly from your browser.
Live cURL Command
Server Response
{ "status": "Awaiting request dispatch" }