Documentation menu

API reference

Chats & contacts

Read receipts, unread flags, contact lookups and profile pictures.

POST/mark-readSend read receipts
POST/mark-unreadMark a chat unread
POST/user-infoLook up a contact
POST/check-owner-lidIs this number on WhatsApp?
GET/profile-pictureProfile picture
POST/refresh-avatarsBackfill profile pictures
POST/mark-read

Send read receipts

Blue-ticks the given messages for the sender and clears the hosted-inbox unread badge.

ParameterTypeDescription
clientIdrequiredstringYour account identifier (letters and digits only).
torequiredstringRecipient: a LID user-part (123456789012345), a phone with + (+60123456789, resolved to the contact's LID when known), or a full JID (…@lid, …@s.whatsapp.net, groups …@g.us).
messageIdsrequiredstring[]Ids of the messages you have displayed.
Request · JSON body
{ "clientId": "acmemain", "to": "123456789012345", "messageIds": ["3EB0…", "3EB1…"] }
Response · 200
{ "ok": true, "count": 2 }
StatusWhen
400messageIds empty.
404Unpaired session.
502Receipt rejected.
POST/mark-unread

Mark a chat unread

Flags the chat as unread on the linked phone (the same as long-press → Mark as unread). Requires hosted history for that chat, which anchors the flag.

ParameterTypeDescription
clientIdrequiredstringYour account identifier (letters and digits only).
torequiredstringRecipient: a LID user-part (123456789012345), a phone with + (+60123456789, resolved to the contact's LID when known), or a full JID (…@lid, …@s.whatsapp.net, groups …@g.us).
Request · JSON body
{ "clientId": "acmemain", "to": "123456789012345" }
Response · 200
{ "ok": true }
StatusWhen
404No stored message for this chat.
502WhatsApp rejected the app-state patch.
POST/user-info

Look up a contact

Resolve a LID, JID or phone number to the contact's username handle, status text, picture id and device count.

ParameterTypeDescription
clientIdrequiredstringYour account identifier (letters and digits only).
jidrequiredstringLID user-part, full JID, or +-prefixed phone.
Request · JSON body
{ "clientId": "acmemain", "jid": "+60123456789" }
Response · 200
{ "jid": "123456789012345@lid", "username": "janelim", "status": "Available", "pictureId": "1965117713", "devices": 2, "verifiedName": "" }
StatusWhen
409Session not connected.
404WhatsApp returned no info for that user.
502Lookup failed; retry.
POST/check-owner-lid

Is this number on WhatsApp?

Returns your own LID/JID and, for number, whether it is on WhatsApp plus its JID and LID — the canonical way to turn a phone number into a to value.

ParameterTypeDescription
clientIdrequiredstringYour account identifier (letters and digits only).
numberstringPhone with country code.
Request · JSON body
{ "clientId": "acmemain", "number": "+60123456789" }
Response · 200
{
  "myLid": "60111111111111", "myJid": "[email protected]",
  "number": "60123456789", "isOnWhatsApp": true,
  "numberJid": "[email protected]", "numberLid": "123456789012345", "username": "janelim"
}
  • Bulk number checks are a ban signal on WhatsApp. Check numbers as you need them, not your whole CRM at once.
GET/profile-picture

Profile picture

The contact's or group's picture. url is WhatsApp's signed link (expires in ~10 days); storedUrl is the permanent copy the platform keeps (mirrored once per picture version).

ParameterTypeDescription
clientIdrequiredstring (query)
jidrequiredstring (query)LID, +phone or group JID.
previewboolean (query)true (default) = 96 px thumbnail, false = full size.
refreshboolean (query)Bypass the 24 h cache.
Request
curl "https://api.meowsapp.com/profile-picture?clientId=acmemain&jid=123456789012345" -H "Authorization: Bearer $SN_TOKEN"
Response · 200
{ "jid": "123456789012345@lid", "id": "1965117713", "type": "preview",
  "url": "https://pps.whatsapp.net/v/…&oe=6A9E2CBE",
  "storedUrl": "https://files.meowsapp.com/…/avatars/123456789012345/1965117713.jpg", "mirrored": true }
// no picture / hidden by privacy settings (still 200):
{ "jid": "123456789012345@lid", "url": "", "reason": "the user has hidden their profile picture from you" }
POST/refresh-avatars

Backfill profile pictures

Hosted inbox only: fill avatarUrl for every chat of the session. Synchronous, ~7 chats/s.

ParameterTypeDescription
clientIdrequiredstringYour account identifier (letters and digits only).
forcebooleanRe-check chats that already have a picture (unchanged pictures are never re-uploaded).
Request · JSON body
{ "clientId": "acmemain" }
Response · 200
{ "rooms": 120, "updated": 87, "skipped": 0, "noPhoto": 33, "failed": 0 }