Notiwa API Reference
Everything you need to integrate WhatsApp messaging into your app.
- The Notiwa API lets you send WhatsApp messages, manage contacts, and automate notifications from any application.
- Authenticate with your API key and start sending in minutes.
- Pass `Authorization: Bearer <api_key>` on every `/api/v1/*` request.
Authentication
Every API request uses Bearer token authentication.
Authorization: Bearer wa_your_api_key_here
Messaging Endpoints
Credits are deducted only for successful sends.
POST /send/text1 credit
POST /send/image2 credits
POST /send/document2 credits
POST /send/audio2 credits
POST /send/location1 credit
POST /send/buttons2 credits
POST /send/list2 credits
POST /send/bulk1 per message
POST
/api/v1/send/text
Send a plain text message to a WhatsApp number.
| Name | Type | Required | Description |
|---|---|---|---|
to | string | required | Recipient number in international format. |
message | string | required | Text content to send. |
curl -X POST "https://app.notiwa.in/api/v1/send/text"
-H "Authorization: Bearer wa_your_api_key_here"
-H "Content-Type: application/json"
-d '{
"to": "919876543210",
"message": "Hello from Notiwa"
}'await fetch('https://app.notiwa.in/api/v1/send/text', {
method: 'POST',
headers: {
Authorization: 'Bearer wa_your_api_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '919876543210',
message: 'Hello from Notiwa'
})
});import requests
requests.post(
'https://app.notiwa.in/api/v1/send/text',
headers={'Authorization': 'Bearer wa_your_api_key_here'},
json={'to': '919876543210', 'message': 'Hello from Notiwa'}
)$payload = ['to' => '919876543210', 'message' => 'Hello from Notiwa'];
$ch = curl_init('https://app.notiwa.in/api/v1/send/text');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer wa_your_api_key_here',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_exec($ch);{
"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",
"status": "sent",
"sentAt": "2026-03-20T11:52:10.224Z",
"credits": {
"used": 1,
"remaining": 636
}
}
}
POST
/api/v1/send/image
Send an image by URL with an optional caption.
| Name | Type | Required | Description |
|---|---|---|---|
to | string | required | Recipient number. |
url | string | required | Public media URL. |
caption | string | optional | Optional caption text. |
curl -X POST "https://app.notiwa.in/api/v1/send/image"
-H "Authorization: Bearer wa_your_api_key_here"
-H "Content-Type: application/json"
-d '{
"to": "919876543210",
"url": "https://example.com/photo.jpg",
"caption": "Invoice image"
}'await fetch('https://app.notiwa.in/api/v1/send/image', {
method: 'POST',
headers: {
Authorization: 'Bearer wa_your_api_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '919876543210',
url: 'https://example.com/photo.jpg',
caption: 'Invoice image'
})
});requests.post(
'https://app.notiwa.in/api/v1/send/image',
headers={'Authorization': 'Bearer wa_your_api_key_here'},
json={'to': '919876543210', 'url': 'https://example.com/photo.jpg', 'caption': 'Invoice image'}
)$payload = ['to' => '919876543210', 'url' => 'https://example.com/photo.jpg', 'caption' => 'Invoice image'];{
"success": true,
"message": "Message sent successfully",
"data": {
"type": "image",
"status": "sent"
}
}
POST
/api/v1/send/list
Send interactive list content for structured choices.
curl -X POST "https://app.notiwa.in/api/v1/send/list"
-H "Authorization: Bearer wa_your_api_key_here"
-H "Content-Type: application/json"
-d '{
"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" }
]
}]
}'await fetch('https://app.notiwa.in/api/v1/send/list', {
method: 'POST',
headers: {
Authorization: 'Bearer wa_your_api_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '919876543210',
message: 'Pick a plan',
buttonText: 'View plans',
sections: [{ title: 'Plans', rows: [{ id: 'starter', title: 'Starter', description: '500 credits' }] }]
})
});requests.post(
'https://app.notiwa.in/api/v1/send/list',
headers={'Authorization': 'Bearer wa_your_api_key_here'},
json={'to': '919876543210', 'message': 'Pick a plan', 'buttonText': 'View plans', 'sections': []}
)$payload = ['to' => '919876543210', 'message' => 'Pick a plan', 'buttonText' => 'View plans', 'sections' => []];{
"success": true,
"message": "Message sent successfully",
"data": {
"type": "list",
"status": "sent"
}
}
Contacts & Chats
Read conversation state and contact metadata.
GET /api/v1/chatsChats list
GET /api/v1/contactsContacts list
GET /api/v1/contact/:number/infoContact info
GET /api/v1/contact/:number/profile-picProfile image
POST /api/v1/contact/checkAvailability check
Groups
Create and manage WhatsApp group messaging workflows.
GET /api/v1/groupsList groups
POST /api/v1/groups/createCreate group
POST /api/v1/groups/:groupId/sendSend message
GET /api/v1/groups/:groupId/membersMember list
Instance Endpoints
Use status and QR endpoints for operational visibility.
GET /api/v1/instance/statusConnection state
GET /api/v1/instance/qrFetch current QR
Postman Collection
Import everything once and start testing immediately.
- Download the collection and environment files.
- Import both into Postman.
- Set the
api_keyvariable with your generated key. - Run requests folder by folder.
Common Errors
Typical error states returned by the API.
401Missing or invalid API key402Insufficient credits409Instance not connected429Rate limit exceeded500Internal server error{
"success": false,
"requestId": "req_7f83e8a2c5f0d9ab",
"timestamp": "2026-03-20T11:53:22.111Z",
"error": "Insufficient credits",
"code": "BILLING_INSUFFICIENT_CREDITS",
"details": null,
"meta": {}
}
Try It Out
Send a request directly from the docs using your API key.
{ "status": "Awaiting request" }