Referência/Chats/findPersistedMessages
Chats

Busca mensagens persistidas no banco

Consulta exclusivamente mensagens persistidas da instancia informada. A instancia nao precisa estar conectada ao WhatsApp; a rota nao resolve cliente WhatsApp, nao valida sessao conectada e nao acessa WebSocket. O cursor usa o ID interno da mensagem e a resposta publica e sempre ordenada por id decrescente. Campos legados como where, keyid, messageStatus, page e offset nao fazem parte deste contrato. Exemplo: ```bash curl --location --request POST 'http://localhost:8084/instance/codechat-01/db/messages' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data-raw '{"filter":{"keyRemoteJid":"[email protected]","keyFromMe":"true","messageType":"conversation","status":"DELIVERY_ACK"},"cursor":{"type":"next","id":1200},"limit":50}' ```

POSThttp://localhost:8084/instance/{instance}/db/messages

Autenticação

InstanceBearerobrigatório

JWT HS256 da própria instância.

Header
Authorization
Exemplo
Bearer <INSTANCE_TOKEN>

Parâmetros

instancepathobrigatório
string

Nome público da instância

minLength 1

Request body

bodyobject

Todos os campos sao opcionais. O body vazio {} retorna as mensagens mais recentes da instancia com limite padrao 50. Nao aceita where, page, offset, keyid legado, messageStatus legado, device ou instanceId vindo do cliente.

filterobject
idintegermín: 1

ID interno exato da mensagem.

keyIdstring

ID da mensagem no protocolo WhatsApp.

keyRemoteJidstring

JID remoto da conversa.

keyFromMeenum<true | false>

Recebido como string; comparacao case-insensitive apos trim e convertido internamente para booleano.

messageTypestring

Tipo exato persistido, sem enum fechada.

statusstring

Status filtrado por relacionamento com MessageUpdate usando EXISTS, sem duplicar mensagens.

cursorobject
typeenum<next | previous>obrigatório

next busca ids menores que o cursor; previous busca ids maiores e devolve a pagina novamente em id DESC.

idintegerobrigatóriomín: 1

ID interno da mensagem usado como cursor.

limitintegerpadrão: 50 · mín: 1 · máx: 100
Exemplo JSON
{}

Respostas

application/json
200

Pagina de mensagens persistidas

response 200object
messagesobjectobrigatório
recordsarrayobrigatório
items[]object
idintegerobrigatório
keyIdstringobrigatório
keyRemoteJidstring | nullobrigatório
keyLidstring | null
keyFromMebooleanobrigatório
keyParticipantstring | nullobrigatório
keyParticipantLidstring | null
pushNamestring | nullobrigatório
messageTypestringobrigatório
contentanyobrigatório
messageTimestampintegerobrigatório
instanceIdintegerobrigatório
deviceenum<ios | android | web | unknown | desktop>obrigatório
isGroupboolean | null
metadataany
externalAttributesobject
messageUpdatesarrayobrigatório
items[]object
statusstringobrigatório
dateTimestringobrigatórioformat: date-time
pageInfoobjectobrigatório
limitintegerobrigatóriomín: 1 · máx: 100
hasNextbooleanobrigatório

Existem mensagens mais antigas.

hasPreviousbooleanobrigatório

Existem mensagens mais recentes.

nextCursoroneOfobrigatório
opção 1object
typeenum<next | previous>obrigatório
idintegerobrigatóriomín: 1
opção 2null
previousCursoroneOfobrigatório
opção 1object
typeenum<next | previous>obrigatório
idintegerobrigatóriomín: 1
opção 2null
Exemplo 200gerado do schema
{
"messages": {
"records": [
{
"id": 1,
"keyId": "string",
"keyRemoteJid": "[email protected]",
"keyLid": "string",
"keyFromMe": true,
"keyParticipant": "string",
"keyParticipantLid": "string",
"pushName": "CodeChat",
"messageType": "Olá! Esta é uma mensagem de exemplo da CodeChat.",
"content": "string",
"messageTimestamp": 1,
"instanceId": 1,
"device": "ios",
"isGroup": true,
"metadata": "string",
"externalAttributes": {},
"messageUpdates": [
{
"status": "string",
"dateTime": "2026-07-13T15:10:00Z"
}
]
}
],
"pageInfo": {
"limit": 1,
"hasNext": true,
"hasPrevious": true,
"nextCursor": {
"type": "next",
"id": 1
},
"previousCursor": {
"type": "next",
"id": 1
}
}
}
}