APIDeveloper GuideIntegration

How to Send WhatsApp Messages via REST API (Without an Official Business Account)

Integrate WhatsApp messaging into your app with a simple REST API — no Meta approval and no Business API waitlist. Examples in Node.js, Python, PHP and cURL.

June 25, 2026·7 min read

The official WhatsApp Business API requires Meta approval, a verified Facebook Business account, and often weeks of onboarding. For developers who need to send WhatsApp messages today — for order confirmations, OTP codes, appointment reminders, or chatbot flows — there is a faster path: a hosted WhatsApp REST API that wraps the WhatsApp Web multi-device protocol. See exactly what "without Meta approval" does and doesn't mean, or compare the official and unofficial models if you're still deciding which fits.

This guide walks through sending your first WhatsApp message in under 10 minutes using Wasaas.

What you need

  • A Wasaas account — free 7-day trial, no credit card required
  • A WhatsApp number to use as your sender (a regular personal number works fine)
  • Any HTTP client: cURL, Axios, Python requests, or your framework's HTTP library

Step 1 — Connect your WhatsApp number

After signing up, open the dashboard and go to Sessions → New Session. A QR code appears on screen. Open WhatsApp on your phone, go to Settings → Linked Devices → Link a Device, and scan the code. Your number is now connected and ready to send.

You can connect multiple numbers as separate sessions — useful if you manage different brands or need failover.

Step 2 — Generate an API key

Go to Settings → API Keys → Generate Key. Copy the key somewhere safe. It is used as a Bearer token in every API request.

Step 3 — Send your first message

A single POST request is all it takes:

curl -X POST https://wasaas.org/api/v1/messages \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "YOUR_SESSION_ID",
    "to": "966501234567",
    "message": "Hello from Wasaas!"
  }'

Recipient numbers must be in international format without the + prefix. For a Saudi number, that is 966 followed by the 9-digit local number.

A successful response returns {"success":true,"to":"966501234567","status":"sent"}. That is it — the message is on its way. The full reference for every field is in the API documentation.

Step 4 — Send images and documents

Text is just the start. Images and documents each have their own endpoint — an image is sent by URL, while a document is uploaded as base64 so you can generate invoices on the fly without hosting them publicly:

// Image with caption → POST /api/v1/messages/image
{
  "session_id": "YOUR_SESSION_ID",
  "to": "966501234567",
  "image_url": "https://example.com/product-photo.jpg",
  "caption": "Your order is ready for pickup!"
}

// PDF document → POST /api/v1/messages/document
{
  "session_id": "YOUR_SESSION_ID",
  "to": "966501234567",
  "base64": "JVBERi0xLjQKJc...",
  "filename": "Invoice-1042.pdf",
  "mime": "application/pdf"
}

Text, images, and documents are the supported message types today — audio, location pins, and interactive buttons are not available.

Step 5 — Let inbound replies drive a chatbot flow

Wasaas does not POST events to an endpoint you supply — there is no outbound webhook delivery. What it does instead is run replies through the chatbot engine: your WhatsApp service posts each inbound message to /api/v1/incoming, and Wasaas matches it against your configured trigger keywords, advances the conversation, and sends the next reply automatically.

POST /api/v1/incoming
{
  "session_id": "YOUR_SESSION_ID",
  "from": "966501234567",
  "body": "hi"
}

Configure the keyword flows on the Chatbot Flows page first, and the whole conversation history is stored per contact. The field reference is in the API documentation.

Step 6 — Use message templates for consistency

Rather than building message strings in code, Wasaas lets you create reusable templates with variable placeholders. A shipping notification template might look like:

"Hi {{name}}, your order #{{order_id}} has shipped and will arrive by {{date}}. Track it here: {{link}}"

At send time, pass the variable values in the request body. This keeps your code clean and makes it easy for non-developers to update the wording later.

Avoiding bans: what to watch out for

WhatsApp's anti-spam systems flag unusual sending patterns. A few rules of thumb:

  • Warm up new numbers gradually. Start with a low volume — 50–100 messages per day — and increase over 1–2 weeks.
  • Only message people who expect to hear from you. Cold-blasting purchased lists is the fastest way to get a number banned.
  • Use bulk campaigns for large sends. The built-in campaign feature adds random delays between messages, which mimics human behaviour and reduces flagging.
  • Keep opt-out simple. Let people reply "STOP" and honour it immediately.

What to build next

With a working API integration, common next steps include:

  • E-commerce notifications — order confirmed, shipped, delivered, review request
  • Two-factor authentication (2FA) — WhatsApp OTP has higher delivery rates than SMS in many regions
  • Customer support chatbot — keyword-triggered auto-replies handle common questions around the clock
  • Appointment reminders — reduce no-shows with an automated reminder 24 hours before
  • Bulk promotional campaigns — send offers to segmented contact lists with real-time delivery tracking

The complete API reference is available inside your Wasaas dashboard under Docs. Every endpoint includes a live request builder so you can test without writing any code first.

Ready to send WhatsApp messages via API?

Start your free 7-day trial — no credit card required, first message in 10 minutes.

Send WhatsApp Messages via REST API | Wasaas