AI Forge AI Forge API dos Agentes
Guia Referencia (Swagger) Dashboard
REST API

Crie e gerencie agentes de IA

Uma API, todos os LLMs. Configure um agente (provider + modelo + prompt + schema) e execute-o com uma chamada HTTP — sem acoplar seu codigo a um provedor de IA especifico.

Autenticacao

Toda chamada exige o header X-API-Key com a sua chave pessoal. Cada chave da acesso apenas aos recursos do seu proprio usuario.

curl https://ai.bfholding.capital/api/agents \
  -H "X-API-Key: SUA_CHAVE_AQUI"
🔑
Header obrigatorio: X-API-Key. Veja, copie e rotacione a sua chave em Dashboard → API Keys. Pegar minha chave →

Base URL

Todos os endpoints deste guia sao relativos a esta base. Os caminhos comecam com /api/agents.

https://ai.bfholding.capital

Quickstart

Do zero a uma resposta do agente em tres passos. Escolha a sua linguagem.

# 1. Crie um agente
curl -X POST https://ai.bfholding.capital/api/agents \
  -H "X-API-Key: SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Assistente de Suporte",
    "provider_id": "_global_openai",
    "model": "gpt-5.2",
    "system_prompt": "Voce e um assistente de suporte cordial."
  }'

# 2. Execute o agente  (use o id retornado acima)
curl -X POST https://ai.bfholding.capital/api/agents/AGENT_ID/execute \
  -H "X-API-Key: SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"Ola!"}]}'

# 3. Liste e gerencie
curl https://ai.bfholding.capital/api/agents -H "X-API-Key: SUA_CHAVE"
import requests

BASE = "https://ai.bfholding.capital"
HEADERS = {"X-API-Key": "SUA_CHAVE"}

# 1. Crie um agente
agent = requests.post(f"{BASE}/api/agents", headers=HEADERS, json={
    "name": "Assistente de Suporte",
    "provider_id": "_global_openai",
    "model": "gpt-5.2",
    "system_prompt": "Voce e um assistente de suporte cordial.",
}).json()["agent"]

# 2. Execute o agente
resp = requests.post(
    f"{BASE}/api/agents/{agent['id']}/execute",
    headers=HEADERS,
    json={"messages": [{"role": "user", "content": "Ola!"}]},
).json()
print(resp["response"]["content"])

# 3. Liste e gerencie
print(requests.get(f"{BASE}/api/agents", headers=HEADERS).json())
const BASE = "https://ai.bfholding.capital";
const HEADERS = { "X-API-Key": "SUA_CHAVE", "Content-Type": "application/json" };

// 1. Crie um agente
const created = await fetch(`${BASE}/api/agents`, {
  method: "POST", headers: HEADERS,
  body: JSON.stringify({
    name: "Assistente de Suporte",
    provider_id: "_global_openai",
    model: "gpt-5.2",
    system_prompt: "Voce e um assistente de suporte cordial.",
  }),
}).then(r => r.json());

// 2. Execute o agente
const out = await fetch(`${BASE}/api/agents/${created.agent.id}/execute`, {
  method: "POST", headers: HEADERS,
  body: JSON.stringify({ messages: [{ role: "user", content: "Ola!" }] }),
}).then(r => r.json());
console.log(out.response.content);

Criar e gerenciar agentes

O CRUD completo do recurso central da plataforma. Todos os endpoints exigem X-API-Key.

GET /api/agents Lista os seus agentes com paginacao e filtros por status, pasta e tags.
Parametros
CampoTipoDescricao
pageintNumero da pagina (comeca em 1).
per_pageintItens por pagina (1 a 100).
statusstringFiltra por active ou inactive.
folder_idstringFiltra por pasta (root = sem pasta).
tagsstringTags separadas por virgula; retorna quem tem todas.
Resposta
{ "items": [ { "id": "665f…", "name": "Assistente de Suporte", "slug": "assistente-de-suporte", "status": "active", … } ],
  "total": 1, "page": 1, "per_page": 20, "pages": 1 }
▶ Testar no console
POST /api/agents Cria um novo agente. So o name e obrigatorio; informe provider + modelo para deixa-lo pronto para executar.

Apenas name (3 a 200 caracteres) e obrigatorio; todo o resto tem defaults sensatos. Informe provider_id + model para o agente ja sair executavel. Envie so os campos que quiser mudar.

Identidade
CampoTipoObrig.Descricao
namestringsimNome do agente (>= 3 caracteres).
descriptionstringnaoTexto livre para organizacao interna (nao afeta o comportamento). Default vazio.
tagsstring[]naoLista de rotulos para filtrar em GET /api/agents?tags=... (retorna quem tem todas).
folder_idstringnaoPasta para organizar no dashboard. Use "root" para a raiz.
Modelo e provider
CampoTipoObrig.Descricao
provider_idstringnaoProvider global (_global_openai...) ou id de provider proprio.
modelstringnaoModelo do LLM (ex.: gpt-5.2, claude-opus-4-8).
Comportamento
CampoTipoObrig.Descricao
system_promptstringnaoInstrucao de sistema que define o comportamento.
response_schemaobjectnaoSchema JSON para forcar saida estruturada (opcional).
Config de geracao (objeto config)

config e um objeto opcional com estas sub-chaves:

