✅ Presence
You can get presence information (online, offline with last seen, typing status) for a contact if they share their presence information.

FAQ
👉 I don’t get notifications on my phone when WAHA session is connected
- You need to send
offlineafter all presence you send (WhatsApp doesn’t send notifications to the device if a web client is active). - For 🏭 NOWEB Engine also mark sure to send
markOnline: falsewhen you create a new session.
Features
Here’s the list of features that are available by 🏭 Engines:
✅ Presence - API
| API | WEBJS | NOWEB | GOWS |
|---|---|---|---|
POST /api/{session}/presence | ✔️ | ✔️ | ✔️ |
GET /api/{session}/presence/{chatId} | ✔️ | ✔️ | ✔️ |
POST /api/{session}/presence/{chatId}/subscribe | ✔️ | ✔️ | ✔️ |
GET /api/{session}/presence | ✔️ | ✔️ |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
✅ Presence - Events
| Events | WEBJS | NOWEB | GOWS |
|---|---|---|---|
presence.update | ✔️ | ✔️ | ✔️ |
API
Set presence
You can set your global or chat-related presence with endpoint
POST /api/{session}/presence{
"chatId": "111111111@c.us",
"presence": "typing"
}Possible presence statuses that you can set or get for chats:
online- send the status with nochatIdoffline- send the status with nochatIdtyping-chatIdrequiredrecording-chatIdrequiredpaused- resets the chat presence after you weretyping.chatIdrequired.
Start typing to a chat (you can use POST /startTyping instead)
{
"chatId": "111111111@c.us",
"presence": "typing"
}Clear “typing” state (you can use POST /stopTyping instead)
{
"chatId": "111111111@c.us",
"presence": "paused"
}Set global “online”, all contacts will see it
{
"presence": "online"
}💡 In the multi-device version of WhatsApp - if a desktop client is active, WhatsApp doesn’t send push notifications
to the device.
If you would like to receive said notifications - you need to mark a session’s presence as offline.
{
"presence": "offline"
}Get chat presence
GET /api/{session}/presence/{chatId}Get presence information for a single chat. For a group, you’ll get participants’ statuses.
{
"id": "2132132130@c.us",
"presences": [
{
"participant": "2132132130@c.us",
"lastKnownPresence": "online",
"lastSeen": null
}
]
}Subscribe to presence
You can subscribe to presence information by calling
POST /api/{session}/presence/{chatId}/subscribe(no body required).
You can get later presence information for the chat with above GET endpoints or by listening to presence.update
webhook.
Get all chats presence
You can get all presence information available for a session by calling
GET /api/{session}/presenceIt returns both groups’ and personal chats’ presence information.
Here’s few notes about fields:
chatId- either contact id (213213213@c.us) or group chat id (1111111111111@g.us).lastSeen- contains Unix timestamps indicating when a participant was last onlinelastKnownPresence- contains the last known presence status, which can beoffline,online,typing,recording, orpaused
[
{
"id": "2132132130@c.us",
"presences": [
{
"participant": "2132132130@c.us",
"lastKnownPresence": "offline",
"lastSeen": 1686719326
}
]
},
{
"id": "11111111111111111111111@g.us",
"presences": [
{
"participant": "11111111111111111111111@g.us",
"lastKnownPresence": "online",
"lastSeen": null
},
{
"participant": "2132132130@c.us",
"lastKnownPresence": "offline",
"lastSeen": 1686719326
}
]
}
]Events
Read more about 🔄 Events.
presence.update
You can subscribe to presence.update webhook event to get the most recent presence information.
{
"event": "presence.update",
"session": "default",
"payload": {
"id": "111111111111111111@g.us",
"presences": [
{
"participant": "11111111111@c.us",
"lastKnownPresence": "typing",
"lastSeen": null
}
]
},
"engine": "NOWEB"
}payload.idindicates the chat - either direct chat with a contact or a group chat.payload.id.[].participant- certain participant presence status. For a direct chat there’s only one participant.lastKnownPresencestatuses that you can set or get for chats:onlineofflinetypingrecordingpaused