API v1
Authenticated
Home ⚡ Get API Keys

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.

Base URL
All endpoints are relative to the base URL below.
https://easywhats.app/api/v1
⚡ Interactive Playground — Use the auth panel in the sidebar to authenticate with your API key ID and secret, or with your dashboard account, then test live requests against your real tenant data. The token is stored in your browser and pre-filled into every "Try It" form on this page. Need to manage credentials? Open your dashboard credentials →

Status Codes

CodeMeaning
200Success
401Unauthenticated — invalid or missing Bearer token
422Validation error — check the errors field
404Resource not found
500Server 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>.

POST /authenticate Authenticate No auth
Parameters
cURL Example
Response
▶ Try It
FieldTypeRequiredDescription
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
email 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.

GET /instances List Connected Instances Bearer token
Parameters
cURL
▶ Try It

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.

GET /campaigns List Campaigns Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
statusintegeroptionalFilter 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

POST /campaigns Create Campaign Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
numbersstringrequiredComma-separated 11-digit phone numbers. E.g. 96612345678,96698765432
messagestringrequiredMessage text (max 160 chars)
instance_idintegerrequiredID of the connected WhatsApp instance to send from
send_atintegeroptionalMinutes 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

GET /campaigns/{id} Get Campaign Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredCampaign ID
curl -X GET "https://easywhats.app/api/v1/campaigns/1" \
  -H "Authorization: Bearer <token>"
Try It

Token: not authenticated

DELETE /campaigns/{id} Delete Campaign Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredCampaign 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.

GET /messages/{id} Get Message Status Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredWhatsApp 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.

GET /groups List Groups Bearer token
Parameters
cURL
▶ Try It

No parameters. Returns all contact groups.

curl -X GET "https://easywhats.app/api/v1/groups" \
  -H "Authorization: Bearer <token>"
Try It

Token: not authenticated

POST /groups Create Group Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
titlestringrequiredGroup name
parent_idintegeroptionalParent 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

GET /groups/{id} Get Group Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredGroup ID
curl -X GET "https://easywhats.app/api/v1/groups/1" \
  -H "Authorization: Bearer <token>"
Try It

Token: not authenticated

PATCH /groups/{id} Update Group Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredGroup ID
titlestring optional Group name
parent_idintegeroptionalParent 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

DELETE /groups/{id} Delete Group Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredGroup 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.

GET /contacts List Contacts Bearer token
Parameters
cURL
▶ Try It

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

POST /contacts Create Contact Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
group_idintegerrequiredID of the group this contact belongs to
namestringrequiredContact full name
mobilestringrequiredPhone 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

GET /contacts/{id} Get Contact Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredContact ID
curl -X GET "https://easywhats.app/api/v1/contacts/1" \
  -H "Authorization: Bearer <token>"
Try It

Token: not authenticated

DELETE /contacts/{id} Delete Contact Bearer token
Parameters
cURL
▶ Try It
FieldTypeRequiredDescription
idinteger (path)requiredContact ID
curl -X DELETE "https://easywhats.app/api/v1/contacts/1" \
  -H "Authorization: Bearer <token>"
Try It

Token: not authenticated