WA-AKGv1.7.1-beta.2

For the most up-to-date API reference and interactive testing, please check the Swagger UI or the Dashboard API Docs.

WA-AKG API Documentation

WhatsApp AI Gateway — Complete API Reference

Professional WhatsApp Gateway REST API with 86 routes for complete WhatsApp automation.

🔐 Authentication

All endpoints require one of the following authentication methods:

MethodHeader / CookieExample
API KeyX-API-Key (header)X-API-Key: your-api-key-here
Session Cookienext-auth.session-token (cookie)Automatically managed by browser

📋 Common Parameters

ParameterFormatExample
sessionIdUnique session identifiersession-01
jid (Personal){countryCode}{number}@s.whatsapp.net[email protected]
jid (Group){groupId}@g.us[email protected]

📂 Media

[GET] /media/{filename}

Get uploaded media file

Parameters

NameLocated inRequiredTypeDescription
filenamepath✅ Yesstring—

Responses

CodeDescription
200File data

cURL Example

bash
curl -X GET "http://localhost:3000/api/media/image.jpg" \
  -H "X-API-Key: your-api-key"

📂 Groups

[POST] /groups/{sessionId}/{jid}/leave

Leave a group

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Left the group successfully

cURL Example

bash
curl -X POST "http://localhost:3000/api/groups/session-01/[email protected]/leave" \
  -H "X-API-Key: your-api-key"

[GET] /groups/{sessionId}

List all groups

Get all groups associated with the session

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200List of groups
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Resource not found
500Failed to fetch groups

Response Example (200):

json
[
  {
    "id": "string",
    "subject": "string",
    "desc": "string",
    "owner": "string",
    "size": 0,
    "isCommunity": true,
    "linkedParentJid": "string",
    "participants": [
      {
        "id": "string",
        "admin": "string"
      }
    ]
  }
]

cURL Example

bash
curl -X GET "http://localhost:3000/api/groups/session-01" \
  -H "X-API-Key: your-api-key"

[POST] /groups/{sessionId}/create

Create new group

Create a new group with specified participants

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
subjectstring✅ Yes—
participantsarray of string✅ Yes—

Example:

json
{
  "subject": "VIP Customers",
  "participants": [
    "[email protected]"
  ]
}

Responses

CodeDescription
200Group created
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to create group
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
groupobjectNo—

Response Example (200):

