facebook Skip to main content
Meta Tech BSP · REST API · Webhooks

Business WhatsApp API
Integration Made Simple

Connect your application to the official Business WhatsApp API in under 30 minutes. REST endpoints, webhook callbacks, sandbox testing, and ready-to-use SDKs — everything a developer needs to ship fast.

<30 min Integration Time
99.9% API Uptime SLA
REST Standard Protocol
Free Sandbox Access
Quick Setup

Go Live in 4 Simple Steps

No complex infrastructure. No vendor lock-in. Just clean REST calls.

01

Create Meta App

Register on Meta for Developers, create a Business App and link your Facebook Business Manager account.

02

Get API Credentials

Obtain your Phone Number ID, WhatsApp Business Account ID, and generate a permanent Access Token from QuickMessage dashboard.

03

Configure Webhook

Set your HTTPS callback URL to receive incoming messages, delivery receipts, and read receipts in real time.

04

Send First Message

Use our sandbox to test, then go live. Send your first template message with a single REST API call.

API Reference

Core REST Endpoints

Standard HTTP methods. JSON request/response. Bearer token auth.

POST
/v1/messages
Send Message
Send text, template, image, document, audio, video, interactive button, or list message.
GET
/v1/messages/{message_id}
Get Message Status
Retrieve delivery status of a sent message — sent, delivered, read, or failed.
POST
/v1/templates
Create Template
Submit a new message template (marketing / utility / authentication) for Meta approval.
GET
/v1/templates
List Templates
Fetch all approved, pending, and rejected templates for your WhatsApp Business Account.
POST
/v1/media
Upload Media
Upload images, PDFs, audio, or video files and get a media_id to use in messages.
DELETE
/v1/media/{media_id}
Delete Media
Remove an uploaded media asset from the Business WhatsApp API media store.
POST
/v1/contacts/check
Check Contact
Verify whether a phone number is a valid WhatsApp user before sending.
GET
/v1/analytics
Message Analytics
Retrieve sent, delivered, read, and failed counts for a given date range.
Code Samples

Ready-to-Use Integration Code

Copy, paste, and ship. Available in Python, Node.js, and PHP.

whatsapp_client.py Python 3.8+ · pip install requests
"""
QuickMessage Business WhatsApp API — Python Client
Docs: https://quickmessage.in/docs/api
"""
import requests
from typing import Optional

# ── Constants ───────────────────────────────────────────
BASE_URL  = "https://api.quickmessage.in/v1"
API_KEY   = "YOUR_API_KEY"          # from dashboard
PHONE_ID  = "YOUR_PHONE_NUMBER_ID"  # Meta phone number ID

HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type":  "application/json",
}


def send_text(to: str, body: str) -> dict:
    """Send a plain text message."""
    payload = {
        "phone_number_id": PHONE_ID,
        "to":              to,
        "type":            "text",
        "text":           {"body": body},
    }
    res = requests.post(f"{BASE_URL}/messages", json=payload, headers=HEADERS)
    res.raise_for_status()
    return res.json()


def send_template(to: str, template_name: str, lang: str = "en",
                    components: Optional[list] = None) -> dict:
    """Send an approved template message with optional variable components."""
    payload = {
        "phone_number_id": PHONE_ID,
        "to":              to,
        "type":            "template",
        "template": {
            "name":       template_name,
            "language":   {"code": lang},
            "components": components or [],
        },
    }
    res = requests.post(f"{BASE_URL}/messages", json=payload, headers=HEADERS)
    res.raise_for_status()
    return res.json()


# ── Usage example ───────────────────────────────────────
if __name__ == "__main__":
    # Simple text
    result = send_text("919310313545", "Hello from QuickMessage API! 👋")
    print(result)  # {"messages": [{"id": "wamid.xyz"}]}

    # Template with variable
    result = send_template(
        to="919310313545",
        template_name="order_confirmed",
        components=[{
            "type":       "body",
            "parameters": [{"type": "text", "text": "ORD-9876"}],
        }],
    )
    print(result)
Webhooks

Receive Messages &
Delivery Events in Real Time

Configure a single HTTPS endpoint. QuickMessage pushes all incoming messages, delivery receipts, and read receipts to your server instantly — no polling required.

