Conversar com a IA
Envia uma mensagem e recebe a proposta atualizada, de uma vez ou em fluxo de eventos.
Cada mensagem pede ou refina algo ("troque o verde por azul-petróleo", "adicione uma página Sobre"). A IA devolve a conversa inteira com sua resposta e uma proposta atualizada em current_output. Nada é gravado na loja até você aplicar a sessão. Respostas levam de alguns segundos a mais de um minuto; para mostrar progresso, use a rota de fluxo.
Enviar mensagem
Grava a mensagem, aciona a IA e devolve a sessão completa quando termina. Os arquivos de referência enviados para a sessão (texto extraído de PDF e DOCX, cores de imagens) entram automaticamente no contexto.
/api/v1/admin/ai-builder/sessions/{id}/messageAdminEnviar uma mensagem e esperar a resposta
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
messagestringobrigatórioattachment_idsstring[]session_id da sessão entram sozinhos no contexto.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/ai-builder/sessions/f239c911-be44-459f-93b0-6a5be4101918/message" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Quero uma loja de artesanato com visual quente, tons terrosos e fonte elegante."
}'Resposta
{
"id": "f239c911-be44-459f-93b0-6a5be4101918",
"name": "Nova identidade",
"status": "active",
"messages": [
{
"role": "user",
"content": "Quero uma loja de artesanato com visual quente.",
"created_at": "2026-10-11T12:00:00Z"
},
{
"role": "assistant",
"content": "Criei uma paleta quente em tons terrosos e um cabeçalho minimalista.",
"created_at": "2026-10-11T12:00:30Z"
}
],
"current_output": {
"theme": {
"primary_color": "#B45309",
"secondary_color": "#78350F",
"font_family": "Lato",
"heading_font": "Cormorant Garamond",
"store_name": "Casa Aurora"
},
"extended_theme": {
"button_border_radius": "999px"
},
"reasoning": "Paleta terrosa para transmitir artesanal."
},
"theme_snapshot": {},
"layout_snapshot": {},
"created_by": "ec5e10b3-8cb1-43e9-9aa8-964b64eda8de",
"created_at": "2026-10-11T11:59:00Z",
"updated_at": "2026-10-11T12:00:30Z",
"tokens_used": 4120,
"processing_ms": 18500,
"model_used": "claude-haiku-4-5-20251001"
}Campos da resposta
iduuidnamestringstatusstringactive (em conversa), applied (já aplicada à loja) ou discarded.messagesobject[]role (user, assistant ou system), content, attachments[] (quando houver) e created_at.current_outputobjectProposta atual da IA. Veja os campos abaixo. Antes da primeira resposta tem theme e extended_theme nulos.
themeobjectprimary_color, secondary_color, accent_color, bg_color, text_color, font_family, heading_font, border_radius, store_name...extended_themeobjectbutton_border_radius.layoutsobjectpages_contentobject[]slug, title, body, seo_title, seo_description, cada texto como mapa de idioma ({"pt-BR": "..."}).navigationobjectheader_menu, quick_links, footer_about, footer_help, cada item com label (mapa de idioma) e url.appearance_settingsobjecthomepage_sectionsobject[]slug, settings e blocks[] (type, settings).catalogobjectcategories[] e products[] (preço e preço de lista em centavos).reasoningstringtheme_snapshotobject{} antes de aplicar.layout_snapshotobjectcreated_byuuidcreated_atstringupdated_atstringtokens_usedintegerprocessing_msintegermodel_usedstringapplied_atstringgenerated_bannersobject[]Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | message vazio. | {"error":"message is required"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 404 | Sessão não existe. | {"error":"session not found"} |
| 500 | Falha de banco de dados ou do provedor de IA. | {"error":"failed to send message","detail":"..."} |
Enviar com fluxo
Mesmo efeito da rota anterior, mas a resposta é um fluxo de eventos SSE (text/event-stream) que mostra cada etapa. O corpo da requisição é o mesmo. Leia o fluxo até o evento done ou error.
/api/v1/admin/ai-builder/sessions/{id}/streamAdminEnviar uma mensagem e acompanhar o progresso
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
messagestringobrigatórioattachment_idsstring[]Exemplo de requisição
curl -N -X POST "$BASE_URL/api/v1/admin/ai-builder/sessions/f239c911-be44-459f-93b0-6a5be4101918/stream" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"message": "Troque o verde por azul-petróleo."}'Resposta
event: status
data: {"status":"thinking","message":"Analyzing your request..."}
event: status
data: {"status":"loading_settings","message":"Loading AI configuration..."}
event: result
data: {...sessão completa em JSON...}
event: done
data: {"tokens_used":4120,"processing_ms":18500,"model_used":"claude-haiku-4-5-20251001"}Campos da resposta
statuseventothinking, loading_settings, analyzing e outras. Cada evento traz status e message (em inglês).resulteventodoneeventotokens_used, processing_ms, model_used.errorevento{"error": "..."}. O status HTTP já foi enviado como 200.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | message vazio. | {"error":"message is required"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 500 | O servidor não suporta fluxo. | {"error":"streaming not supported"} |