callbackUrl al crear un run y Leme envía un POST firmado a esa URL cuando el run llega a un estado final — o se pausa para una aprobación.
422 callback_url_invalid.
Eventos
El payload es deliberadamente ligero — identificadores y estado, nunca la respuesta del agente:
GET /api/v1/runs/:id. Esto mantiene el contenido sensible fuera de tu endpoint de webhook y garantiza que siempre leas el estado más reciente.
Verificar la firma
Cada entrega se firma siguiendo la especificación Standard Webhooks, el mismo esquema que usan OpenAI y Svix. Tres headers acompañan la solicitud:
Primero, obtén el secreto de firma de tu proyecto (requiere un token
read_write):
Rotar el secreto
Si el secreto se filtra — o en tu ciclo normal de rotación — genera uno nuevo:webhook-signature lleva dos firmas — la entrega es válida si cualquiera coincide, algo que toda biblioteca Standard Webhooks maneja por ti.
Reintentos y confiabilidad
Las entregas son at least once. Si tu endpoint no responde2xx en 15 segundos, Leme reintenta: tras 1 minuto, 5 minutos, 30 minutos y 2 horas. Después de cinco intentos fallidos, la entrega se marca como agotada.
Como los reintentos pueden solaparse con tu procesamiento, haz tu handler idempotente — deduplica por webhook-id.
Puedes inspeccionar el estado de la entrega en cualquier momento en el recurso del run:
Buenas prácticas
- Responde rápido. Confirma con
2xxde inmediato y procesa de forma asíncrona; el timeout de 15 segundos incluye tu handler. - Deduplica por
webhook-id. Los reintentos reutilizan el mismo ID. - No confíes solo en el payload. Verifica la firma y busca el run vía API para obtener el estado autoritativo.
- Vigila las entregas agotadas. Si se agotaron, tu endpoint estuvo caído durante horas — consulta los runs en curso para ponerte al día.