messages User sends you a message
message_status Sent → Delivered → Read → Failed
template_status Template approved or rejected by Meta
account_update Phone number quality rating change
POST /your-webhook-url Incoming message payload
{
  "object": "whatsapp_business_account",
  "entry": [{
    "id": "WABA_ID",
    "changes": [{
      "field": "messages",
      "value": {
        "messages": [{
          "id":        "wamid.abc123",
          "from":      "919310313545",
          "timestamp": "1718500000",
          "type":      "text",
          "text":      {
            "body": "Hello, I need support!"
          }
        }],
        "statuses": [{
          "id":        "wamid.abc123",
          "status":    "read",
          "timestamp": "1718500010",
          "recipient_id": "919310313545"
        }]
      }
    }]
  }]
}
Rate Limits

Business WhatsApp API Messaging Tiers

Limits auto-upgrade as your message quality rating improves.

Tier Unique Users / 24h How to Upgrade API Requests / sec QuickMessage Default
Tier 1 1,000 Send 1K+ msgs in 7 days 80 req/s Starter
Tier 2 10,000 Send 10K+ msgs in 7 days 80 req/s Growth
Tier 3 100,000 Send 100K+ msgs in 7 days 80 req/s Pro
Tier 4 Unlimited Approved by Meta directly 80 req/s Enterprise

⚠️ Sending to users who haven't opted in will lower your quality rating and reduce your tier. Always follow Meta's opt-in guidelines.

Integrations

Connect Business WhatsApp API
With Your Existing Stack

Shopify E-commerce
WooCommerce E-commerce
HubSpot CRM
Salesforce CRM
Zoho CRM CRM
Zapier Automation
Make Automation
Pabbly Automation
Google Sheets Spreadsheet
Razorpay Payments
Cashfree Payments
Custom REST Any Platform
Error Reference

Common API Error Codes & Fixes

130472
User number not on WhatsApp
Fix: Use /contacts/check endpoint before sending to validate the number.
131047
Re-engagement message blocked
Fix: User has not opted in or 24-hour window expired. Send a template instead.
132000
Template not found
Fix: Check template name and language code. Ensure template is APPROVED status.
132001
Template hydration error
Fix: Component variable count mismatch. Match parameters to template placeholders exactly.
130429
Rate limit hit
Fix: Implement exponential backoff. Upgrade messaging tier by improving quality rating.
100
Invalid parameter
Fix: Check required fields: phone_number_id, to, type. Validate phone format (with country code, no +).
Developer FAQ

Technical Questions

</>

Which HTTP methods does the Business WhatsApp API support?

The API is RESTful — POST for sending messages/creating templates, GET for status checks and listing templates, DELETE for removing media. All responses return JSON.

</>

How do I verify webhook authenticity?

QuickMessage signs every webhook POST with an HMAC-SHA256 signature in the X-Hub-Signature-256 header. Compute the HMAC of the raw request body using your app secret and compare before processing.

</>

Can I test without a real phone number?

Yes. Our sandbox environment provides a test phone number and a pre-approved test recipient. Use base URL https://sandbox.quickmessage.in/v1 with your sandbox API key.

</>

What is the maximum message size?

Text messages: 4096 characters. Media files: images 5 MB, video 16 MB, audio 16 MB, documents 100 MB. Templates with variables follow Meta character limits per component.

</>

How do I handle the 24-hour session window?

Once a user messages you, a 24-hour session opens — you can reply with any message type. Outside the window, use only approved templates. Track session expiry server-side using the message timestamp.

</>

Are there official SDKs available?

We provide SDKs for Python (pip install quickmessage), Node.js (npm install @quickmessage/sdk), and PHP (composer require quickmessage/sdk). Community libraries exist for Go, Ruby, and Java.

</>

What authentication method does the API use?

Bearer token authentication. Pass your API key in the Authorization: Bearer YOUR_KEY header. Tokens do not expire but can be regenerated from the dashboard. Never expose tokens client-side.

</>

How do I send interactive button messages?

Set type to "interactive" and provide an interactive object with type "button" or "list". Buttons support up to 3 reply buttons; lists support up to 10 rows across multiple sections.

Start Building on Business WhatsApp API Today

Free sandbox access · REST API + webhooks · Python, Node.js & PHP SDKs · 99.9% uptime SLA · Dedicated developer support.

Ready to 10x your customer engagement? Join 3,000+ businesses using QuickMessage

Wait! Here's a Special Gift

Get our exclusive "WhatsApp Marketing Playbook" FREE - 50+ templates & strategies used by top brands

No spam. Unsubscribe anytime.