Skip to main content
En lugar de consultar en bucle, deja que Leme te llame. Pasa un 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.
La URL debe ser HTTPS pública en el puerto por defecto. Las URLs que apuntan a redes privadas se rechazan con 422 callback_url_invalid.

Eventos

El payload es deliberadamente ligero — identificadores y estado, nunca la respuesta del agente:
Al recibirlo, busca el resultado con 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):
Luego verifica con cualquier biblioteca Standard Webhooks:
Verifica siempre contra el cuerpo crudo de la solicitud, antes de cualquier parseo de JSON. Rechaza las entregas cuya firma no coincida.

Rotar el secreto

Si el secreto se filtra — o en tu ciclo normal de rotación — genera uno nuevo:
El secreto anterior sigue firmando durante 24 horas, para que hagas la transición sin perder entregas. Durante esa ventana, 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 responde 2xx 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 2xx de 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.