Estado, leitura e presença
Marca mensagens como lidas e entregues, muda o estado da conversa, avisa que está digitando e vê quem está online.
Marcar mensagens como lidas
Marca como lidas todas as mensagens da conversa que não foram enviadas por você. Quem as enviou recebe o aviso de leitura em tempo real. Chame quando o administrador abrir a conversa. Não precisa de corpo.
/api/v1/admin/messages/threads/{id}/readAdminMarca como lidas as mensagens recebidas
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (Marcar como lidas)
curl -X PATCH "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e/read" \
-H "Authorization: Bearer $TOKEN"Resposta (Marcar como lidas)
{
"message": "marked as read",
"count": 2
}Campos da resposta
messagestringmarked as read.countintegerErros (Marcar como lidas)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio manage_settings. | {"error":"insufficient privileges","required":"manage_settings"} |
| 400 | O id não é um UUID válido. | {"error":"invalid id","detail":"id must be a valid UUID"} |
Marcar mensagens como entregues
Marca como entregues as mensagens recebidas que ainda não tinham delivered_at, para quem enviou ver o "duplo visto". Chame quando a conversa for carregada na tela. Não precisa de corpo.
/api/v1/admin/messages/threads/{id}/deliveredAdminRegistra que as mensagens chegaram à tela do administrador
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (Marcar como entregues)
curl -X PATCH "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e/delivered" \
-H "Authorization: Bearer $TOKEN"Resposta (Marcar como entregues)
{
"message": "marked as delivered",
"count": 2
}Campos da resposta
messagestringmarked as delivered.countintegerErros (Marcar como entregues)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio manage_settings. | {"error":"insufficient privileges","required":"manage_settings"} |
| 400 | O id não é um UUID válido. | {"error":"invalid id","detail":"id must be a valid UUID"} |
Mudar o estado da conversa
Muda o estado da conversa. O valor entra como palavra e é devolvido como letra no campo status (A, R, C).
/api/v1/admin/messages/threads/{id}/statusAdminMarca a conversa como aberta, resolvida ou arquivada
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
statusstringobrigatórioopenresolvedarchivedExemplo de requisição (Mudar estado)
curl -X PATCH "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e/status" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "resolved"
}'Resposta (Mudar estado)
{
"id": "02b7a358-6061-4d51-84c0-8044dbb6db6e",
"subject": "Dúvida sobre produto",
"status": "R",
"object_type": "order",
"object_id": "3f73310d-bfdd-4713-a664-305c08eda58b",
"object_name": "Pedido PEDIDO-20261011-0002",
"customer_user_id": "3093f506-d6af-4c27-9ef6-c245e8e602f9",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"vendor_name": "Loja Seller Teste",
"customer_name": "Maria Souza",
"last_message_preview": "Olá! Seu pedido já saiu para entrega.",
"last_message_at": "2026-10-11T19:25:56.593566Z",
"unread_count": 1,
"created_at": "2026-10-11T18:11:59.835461Z",
"updated_at": "2026-10-11T19:25:56.593566Z",
"messages": [
{
"id": "ddfeb0e4-5c98-4bc3-ab4f-fad15ca6b364",
"thread_id": "02b7a358-6061-4d51-84c0-8044dbb6db6e",
"sender_id": "ec5e10b3-8cb1-43e9-9aa8-964b64eda8de",
"sender_type": "admin",
"body": "Olá! Seu pedido já saiu para entrega.",
"attachments": [],
"is_read": false,
"created_at": "2026-10-11T19:25:56.593566Z"
}
]
}Campos da resposta
iduuidsubjectstringstatusstringA aberta, R resolvida, C arquivada. Conversas antigas podem ter outras letras (por exemplo D).object_typestringorder, product, vendor, user). Ausente se não há.object_idstringobject_namestringcustomer_user_iduuidvendor_iduuidvendor_namestringcustomer_namestringlast_message_previewstringlast_message_atstringmessagesarrayMensagens (só ao consultar uma conversa).
iduuidthread_iduuidsender_iduuidsender_typestringcustomervendoradminbodystringattachmentsarrayurl, filename, content_type e size (bytes).is_readbooleantrue quando o outro lado leu.delivered_atstringread_atstringcreated_atstringunread_countintegercreated_atstringupdated_atstringErros (Mudar estado)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio manage_settings. | {"error":"insufficient privileges","required":"manage_settings"} |
| 400 | O id não é um UUID válido. | {"error":"invalid id","detail":"id must be a valid UUID"} |
| 400 | status fora da lista. | {"error":"status must be one of: open, resolved, archived"} |
| 404 | Conversa inexistente. | {"error":"thread not found"} |
Avisar que está digitando
Sinal efêmero: nada é gravado. Os outros participantes conectados recebem o aviso "digitando" em tempo real. Mande is_typing true enquanto digita e false ao parar.
/api/v1/admin/messages/threads/{id}/typingAdminAvisa os outros participantes que o administrador está digitando
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
is_typingbooleanpadrão: truetrue digitando, false parou. Se o corpo for inválido ou vazio, vale true.Exemplo de requisição (Digitando)
curl -X POST "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e/typing" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_typing": true
}'Resposta (Digitando)
Corpo vazio.
Erros (Digitando)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio manage_settings. | {"error":"insufficient privileges","required":"manage_settings"} |
| 400 | O id não é um UUID válido. | {"error":"invalid id","detail":"id must be a valid UUID"} |
Ver quem está online na conversa
Devolve os outros participantes da conversa (você não aparece) e se cada um está conectado agora. Serve para o indicador verde/cinza do cabeçalho do chat.
/api/v1/admin/messages/threads/{id}/presenceAdminInforma se os outros participantes estão conectados
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (Presença)
curl "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e/presence" \
-H "Authorization: Bearer $TOKEN"Resposta (Presença)
{
"participants": [
{
"user_id": "3093f506-d6af-4c27-9ef6-c245e8e602f9",
"online": false
},
{
"user_id": "0fd409fb-9869-4c50-a18c-a810a19abeed",
"online": true
}
]
}Campos da resposta
participantsarrayOutros participantes.
user_iduuidonlinebooleantrue se está conectado agora.Erros (Presença)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio manage_settings. | {"error":"insufficient privileges","required":"manage_settings"} |
| 400 | O id não é um UUID válido. | {"error":"invalid id","detail":"id must be a valid UUID"} |