| GET | /chatrooms | List chats |
| GET | /chatrooms/{chatRoomId}/messages | Chat history |
| GET | /chatrooms/{chatRoomId}/messages/{messageId}/media-url | Media link for a message |
| POST | /chatrooms/{chatRoomId}/read | Clear unread count |
| GET | /media-files | Media library |
| GET | /media-files/{messageId}/url | Media link by storage id |
GET
/chatroomsList chats
Newest activity first.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string (query) |
Request
curl "https://api.meowsapp.com/chatrooms?clientId=acmemain" -H "Authorization: Bearer $SN_TOKEN"Response · 200
{ "chatRooms": [ {
"chatRoomId": "acmemain-60111111111111-123456789012345", "clientId": "acmemain",
"name": "Jane Lim", "myLid": "60111111111111", "clientLid": "123456789012345",
"isGroup": false, "remoteJid": "123456789012345",
"lastMessage": "See you tomorrow", "lastMessageFromMe": false,
"lastMessageAt": "2026-08-28T05:22:55Z", "unreadCount": 2,
"avatarUrl": "https://files.meowsapp.com/…/avatars/123456789012345/1965117713.jpg"
} ] }GET
/chatrooms/{chatRoomId}/messagesChat history
The last 200 messages of a chat, oldest first.
| Parameter | Type | Description |
|---|---|---|
chatRoomIdrequired | string (path) | From /chatrooms. |
Request
curl "https://api.meowsapp.com/chatrooms/acmemain-60111111111111-123456789012345/messages" -H "Authorization: Bearer $SN_TOKEN"Response · 200
{ "messages": [ {
"messageId": "3EB0…", "chatRoomId": "acmemain-6011…-1234…", "clientId": "acmemain",
"body": "Here you go", "messageType": "image", "fromMe": false, "pushname": "Jane",
"sentAt": "2026-08-28T05:22:55Z", "deleted": false, "fromAi": false,
"media": { "mimeType": "image/jpeg", "mediaType": "image", "fileName": "photo.jpg", "fileSize": 102400 },
"downloadUrl": "https://files.meowsapp.com/…/acme/acmemain/2a7b….jpg",
"extras": { "quoted": { "…": "…" }, "reactions": { "60111111111111": "👍" }, "edited": true, "editHistory": ["…"], "meta": { "fromAI": false } }
} ] }messageType:chat,image,video,audio,document,sticker,contact,location,poll,vote_update,interactive,interactive_reply.extrasmirrors the webhook's per-type objects plusreactions,edited/editHistory,revoked,forwarded,mentions,group.
GET
/chatrooms/{chatRoomId}/messages/{messageId}/media-urlMedia link for a message
A permanent public link to the stored file (downloadUrl in history is the same link).
Response · 200
{ "ok": true, "url": "https://files.meowsapp.com/…/acme/acmemain/2a7b….jpg" }| Status | When |
|---|---|
404 | That message has no media. |
POST
/chatrooms/{chatRoomId}/readClear unread count
Resets the hosted unreadCount to 0 without sending WhatsApp read receipts (use /mark-read for blue ticks).
No parameters
Response · 200
{ "status": "ok" }GET
/media-filesMedia library
Every stored file for a session, newest first, paginated.
| Parameter | Type | Description |
|---|---|---|
clientIdrequired | string (query) | |
orgIdrequired | string (query) | |
page | number (query) | 1-based, default 1. |
limit | number (query) | Default 50, max 200. |
Response · 200
{ "ok": true, "files": [ { "messageId": "3f2c…-uuid", "clientId": "acmemain", "mimeType": "image/jpeg", "mediaType": "image", "fileName": "photo.jpg", "fileSize": 102400, "caption": "", "createdAt": "2026-08-28T05:22:55Z" } ],
"pagination": { "page": 1, "limit": 50, "total": 123 } }messageIdhere is the storage record's UUID, not the WhatsApp message id — use it only with/media-files/{messageId}/url.
GET
/media-files/{messageId}/urlMedia link by storage id
Response · 200
{ "ok": true, "url": "https://files.meowsapp.com/…/acme/acmemain/2a7b….jpg" }