json
{
  "success": true,
  "group": {
    "id": "string",
    "subject": "string",
    "desc": "string",
    "owner": "string",
    "size": 0,
    "isCommunity": true,
    "linkedParentJid": "string",
    "participants": [
      {
        "id": "string",
        "admin": "string"
      }
    ]
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/groups/session-01/create" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"subject":"VIP Customers","participants":["[email protected]"]}'

[PUT] /groups/{sessionId}/{jid}/subject

Update group subject

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
subjectstring✅ Yes—

Example:

json
{
  "subject": "string"
}

Responses

CodeDescription
200Subject updated
400Invalid subject
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to update subject

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
subjectstringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "subject": "string"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/subject" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"subject":"string"}'

[PUT] /groups/{jid}/subject

Update group name

Update group subject (max 100 characters, requires admin)

Parameters

NameLocated inRequiredTypeDescription
jidpath✅ YesstringURL-encoded group JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
sessionIdstring✅ Yes—
subjectstring✅ Yes—

Example:

json
{
  "sessionId": "string",
  "subject": "string"
}

Responses

CodeDescription
200Subject updated
400Invalid request (missing fields or subject too long)
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to update group subject
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
subjectstringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Group subject updated successfully",
  "subject": "New Subject"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/[email protected]/subject" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"string","subject":"string"}'

[PUT] /groups/{sessionId}/{jid}/members

Manage group members

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
actionstring✅ YesOptions: add, remove, promote, demote
participantsarray of string✅ Yes—

Example:

json
{
  "action": "add",
  "participants": [
    "string"
  ]
}

Responses

CodeDescription
200Members updated
400Invalid action
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to update members

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
resultarray of objectNo—

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "result": [
    {
      "text": "Hello from WA-AKG!"
    }
  ]
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/members" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"action":"add","participants":["string"]}'

[PUT] /groups/{sessionId}/{jid}/invite

Revoke invite code

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Invite revoked
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to revoke code

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
newInviteCodestringNo—
inviteUrlstringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "newInviteCode": "string",
  "inviteUrl": "string"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/invite" \
  -H "X-API-Key: your-api-key"

[GET] /groups/{sessionId}/{jid}/invite

Get invite code

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Invite code
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to get code

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
inviteCodestringNo—
inviteUrlstringNo—

Response Example (200):

json
{
  "success": true,
  "inviteCode": "string",
  "inviteUrl": "string"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/groups/session-01/[email protected]/invite" \
  -H "X-API-Key: your-api-key"

[GET] /groups/{sessionId}/{jid}

Get group details

Get detailed group information

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Group details
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Resource not found
500Failed to fetch details

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
subjectstringNo—
subjectOwnerstringNo—
subjectTimenumberNo—
descstringNo—
descOwnerstringNo—
descIdstringNo—
ownerstringNo—

Response Example (200):

json
{
  "id": "string",
  "subject": "string",
  "subjectOwner": "string",
  "subjectTime": 0,
  "desc": "string",
  "descOwner": "string",
  "descId": "string",
  "owner": "string"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/groups/session-01/[email protected]" \
  -H "X-API-Key: your-api-key"

[POST] /groups/{jid}/leave

Leave group

Parameters

NameLocated inRequiredTypeDescription
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
sessionIdstring✅ Yes—

Example:

json
{
  "sessionId": "string"
}

Responses

CodeDescription
200Left group

cURL Example

bash
curl -X POST "http://localhost:3000/api/groups/[email protected]/leave" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"string"}'

[POST] /groups/{sessionId}/invite/accept

Accept group invite

Join a group using an invite code

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
inviteCodestring✅ Yes—

Example:

json
{
  "inviteCode": "string"
}

Responses

CodeDescription
200Group invite accepted
400Invalid/Expired code
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to accept invite
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
groupJidstringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "groupJid": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/groups/session-01/invite/accept" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"inviteCode":"string"}'

[DELETE] /groups/{sessionId}/{jid}/picture

Remove group picture

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Picture removed

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/groups/session-01/[email protected]/picture" \
  -H "X-API-Key: your-api-key"

[PUT] /groups/{sessionId}/{jid}/picture

Update group picture

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (multipart/form-data)

FieldTypeRequiredDescription
filestring (binary)✅ Yes—

Example:

json
{
  "file": "(binary)"
}

Responses

CodeDescription
200Picture updated

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/picture" \
  -H "X-API-Key: your-api-key" \
  -F "file=@/path/to/file.jpg" \
  -F "type=image" \
  -F "caption=Hello"

[PUT] /groups/{sessionId}/{jid}/settings

Update group settings

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
settingstring✅ Yesannouncement (admins only send), not_announcement (all send), locked (admins only edit), unlocked (all edit) Options: announcement, not_announcement, locked, unlocked
valuebooleanNoIgnored but required

Example:

json
{
  "setting": "announcement",
  "value": true
}

Responses

CodeDescription
200Settings updated

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/settings" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"setting":"announcement","value":true}'

[PUT] /groups/{sessionId}/{jid}/description

Update group description

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
descriptionstringNo—

Example:

json
{
  "description": "string"
}

Responses

CodeDescription
200Description updated
400Invalid input
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to update

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
descriptionstringNo—

Response Example (200):

json
{
  "success": true,
  "description": "string"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/description" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"description":"string"}'

[PUT] /groups/{sessionId}/{jid}/ephemeral

Toggle disappearing messages

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
expirationinteger✅ YesOptions: 0, 86400, 604800, 7776000

Example:

json
{
  "expiration": 0
}

Responses

CodeDescription
200Ephemeral toggled
400Invalid expiration
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to toggle

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
expirationintegerNo—

Response Example (200):

json
{
  "success": true,
  "expiration": 0
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/groups/session-01/[email protected]/ephemeral" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"expiration":0}'

📂 Documentation

[GET] /docs

Get Swagger JSON specification

Responses

CodeDescription
200Swagger JSON spec

cURL Example

bash
curl -X GET "http://localhost:3000/api/docs" \
  -H "X-API-Key: your-api-key"

📂 Chats

[GET] /chats/by-label/{labelId}

Get chats by label ID

Parameters

NameLocated inRequiredTypeDescription
labelIdpath✅ Yesstring—

Responses

CodeDescription
200List of chats with the label

cURL Example

bash
curl -X GET "http://localhost:3000/api/chats/by-label/label_01" \
  -H "X-API-Key: your-api-key"

📂 Web Authentication

[POST] /auth/register

Register a new user

Register a user via web.

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ Yes—
emailstring✅ Yes—
passwordstring✅ Yes—

Example:

json
{
  "name": "John Doe",
  "email": "[email protected]",
  "password": "password123"
}

Responses

CodeDescription
200User registered

cURL Example

bash
curl -X POST "http://localhost:3000/api/auth/register" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"John Doe","email":"[email protected]","password":"password123"}'

[GET] /auth/session

Get current web session

Check if the user is authenticated in the web dashboard

Responses

CodeDescription
200Current session

Response Fields (200):

FieldTypeRequiredDescription
userobjectNo—
expiresstringNo—

Response Example (200):

json
{
  "user": {
    "name": "string",
    "email": "string",
    "image": "string"
  },
  "expires": "string"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/auth/session" \
  -H "X-API-Key: your-api-key"

[GET] /auth/csrf

Get CSRF token

Retrieve CSRF token for form submissions

Responses

CodeDescription
200CSRF Token

Response Fields (200):

FieldTypeRequiredDescription
csrfTokenstringNo—

Response Example (200):

json
{
  "csrfToken": "string"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/auth/csrf" \
  -H "X-API-Key: your-api-key"

📂 Sessions

[GET] /sessions

List all accessible sessions

Get all sessions accessible to the authenticated user (role-based filtering)

Responses

CodeDescription
200List of sessions
401Unauthorized - Invalid or missing API key

Response Example (200):

json
[
  {
    "id": "clx123abc",
    "name": "Marketing Bot",
    "sessionId": "marketing-1",
    "status": "Connected",
    "userId": "string",
    "botConfig": {
      "text": "Hello from WA-AKG!"
    },
    "webhooks": [
      {
        "text": "Hello from WA-AKG!"
      }
    ],
    "_count": {
      "contacts": 0,
      "messages": 0,
      "groups": 0,
      "autoReplies": 0,
      "scheduledMessages": 0
    },
    "createdAt": "2026-01-15T08:00:00.000Z",
    "updatedAt": "2026-01-15T08:00:00.000Z"
  }
]

cURL Example

bash
curl -X GET "http://localhost:3000/api/sessions" \
  -H "X-API-Key: your-api-key"

[POST] /sessions

Create new WhatsApp session

Creates a new WhatsApp session for QR code pairing

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ YesDisplay name for the session
sessionIdstringNoUnique session ID (auto-generated if not provided)

Example:

json
{
  "name": "Marketing Bot",
  "sessionId": "marketing-1"
}

Responses

CodeDescription
200Session created successfully
400Invalid request body
401Unauthorized - Invalid or missing API key

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
namestringNo—
sessionIdstringNo—
statusstringNoOptions: Connected, Disconnected, Connecting
userIdstringNo—
botConfigobject, nullableNo—
webhooksarray of objectNo—
_countobject, nullableNo—
createdAtstring (date-time)No—
updatedAtstring (date-time)No—

Response Example (200):

json
{
  "id": "clx123abc",
  "name": "Marketing Bot",
  "sessionId": "marketing-1",
  "status": "Connected",
  "userId": "string",
  "botConfig": {
    "text": "Hello from WA-AKG!"
  },
  "webhooks": [
    {
      "text": "Hello from WA-AKG!"
    }
  ],
  "_count": {
    "contacts": 0,
    "messages": 0,
    "groups": 0,
    "autoReplies": 0,
    "scheduledMessages": 0
  },
  "createdAt": "2026-01-15T08:00:00.000Z",
  "updatedAt": "2026-01-15T08:00:00.000Z"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/sessions" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"Marketing Bot","sessionId":"marketing-1"}'

[GET] /sessions/{id}/qr

Get QR code for pairing

Retrieve QR code (string and base64 image) for WhatsApp pairing

Parameters

NameLocated inRequiredTypeDescription
idpath✅ YesstringSession ID

Responses

CodeDescription
200QR code generated
400Already connected
404QR not available yet

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
qrstringNoQR code string
base64stringNoBase64 data URL for image

Response Example (200):

json
{
  "status": true,
  "message": "QR code generated",
  "data": {
    "success": true,
    "qr": "2@AbCdEfGhIjKlMnOp...",
    "base64": "data:image/png;base64,iVBORw0KGgo..."
  }
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/sessions/sales-01/qr" \
  -H "X-API-Key: your-api-key"

[GET] /sessions/{id}/bot-config

Get bot configuration

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Responses

CodeDescription
200Bot configuration retrieved

cURL Example

bash
curl -X GET "http://localhost:3000/api/sessions/abc123/bot-config" \
  -H "X-API-Key: your-api-key"

[POST] /sessions/{id}/bot-config

Update bot configuration

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
enabledbooleanNo—
botModestringNoOptions: OWNER, SPECIFIC, BLACKLIST, ALL
botAllowedJidsarray of stringNo—
botBlockedJidsarray of stringNo—
autoReplyModestringNoOptions: OWNER, SPECIFIC, BLACKLIST, ALL
autoReplyAllowedJidsarray of stringNo—
autoReplyBlockedJidsarray of stringNo—
botNamestringNo—
enableStickerbooleanNo—
enableVideoStickerbooleanNo—
maxStickerDurationintegerNo—
enablePingbooleanNo—
enableUptimebooleanNo—
removeBgApiKeystring, nullableNo—

Example:

json
{
  "enabled": true,
  "botMode": "BLACKLIST",
  "botBlockedJids": [
    "[email protected]"
  ],
  "autoReplyMode": "SPECIFIC",
  "autoReplyAllowedJids": [
    "[email protected]"
  ],
  "botName": "My Assistant",
  "enableSticker": true
}

Responses

CodeDescription
200Configuration updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found
500Internal Server Error

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
sessionIdstringNo—
enabledbooleanNo—
botModestringNo—
botAllowedJidsarray of stringNo—
autoReplyModestringNo—
autoReplyAllowedJidsarray of stringNo—
botNamestringNo—
enableStickerbooleanNo—
enableVideoStickerbooleanNo—
maxStickerDurationintegerNo—
enablePingbooleanNo—
enableUptimebooleanNo—
removeBgApiKeystring, nullableNo—
createdAtstring (date-time)No—
updatedAtstring (date-time)No—

Response Example (200):

json
{
  "id": "string",
  "sessionId": "string",
  "enabled": true,
  "botMode": "string",
  "botAllowedJids": [
    "string"
  ],
  "autoReplyMode": "string",
  "autoReplyAllowedJids": [
    "string"
  ],
  "botName": "string",
  "enableSticker": true,
  "enableVideoSticker": true,
  "maxStickerDuration": 0,
  "enablePing": true,
  "enableUptime": true,
  "removeBgApiKey": "string",
  "createdAt": "2026-01-15T08:00:00.000Z",
  "updatedAt": "2026-01-15T08:00:00.000Z"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/sessions/abc123/bot-config" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"botMode":"BLACKLIST","botBlockedJids":["[email protected]"],"autoReplyMode":"SPECIFIC","autoReplyAllowedJids":["[email protected]"],"botName":"My Assistant","enableSticker":true}'

[GET] /sessions/{id}

Get session details

Get detailed information about a specific session including uptime and status

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Responses

CodeDescription
200Session details
404Session not found

Response Example (200):

json
{
  "id": "clx123abc",
  "name": "Marketing Bot",
  "sessionId": "marketing-1",
  "status": "Connected",
  "userId": "string",
  "botConfig": {
    "text": "Hello from WA-AKG!"
  },
  "webhooks": [
    {
      "text": "Hello from WA-AKG!"
    }
  ],
  "_count": {
    "contacts": 0,
    "messages": 0,
    "groups": 0,
    "autoReplies": 0,
    "scheduledMessages": 0
  },
  "createdAt": "2026-01-15T08:00:00.000Z",
  "updatedAt": "2026-01-15T08:00:00.000Z",
  "uptime": 0,
  "messageCount": 0,
  "hasInstance": true,
  "me": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/sessions/abc123" \
  -H "X-API-Key: your-api-key"

[POST] /sessions/{id}/{action}

Perform session action

Start, stop, restart, or logout a session

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—
actionpath✅ YesstringOptions: start, stop, restart, logout

Responses

CodeDescription
200Action performed successfully
400Invalid action
500Action failed

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/sessions/abc123/start" \
  -H "X-API-Key: your-api-key"

[PATCH] /sessions/{id}/settings

Update session settings

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
configobjectNo—

Example:

json
{
  "config": {
    "readReceipts": true,
    "rejectCalls": true
  }
}

Responses

CodeDescription
200Settings updated

cURL Example

bash
curl -X PATCH "http://localhost:3000/api/sessions/abc123/settings" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"config":{"readReceipts":true,"rejectCalls":true}}'

[DELETE] /sessions/{id}/settings

Delete session and logout

Permanently deletes session and logs out from WhatsApp

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Responses

CodeDescription
200Session deleted

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/sessions/abc123/settings" \
  -H "X-API-Key: your-api-key"

📂 Session Access

[GET] /sessions/{sessionId}/access

List users with shared access

Get all users who have been granted access to the specified session. Only the session owner or SUPERADMIN can use this endpoint.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession ID (slug or CUID)

Responses

CodeDescription
200Access list retrieved
401Unauthorized - Invalid or missing API key
403Forbidden - Only session owner can manage access
404Session not found

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataarray of objectNo—

Response Example (200):

json
{
  "status": true,
  "message": "Access list retrieved successfully",
  "data": [
    {
      "id": "string",
      "sessionId": "string",
      "userId": "string",
      "createdAt": "2026-01-15T08:00:00.000Z",
      "user": {
        "id": "string",
        "name": "string",
        "email": "string",
        "role": "string"
      }
    }
  ]
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/sessions/marketing-1/access" \
  -H "X-API-Key: your-api-key"

[POST] /sessions/{sessionId}/access

Grant access to another user

Grant session access to another registered user by email. Only the session owner or SUPERADMIN can use this endpoint. Cannot grant access to the session owner or SUPERADMINs.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession ID (slug or CUID)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
emailstring (email)✅ YesEmail of the user to grant access

Example:

json
{
  "email": "[email protected]"
}

Responses

CodeDescription
201Access granted successfully
400Validation error / Cannot grant to owner / SUPERADMIN already has access
401Unauthorized - Invalid or missing API key
403Forbidden - Only session owner can manage access
404Session or user not found
409User already has access to this session

cURL Example

bash
curl -X POST "http://localhost:3000/api/sessions/marketing-1/access" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'

[DELETE] /sessions/{sessionId}/access

Revoke user access

Remove shared access for a user from the specified session. Only the session owner or SUPERADMIN can use this endpoint.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession ID (slug or CUID)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
userIdstring✅ YesCUID of the user to revoke access from

Example:

json
{
  "userId": "clx456ghi"
}

Responses

CodeDescription
200Access revoked successfully
400Validation error
401Unauthorized - Invalid or missing API key
403Forbidden - Only session owner can manage access
404Session or access record not found

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/sessions/marketing-1/access" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"userId":"clx456ghi"}'

📂 Messaging

[POST] /messages/{sessionId}/{jid}/send

Send message (text/media/sticker)

Universal endpoint for sending text, images, videos, documents, and stickers. Supports mentions and all WhatsApp message types.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession identifier
jidpath✅ YesstringRecipient JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
messageobject✅ YesMessage content (text, image, sticker, etc.)
mentionsarray of stringNoList of JIDs to mention (for group messages)

Example:

json
{
  "message": {
    "text": "Hello from WA-AKG!"
  },
  "mentions": [
    "[email protected]"
  ]
}

Responses

CodeDescription
200Message sent successfully
400Invalid request - jid and message are required
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found or disconnected
500Failed to send message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Message sent successfully",
  "data": {
    "key": {
      "remoteJid": "[email protected]",
      "fromMe": true,
      "id": "3EB01234567890"
    },
    "message": {
      "conversation": "Hello from WA-AKG!"
    },
    "messageTimestamp": "1678901234"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/sales-01/[email protected]/send" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"message":{"text":"Hello from WA-AKG!"},"mentions":["[email protected]"]}'

[POST] /messages/{sessionId}/{jid}/media

Send media (image/video/audio/document)

Send file using multipart/form-data

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession identifier
jidpath✅ YesstringRecipient JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (multipart/form-data)

FieldTypeRequiredDescription
filestring (binary)✅ Yes—
typestring✅ YesOptions: image, video, audio, voice, document, sticker Default: image
captionstringNo—

Example:

json
{
  "file": "(binary)",
  "type": "image",
  "caption": "string"
}

Responses

CodeDescription
200Media sent successfully
400Bad Request - File missing
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send media
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/media" \
  -H "X-API-Key: your-api-key" \
  -F "file=@/path/to/file.jpg" \
  -F "type=image" \
  -F "caption=Hello"

[POST] /messages/{sessionId}/{jid}/interactive

Send interactive message (Native Flow buttons, CTA, List)

Send modern WhatsApp Native Flow interactive messages including quick replies, CTA URL links, CTA call buttons, copy-to-clipboard code, and single select lists.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession identifier
jidpath✅ YesstringRecipient JID (e.g. [email protected] or 08123456789)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
titlestringNo—
bodystringNo—
footerstringNo—
headerobjectNo—
buttonsarray of objectNoArray of interactive action buttons

Example:

json
{
  "title": "Interactive Message Title",
  "body": "Hello! Please select one of the options below:",
  "footer": "Powered by WA-AKG",
  "header": {
    "title": "Announcement",
    "image": {
      "url": "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=800"
    }
  },
  "buttons": [
    {
      "type": "quick_reply",
      "displayText": "Confirm Order",
      "id": "btn_confirm",
      "url": "https://example.com",
      "phoneNumber": "+628123456789",
      "copyCode": "PROMO2026",
      "title": "Menu List",
      "sections": [
        {
          "title": "Available Packages",
          "rows": [
            {
              "id": "pkg_basic",
              "title": "Basic Plan",
              "description": "Affordable starter package"
            }
          ]
        }
      ]
    }
  ]
}

Responses

CodeDescription
200Interactive message sent successfully
400Bad Request - Missing required content
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send interactive message

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/interactive" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title":"Interactive Message Title","body":"Hello! Please select one of the options below:","footer":"Powered by WA-AKG","header":{"title":"Announcement","image":{"url":"https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=800"}},"buttons":[{"type":"quick_reply","displayText":"Confirm Order","id":"btn_confirm","url":"https://example.com","phoneNumber":"+628123456789","copyCode":"PROMO2026","title":"Menu List","sections":[{"title":"Available Packages","rows":[{"id":"pkg_basic","title":"Basic Plan","description":"Affordable starter package"}]}]}]}'

[POST] /messages/{sessionId}/broadcast

Broadcast message to multiple recipients

Send same message to multiple contacts with anti-ban delays (10-20s random)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
recipientsarray of string✅ Yes—
messagestring✅ Yes—
delaynumberNoOptional delay (unused)

Example:

json
{
  "recipients": [
    "[email protected]",
    "[email protected]"
  ],
  "message": "Flash Sale! 50% off",
  "delay": 0
}

Responses

CodeDescription
200Broadcast started
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to start broadcast
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Broadcast started in background"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/broadcast" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"recipients":["[email protected]","[email protected]"],"message":"Flash Sale! 50% off","delay":0}'

[GET] /messages/{sessionId}/broadcast/history

Get broadcast history

Retrieve list of past broadcasts with status, sent/failed counts (persisted in DB)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
limitqueryNointegerMax results (max 50) Default: 20
offsetqueryNointegerPagination offset Default: 0

Responses

CodeDescription
200Broadcast history
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
dataarray of objectNo—
totalintegerNo—
limitintegerNo—
offsetintegerNo—

Response Example (200):

json
{
  "status": true,
  "data": [
    {
      "id": "string",
      "sessionId": "string",
      "message": "string",
      "total": 0,
      "sent": 0,
      "failed": 0,
      "status": "running",
      "delay": 0,
      "startedAt": "2026-01-15T08:00:00.000Z",
      "completedAt": "2026-01-15T08:00:00.000Z"
    }
  ],
  "total": 0,
  "limit": 0,
  "offset": 0
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/messages/session-01/broadcast/history?limit=value&offset=value" \
  -H "X-API-Key: your-api-key"

[GET] /messages/{sessionId}/broadcast/history/{logId}

Get broadcast detail

Retrieve full detail of a specific broadcast including per-recipient status

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
logIdpath✅ Yesstring—

Responses

CodeDescription
200Broadcast detail
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Broadcast not found

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
dataobjectNo—

Response Example (200):

json
{
  "status": true,
  "data": {
    "id": "string",
    "sessionId": "string",
    "message": "string",
    "total": 0,
    "sent": 0,
    "failed": 0,
    "status": "string",
    "delay": 0,
    "startedAt": "2026-01-15T08:00:00.000Z",
    "completedAt": "2026-01-15T08:00:00.000Z",
    "recipients": [
      {
        "id": "string",
        "jid": "string",
        "status": "pending",
        "error": "string",
        "sentAt": "2026-01-15T08:00:00.000Z"
      }
    ]
  }
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/messages/session-01/broadcast/history/value" \
  -H "X-API-Key: your-api-key"

[POST] /messages/{sessionId}/{jid}/poll

Send poll message

Create interactive poll (2-12 options, single or multiple choice)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
questionstring✅ Yes—
optionsarray of string✅ Yes—
selectableCountintegerNo—

Example:

json
{
  "question": "What's your favorite product?",
  "options": [
    "Product A",
    "Product B",
    "Product C"
  ],
  "selectableCount": 1
}

Responses

CodeDescription
200Poll sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send poll
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/poll" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"question":"What's your favorite product?","options":["Product A","Product B","Product C"],"selectableCount":1}'

[POST] /messages/{sessionId}/{jid}/location

Send location

Share GPS coordinates with optional name and address

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
latitudenumber✅ Yes—
longitudenumber✅ Yes—
namestringNo—
addressstringNo—

Example:

json
{
  "latitude": -6.2088,
  "longitude": 106.8456,
  "name": "Central Park",
  "address": "Jakarta, Indonesia"
}

Responses

CodeDescription
200Location sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send location
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/location" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"latitude":-6.2088,"longitude":106.8456,"name":"Central Park","address":"Jakarta, Indonesia"}'

[POST] /messages/{sessionId}/{jid}/contact

Send contact card

Share one or multiple contact vCards

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
contactsarray of object✅ Yes—

Example:

json
{
  "contacts": [
    {
      "displayName": "John Doe",
      "vcard": "BEGIN:VCARD..."
    }
  ]
}

Responses

CodeDescription
200Contact sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send contact
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/contact" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"contacts":[{"displayName":"John Doe","vcard":"BEGIN:VCARD..."}]}'

[GET] /messages/{sessionId}/download/{messageId}/media

Download message media

Download media from a message (direct binary or redirect)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
messageIdpath✅ Yesstring—

Responses

CodeDescription
200Binary media file
401Unauthorized - Invalid or missing API key
403Forbidden - Cannot access session or message
404Message not found or has no media

cURL Example

bash
curl -X GET "http://localhost:3000/api/messages/session-01/download/MSG_ID_123/media" \
  -H "X-API-Key: your-api-key"

[POST] /messages/{sessionId}/{jid}/{messageId}/react

React to message with emoji

Add emoji reaction to a message (empty string removes reaction)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—
messageIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
emojistring✅ YesEmoji or empty string to remove

Example:

json
{
  "emoji": "👍"
}

Responses

CodeDescription
200Reaction sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send reaction
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/MSG_ID_123/react" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"emoji":"👍"}'

[POST] /messages/{sessionId}/{jid}/{messageId}/reply

Reply to a message (quoted reply)

Send a quoted reply to a specific message by its ID. Uses same request format as /send — pass a Baileys message object.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—
messageIdpath✅ YesstringID of message to reply to

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
messageobject✅ YesMessage content — same format as /send (text, image, video, etc.)
mentionsarray of stringNoJIDs to mention
fromMebooleanNoWhether the quoted message was sent by you Default: false

Example:

json
{
  "message": {
    "text": "Thanks for your message!"
  },
  "mentions": [
    "[email protected]"
  ],
  "fromMe": true
}

Responses

CodeDescription
200Reply sent successfully
400message is required
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send reply
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Message sent successfully"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/sales-01/[email protected]/3EB0ABCD1234567890/reply" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"message":{"text":"Thanks for your message!"},"mentions":["[email protected]"],"fromMe":true}'

[POST] /messages/{sessionId}/{jid}/reply

Reply to a message (body-based)

Send a quoted reply with messageId provided in the request body. Same request format as /send with added messageId.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
messageIdstring✅ YesID of the message to reply to
messageobject✅ YesMessage content — same format as /send (text, image, video, etc.)
mentionsarray of stringNoJIDs to mention
fromMebooleanNoWhether the quoted message was sent by you Default: false

Example:

json
{
  "messageId": "3EB0ABCD1234567890",
  "message": {
    "text": "Sure, let me check that for you!"
  }
}

Responses

CodeDescription
200Reply sent successfully
400messageId and message required
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send reply
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/sales-01/[email protected]/reply" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"messageId":"3EB0ABCD1234567890","message":{"text":"Sure, let me check that for you!"}}'

[POST] /messages/{sessionId}/{jid}/{messageId}/star

Star or unstar a message

Mark a message as starred (saved) or remove the star. Starred messages appear in the Starred Messages section.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—
messageIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
starbooleanNotrue to star, false to unstar Default: true
fromMebooleanNoWhether the message was sent by you Default: false

Example:

json
{
  "star": true,
  "fromMe": false
}

Responses

CodeDescription
200Star status updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to star/unstar message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Message starred"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/MSG_ID_123/star" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"star":true,"fromMe":false}'

Search messages

Search messages stored in the database for a session. Supports full-text search, filtering by JID, type, and sender.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
qqueryNostringText to search for in message content
jidqueryNostringFilter by chat JID
typequeryNostringFilter by message type Options: TEXT, IMAGE, VIDEO, AUDIO, DOCUMENT, STICKER, LOCATION, CONTACT
fromMequeryNobooleanFilter by sender (true=outgoing, false=incoming)
pagequeryNointegerDefault: 1
limitqueryNointegerDefault: 20

Responses

CodeDescription
200Search results
400q or jid is required
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found
500Failed to search messages

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
dataarray of objectNo—
paginationobjectNo—

Response Example (200):

json
{
  "success": true,
  "data": [
    {
      "id": "string",
      "remoteJid": "string",
      "fromMe": true,
      "keyId": "string",
      "pushName": "string",
      "type": "string",
      "content": "string",
      "status": "string",
      "timestamp": "2026-01-15T08:00:00.000Z",
      "quoteId": "string"
    }
  ],
  "pagination": {
    "total": 0,
    "page": 0,
    "limit": 0,
    "pages": 0
  }
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/messages/sales-01/search?q=invoice&[email protected]&type=value&fromMe=value&page=value&limit=value" \
  -H "X-API-Key: your-api-key"

[POST] /messages/{sessionId}/{jid}/list

Send list message

Send a formatted numbered list message

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
titlestring✅ Yes—
optionsarray of string✅ Yes—
footerstringNo—

Example:

json
{
  "title": "Our Services",
  "options": [
    "Web Dev",
    "App Dev",
    "UI/UX"
  ],
  "footer": "Choose one"
}

Responses

CodeDescription
200Message sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/list" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title":"Our Services","options":["Web Dev","App Dev","UI/UX"],"footer":"Choose one"}'

[POST] /messages/{sessionId}/{jid}/spam

Message bombing (Spam)

Send a message multiple times in a row in the background

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
messagestring✅ Yes—
countintegerNoDefault: 10
delayintegerNoDelay in ms Default: 500

Example:

json
{
  "message": "Check our new catalog!",
  "count": 5,
  "delay": 1000
}

Responses

CodeDescription
200Spam started
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to start spam
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/spam" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"message":"Check our new catalog!","count":5,"delay":1000}'

[POST] /messages/{sessionId}/{jid}/sticker

Send sticker

Convert an image to sticker and send it

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (multipart/form-data)

FieldTypeRequiredDescription
filestring (binary)✅ Yes—
packstringNoSticker pack name (default: WA-AKG)
authorstringNoSticker author name (default: User)
typestringNoSticker crop type (default: full) Options: full, crop, circle
qualityintegerNoImage quality (default: 50)

Example:

json
{
  "file": "(binary)",
  "pack": "string",
  "author": "string",
  "type": "full",
  "quality": 0
}

Responses

CodeDescription
200Sticker sent
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to create sticker
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/[email protected]/sticker" \
  -H "X-API-Key: your-api-key" \
  -F "file=@/path/to/file.jpg" \
  -F "type=image" \
  -F "caption=Hello"

[POST] /messages/{sessionId}/forward

Forward message

Forward a message to one or multiple chats

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
fromJidstring✅ YesSource chat JID
messageIdstring✅ Yes—
toJidsarray of string✅ YesRecipient JIDs

Example:

json
{
  "fromJid": "[email protected]",
  "messageId": "3EB0ABCD1234567890",
  "toJids": [
    "[email protected]"
  ]
}

Responses

CodeDescription
200Message forwarded
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to forward message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/messages/session-01/forward" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"fromJid":"[email protected]","messageId":"3EB0ABCD1234567890","toJids":["[email protected]"]}'

[DELETE] /messages/{sessionId}/{jid}/{messageId}

Delete message for everyone

Delete message (only works for messages < 7 minutes old)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—
messageIdpath✅ Yesstring—

Responses

CodeDescription
200Message deleted
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to delete message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Message deleted for everyone"
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/messages/session-01/[email protected]/MSG_ID_123" \
  -H "X-API-Key: your-api-key"

[PATCH] /messages/{sessionId}/{jid}/{messageId}

Edit a sent message

Edit text of a sent message

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—
messageIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
textstring✅ Yes—

Example:

json
{
  "text": "Updated text message"
}

Responses

CodeDescription
200Message edited
400Bad Request
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to edit message
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "status": true,
  "message": "Message edited successfully"
}

cURL Example

bash
curl -X PATCH "http://localhost:3000/api/messages/session-01/[email protected]/MSG_ID_123" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"text":"Updated text message"}'

📂 Chat

[GET] /chat/{sessionId}

Get chat list with contacts

Retrieve all contacts with last message for a session

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Chat list

Response Example (200):

json
[
  {
    "jid": "[email protected]",
    "name": "John Doe",
    "notify": "string",
    "profilePic": "string"
  }
]

cURL Example

bash
curl -X GET "http://localhost:3000/api/chat/session-01" \
  -H "X-API-Key: your-api-key"

[GET] /chat/{sessionId}/{jid}

Get message history

Fetch up to 100 messages for a chat (enriched with participant info for groups)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Responses

CodeDescription
200Message history (max 100 messages)

cURL Example

bash
curl -X GET "http://localhost:3000/api/chat/session-01/[email protected]" \
  -H "X-API-Key: your-api-key"

[PUT] /chat/{sessionId}/{jid}/read

Mark messages as read

Mark specific messages or entire chat as read using RESTful path parameters

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ YesstringSession identifier
jidpath✅ YesstringURL-encoded WhatsApp JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
messageIdsarray of stringNoOptional: specific message IDs to mark as read. If not provided, marks entire chat as read

Example:

json
{
  "messageIds": [
    "string"
  ]
}

Responses

CodeDescription
200Messages marked as read
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to mark messages as read
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Messages marked as read"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/chat/session-01/[email protected]/read" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"messageIds":["string"]}'

[PUT] /chat/{sessionId}/{jid}/archive

Archive/unarchive chat

Archive or unarchive a chat using RESTful path parameters

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
archiveboolean✅ Yestrue to archive, false to unarchive

Example:

json
{
  "archive": true
}

Responses

CodeDescription
200Chat archived/unarchived
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to archive/unarchive chat
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Chat archived"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/chat/session-01/[email protected]/archive" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"archive":true}'

[PUT] /chat/{sessionId}/{jid}/mute

Mute/unmute chat

Mute chat with optional duration (default 8 hours)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
muteboolean✅ Yes—
durationintegerNoDuration in seconds (default: 8 hours)

Example:

json
{
  "mute": true,
  "duration": 3600
}

Responses

CodeDescription
200Chat muted/unmuted
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to mute/unmute chat
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Chat muted"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/chat/session-01/[email protected]/mute" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"mute":true,"duration":3600}'

[PUT] /chat/{sessionId}/{jid}/pin

Pin/unpin chat

Pin or unpin a chat

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
pinboolean✅ Yes—

Example:

json
{
  "pin": true
}

Responses

CodeDescription
200Chat pinned/unpinned
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to pin/unpin chat
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Chat pinned"
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/chat/session-01/[email protected]/pin" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"pin":true}'

[POST] /chat/{sessionId}/{jid}/presence

Send presence (typing/recording)

Send presence status (typing, recording, online, etc.) to a chat

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
presencestring✅ YesOptions: composing, recording, paused, available, unavailable

Example:

json
{
  "presence": "composing"
}

Responses

CodeDescription
200Presence sent
400Missing required fields or invalid presence
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to send presence
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "Presence 'composing' sent to [email protected]"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/chat/session-01/[email protected]/presence" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"presence":"composing"}'

[POST] /chat/{sessionId}/{jid}/profile-picture

Get profile picture URL

Get profile picture URL for a contact or group

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ YesstringURL-encoded JID

Responses

CodeDescription
200Profile picture URL
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to fetch profile picture
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
jidstringNo—
profilePicUrlstring, nullableNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "jid": "[email protected]",
  "profilePicUrl": "https://pps.whatsapp.net/...",
  "message": "No profile picture found"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/chat/session-01/[email protected]/profile-picture" \
  -H "X-API-Key: your-api-key"

[POST] /chat/{sessionId}/check

Check if numbers exist on WhatsApp

Validate phone numbers (max 50 per request)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
numbersarray of string✅ Yes—

Example:

json
{
  "numbers": [
    "628123456789",
    "628987654321"
  ]
}

Responses

CodeDescription
200Validation results
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to check numbers
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
resultsarray of objectNo—

Response Example (200):

json
{
  "success": true,
  "results": [
    {
      "number": "string",
      "exists": true,
      "jid": "string",
      "error": "string"
    }
  ]
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/chat/session-01/check" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"numbers":["628123456789","628987654321"]}'

📂 Profile

[GET] /profile/{sessionId}

Get own profile

Fetch profile information of the connected WhatsApp account

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Profile info
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
jidstringNo—
statusobjectNo—

Response Example (200):

json
{
  "success": true,
  "jid": "string",
  "status": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/profile/session-01" \
  -H "X-API-Key: your-api-key"

[PUT] /profile/{sessionId}/name

Update profile name

Update the WhatsApp display name (max 25 chars)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ Yes—

Example:

json
{
  "name": "string"
}

Responses

CodeDescription
200Name updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/profile/session-01/name" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'

[PUT] /profile/{sessionId}/status

Update profile status

Update the WhatsApp about/status (max 139 chars)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
statusstring✅ Yes—

Example:

json
{
  "status": "string"
}

Responses

CodeDescription
200Status updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/profile/session-01/status" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"status":"string"}'

[DELETE] /profile/{sessionId}/picture

Remove profile picture

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Picture removed
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/profile/session-01/picture" \
  -H "X-API-Key: your-api-key"

[PUT] /profile/{sessionId}/picture

Update profile picture

Upload a new profile picture

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (multipart/form-data)

FieldTypeRequiredDescription
filestring (binary)✅ Yes—

Example:

json
{
  "file": "(binary)"
}

Responses

CodeDescription
200Picture updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/profile/session-01/picture" \
  -H "X-API-Key: your-api-key" \
  -F "file=@/path/to/file.jpg" \
  -F "type=image" \
  -F "caption=Hello"

📂 Auto Replies

[DELETE] /autoreplies/{sessionId}

Delete all autoreplies

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Autoreplies deleted

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/autoreplies/session-01" \
  -H "X-API-Key: your-api-key"

📂 Auto Reply

[GET] /autoreplies/{sessionId}

List auto-reply rules

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200List of auto-reply rules
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found

cURL Example

bash
curl -X GET "http://localhost:3000/api/autoreplies/session-01" \
  -H "X-API-Key: your-api-key"

[POST] /autoreplies/{sessionId}

Create auto-reply rule

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
keywordstring✅ Yes—
responsestringNo—
matchTypestringNoOptions: EXACT, CONTAINS, STARTS_WITH, REGEX
isMediabooleanNo—
mediaUrlstringNo—
mediaTypestringNoOptions: image, video, document, audio
triggerTypestringNoOptions: ALL, GROUP, PRIVATE

Example:

json
{
  "keyword": "hello",
  "response": "Hi there! How can I help?",
  "matchType": "EXACT",
  "triggerType": "ALL",
  "isMedia": false,
  "mediaUrl": null,
  "mediaType": null
}

Responses

CodeDescription
200Rule created
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied

cURL Example

bash
curl -X POST "http://localhost:3000/api/autoreplies/session-01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"hello","response":"Hi there! How can I help?","matchType":"EXACT","triggerType":"ALL","isMedia":false,"mediaUrl":null,"mediaType":null}'

[DELETE] /autoreplies/{sessionId}/{replyId}

Delete auto-reply rule

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
replyIdpath✅ Yesstring—

Responses

CodeDescription
200Rule deleted
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Rule not found

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/autoreplies/session-01/reply_01" \
  -H "X-API-Key: your-api-key"

[PUT] /autoreplies/{sessionId}/{replyId}

Update auto-reply rule

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
replyIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
keywordstring✅ Yes—
responsestringNo—
isMediabooleanNo—
mediaUrlstringNo—
mediaTypestringNoOptions: image, video, document, audio
triggerTypestringNoOptions: ALL, GROUP, PRIVATE

Example:

json
{
  "keyword": "hello",
  "response": "Hi there! How can I help?",
  "matchType": "EXACT",
  "triggerType": "ALL",
  "isMedia": false,
  "mediaUrl": null,
  "mediaType": null
}

Responses

CodeDescription
200Rule updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Rule not found

cURL Example

bash
curl -X PUT "http://localhost:3000/api/autoreplies/session-01/reply_01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"hello","response":"Hi there! How can I help?","matchType":"EXACT","triggerType":"ALL","isMedia":false,"mediaUrl":null,"mediaType":null}'

📂 Scheduler

[DELETE] /scheduler/{sessionId}

Delete all scheduled messages for a session

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Scheduled messages deleted

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/scheduler/session-01" \
  -H "X-API-Key: your-api-key"

[GET] /scheduler/{sessionId}

List scheduled messages

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200List of scheduled messages
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found

cURL Example

bash
curl -X GET "http://localhost:3000/api/scheduler/session-01" \
  -H "X-API-Key: your-api-key"

[POST] /scheduler/{sessionId}

Create scheduled message

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
jidstring✅ Yes—
contentstringNo—
sendAtstring (date-time)✅ Yes—
mediaUrlstringNo—
mediaTypestringNoOptions: image, video, document, audio
cronExpressionstringNo—
recurrenceRulestringNo—

Example:

json
{
  "jid": "[email protected]",
  "content": "Reminder: Meeting in 10 mins",
  "sendAt": "2024-12-25T10:00:00.000Z",
  "mediaUrl": "https://example.com/image.jpg",
  "mediaType": "image",
  "cronExpression": "*/10 * * * *",
  "recurrenceRule": "{\"type\":\"minutes\",\"value\":10}"
}

Responses

CodeDescription
200Scheduled message created
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied

cURL Example

bash
curl -X POST "http://localhost:3000/api/scheduler/session-01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"jid":"[email protected]","content":"Reminder: Meeting in 10 mins","sendAt":"2024-12-25T10:00:00.000Z","mediaUrl":"https://example.com/image.jpg","mediaType":"image","cronExpression":"*/10 * * * *","recurrenceRule":"{\"type\":\"minutes\",\"value\":10}"}'

[DELETE] /scheduler/{sessionId}/{scheduleId}

Delete scheduled message

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
scheduleIdpath✅ Yesstring—

Responses

CodeDescription
200Message deleted
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Message not found

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/scheduler/session-01/sched_01" \
  -H "X-API-Key: your-api-key"

[PUT] /scheduler/{sessionId}/{scheduleId}

Update scheduled message

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
scheduleIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
jidstring✅ Yes—
contentstringNo—
sendAtstring (date-time)✅ Yes—
mediaUrlstringNo—
mediaTypestringNoOptions: image, video, document, audio
cronExpressionstringNo—
recurrenceRulestringNo—

Example:

json
{
  "jid": "[email protected]",
  "content": "Updated meeting reminder",
  "sendAt": "2024-12-25T11:00:00.000Z",
  "mediaUrl": "https://example.com/image.jpg",
  "mediaType": "image",
  "cronExpression": null,
  "recurrenceRule": null
}

Responses

CodeDescription
200Message updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Message not found

cURL Example

bash
curl -X PUT "http://localhost:3000/api/scheduler/session-01/sched_01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"jid":"[email protected]","content":"Updated meeting reminder","sendAt":"2024-12-25T11:00:00.000Z","mediaUrl":"https://example.com/image.jpg","mediaType":"image","cronExpression":null,"recurrenceRule":null}'

[POST] /scheduler

Create a scheduled message task

Responses

CodeDescription
200Scheduled task created

cURL Example

bash
curl -X POST "http://localhost:3000/api/scheduler" \
  -H "X-API-Key: your-api-key"

📂 Webhooks

[GET] /webhooks/{sessionId}

List webhooks for a session

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200List of webhooks
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied

cURL Example

bash
curl -X GET "http://localhost:3000/api/webhooks/session-01" \
  -H "X-API-Key: your-api-key"

[POST] /webhooks/{sessionId}

Create a webhook

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ Yes—
urlstring✅ Yes—
secretstringNo—
eventsarray of string✅ Yes—

Example:

json
{
  "name": "string",
  "url": "string",
  "secret": "string",
  "events": [
    "string"
  ]
}

Responses

CodeDescription
200Webhook created
400Invalid input
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied

cURL Example

bash
curl -X POST "http://localhost:3000/api/webhooks/session-01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","url":"string","secret":"string","events":["string"]}'

[DELETE] /webhooks/{sessionId}/{id}

Delete webhook

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
idpath✅ Yesstring—

Responses

CodeDescription
200Webhook deleted
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Webhook not found

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/webhooks/session-01/abc123" \
  -H "X-API-Key: your-api-key"

[PUT] /webhooks/{sessionId}/{id}

Update webhook

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
idpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestringNo—
urlstringNo—
secretstringNo—
eventsarray of stringNo—
isActivebooleanNo—

Example:

json
{
  "name": "string",
  "url": "string",
  "secret": "string",
  "events": [
    "string"
  ],
  "isActive": true
}

Responses

CodeDescription
200Webhook updated
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Webhook not found

cURL Example

bash
curl -X PUT "http://localhost:3000/api/webhooks/session-01/abc123" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","url":"string","secret":"string","events":["string"],"isActive":true}'

[DELETE] /webhooks/{id}

Delete webhook

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Responses

CodeDescription
200Webhook deleted
401Unauthorized - Invalid or missing API key
404Webhook not found
500Internal Server Error

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—

Response Example (200):

json
{
  "success": true
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/webhooks/abc123" \
  -H "X-API-Key: your-api-key"

[POST] /webhooks/{sessionId}/{id}/test

Test webhook endpoint

Fire a test payload to verify the webhook endpoint is reachable and responding correctly

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
idpath✅ Yesstring—

Responses

CodeDescription
200Test result
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Webhook not found

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobjectNo—

Response Example (200):

json
{
  "status": true,
  "message": "string",
  "data": {
    "success": true,
    "statusCode": 0,
    "responseBody": "string",
    "responseTimeMs": 0,
    "error": "string"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/webhooks/session-01/abc123/test" \
  -H "X-API-Key: your-api-key"

[GET] /webhooks/{sessionId}/{id}/logs

Get webhook delivery logs

Retrieve delivery history for a specific webhook

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
idpath✅ Yesstring—
limitqueryNointegerDefault: 50
offsetqueryNointegerDefault: 0

Responses

CodeDescription
200Webhook delivery logs
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Webhook not found

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
dataarray of objectNo—
totalintegerNo—
limitintegerNo—
offsetintegerNo—

Response Example (200):

json
{
  "status": true,
  "data": [
    {
      "id": "string",
      "webhookId": "string",
      "event": "string",
      "status": "SUCCESS",
      "requestUrl": "string",
      "requestHeaders": {
        "text": "Hello from WA-AKG!"
      },
      "requestBody": {
        "text": "Hello from WA-AKG!"
      },
      "responseStatusCode": 0,
      "responseBody": "string",
      "responseTimeMs": 0,
      "errorMessage": "string",
      "createdAt": "2026-01-15T08:00:00.000Z"
    }
  ],
  "total": 0,
  "limit": 0,
  "offset": 0
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/webhooks/session-01/abc123/logs?limit=value&offset=value" \
  -H "X-API-Key: your-api-key"

🔐 Webhook HMAC Verification

WA-AKG signs every webhook request with HMAC-SHA256 when you set a secret on your webhook. Receiver must verify signature before processing payload.

How It Works

When secret set, WA-AKG sends header:

X-Webhook-Signature: sha256=<hex-encoded-hmac>

Signature = HMAC-SHA256(webhook-secret, raw-request-body).

Verify Examples

Node.js (Express)

javascript
import crypto from "crypto";

const WEBHOOK_SECRET = "your-webhook-secret"; // same as set in WA-AKG

app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const sig = req.headers["x-webhook-signature"];
  if (!sig) return res.status(401).send("Missing signature");

  // Extract hash from "sha256=<hex>"
  const expected = sig.replace("sha256=", "");
  const actual = crypto
    .createHmac("sha256", WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");

  if (expected !== actual) {
    return res.status(401).send("Invalid signature");
  }

  const payload = JSON.parse(req.body);
  console.log("Verified webhook:", payload.event);
  res.sendStatus(200);
});

Node.js (Raw HTTP)

javascript
import crypto from "crypto";
import { createServer } from "http";

const WEBHOOK_SECRET = "your-webhook-secret";

createServer((req, res) => {
  if (req.method !== "POST") return res.writeHead(405).end();

  let body = "";
  req.on("data", (chunk) => (body += chunk));
  req.on("end", () => {
    const sig = req.headers["x-webhook-signature"];
    if (!sig) return res.writeHead(401).end("Missing signature");

    const expected = sig.replace("sha256=", "");
    const actual = crypto
      .createHmac("sha256", WEBHOOK_SECRET)
      .update(body)
      .digest("hex");

    if (expected !== actual) {
      return res.writeHead(401).end("Invalid signature");
    }

    const payload = JSON.parse(body);
    console.log("Verified:", payload.event);
    res.writeHead(200).end("OK");
  });
}).listen(3001);

Python (Flask)

python
import hmac
import hashlib
from flask import Flask, request, abort

app = Flask(__name__)
WEBHOOK_SECRET = b"your-webhook-secret"  # same as set in WA-AKG

@app.route("/webhook", methods=["POST"])
def webhook():
    sig = request.headers.get("X-Webhook-Signature", "")
    if not sig:
        abort(401, "Missing signature")

    expected = sig.replace("sha256=", "")
    actual = hmac.new(WEBHOOK_SECRET, request.data, hashlib.sha256).hexdigest()

    if not hmac.compare_digest(expected, actual):
        abort(401, "Invalid signature")

    payload = request.json
    print(f"Verified: {payload['event']}")
    return "OK", 200

Python (FastAPI)

python
import hmac
import hashlib
from fastapi import FastAPI, Request, HTTPException

app = FastAPI()
WEBHOOK_SECRET = b"your-webhook-secret"

@app.post("/webhook")
async def webhook(req: Request):
    sig = req.headers.get("x-webhook-signature", "")
    if not sig:
        raise HTTPException(401, "Missing signature")

    body = await req.body()
    expected = sig.replace("sha256=", "")
    actual = hmac.new(WEBHOOK_SECRET, body, hashlib.sha256).hexdigest()

    if not hmac.compare_digest(expected, actual):
        raise HTTPException(401, "Invalid signature")

    payload = await req.json()
    print(f"Verified: {payload['event']}")
    return "OK"

PHP

php
<?php
$secret = 'your-webhook-secret';
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

$expected = str_replace('sha256=', '', $sig);
$actual = hash_hmac('sha256', $body, $secret);

if (!hash_equals($expected, $actual)) {
    http_response_code(401);
    die('Invalid signature');
}

$payload = json_decode($body);
error_log('Verified: ' . $payload->event);
http_response_code(200);
echo 'OK';

Go

go
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "io"
    "net/http"
    "strings"
)

var secret = []byte("your-webhook-secret")

func webhookHandler(w http.ResponseWriter, r *http.Request) {
    sig := r.Header.Get("X-Webhook-Signature")
    if sig == "" {
        http.Error(w, "Missing signature", 401)
        return
    }

    body, _ := io.ReadAll(r.Body)
    expected := strings.TrimPrefix(sig, "sha256=")
    mac := hmac.New(sha256.New, secret)
    mac.Write(body)
    actual := hex.EncodeToString(mac.Sum(nil))

    if !hmac.Equal([]byte(expected), []byte(actual)) {
        http.Error(w, "Invalid signature", 401)
        return
    }

    fmt.Println("Verified webhook")
    w.WriteHeader(200)
}

Testing Your Webhook Receiver

WA-AKG includes built-in webhook test payload. You can also trigger test event manually:

bash
# Create webhook with secret
curl -X POST "http://localhost:3000/api/webhooks/session-01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Test HMAC",
    "url": "https://your-server.com/webhook",
    "secret": "your-webhook-secret",
    "events": ["message.received"]
  }'

Then send a message to a WhatsApp session. Check your server logs — should show verified payload with X-Webhook-Signature header.



🎯 Webhook Payload Examples

When WA-AKG sends a POST to your webhook URL, the body has this structure:

json
{
  "event": "message.received",
  "sessionId": "your-session-id",
  "timestamp": "2026-06-27T12:00:00.000Z",
  "data": { }
}

Events List

EventTrigger
message.receivedNew incoming message
message.sentMessage sent from dashboard/API
message.statusMessage delivery/read status change
message.deletedMessage recalled/revoked
message.editedMessage edited
connection.updateSession connection state changed
group.updateGroup metadata changed (name, desc, settings)
group.participantMember joined/left/promoted/demoted
contact.updateContact name or notify changed
status.updateStatus/story update

Payload Examples

message.received — Incoming DM text

json
{
  "event": "message.received",
  "data": {
    "key": { "id": "AB12CD34EF", "remoteJid": "[email protected]", "fromMe": false },
    "pushName": "Budi",
    "from": "[email protected]",
    "sender": "[email protected]",
    "isGroup": false,
    "chatType": "PERSONAL",
    "type": "TEXT",
    "content": "Halo, ini test",
    "fileUrl": null,
    "caption": null,
    "quoted": null
  }
}

message.received — Image/video with caption

json
{
  "event": "message.received",
  "data": {
    "from": "[email protected]",
    "isGroup": false,
    "chatType": "PERSONAL",
    "type": "IMAGE",
    "content": "Foto liburan",
    "fileUrl": "/api/media/abc-GH78IJ90KL.jpg",
    "caption": "Foto liburan"
  }
}

message.received — Group text

json
{
  "event": "message.received",
  "data": {
    "from": "[email protected]",
    "sender": "[email protected]",
    "isGroup": true,
    "chatType": "GROUP",
    "type": "TEXT",
    "content": "Halo group",
    "key": { "id": "AB12CD34EF", "remoteJid": "[email protected]", "fromMe": false, "participant": "[email protected]" }
  }
}

message.received — With quoted reply

json
{
  "event": "message.received",
  "data": {
    "from": "[email protected]",
    "type": "TEXT",
    "content": "Setuju!",
    "quoted": {
      "key": { "remoteJid": "[email protected]", "fromMe": true, "id": "XY99ZZ00AA" },
      "type": "TEXT",
      "content": "Gimana?"
    }
  }
}

message.received — Audio / Sticker / Location / Contact

json
{
  "event": "message.received",
  "data": { "from": "[email protected]", "type": "AUDIO", "fileUrl": "/api/media/abc.mp3" }
}

For sticker: type: "STICKER", location: type: "LOCATION" + content: "lat,lng", contact: type: "CONTACT" + content: "Display Name".

message.sent — Outgoing text (dashboard/API)

json
{
  "event": "message.sent",
  "data": {
    "key": { "id": "BA12CD34EF", "remoteJid": "[email protected]", "fromMe": true },
    "from": "[email protected]",
    "receiver": "[email protected]",
    "sender": "ME",
    "isGroup": false,
    "chatType": "PERSONAL",
    "type": "TEXT",
    "content": "Pesan balasan",
    "fileUrl": null,
    "quoted": null
  }
}

message.sent — Outgoing media

json
{
  "event": "message.sent",
  "data": {
    "from": "[email protected]",
    "type": "IMAGE",
    "content": "Foto liburan",
    "fileUrl": "/api/media/abc-CD78EF90GH.jpg",
    "caption": "Foto liburan"
  }
}

message.sent — To group

json
{
  "event": "message.sent",
  "data": {
    "from": "[email protected]",
    "receiver": "[email protected]",
    "sender": "ME",
    "isGroup": true,
    "chatType": "GROUP",
    "type": "TEXT",
    "content": "Saya setuju",
    "key": { "participant": "[email protected]" }
  }
}

message.status — Delivery/read update

json
{
  "event": "message.status",
  "data": { "keyId": "AB12CD34EF", "remoteJid": "[email protected]", "status": "DELIVERED" }
}

Status flow: PENDING → SENT → DELIVERED → READ

message.deleted — Message recalled/revoked

json
{
  "event": "message.deleted",
  "data": { "keyId": "DE12LT34EF", "remoteJid": "[email protected]", "fromMe": false }
}

message.edited — Message edited

json
{
  "event": "message.edited",
  "data": { "keyId": "ED12IT34EF", "newContent": "Pesan diperbaiki", "remoteJid": "[email protected]" }
}

connection.update — Session connection state

json
{
  "event": "connection.update",
  "data": { "status": "CONNECTED", "qr": null }
}

Status: SCAN_QR (includes QR), CONNECTED, DISCONNECTED, LOGGED_OUT, STOPPED

group.update — Group metadata changed

json
{
  "event": "group.update",
  "data": {
    "jid": "[email protected]",
    "subject": "Nama Grup Baru",
    "desc": "Deskripsi grup",
    "restrict": true,
    "announce": false,
    "owner": "[email protected]"
  }
}

group.participant — Member joined/left/promoted

json
{
  "event": "group.participant",
  "data": {
    "jid": "[email protected]",
    "action": "add",
    "participants": ["[email protected]"]
  }
}

Actions: add, remove, promote, demote

contact.update — Contact name/notify changed

json
{
  "event": "contact.update",
  "data": { "jid": "[email protected]", "name": "Budi Santoso", "notify": "Budi" }
}

status.update — Status/story update

json
{
  "event": "status.update",
  "data": { "from": "status@broadcast", "type": "TEXT", "content": "Halo semua" }
}

📂 Users

[POST] /users

Create user (SUPERADMIN only)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ Yes—
emailstring (email)✅ Yes—
passwordstring✅ Yes—
rolestringNoOptions: SUPERADMIN, STAFF, USER Default: USER

Example:

json
{
  "name": "string",
  "email": "string",
  "password": "string",
  "role": "SUPERADMIN"
}

Responses

CodeDescription
200User created
400Bad Request - Invalid parameters
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Internal Server Error

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
namestringNo—
emailstringNo—
rolestringNo—
createdAtstring (date-time)No—

Response Example (200):

json
{
  "id": "string",
  "name": "string",
  "email": "string",
  "role": "string",
  "createdAt": "2026-01-15T08:00:00.000Z"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/users" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","email":"string","password":"string","role":"SUPERADMIN"}'

[GET] /users

List users (SUPERADMIN only)

Responses

CodeDescription
200List of users
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Internal Server Error

Response Example (200):

json
[
  {
    "id": "string",
    "name": "string",
    "email": "string",
    "role": "string",
    "createdAt": "2026-01-15T08:00:00.000Z",
    "_count": {
      "sessions": 0
    }
  }
]

cURL Example

bash
curl -X GET "http://localhost:3000/api/users" \
  -H "X-API-Key: your-api-key"

[DELETE] /users/{id}

Delete user (SUPERADMIN only)

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Responses

CodeDescription
200User deleted
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404User not found
500Internal Server Error

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/users/abc123" \
  -H "X-API-Key: your-api-key"

[PATCH] /users/{id}

Update user (SUPERADMIN only)

Parameters

NameLocated inRequiredTypeDescription
idpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestringNo—
emailstringNo—
passwordstringNo—
rolestringNoOptions: SUPERADMIN, STAFF, USER

Example:

json
{
  "name": "string",
  "email": "string",
  "password": "string",
  "role": "SUPERADMIN"
}

Responses

CodeDescription
200User updated
400Bad Request - Invalid parameters
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404User not found
500Internal Server Error

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
userobjectNo—

Response Example (200):

json
{
  "success": true,
  "user": {
    "id": "string",
    "email": "string",
    "name": "string",
    "role": "string",
    "emailVerified": "string",
    "image": "string",
    "createdAt": "2026-01-15T08:00:00.000Z",
    "updatedAt": "2026-01-15T08:00:00.000Z"
  }
}

cURL Example

bash
curl -X PATCH "http://localhost:3000/api/users/abc123" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","email":"string","password":"string","role":"SUPERADMIN"}'

[POST] /user/api-key

Generate new API key

Responses

CodeDescription
200New API key generated
401Unauthorized - Invalid or missing API key
500Failed to generate API key

Response Fields (200):

FieldTypeRequiredDescription
apiKeystringNo—

Response Example (200):

json
{
  "apiKey": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/user/api-key" \
  -H "X-API-Key: your-api-key"

[DELETE] /user/api-key

Revoke API key

Responses

CodeDescription
200API key revoked
401Unauthorized - Invalid or missing API key
500Failed to revoke API key

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/user/api-key" \
  -H "X-API-Key: your-api-key"

[GET] /user/api-key

Get current API key

Responses

CodeDescription
200Current API key
401Unauthorized - Invalid or missing API key

Response Fields (200):

FieldTypeRequiredDescription
apiKeystring, nullableNo—

Response Example (200):

json
{
  "apiKey": "string"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/user/api-key" \
  -H "X-API-Key: your-api-key"

📂 Labels

[POST] /labels/{sessionId}

Create label

Create new label with color (0-19 index)

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestring✅ Yes—
colorintegerNoColor index (0-19)

Example:

json
{
  "name": "Important",
  "color": 0
}

Responses

CodeDescription
200Label created
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to create label

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
labelobjectNo—

Response Example (200):

json
{
  "success": true,
  "label": {
    "id": "string",
    "name": "string",
    "color": 0,
    "predefinedId": "string"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/labels/session-01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"Important","color":0}'

[PUT] /labels/{sessionId}

Update all labels or bulk update

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Labels updated

cURL Example

bash
curl -X PUT "http://localhost:3000/api/labels/session-01" \
  -H "X-API-Key: your-api-key"

[DELETE] /labels/{sessionId}

Delete labels

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200Labels deleted

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/labels/session-01" \
  -H "X-API-Key: your-api-key"

[GET] /labels/{sessionId}

List labels

Get all labels with chat count

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Responses

CodeDescription
200List of labels
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Session not found

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
labelsarray of objectNo—

Response Example (200):

json
{
  "success": true,
  "labels": [
    {
      "id": "string",
      "name": "string",
      "color": 0,
      "predefinedId": "string"
    }
  ]
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/labels/session-01" \
  -H "X-API-Key: your-api-key"

[DELETE] /labels/{sessionId}/{labelId}

Delete label

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
labelIdpath✅ Yesstring—

Responses

CodeDescription
200Label deleted

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/labels/session-01/label_01" \
  -H "X-API-Key: your-api-key"

[PUT] /labels/{sessionId}/{labelId}

Update label

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
labelIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
namestringNo—
colorintegerNo—

Example:

json
{
  "name": "string",
  "color": 0
}

Responses

CodeDescription
200Label updated

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
labelobjectNo—

Response Example (200):

json
{
  "success": true,
  "label": {
    "id": "string",
    "name": "string",
    "color": 0,
    "predefinedId": "string"
  }
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/labels/session-01/label_01" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","color":0}'

[GET] /labels/{sessionId}/chat/{jid}/labels

Get chat labels

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Chat labels

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
labelsarray of objectNo—

Response Example (200):

json
{
  "success": true,
  "labels": [
    {
      "id": "string",
      "name": "string",
      "color": 0,
      "predefinedId": "string"
    }
  ]
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/labels/session-01/chat/[email protected]/labels" \
  -H "X-API-Key: your-api-key"

[PUT] /labels/{sessionId}/chat/{jid}/labels

Update chat labels

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
labelIdsarray of string✅ Yes—
actionstring✅ YesOptions: add, remove

Example:

json
{
  "labelIds": [
    "string"
  ],
  "action": "add"
}

Responses

CodeDescription
200Chat labels updated

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
labelsarray of objectNo—

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "labels": [
    {
      "id": "string",
      "name": "string",
      "color": 0,
      "predefinedId": "string"
    }
  ]
}

cURL Example

bash
curl -X PUT "http://localhost:3000/api/labels/session-01/chat/[email protected]/labels" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"labelIds":["string"],"action":"add"}'

[GET] /chats/{sessionId}/by-label/{labelId}

Get chats by label

Get all chats associated with a specific label

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
labelIdpath✅ Yesstring—

Responses

CodeDescription
200List of chats with label
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
404Label not found

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
labelobjectNo—
chatsarray of stringNo—
countintegerNo—

Response Example (200):

json
{
  "success": true,
  "label": {
    "text": "Hello from WA-AKG!"
  },
  "chats": [
    "string"
  ],
  "count": 0
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/chats/session-01/by-label/label_01" \
  -H "X-API-Key: your-api-key"

📂 Notifications

[POST] /notifications

Create notification

Send a notification to a specific user or broadcast to all (Superadmin only)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
titlestring✅ Yes—
messagestring✅ Yes—
typestringNoOptions: INFO, SUCCESS, WARNING, ERROR Default: INFO
hrefstringNo—
targetUserIdstringNoTarget user UUID
broadcastbooleanNoDefault: false

Example:

json
{
  "title": "Maintenance",
  "message": "System update in 5 minutes",
  "type": "INFO",
  "href": "/settings",
  "targetUserId": "string",
  "broadcast": true
}

Responses

CodeDescription
200Notification created
400Invalid request
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Error creating notification

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
countintegerNoNumber of users notified if broadcast

Response Example (200):

json
{
  "success": true,
  "count": 0
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/notifications" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title":"Maintenance","message":"System update in 5 minutes","type":"INFO","href":"/settings","targetUserId":"string","broadcast":true}'

[GET] /notifications

List notifications

Get the last 50 notifications for the authenticated user

Responses

CodeDescription
200List of notifications
401Unauthorized - Invalid or missing API key
500Error fetching notifications

Response Example (200):

json
[
  {
    "id": "string",
    "userId": "string",
    "title": "string",
    "message": "string",
    "type": "string",
    "href": "string",
    "read": true,
    "createdAt": "2026-01-15T08:00:00.000Z"
  }
]

cURL Example

bash
curl -X GET "http://localhost:3000/api/notifications" \
  -H "X-API-Key: your-api-key"

[PATCH] /notifications/read

Mark notifications as read

Mark specific or all notifications as read for the authenticated user

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
idsarray of stringNoArray of notification IDs. If omitted or empty, all notifications are marked as read.

Example:

json
{
  "ids": [
    "string"
  ]
}

Responses

CodeDescription
200Notifications updated
401Unauthorized - Invalid or missing API key
500Error updating notifications

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X PATCH "http://localhost:3000/api/notifications/read" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"ids":["string"]}'

[DELETE] /notifications/delete

Delete specific notification

Parameters

NameLocated inRequiredTypeDescription
idquery✅ YesstringNotification UUID

Responses

CodeDescription
200Notification deleted
400Notification ID required
401Unauthorized - Invalid or missing API key
500Error deleting notification

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X DELETE "http://localhost:3000/api/notifications/delete?id=abc123" \
  -H "X-API-Key: your-api-key"

📂 System

[POST] /settings/system

Update system settings

Update global system configuration (Superadmin/Owner only)

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
appNamestringNo—
logoUrlstringNo—
timezonestringNo—

Example:

json
{
  "appName": "string",
  "logoUrl": "string",
  "timezone": "string"
}

Responses

CodeDescription
200Settings updated
401Unauthorized - Invalid or missing API key
500Failed to update settings

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
appNamestringNo—
logoUrlstringNo—
timezonestringNo—
updatedAtstring (date-time)No—

Response Example (200):

json
{
  "id": "string",
  "appName": "string",
  "logoUrl": "string",
  "timezone": "string",
  "updatedAt": "2026-01-15T08:00:00.000Z"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/settings/system" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"appName":"string","logoUrl":"string","timezone":"string"}'

[GET] /settings/system

Get system settings

Responses

CodeDescription
200System settings

Response Fields (200):

FieldTypeRequiredDescription
idstringNo—
appNamestringNo—
logoUrlstringNo—
timezonestringNo—

Response Example (200):

json
{
  "id": "default",
  "appName": "WA-AKG",
  "logoUrl": "https://example.com/logo.png",
  "timezone": "Asia/Jakarta"
}

cURL Example

bash
curl -X GET "http://localhost:3000/api/settings/system" \
  -H "X-API-Key: your-api-key"

[POST] /status/{sessionId}/update

Update status

Post a status update (story) to WhatsApp. Supports text, image, and video.

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
contentstring✅ YesStatus text or caption
typestringNoOptions: TEXT, IMAGE, VIDEO Default: TEXT
mediaUrlstringNoRequired for IMAGE and VIDEO
backgroundColorintegerNo—
fontintegerNo—
mentionsarray of stringNo—

Example:

json
{
  "content": "string",
  "type": "TEXT",
  "mediaUrl": "string",
  "backgroundColor": 0,
  "font": 0,
  "mentions": [
    "string"
  ]
}

Responses

CodeDescription
200Status posted
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
503Session not connected or ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/status/session-01/update" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"content":"string","type":"TEXT","mediaUrl":"string","backgroundColor":0,"font":0,"mentions":["string"]}'

[POST] /status/update

Update status

Post a status update (story) to WhatsApp. Supports text, image, and video.

Headers

X-API-Key: your-api-key
Content-Type: application/json

Request Body (application/json)

FieldTypeRequiredDescription
sessionIdstring✅ Yes—
contentstring✅ YesStatus text or caption
typestringNoOptions: TEXT, IMAGE, VIDEO Default: TEXT
mediaUrlstringNoRequired for IMAGE and VIDEO
backgroundColorintegerNoARGB color for TEXT status
fontintegerNoFont style for TEXT status
mentionsarray of stringNoList of JIDs to mention/tag in the status

Example:

json
{
  "sessionId": "string",
  "content": "string",
  "type": "TEXT",
  "mediaUrl": "string",
  "backgroundColor": 0,
  "font": 0,
  "mentions": [
    "string"
  ]
}

Responses

CodeDescription
200Status updated
400Missing required fields
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to post status
503Session not ready

Response Fields (200):

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Response Example (200):

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/status/update" \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"sessionId":"string","content":"string","type":"TEXT","mediaUrl":"string","backgroundColor":0,"font":0,"mentions":["string"]}'

[POST] /system/check-updates

Check for updates

Checks for new releases on GitHub and creates a system notification if a newer version is available.

Responses

CodeDescription
200Check results
401Unauthorized - Invalid or missing API key
500Error checking updates

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—
versionstringNoLatest version tag

Response Example (200):

json
{
  "success": true,
  "message": "string",
  "version": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/system/check-updates" \
  -H "X-API-Key: your-api-key"

📂 Contacts

[POST] /contacts/{sessionId}/{jid}/block

Block contact

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Contact blocked
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to block contact

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/contacts/session-01/[email protected]/block" \
  -H "X-API-Key: your-api-key"

[POST] /contacts/{sessionId}/{jid}/unblock

Unblock contact

Parameters

NameLocated inRequiredTypeDescription
sessionIdpath✅ Yesstring—
jidpath✅ Yesstring—

Responses

CodeDescription
200Contact unblocked
401Unauthorized - Invalid or missing API key
403Forbidden - Access denied
500Failed to unblock contact

Response Fields (200):

FieldTypeRequiredDescription
successbooleanNo—
messagestringNo—

Response Example (200):

json
{
  "success": true,
  "message": "string"
}

cURL Example

bash
curl -X POST "http://localhost:3000/api/contacts/session-01/[email protected]/unblock" \
  -H "X-API-Key: your-api-key"

📦 Schemas

Error

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
errorstringNo—

Example:

json
{
  "status": false,
  "message": "Error occurred",
  "error": "Detailed error info"
}

Success

FieldTypeRequiredDescription
statusbooleanNo—
messagestringNo—
dataobject, nullableNo—

Example:

json
{
  "status": true,
  "message": "Operation successful",
  "data": {
    "text": "Hello from WA-AKG!"
  }
}

Session

FieldTypeRequiredDescription
idstringNo—
namestringNo—
sessionIdstringNo—
statusstringNoOptions: Connected, Disconnected, Connecting
userIdstringNo—
botConfigobject, nullableNo—
webhooksarray of objectNo—
_countobject, nullableNo—
createdAtstring (date-time)No—
updatedAtstring (date-time)No—

Example:

json
{
  "id": "clx123abc",
  "name": "Marketing Bot",
  "sessionId": "marketing-1",
  "status": "Connected",
  "userId": "string",
  "botConfig": {
    "text": "Hello from WA-AKG!"
  },
  "webhooks": [
    {
      "text": "Hello from WA-AKG!"
    }
  ],
  "_count": {
    "contacts": 0,
    "messages": 0,
    "groups": 0,
    "autoReplies": 0,
    "scheduledMessages": 0
  },
  "createdAt": "2026-01-15T08:00:00.000Z",
  "updatedAt": "2026-01-15T08:00:00.000Z"
}

Message

FieldTypeRequiredDescription
textstringNo—

Example:

json
{
  "text": "Hello! How can I help you?"
}

Contact

FieldTypeRequiredDescription
jidstringNo—
namestringNo—
notifystringNo—
profilePicstring, nullableNo—

Example:

json
{
  "jid": "[email protected]",
  "name": "John Doe",
  "notify": "string",
  "profilePic": "string"
}

ScheduledMessage

FieldTypeRequiredDescription
idstringNo—
sessionIdstringNo—
jidstringNo—
contentstringNo—
sendAtstring (date-time)No—
statusstringNo—

Example:

json
{
  "id": "string",
  "sessionId": "string",
  "jid": "string",
  "content": "string",
  "sendAt": "2026-01-15T08:00:00.000Z",
  "status": "PENDING"
}

Webhook

FieldTypeRequiredDescription
idstringNo—
sessionIdstringNo—
urlstringNo—
eventsarray of stringNoEvents to subscribe to: message.received, message.sent, message.status, connection.update, group.update, contact.update, status.update, group.participant, message.deleted, message.edited or '*'
secretstringNo—

Example:

json
{
  "id": "string",
  "sessionId": "string",
  "url": "string",
  "events": [
    "string"
  ],
  "secret": "string"
}

WebhookLog

FieldTypeRequiredDescription
idstringNo—
webhookIdstringNo—
eventstringNo—
statusstringNoOptions: SUCCESS, FAILED
requestUrlstringNo—
requestHeadersobjectNo—
requestBodyobjectNo—
responseStatusCodeinteger, nullableNo—
responseBodystring, nullableNo—
responseTimeMsinteger, nullableNo—
errorMessagestring, nullableNo—
createdAtstring (date-time)No—

Example:

json
{
  "id": "string",
  "webhookId": "string",
  "event": "string",
  "status": "SUCCESS",
  "requestUrl": "string",
  "requestHeaders": {
    "text": "Hello from WA-AKG!"
  },
  "requestBody": {
    "text": "Hello from WA-AKG!"
  },
  "responseStatusCode": 0,
  "responseBody": "string",
  "responseTimeMs": 0,
  "errorMessage": "string",
  "createdAt": "2026-01-15T08:00:00.000Z"
}

Group

FieldTypeRequiredDescription
idstringNo—
subjectstringNo—
descstringNo—
ownerstringNo—
sizenumberNo—
isCommunitybooleanNoWhether this group is a WhatsApp Community announcement group
linkedParentJidstring, nullableNoJID of the parent community if this is a sub-group
participantsarray of objectNo—

Example:

json
{
  "id": "string",
  "subject": "string",
  "desc": "string",
  "owner": "string",
  "size": 0,
  "isCommunity": true,
  "linkedParentJid": "string",
  "participants": [
    {
      "id": "string",
      "admin": "string"
    }
  ]
}

Label

FieldTypeRequiredDescription
idstringNo—
namestringNo—
colornumber, nullableNo—
predefinedIdstring, nullableNo—

Example:

json
{
  "id": "string",
  "name": "string",
  "color": 0,
  "predefinedId": "string"
}

GroupDetails

FieldTypeRequiredDescription
idstringNo—
subjectstringNo—
subjectOwnerstringNo—
subjectTimenumberNo—
descstringNo—
descOwnerstringNo—
descIdstringNo—
ownerstringNo—

Example:

json
{
  "id": "string",
  "subject": "string",
  "subjectOwner": "string",
  "subjectTime": 0,
  "desc": "string",
  "descOwner": "string",
  "descId": "string",
  "owner": "string"
}

BroadcastLog

FieldTypeRequiredDescription
idstringNo—
sessionIdstringNo—
messagestringNo—
totalintegerNo—
sentintegerNo—
failedintegerNo—
statusstringNoOptions: running, completed, cancelled
delayintegerNo—
startedAtstring (date-time)No—
completedAtstring, nullable (date-time)No—

Example:

json
{
  "id": "string",
  "sessionId": "string",
  "message": "string",
  "total": 0,
  "sent": 0,
  "failed": 0,
  "status": "running",
  "delay": 0,
  "startedAt": "2026-01-15T08:00:00.000Z",
  "completedAt": "2026-01-15T08:00:00.000Z"
}

BroadcastRecipient

FieldTypeRequiredDescription
idstringNo—
jidstringNo—
statusstringNoOptions: pending, sent, failed
errorstring, nullableNo—
sentAtstring, nullable (date-time)No—

Example:

json
{
  "id": "string",
  "jid": "string",
  "status": "pending",
  "error": "string",
  "sentAt": "2026-01-15T08:00:00.000Z"
}
API Documentation - WA-AKG | WA-AKG