Criar agente
/v1/instances/{id}/agentsdesde A1token da instância ou adminQuando usar
Campos ausentes vêm dos padrões: tools: [ler, responder_no_chat], mode: aprovacao, gatilho "mensagem nova" só em conversas 1:1, limits: {max_steps: 8, max_recipients: 3, daily_runs: 200} e enabled: false. Até 20 agentes por instância. Para responder a mensagens novas, o hook de agente da instância precisa estar com target: "agents" e ligado.
Autenticação
Aceita o token da instância (só a própria instância) ou o token admin. Um token de outra instância recebe 403 forbidden (ou 404 not_found em webhooks de outra instância).
Parâmetros
Caminho
| Nome | Tipo | Descrição |
|---|---|---|
idobrigatório | string | Id da instância (inst_...). |
Corpo (JSON)
| Nome | Tipo | Descrição |
|---|---|---|
name | string | (até 80) |
enabled | boolean | |
mode | "aprovacao" | "autonomo" | "sugerir" | aprovacao: escritas viram rascunhos; autonomo: executa; sugerir: só notas. |
instructions | string | O que o agente faz (confiável: escrito por você). (até 20000) |
tools | "ler" | "ler_outros_chats" | "responder_no_chat" | "enviar_outros_chats" | "etiquetas" | "grupos" | "midia"[] | |
trigger | AgentTrigger | |
trigger.type | "message" | "manual" | message: cada mensagem nova (pelo hook de agente com target agents); manual: só Executar agora. (padrão "message") |
trigger.chats | string[] | Só nestes chats (JIDs ou números). Vazio = todos. |
trigger.labels | string[] | Só em chats com uma destas etiquetas (id ou nome). |
trigger.keywords | string[] | Só quando a mensagem contém uma destas palavras (sem diferenciar maiúsculas). |
trigger.groups | boolean | Também em grupos (desligado = só conversas 1:1). (padrão false) |
limits | AgentLimits | |
limits.max_steps | integer | Chamadas ao modelo por execução. (padrão 8, 1–20) |
limits.max_recipients | integer | Destinatários distintos por execução. (padrão 3, 1–10) |
limits.max_sends | integer | Envios por execução (também na conversa do gatilho; rascunhos contam). (padrão 5, 1–50) |
limits.max_writes | integer | Escritas por execução (envios (padrão 10, 1–100) |
limits.max_group_changes | integer | Mudanças em grupos por execução. (padrão 3, 1–20) |
limits.daily_runs | integer | Execuções por dia UTC (0 = sem limite do agente; os limites do Atendente IA continuam valendo). (padrão 200) |
runtime | "provider" | "codex_cli" | Quem pensa. provider: o provedor de IA da instância (chave de API). codex_cli (opt-in): o Codex CLI logado neste computador com a sua conta ChatGPT; só o token admin cria, edita, executa ou simula um agente codex_cli. Veja Guias > IA por assinatura. (padrão "provider") |
accept_runtime_notice | boolean | Obrigatório (true) ao mudar um agente para codex_cli: confirma o aviso sobre os termos da OpenAI e os limites do seu plano. |
Exemplo
curl -s -X POST "$LITEZAP_URL/v1/instances/$ID/agents" \ -H "Authorization: Bearer $LITEZAP_TOKEN" \ -d '{"name":"Atendente da loja","enabled":true,"mode":"aprovacao","instructions":"Responda dúvidas sobre horário e entrega. Horário: seg a sáb, 9h às 18h. Para descontos, diga que uma pessoa vai responder.","tools":["ler","responder_no_chat"],"trigger":{"type":"message","keywords":[],"groups":false}}'const res = await fetch("http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/agents", { method: "POST", headers: { Authorization: `Bearer ${process.env.LITEZAP_TOKEN}`, "Content-Type": "application/json" }, body: JSON.stringify({ "name": "Atendente da loja", "enabled": true, "mode": "aprovacao", "instructions": "Responda dúvidas sobre horário e entrega. Horário: seg a sáb, 9h às 18h. Para descontos, diga que uma pessoa vai responder.", "tools": [ "ler", "responder_no_chat" ], "trigger": { "type": "message", "keywords": [], "groups": false } }),});console.log(res.status, res.status === 204 ? "" : await res.json());import osimport requests
r = requests.post( "http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/agents", headers={"Authorization": f"Bearer {os.environ['LITEZAP_TOKEN']}"}, json={ "name": "Atendente da loja", "enabled": True, "mode": "aprovacao", "instructions": "Responda dúvidas sobre horário e entrega. Horário: seg a sáb, 9h às 18h. Para descontos, diga que uma pessoa vai responder.", "tools": ["ler", "responder_no_chat"], "trigger": { "type": "message", "keywords": [], "groups": False, }, }, timeout=150,)print(r.status_code, r.json() if r.content else "")package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { req, _ := http.NewRequest("POST", "http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/agents", strings.NewReader(`{"name":"Atendente da loja","enabled":true,"mode":"aprovacao","instructions":"Responda dúvidas sobre horário e entrega. Horário: seg a sáb, 9h às 18h. Para descontos, diga que uma pessoa vai responder.","tools":["ler","responder_no_chat"],"trigger":{"type":"message","keywords":[],"groups":false}}`)) req.Header.Set("Authorization", "Bearer "+os.Getenv("LITEZAP_TOKEN")) req.Header.Set("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, _ := io.ReadAll(resp.Body) fmt.Println(resp.Status, string(out))}<?phprequire 'vendor/autoload.php'; // composer require guzzlehttp/guzzle
$client = new GuzzleHttp\Client(['base_uri' => 'http://localhost:8787']);$res = $client->request('POST', '/v1/instances/inst_7f3a9c2e5b1d4086/agents', [ 'headers' => ['Authorization' => 'Bearer ' . getenv('LITEZAP_TOKEN')], 'json' => [ 'name' => 'Atendente da loja', 'enabled' => true, 'mode' => 'aprovacao', 'instructions' => 'Responda dúvidas sobre horário e entrega. Horário: seg a sáb, 9h às 18h. Para descontos, diga que uma pessoa vai responder.', 'tools' => ['ler', 'responder_no_chat'], 'trigger' => [ 'type' => 'message', 'keywords' => [], 'groups' => false, ], ], 'http_errors' => false,]);echo $res->getStatusCode(), ' ', $res->getBody(), PHP_EOL;Nos exemplos, LITEZAP_URL é a URL base (ex.: http://localhost:8787) e o token vem deLITEZAP_TOKEN (instância) ou LITEZAP_ADMIN_TOKEN.
Resposta
201 Agente criado.
Campos de Agent
id | string | |
name | string | |
enabled | boolean | |
mode | "aprovacao" | "autonomo" | "sugerir" | |
instructions | string | |
tools | string[] | |
trigger | AgentTrigger | |
trigger.type | "message" | "manual" | message: cada mensagem nova (pelo hook de agente com target agents); manual: só Executar agora. |
trigger.chats | string[] | Só nestes chats (JIDs ou números). Vazio = todos. |
trigger.labels | string[] | Só em chats com uma destas etiquetas (id ou nome). |
trigger.keywords | string[] | Só quando a mensagem contém uma destas palavras (sem diferenciar maiúsculas). |
trigger.groups | boolean | Também em grupos (desligado = só conversas 1:1). |
limits | AgentLimits | |
limits.max_steps | integer | Chamadas ao modelo por execução. |
limits.max_recipients | integer | Destinatários distintos por execução. |
limits.max_sends | integer | Envios por execução (também na conversa do gatilho; rascunhos contam). |
limits.max_writes | integer | Escritas por execução (envios |
limits.max_group_changes | integer | Mudanças em grupos por execução. |
limits.daily_runs | integer | Execuções por dia UTC (0 = sem limite do agente; os limites do Atendente IA continuam valendo). |
runtime | "provider" | "codex_cli" | |
today | object | |
today.runs | integer | |
today.cost_usd | number | |
created_at | string | |
updated_at | string |
Erros
| Código | HTTP | Retentável | O que fazer |
|---|---|---|---|
validation_failed | 400 | não | Corrija o corpo ou os parâmetros; a message diz o campo. |
unauthorized | 401 | não | Envie Authorization: Bearer <token> válido. |
forbidden | 403 | não | Use o token certo (admin, ou o da própria instância). |
instance_not_found | 404 | não | Confira o id da instância. |
Todo erro usa o envelope {"error":{"code","message","retryable"}}. Tabela completa em Erros.
Outras operações de Agentes: Listar agentes · Ler agente · Alterar agente · Excluir agente · Executar agente agora · Execuções do agente · Ler execução · Quem pode rodar agentes · Listar rascunhos · Aprovar rascunho · Rejeitar rascunho · Simular agente

