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}' ```
Autenticação
JWT HS256 da própria instância.
- Header
Authorization- Exemplo
Bearer <INSTANCE_TOKEN>
Parâmetros
instancepathobrigatórioNome público da instância
Request body
bodyobjectTodos 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.
bodyobjectfilterobject
filterobjectidintegermín: 1ID interno exato da mensagem.
keyIdstringID da mensagem no protocolo WhatsApp.
keyRemoteJidstringJID remoto da conversa.
keyFromMeenum<true | false>Recebido como string; comparacao case-insensitive apos trim e convertido internamente para booleano.
messageTypestringTipo exato persistido, sem enum fechada.
statusstringStatus filtrado por relacionamento com MessageUpdate usando EXISTS, sem duplicar mensagens.
cursorobject
cursorobjecttypeenum<next | previous>obrigatórionext busca ids menores que o cursor; previous busca ids maiores e devolve a pagina novamente em id DESC.
idintegerobrigatóriomín: 1ID interno da mensagem usado como cursor.
limitintegerpadrão: 50 · mín: 1 · máx: 100{}
Respostas
application/jsonPagina de mensagens persistidas
response 200object
response 200objectmessagesobjectobrigatório
messagesobjectobrigatóriorecordsarrayobrigatório
recordsarrayobrigatórioitems[]object
items[]objectidintegerobrigatóriokeyIdstringobrigatóriokeyRemoteJidstring | nullobrigatóriokeyLidstring | nullkeyFromMebooleanobrigatóriokeyParticipantstring | nullobrigatóriokeyParticipantLidstring | nullpushNamestring | nullobrigatóriomessageTypestringobrigatóriocontentanyobrigatóriomessageTimestampintegerobrigatórioinstanceIdintegerobrigatóriodeviceenum<ios | android | web | unknown | desktop>obrigatórioisGroupboolean | nullmetadataanyexternalAttributesobjectmessageUpdatesarrayobrigatório
messageUpdatesarrayobrigatórioitems[]object
items[]objectstatusstringobrigatóriodateTimestringobrigatórioformat: date-timepageInfoobjectobrigatório
pageInfoobjectobrigatóriolimitintegerobrigatóriomín: 1 · máx: 100hasNextbooleanobrigatórioExistem mensagens mais antigas.
hasPreviousbooleanobrigatórioExistem mensagens mais recentes.
nextCursoroneOfobrigatório
nextCursoroneOfobrigatórioopção 1object
opção 1objecttypeenum<next | previous>obrigatórioidintegerobrigatóriomín: 1opção 2nullpreviousCursoroneOfobrigatório
previousCursoroneOfobrigatórioopção 1object
opção 1objecttypeenum<next | previous>obrigatórioidintegerobrigatóriomín: 1opção 2null{"messages": {"records": [{"id": 1,"keyId": "string","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}}}}
