EasyWhatsApp API
Programmatically send WhatsApp messages, manage campaigns, contacts, and groups from any platform. All responses are JSON. All protected endpoints require a Bearer token obtained from the authenticate endpoint.
All endpoints are relative to the base URL below.
Status Codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 401 | Unauthenticated — invalid or missing Bearer token |
| 422 | Validation error — check the errors field |
| 404 | Resource not found |
| 500 | Server error |
Authentication
Obtain a Bearer token by posting either your API key ID and secret from the dashboard, or your dashboard email and password. Include the token in every subsequent request as Authorization: Bearer <token>.
| Field | Type | Required | Description |
|---|---|---|---|
| key_id | string | required without email | API Key ID generated from your dashboard credentials page |
| secret | string | required with key_id | API Secret shown once when generating the credential |
| string | required without key_id | Your dashboard account email address | |
| password | string | required with email | Your dashboard account password |
curl -X POST "https://easywhats.app/api/v1/authenticate" \
-H "Content-Type: application/json" \
-d '{
"key_id": "your-key-id",
"secret": "your-api-secret"
}'
{
"status": "success",
"message": "Login successful.",
"token": "1|abcdef123456...",
"token_type": "Bearer",
"app_id": "your-app-id"
}
Try It
Or use dashboard account credentials:
Instances
WhatsApp instances are connected WhatsApp accounts. You need a connected instance ID when creating campaigns.
No parameters required. Returns all connected WhatsApp instances for your account.
curl -X GET "https://easywhats.app/api/v1/instances" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
Campaigns
Campaigns are bulk WhatsApp message jobs. Statuses: 0 Pending · 1 Complete · 2 Canceled · 3 Draft · 4 Running · 5 Completed partially · 6 Failed completely.
| Field | Type | Required | Description |
|---|---|---|---|
| status | integer | optional | Filter by status (0=Pending, 1=Complete, 2=Canceled, 3=Draft, 4=Running, 5=Completed partially, 6=Failed completely) |
curl -X GET "https://easywhats.app/api/v1/campaigns?status=3" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| numbers | string | required | Comma-separated 11-digit phone numbers. E.g. 96612345678,96698765432 |
| message | string | required | Message text (max 160 chars) |
| instance_id | integer | required | ID of the connected WhatsApp instance to send from |
| send_at | integer | optional | Minutes to delay between messages (default: 1) |
curl -X POST "https://easywhats.app/api/v1/campaigns" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"numbers": "96612345678,96698765432",
"message": "Hello from EasyWhatsApp!",
"instance_id": 1,
"send_at": 2
}'
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Campaign ID |
curl -X GET "https://easywhats.app/api/v1/campaigns/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Campaign ID to delete |
curl -X DELETE "https://easywhats.app/api/v1/campaigns/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
Messages
Retrieve the delivery status of individual messages sent through a campaign.
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | WhatsApp message ID |
curl -X GET "https://easywhats.app/api/v1/messages/42" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
Groups
Groups organize your contacts. A contact must belong to a group.
No parameters. Returns all contact groups.
curl -X GET "https://easywhats.app/api/v1/groups" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | required | Group name |
| parent_id | integer | optional | Parent group ID for nested groups |
curl -X POST "https://easywhats.app/api/v1/groups" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"My Group","parent_id":null}'
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Group ID |
curl -X GET "https://easywhats.app/api/v1/groups/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Group ID |
| title | string | optional | Group name |
| parent_id | integer | optional | Parent group ID for nested groups |
curl -X PATCH "https://easywhats.app/api/v1/groups/1" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Updated Name"}'
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Group ID |
curl -X DELETE "https://easywhats.app/api/v1/groups/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
Contacts
Contacts are individual recipients. Each contact belongs to a group.
No required parameters. Returns paginated contacts (10 per page).
curl -X GET "https://easywhats.app/api/v1/contacts" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| group_id | integer | required | ID of the group this contact belongs to |
| name | string | required | Contact full name |
| mobile | string | required | Phone number (with country code) |
curl -X POST "https://easywhats.app/api/v1/contacts" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"group_id":1,"name":"Jane Doe","mobile":"96612345678"}'
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Contact ID |
curl -X GET "https://easywhats.app/api/v1/contacts/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer (path) | required | Contact ID |
curl -X DELETE "https://easywhats.app/api/v1/contacts/1" \ -H "Authorization: Bearer <token>"
Try It
Token: not authenticated