/v1/agents/{key}/executions/events
Publicar passos de uma execução em andamento (token de serviço)
Somente token de serviço com X-Agent-Key igual ao agente da rota; a clínica vem do contexto. Até 50 eventos por chamada, em ordem. Idempotente por (execution_id, step_id, event): repetir não duplica nada e conta em duplicates. Nunca envie prompt, argumentos, resposta de ferramenta, telefone, e-mail ou dado de paciente: campos fora do contrato são descartados e o rótulo é higienizado.
agents:readAutenticação
Envie o token de acesso do usuário no cabeçalho Authorization e, se ele tiver mais de uma clínica, o X-Clinic-Id. Integrações servidor a servidor usam o token de serviço com X-Clinic-Id e X-Agent-Key. Como autenticar
Authorization: Bearer <TOKEN>X-Clinic-Id: <clinic_id>Parâmetros
Parâmetros de caminho
keystringObrigatórioPadrão (regex):
^[a-z0-9-]{2,64}$
Cabeçalhos
X-Clinic-IdstringOpcionalClínica ativa. Obrigatório só para quem tem acesso a mais de uma clínica (ou token de serviço). Validado contra o vínculo do usuário. · Padrão (regex):
^[A-Za-z0-9._-]{1,64}$
Corpo da requisição
application/json · obrigatório
eventsobject[]ObrigatórioDe 1 a 50 itens
execution_idstringObrigatórioevents[].execution_idId da execução (o mesmo em todos os passos). Use o id da execução do fluxo ou o $id da run. · Entre 1 e 64 caracteres · Padrão (regex):
^[A-Za-z0-9._-]+$step_idstringObrigatórioevents[].step_idId do passo dentro da execução. Chave de idempotência junto com execution_id e event. · Entre 1 e 64 caracteres · Padrão (regex):
^[A-Za-z0-9._:-]+$eventstringObrigatórioevents[].eventValores:
agent.started,agent.thinking,context.started,context.completed,tool.started,tool.completed,tool.failed,subagent.started,subagent.completed,subagent.failed,step.started,step.completed,validation.started,validation.completed,validation.failed,agent.retrying,agent.finalizing,agent.completed,agent.failedtimestampstring (data-hora)Obrigatórioevents[].timestampQuando o passo aconteceu (relógio do emissor).
labelstringOpcionalevents[].labelRótulo curto para humanos, sem dado pessoal (a API remove números longos, e-mails e URLs e corta em 80). · Até 120 caracteres
toolstringOpcionalevents[].toolNome técnico da ferramenta (só a equipe da plataforma vê). · Até 64 caracteres · Padrão (regex):
^[A-Za-z0-9._:-]+$tool_kindstringOpcionalevents[].tool_kindTipo da ferramenta (vira o rótulo humano). Sem ele, a API deduz pelo nome. · Valores:
database,knowledge,calendar,messaging,payments,web,model,othersubagentstringOpcionalevents[].subagentPadrão (regex):
^[a-z0-9-]{2,64}$statusstringOpcionalevents[].statusValores:
running,completed,failedduration_msintegerOpcionalevents[].duration_msEntre 0 e 86400000
attemptintegerOpcionalevents[].attemptEntre 1 e 20
error_codestringOpcionalevents[].error_codeAté 64 caracteres · Padrão (regex):
^[A-Za-z0-9._:-]+$conversation_idstringOpcionalevents[].conversation_idConversa atendida (envie já no primeiro evento para a conversa acompanhar ao vivo). · Entre 1 e 64 caracteres · Padrão (regex):
^[A-Za-z0-9._-]+$run_idstringOpcionalevents[].run_idId da execução registrada (quando já existir). · Entre 1 e 64 caracteres · Padrão (regex):
^[A-Za-z0-9._-]+$
Exemplo de requisição
Gerado do contrato. Troque os marcadores entre < > pelos seus valores.
const res = await fetch("https://myclinc.leadpoint.com.br/v1/agents/<key>/executions/events", { method: "POST", headers: { Authorization: "Bearer <TOKEN>", "X-Clinic-Id": "<clinic_id>", "X-Agent-Key": "<agent_key>", "Content-Type": "application/json", }, body: JSON.stringify({ "events": [ { "execution_id": "<execution_id>", "step_id": "<step_id>", "event": "agent.started", "timestamp": "2026-01-15T14:00:00.000Z" } ] }),})if (!res.ok) { const { error } = await res.json() throw new Error(`${error.code}: ${error.message} (${error.requestId})`)}const { data } = await res.json()Resposta
{ "data": { "accepted": 1, "duplicates": 1 }}Exemplo gerado do esquema da resposta; valores entre < > são ilustrativos.
Códigos de erro
Corpo no formato padrão { error: { code, message, requestId } }. Veja todos os códigos.
Bad Request — Requisição malformada (JSON inválido, cursor inválido ou clínica ativa não informada).
Unauthorized — Token ausente, inválido ou expirado.
Forbidden — Autenticado, mas sem permissão (perfil ou clínica).
Conflict — Conflito de estado (duplicidade, transição inválida, conflito de agenda).
Unprocessable Entity — Dados semanticamente inválidos (erros por campo em details).
Too Many Requests — Limite de requisições excedido (veja Retry-After).
Internal Server Error — Erro interno (sem detalhes expostos).
Service Unavailable — Banco de dados indisponível ou não configurado.
Limites
Esta operação tem limite próprio: 1200 requisições / 60 s. Sobre limites