Total messages
Sent today
--
Delivered or read
--
Failed
--
WhatsApp connection
Link your personal account with a QR code.
Scan to link your account
- Open WhatsApp on your phone.
- Go to Settings or Linked devices.
- Tap Link a device and scan this code.
The QR code refreshes automatically. Do not share it with anyone.
Connected account
WhatsApp linked
Ready to sendConnect your WhatsApp account
Start the connection and scan the QR code when it appears.
Last 7 days
Messages submitted through this API.
Recent messages
The latest activity from your message log.
| Time | Recipient | Type | Message | Status |
|---|---|---|---|---|
| Loading messages... | ||||
Compose a message
Send text, images, or documents through your linked account.
Message log
Every message submitted through the API, with its latest known status.
Runtime configuration
Settings are loaded from the server's environment at startup.
- Storage
- Loading...
WhatsApp connection
Manage the linked personal account.
Reconnecting does not unlink the account. Unlinking removes the local linked-device credentials and requires a new QR scan.
API key and access
The key is configured on the server.
API key configured
Active
To rotate the key, change API_KEY in .env, restart the server, then unlock this dashboard with the new key. The key is never shown in the dashboard.
Change a setting
Edit .env and restart the process.
# Example WHATSAPP_VERIFY_RECIPIENT=true MAX_MEDIA_MB=16 SEND_RATE_MAX=30
The dashboard shows runtime values, but it does not write to .env. This keeps server credentials out of the browser and avoids unsafe live configuration changes.
REST API
Integrate from any site or app.
Authenticate with your API key and send JSON requests. All endpoints are served from this installation.
http://localhost:3000
/api/messages/send
Send a text, image, or document message.
/api/messages
List messages with pagination and filters.
/api/messages/:id
Get one message and its latest status.
/api/health
Public server health check. No API key needed.
Send a text message
POST /api/messages/send with an API key header.
curl -X POST http://localhost:3000/api/messages/send ^
-H "Content-Type: application/json" ^
-H "X-API-Key: YOUR_API_KEY" ^
-d "{\"to\":\"+14155550123\",\"type\":\"text\",\"text\":\"Hello from my API\"}"
On macOS or Linux, use \ instead of ^ for line continuation.
Send an image or document
Use a base64 data URI, raw base64, or a public media URL.
{
"to": "+14155550123",
"type": "image",
"caption": "Invoice attached",
"mediaUrl": "https://example.com/image.png"
}
For uploads from your own app, send mediaBase64 instead of mediaUrl. Do not include a data URI prefix unless it is base64 encoded.
Authentication
Send the key in either header:
X-API-Key: YOUR_API_KEY Authorization: Bearer YOUR_API_KEY
Keep the key on your server. Never place it in public frontend code.
Useful responses
201 Message submitted 400 Validation error 401 Invalid API key 422 Recipient not found 429 Rate limit exceeded 503 WhatsApp not connected
JavaScript example
const response = await fetch("http://localhost:3000/api/messages/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.WHATSAPP_API_KEY
},
body: JSON.stringify({
to: "+14155550123",
type: "text",
text: "Hello from Node.js"
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error.message);
console.log(result.data);
Before you automate
This project uses Baileys, an unofficial WhatsApp Web client. It is not affiliated with or endorsed by WhatsApp. Automated or bulk messaging can lead to temporary restrictions or a permanent ban. Use it on a personal account at your own risk, keep volumes low, and only message people who expect to hear from you.