OVERVIEW
Good afternoon
Here’s your WhatsApp gateway overview.
Message volume
Requests over the last 14 days
No message requests in this period yet.
Your session
Private WhatsApp connection
No active API key
Secrets are shown only once when you create or rotate a key.
Recent messages
Your latest message activity
| TIME | RECIPIENT | MESSAGE | STATUS |
|---|
No messages yet. Your recent activity will appear here.
| USER | STATUS | LEGACY | ACTIONS |
|---|
Unknown send outcomes
Review these manually; requests are never resent automatically.
| USER | REQUEST | RECIPIENT | MESSAGE | CREATED | RESOLUTION |
|---|
MESSAGING
WhatsApp manage
Connect and manage your private WhatsApp Web session.
Connection
Only your account can view this session and its QR code.
Opening WhatsApp Web. This may take a little while.
Pair only with your own WhatsApp account. Keep the QR code private.
Pairing QR
Open WhatsApp on your phone and link this device.
A QR code appears here when a connection is ready.
QR codes expire and are visible only to your signed-in account.
MESSAGING
Send a message
Send from your connected WhatsApp session.
New message
Check the recipient number and message before sending.
MESSAGING
Messages history
Your latest 100 message requests.
| TIME | RECIPIENT | MESSAGE | STATUS | REQUEST ID |
|---|
No messages match this search.
DEVELOPER
API & docs
Create a private key and connect your website backend.
Your API keys
Create a key for your website backend. The complete secret appears only once.
No API keys yet. Create one to connect your backend.
https://whatsapp.bpcc.org.in/api/v1Authorization: Bearer YOUR_API_KEYMessages use the WhatsApp session connected to your account. API requests do not need a sessionId.
Authentication and setup
Make requests from your server over HTTPS.
- Create a key above and copy the full secret while it is visible.
- Save it in your server environment or secret manager as
WHATSAPP_API_KEY. - Send it in the
Authorization: Bearerheader. Never place it in a browser app or URL. - Connect your WhatsApp account before sending messages.
The dashboard cannot show the full key again. Rotate it immediately if it is exposed; the previous key will stop working.
Send a message
Send one text message from the WhatsApp session connected to this account.
Request fields
| FIELD | TYPE | REQUIREMENT |
|---|---|---|
requestId | string | 8–128 characters: letters, numbers, dot, underscore, colon, or hyphen. Reuse it to safely check the same request. |
number | string | Use a 10-digit Indian mobile number. Country-code handling is automatic. |
message | string | Required, non-empty text; maximum 4,000 characters. |
A repeated requestId with the same number and message returns the existing result. Reusing it with different content returns REQUEST_ID_PAYLOAD_CONFLICT.
cURL
curl -X POST https://whatsapp.bpcc.org.in/api/v1/messages \
-H "Authorization: Bearer $WHATSAPP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"requestId":"order-123-message-1","number":"9876543210","message":"Your order is ready."}'Node.js example
const response = await fetch('https://whatsapp.bpcc.org.in/api/v1/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.WHATSAPP_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
requestId: 'order-123-message-1',
number: '9876543210',
message: 'Your order is ready.'
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error || 'Request failed');
console.log(result.status);PHP cURL example
<?php
$payload = [
'requestId' => 'order-123-message-1',
'number' => '9876543210',
'message' => 'Your order is ready.'
];
$ch = curl_init('https://whatsapp.bpcc.org.in/api/v1/messages');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('WHATSAPP_API_KEY'),
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($body, true);
if ($status >= 400) { throw new RuntimeException($result['error'] ?? 'Request failed'); }
echo $result['status'];Check message status
Use the same requestId to retrieve the latest result.
Example
curl https://whatsapp.bpcc.org.in/api/v1/messages/order-123-message-1 \
-H "Authorization: Bearer $WHATSAPP_API_KEY"
A successful response includes status, messageId, createdAt, submittedAt, and deliveredAt. A missing request returns HTTP 404.
Responses and errors
Every response uses JSON with an ok flag.
| HTTP | ERROR | MEANING |
|---|---|---|
| 400 | INVALID_JSON, INVALID_RECIPIENT, INVALID_MESSAGE, INVALID_REQUEST_ID | Check the request body and field formats. |
| 401 | API_KEY_REQUIRED, API_KEY_INVALID | Check the Bearer token; create or rotate a key in this dashboard. |
| 403 | SUBSCRIPTION_REQUIRED, SUBSCRIPTION_EXPIRED, SERVICE_ACCESS_DENIED | Check service access in your QRPay account. |
| 404 | REQUEST_NOT_FOUND | No message request was found for that requestId. |
| 409 | REQUEST_ID_PAYLOAD_CONFLICT | The requestId was already used with different content. |
| 429 | RATE_LIMITED | The account's per-minute API request limit was reached. |
| 503 | WHATSAPP_NOT_READY, AUTHORIZATION_UNAVAILABLE | Reconnect WhatsApp or try again when authorization is available. |
The default limit is 30 new API send requests per minute per account. A request with an existing requestId is checked for idempotency before the limit is applied. Do not automatically retry an UNKNOWN send with a new requestId.
ACCOUNT
Plans & billing
Manage your QRPay account and subscription.
Subscription management
Your plan, renewal and billing details are managed securely in QRPay.
Open QRPay billingACCOUNT
My profile
Your signed-in QRPay identity.