Listar e abrir conversas
Lista as conversas da loja, abre uma com as mensagens, acha a conversa de um cliente e conta as não lidas.
Listar conversas
Devolve as conversas entre clientes, sellers e a loja, com a contagem de mensagens não lidas por conversa. O administrador vê todas, não só as suas.
/api/v1/admin/messages/threadsAdminLista todas as conversas da loja
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição (Listar conversas)
curl "$BASE_URL/api/v1/admin/messages/threads?page=1&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta (Listar conversas)
{
"threads": [
{
"id": "02b7a358-6061-4d51-84c0-8044dbb6db6e",
"subject": "Dúvida sobre produto",
"status": "A",
"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"
}
],
"total": 28,
"page": 1,
"per_page": 20,
"total_pages": 2
}Campos da resposta
threadsarrayConversas da página, sem as mensagens.
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_atstringunread_countintegercreated_atstringupdated_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros (Listar conversas)
| 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"} |
| 500 | Falha de banco. | {"error":"failed to list threads","detail":"..."} |
Consultar conversa
Devolve a conversa e as mensagens dela. Sem parâmetros, devolve todas as mensagens em ordem cronológica. Com page ou per_page as mensagens vêm paginadas, e a resposta ganha page, per_page, total e total_pages.
/api/v1/admin/messages/threads/{id}AdminDevolve uma conversa com as mensagens
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de caminho
iduuidobrigatórioParâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 50Exemplo de requisição (Consultar conversa)
curl "$BASE_URL/api/v1/admin/messages/threads/02b7a358-6061-4d51-84c0-8044dbb6db6e" \
-H "Authorization: Bearer $TOKEN"Resposta (Consultar conversa)
{
"id": "02b7a358-6061-4d51-84c0-8044dbb6db6e",
"subject": "Dúvida sobre produto",
"status": "A",
"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 (Consultar conversa)
| 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"} |
| 404 | Não existe conversa com esse id. | {"error":"thread not found"} |
Achar ou abrir a conversa de um cliente
Usada pelo botão "Contatar cliente" do painel. Procura a conversa direta (sem seller) do cliente com a loja. Se ela não existe, cria uma conversa vazia e a devolve, para o administrador já poder escrever.
/api/v1/admin/messages/threads/find-for-customerAdminDevolve a conversa direta de um cliente, criando se não existir
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Parâmetros de consulta
user_iduuidobrigatóriosubjectstringExemplo de requisição (Conversa do cliente)
curl "$BASE_URL/api/v1/admin/messages/threads/find-for-customer?user_id=3093f506-d6af-4c27-9ef6-c245e8e602f9&subject=Sobre o seu pedido" \
-H "Authorization: Bearer $TOKEN"Resposta (Conversa do cliente)
{
"id": "02b7a358-6061-4d51-84c0-8044dbb6db6e",
"subject": "Dúvida sobre produto",
"status": "A",
"object_type": null,
"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"
}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_atstringunread_countintegercreated_atstringupdated_atstringErros (Conversa do cliente)
| 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 | Falta user_id. | {"error":"user_id is required"} |
| 500 | user_id que não é UUID, cliente inexistente, ou falha de banco. | {"error":"failed to find or create thread","detail":"..."} |
Contar mensagens não lidas
Conta as mensagens, em todas as conversas, que não foram enviadas por administradores e ainda estão não lidas. Alimenta o número do sino do painel.
/api/v1/admin/messages/unread-countAdminDevolve o total de mensagens que o administrador ainda não leu
Exige o privilégio manage_settings. O administrador enxerga e responde qualquer conversa da loja.
Exemplo de requisição (Não lidas)
curl "$BASE_URL/api/v1/admin/messages/unread-count" \
-H "Authorization: Bearer $TOKEN"Resposta (Não lidas)
{
"count": 6
}Campos da resposta
countintegerErros (Não 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"} |
| 500 | Falha de banco. | {"error":"failed to get unread count","detail":"..."} |