CampoTipoObrig.Descricao
config.temperaturefloatnaoCriatividade da resposta, 0 a 2. Default 0.7. Ignorado por modelos de reasoning (o3, gpt-5.x).
config.max_tokensintnaoMaximo de tokens na resposta. Default 4096; limitado ao teto do modelo.
config.top_pfloatnaoNucleus sampling (alternativa a temperature), 0 a 1. Opcional.
config.reasoning_effortstringnaoEsforco de reasoning: low | medium | high | xhigh. So para modelos de reasoning.
Recursos vinculados (RAG, tools, MCP)
CampoTipoObrig.Descricao
integration_idsstring[]naoIDs de integracoes (tools em Python) que o agente pode chamar. IDs inacessiveis sao descartados.
knowledge_base_idsstring[]naoIDs de bases de conhecimento (RAG) injetadas como contexto. IDs inacessiveis sao descartados.
mcp_server_idsstring[]naoIDs de servidores MCP externos cujas tools o agente pode usar.
Fallback de modelo
CampoTipoObrig.Descricao
fallback_enabledboolnaoLiga o fallback automatico de modelo em erro do provider. Default true (provider/modelo sugeridos se nao informados).
fallback_provider_idstringnaoProvider de fallback. Se vazio com fallback ligado, e sugerido automaticamente.
fallback_modelstringnaoModelo de fallback. Sugerido automaticamente se vazio.
Publicacao (chat publico e widget)
CampoTipoObrig.Descricao
public_chat_enabledboolnaoPublica uma pagina de chat sem login em /chat/{slug}. As execucoes consomem o seu saldo. Default false.
public_chat_rate_limitintnaoLimite de mensagens por hora por IP no chat publico, 1 a 1000. Default 20.
widget_enabledboolnaoHabilita o widget embutivel (iframe). Ajuste a aparencia com os campos widget_* (ver referencia OpenAPI).
Limite de custo
CampoTipoObrig.Descricao
usage_limit_enabledboolnaoLiga um teto de custo mensal por agente. Default false.
usage_limit_monthlyfloatnaoTeto de custo mensal em USD (0 = sem limite). Excedido -> 429.
Requisicao
{
  "name": "Assistente de Suporte",
  "description": "Tira duvidas de produto em pt-BR",
  "provider_id": "_global_openai",
  "model": "gpt-5.2",
  "system_prompt": "Voce e um assistente de suporte cordial e conciso.",
  "config": { "temperature": 0.5, "max_tokens": 2048 },
  "response_schema": null,
  "knowledge_base_ids": ["665f…kb"],
  "integration_ids": ["665f…tool"],
  "fallback_enabled": true,
  "public_chat_enabled": true,
  "public_chat_rate_limit": 30,
  "usage_limit_enabled": true,
  "usage_limit_monthly": 10.0,
  "tags": ["suporte", "pt-br"]
}
▶ Testar no console
GET /api/agents/{id} Retorna a configuracao completa de um agente pelo id.
Resposta
{ "id": "665f…", "name": "Assistente de Suporte", "slug": "assistente-de-suporte",
  "provider_id": "_global_openai", "model": "gpt-5.2", "status": "active",
  "fallback_enabled": true, "integration_ids": [], "knowledge_base_ids": [], … }
▶ Testar no console
PUT /api/agents/{id} Atualiza um agente. Envie apenas os campos que quer mudar (patch parcial).
Requisicao
{ "system_prompt": "Nova instrucao de sistema.", "config": { "temperature": 0.3 } }
▶ Testar no console
DELETE /api/agents/{id} Remove um agente permanentemente.
Resposta
{ "success": true }
▶ Testar no console
GET /api/agents/{id}/monthly-cost Retorna o custo (USD) consumido pelo agente no mes corrente.
Resposta
{ "success": true, "data": { "cost": 1.2345, "month": "2026-07" } }
▶ Testar no console

Executar agentes

Rode o agente de forma sincrona, em streaming (SSE) ou com midia. O custo e debitado do dono do agente.

POST /api/agents/{id}/execute Executa o agente e devolve a resposta completa (bloqueante).
Corpo
CampoTipoObrig.Descricao
messagesarraysimMensagens da conversa: [{role, content}]. Obrigatorio.
session_idstringnaoMantem o contexto entre chamadas. Nova sessao se omitido.
Resposta
{ "success": true, "session_id": "sess_abc123",
  "response": { "content": "Ola! Posso ajudar…", "tokens_used": { "total": 60 } },
  "cost": 0.00021, "files": [] }
▶ Testar no console
POST /api/agents/{id}/execute-stream Executa o agente transmitindo a resposta em tempo real via SSE.
SSE
event: start
data: {"session_id": "sess_abc123"}

event: chunk
data: {"content": "Ola"}

event: usage
data: {"tokens_used": {"total": 60}, "cost": 0.00021}

event: done
data: {"execution_id": "665f…"}
POST /api/agents/{id}/execute-media Executa o agente a partir de uma imagem, audio ou documento.
multipart/form-data
curl -X POST https://ai.bfholding.capital/api/agents/AGENT_ID/execute-media \
  -H "X-API-Key: SUA_CHAVE" \
  -F "file=@audio.mp3" \
  -F "message=Resuma este audio"

Console de teste

Cole a sua chave, escolha um endpoint e rode a chamada de verdade — sem sair desta pagina. As chamadas usam a sua base URL e sao feitas do seu navegador.

A chave fica apenas neste navegador (nunca e enviada aos nossos servidores de log).  · 
A resposta aparece aqui.

Codigos de resposta

A plataforma responde sucesso como { "success": true, ... } e erros como { "detail": "mensagem" }.

CodigoSignificado
200OK — requisicao bem-sucedida.
400Requisicao invalida (ex.: agente sem provider configurado).
401X-API-Key ausente ou invalida.
403Sem permissao — o recurso pertence a outro usuario.
404Recurso nao encontrado.
422Erro de validacao do corpo (ex.: name com menos de 3 caracteres).
429Limite de custo/uso atingido (agente, usuario ou plataforma).

Proximos passos