Mensagens da conversa
Lista o histórico de uma sessão, envia uma mensagem para a VI (em JSON ou em stream), apaga a partir de uma mensagem e retoma a conversa após um lote.
Cada turno tem duas mensagens: a do seller e a da VI. Enviar uma mensagem é a única rota da seção que "faz a VI trabalhar": ela consulta os dados do seu seller (produtos, pedidos, indicadores) e monta a resposta.
Listar as mensagens
Devolve as mensagens da sessão em ordem cronológica (da mais antiga para a mais nova).
/api/v1/vendor/intelligence/sessions/{id}/messagesSellerListar as mensagens
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um seller (veja Tokens).Parâmetros de caminho
iduuidobrigatórioParâmetros de consulta
limitintegerpadrão: 50langstringpt-BR ou en). Também aceito no cabeçalho X-Venddor-Lang.Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/intelligence/sessions/$SESSION_ID/messages?limit=50" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"messages": [
{
"id": "a0078ed3-625f-4adf-903c-2253161f817b",
"session_id": "a0cb371d-96ba-4406-afa1-057ba2594bb6",
"role": "user",
"content": "Desative as promoções vencidas",
"created_at": "2026-09-15T19:55:42.52317Z"
}
],
"total": 1
}Campos da resposta
messages[].iduuidmessages[].session_iduuidmessages[].rolestringuser ou assistant.messages[].contentstringvi:confirm e outros). Ignore os blocos que não conhece.messages[].metadataobjectmessages[].tokens_inputintegermessages[].tokens_outputintegermessages[].cost_centavosintegermessages[].created_atstringtotalintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 500 | O id não é um UUID válido (a plataforma responde 500 em vez de 400). | {"error":"o valor \"abc\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."} (devolvido em português) |
Enviar uma mensagem
Envia o texto do seller e devolve a resposta da VI. A mensagem do seller e a resposta ficam gravadas na sessão. Com stream: false (padrão) a chamada só volta quando o turno termina; com stream: true a resposta chega como eventos SSE (text/event-stream).
/api/v1/vendor/intelligence/sessions/{id}/messagesSellerEnviar uma mensagem
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
contentstringobrigatóriostreambooleanpadrão: falsetrue para receber SSE.surfacestringlateralconversalateral (barra lateral do painel, a VI navega o painel atrás do chat) ou conversa (home e página de chat, a tela abre dentro da própria conversa). Ajusta o texto da resposta.page_imagestringdata:image/png;base64,...).can_capture_pagebooleanneed_page e você reenvia a mesma mensagem com page_image.attachment_imagestringattachment_textstringattachment_filenamestringvoicebooleantrue quando o turno veio de uma conversa por voz; a frase de abertura é gerada pelo caminho rápido e anunciada logo no evento preamble_done.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/intelligence/sessions/$SESSION_ID/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Quantos pedidos entraram hoje?",
"stream": false
}'Resposta
{
"session_id": "a0cb371d-96ba-4406-afa1-057ba2594bb6",
"message_id": "91b74361-2426-4ed0-a6f6-10bd133ece8b",
"user_message_id": "a0078ed3-625f-4adf-903c-2253161f817b",
"content": "Hoje entraram **12 pedidos**, somando R$ 3.480,00.",
"prompt_tokens": 5120,
"output_tokens": 96,
"cost_centavos": 3
}event: token
data: {"delta":"Hoje entraram ","chunk":"Hoje entraram "}
event: done
data: {"reply":{"session_id":"...","message_id":"...","content":"Hoje entraram 12 pedidos."}}Campos da resposta
session_iduuidmessage_iduuiduser_message_iduuidcontentstringvi:confirm.prompt_tokensintegeroutput_tokensintegercost_centavosintegertool_callsarrayname, args, result, error, elapsed_ms). Informativo, não dependa do conteúdo.needs_page_capturebooleantrue quando a VI pede uma captura de tela (veja can_capture_page).Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 400 | content vazio ou corpo que não é JSON. | {"error":"content required"} ou {"error":"invalid request body"} |
| 403 | O recurso de conversa está desligado na loja. | {"error":"chat widget disabled..."} |
| 404 | Sessão inexistente. | {"error":"session not found"} |
| 503 | Nenhum provedor de IA configurado na instalação. | {"error":"no AI provider configured"} |
| 500 | Falha no turno (sem stream). Com stream, o erro vem no evento error. | {"error":"..."} |
Apagar a partir de uma mensagem
Apaga a mensagem indicada e todas as seguintes da sessão. Serve para editar uma pergunta: apague a partir dela e envie o texto novo, e a VI responde sem o contexto antigo. Um id de mensagem que não existe mais não apaga nada e responde 200.
/api/v1/vendor/intelligence/sessions/{id}/truncateSellerApagar a partir de uma mensagem
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
from_message_iduuidobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/intelligence/sessions/$SESSION_ID/truncate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from_message_id": "a0078ed3-625f-4adf-903c-2253161f817b"
}'Resposta
{ "ok": true }Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 400 | from_message_id ausente. | {"error":"from_message_id required"} |
| 500 | Falha ao apagar. | {"error":"could not truncate session"} |
Retomar após um lote
Quando uma alteração em lote é confirmada (por exemplo, desativar milhares de promoções), a loja processa em segundo plano e mostra uma barra de progresso. Se o pedido original tinha um complemento ("e depois me diga quantos ficaram acima de R$ 300"), esta rota dispara esse complemento quando o lote termina. Chame-a quando a barra chegar a 100%.
/api/v1/vendor/intelligence/sessions/{id}/bulk-continuationSellerRetomar a conversa após um lote
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
streambooleanpadrão: falseExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/intelligence/sessions/$SESSION_ID/bulk-continuation" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"stream": false
}'Resposta
{ "session_id": "...", "message_id": "...", "content": "Ficaram 38 promoções acima de R$ 300." }Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 400 | Corpo recusado. | {"error":"invalid request body"} |