Base URL https://app.notiwa.in/api/v1
Format application/json
Rate Limit 1000 requests / hour
  1. The Notiwa API lets you send WhatsApp messages, manage contacts, and automate notifications from any application.
  2. Authenticate with your API key and start sending in minutes.
  3. Pass `Authorization: Bearer <api_key>` on every `/api/v1/*` request.
Authentication

Every API request uses Bearer token authentication.

Authorization header
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.

NameTypeRequiredDescription
tostringrequiredRecipient number in international format.
messagestringrequiredText content to send.
Request examples
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 response
{
  "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.

NameTypeRequiredDescription
tostringrequiredRecipient number.
urlstringrequiredPublic media URL.
captionstringoptionalOptional caption text.
Request examples
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'];
Response
{
  "success": true,
  "message": "Message sent successfully",
  "data": {
    "type": "image",
    "status": "sent"
  }
}
POST /api/v1/send/list

Send interactive list content for structured choices.

Request examples
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' => []];
Response
{
  "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.

  1. Download the collection and environment files.
  2. Import both into Postman.
  3. Set the api_key variable with your generated key.
  4. Run requests folder by folder.
Common Errors

Typical error states returned by the API.

401Missing or invalid API key
402Insufficient credits
409Instance not connected
429Rate limit exceeded
500Internal server error
Error payload
{
  "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.

cURL
Response
{ "status": "Awaiting request" }