Ajustes do AI Builder
Configura o provedor de IA e o gerador de imagens, revela chaves e testa a conexão.
Cada loja configura qual provedor de IA o AI Builder usa e, opcionalmente, um serviço de geração de imagens para os banners. As chaves são sensíveis: as respostas as devolvem mascaradas (sk-a••••••••7890) e existe uma rota específica, auditada, para revelar uma delas.
Obter ajustes
Devolve os ajustes atuais com as chaves mascaradas.
/api/v1/admin/ai-builder/settingsAdminObter os ajustes
Requer o privilégio manage_theme.
Exemplo de requisição
curl -X GET "$BASE_URL/api/v1/admin/ai-builder/settings" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"settings": {
"anthropic_api_key": "sk-a••••••••7890",
"anthropic_model": "claude-haiku-4-5-20251001",
"openai_compatible_url": "https://ia.minhaloja.com.br/v1",
"openai_compatible_key": "1763••••••••58c1",
"openai_compatible_model": "meu-modelo",
"active_provider": "anthropic",
"max_tokens": 16000,
"temperature": 0.7,
"enabled": true,
"rate_limit_per_hour": 20,
"max_file_size_mb": 20,
"max_files_per_session": 5,
"image_api_url": "https://imggen.exemplo.com/api/v1",
"image_api_key": "abcd••••••••wxyz",
"updated_at": "2026-07-19T19:06:04.752346Z"
}
}Campos da resposta
settingsobjectAjustes.
anthropic_api_keystringanthropic_modelstringopenai_compatible_urlstringopenai_compatible_keystringopenai_compatible_modelstringactive_providerstringanthropicopenai_compatibleanthropic ou openai_compatible.max_tokensintegertemperaturenumberenabledbooleanfalse desliga o AI Builder: as mensagens recebem a resposta de que ele está desabilitado.rate_limit_per_hourintegermax_file_size_mbintegermax_files_per_sessionintegerimage_api_urlstringimage_api_keystringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 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 | Falha de banco de dados ou do provedor de IA. | {"error":"failed to get settings","detail":"..."} |
Salvar ajustes
Grava os ajustes por inteiro: todos os campos são gravados, então envie o objeto completo lido do GET (campos que faltarem voltam ao vazio ou a zero). Devolve os ajustes novos, com as chaves mascaradas.
/api/v1/admin/ai-builder/settingsAdminSalvar os ajustes
Requer o privilégio manage_theme.
Corpo da requisição
anthropic_api_keystringanthropic_modelstringopenai_compatible_urlstringopenai_compatible_keystringopenai_compatible_modelstringactive_providerstringobrigatórioanthropicopenai_compatibleanthropic ou openai_compatible.max_tokensintegertemperaturenumberenabledbooleanfalse desliga o AI Builder: as mensagens recebem a resposta de que ele está desabilitado.rate_limit_per_hourintegermax_file_size_mbintegermax_files_per_sessionintegerimage_api_urlstringimage_api_keystringExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/ai-builder/settings" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"anthropic_api_key": "sk-a••••••••7890",
"anthropic_model": "claude-haiku-4-5-20251001",
"openai_compatible_url": "https://ia.minhaloja.com.br/v1",
"openai_compatible_key": "1763••••••••58c1",
"openai_compatible_model": "meu-modelo",
"active_provider": "anthropic",
"max_tokens": 16000,
"temperature": 0.7,
"enabled": true,
"rate_limit_per_hour": 20,
"max_file_size_mb": 20,
"max_files_per_session": 5,
"image_api_url": "https://imggen.exemplo.com/api/v1",
"image_api_key": "abcd••••••••wxyz"
}'Resposta
{
"settings": {
"anthropic_api_key": "sk-a••••••••7890",
"anthropic_model": "claude-haiku-4-5-20251001",
"openai_compatible_url": "https://ia.minhaloja.com.br/v1",
"openai_compatible_key": "1763••••••••58c1",
"openai_compatible_model": "meu-modelo",
"active_provider": "anthropic",
"max_tokens": 16000,
"temperature": 0.7,
"enabled": true,
"rate_limit_per_hour": 20,
"max_file_size_mb": 20,
"max_files_per_session": 5,
"image_api_url": "https://imggen.exemplo.com/api/v1",
"image_api_key": "abcd••••••••wxyz",
"updated_at": "2026-07-19T19:06:04.752346Z"
}
}Campos da resposta
settingsobjectAjustes salvos (chaves mascaradas).
anthropic_api_keystringanthropic_modelstringopenai_compatible_urlstringopenai_compatible_keystringopenai_compatible_modelstringactive_providerstringanthropicopenai_compatibleanthropic ou openai_compatible.max_tokensintegertemperaturenumberenabledbooleanfalse desliga o AI Builder: as mensagens recebem a resposta de que ele está desabilitado.rate_limit_per_hourintegermax_file_size_mbintegermax_files_per_sessionintegerimage_api_urlstringimage_api_keystringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | active_provider diferente de anthropic e openai_compatible. | {"error":"active_provider must be 'anthropic' or 'openai_compatible'"} |
| 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 | Falha de banco de dados ou do provedor de IA. | {"error":"failed to update settings","detail":"..."} |
Revelar chave
Devolve o valor completo de uma chave, para o administrador copiá-la de novo. Cada chamada gera um registro de auditoria no servidor.
/api/v1/admin/ai-builder/settings/reveal-keyAdminRevelar uma chave
Requer o privilégio manage_theme.
Corpo da requisição
fieldstringobrigatórioanthropic_api_keyopenai_compatible_keyimage_api_keyExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/ai-builder/settings/reveal-key" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"field": "anthropic_api_key"
}'Resposta
{
"field": "anthropic_api_key",
"value": "sk-ant-...valor-completo..."
}Campos da resposta
fieldstringvaluestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | field fora dos três valores aceitos. | {"error":"invalid field","detail":"must be one of: anthropic_api_key, openai_compatible_key, image_api_key"} |
| 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 | Falha de banco de dados ou do provedor de IA. | {"error":"failed to get settings","detail":"..."} |
Testar conexão
Faz uma chamada curta ao provedor com os ajustes que você enviar (ou, nos campos de chave mascarados, com os guardados) para validar chave, endereço e modelo antes de salvar. Não grava nada. Consome uma pequena quantidade de tokens.
/api/v1/admin/ai-builder/test-connectionAdminTestar a conexão com o provedor
Requer o privilégio manage_theme.
Corpo da requisição
anthropic_api_keystringanthropic_modelstringopenai_compatible_urlstringopenai_compatible_keystringopenai_compatible_modelstringactive_providerstringanthropic ou openai_compatible.max_tokensintegertemperaturenumberExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/ai-builder/test-connection" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"anthropic_api_key": "sk-a••••••••7890",
"anthropic_model": "claude-haiku-4-5-20251001",
"active_provider": "anthropic",
"max_tokens": 512,
"temperature": 0.7
}'Resposta
{
"ok": true,
"message": "Connected successfully. Model: claude-haiku-4-5-20251001, Tokens used: 24"
}{
"ok": false,
"message": "connection failed: ..."
}Campos da resposta
okbooleantrue se a IA respondeu.messagestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 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"} |