| POST | /mark-read | Send read receipts |
| POST | /mark-unread | Mark a chat unread |
| POST | /user-info | Look up a contact |
| POST | /check-owner-lid | Is this number on WhatsApp? |
| GET | /profile-picture | Profile picture |
| POST | /refresh-avatars | Backfill profile pictures |
/mark-readSend read receipts
Blue-ticks the given messages for the sender and clears the hosted-inbox unread badge.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string | Your account identifier (letters and digits only). |
torequired | string | Recipient: 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). |
messageIdsrequired | string[] | Ids of the messages you have displayed. |
{ "clientId": "acmemain", "to": "123456789012345", "messageIds": ["3EB0…", "3EB1…"] }{ "ok": true, "count": 2 }| Status | When |
|---|---|
400 | messageIds empty. |
404 | Unpaired session. |
502 | Receipt rejected. |
/mark-unreadMark 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.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string | Your account identifier (letters and digits only). |
torequired | string | Recipient: 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). |
{ "clientId": "acmemain", "to": "123456789012345" }{ "ok": true }| Status | When |
|---|---|
404 | No stored message for this chat. |
502 | WhatsApp rejected the app-state patch. |
/user-infoLook up a contact
Resolve a LID, JID or phone number to the contact's username handle, status text, picture id and device count.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string | Your account identifier (letters and digits only). |
jidrequired | string | LID user-part, full JID, or +-prefixed phone. |
{ "clientId": "acmemain", "jid": "+60123456789" }{ "jid": "123456789012345@lid", "username": "janelim", "status": "Available", "pictureId": "1965117713", "devices": 2, "verifiedName": "" }| Status | When |
|---|---|
409 | Session not connected. |
404 | WhatsApp returned no info for that user. |
502 | Lookup failed; retry. |
/check-owner-lidIs 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.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string | Your account identifier (letters and digits only). |
number | string | Phone with country code. |
{ "clientId": "acmemain", "number": "+60123456789" }{
"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.
/profile-pictureProfile 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).
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string (query) | |
jidrequired | string (query) | LID, +phone or group JID. |
preview | boolean (query) | true (default) = 96 px thumbnail, false = full size. |
refresh | boolean (query) | Bypass the 24 h cache. |
curl "https://api.meowsapp.com/profile-picture?clientId=acmemain&jid=123456789012345" -H "Authorization: Bearer $SN_TOKEN"{ "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" }/refresh-avatarsBackfill profile pictures
Hosted inbox only: fill avatarUrl for every chat of the session. Synchronous, ~7 chats/s.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string | Your account identifier (letters and digits only). |
force | boolean | Re-check chats that already have a picture (unchanged pictures are never re-uploaded). |
{ "clientId": "acmemain" }{ "rooms": 120, "updated": 87, "skipped": 0, "noPhoto": 33, "failed": 0 }