Referencia de la API
Endpoints de webhook
Un endpoint de webhook es una URL tuya que recibe los eventos de Gemlead en cuanto ocurren. Puedes tener 10 por cuenta. Lee Webhooks para conocer los eventos, sus payloads y cómo verificar una firma.
El objeto webhook endpoint
Una URL tuya a la que Gemlead envía eventos. Consulta Webhooks para ver los eventos y cómo verificarlos.
Atributos
- idstringIdentificador único del endpoint.
- objectstringSiempre
webhook_endpoint. - urlstringLa URL HTTPS a la que se envían los eventos.
- descriptionstring o nullTu nota sobre el endpoint.
- eventsarray de stringsLos tipos de evento que se le envían.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstringSi se le envían eventos.
enableddisabled - filtersobjectQué eventos recibe, según el buyer persona del lead. Se aplican a todos los tipos de evento.
- disabled_reasonstring o nullPor qué está desactivado.
manualsi lo desactivaste tú,failingsi lo hizo Gemlead tras 3 días seguidos de fallos y al menos 8 intentos fallidos.nullmientras está activado.manualfailing - secretstringEl secreto de firma,
whsec_seguido de 32 caracteres. Solo en las respuestas de crear y de renovar el secreto. - created_atstringCuándo se creó el endpoint, en ISO 8601.
- updated_atstringCuándo cambió el endpoint por última vez, en ISO 8601.
{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Listar endpoints de webhook
readDevuelve tus endpoints de webhook, sin sus secretos.
Parámetros de consulta
- limitintegerCuántos objetos devolver, de 1 a 100. 25 por defecto.
- cursorstringEl
next_cursorde la página anterior, para obtener la siguiente. Consulta Paginación.
Devuelve
Una lista de objetos webhook endpoint.
curl https://gemlead.ai/api/v1/webhook_endpoints \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"object": "list",
"data": [
{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}
],
"has_more": false,
"next_cursor": null
}Crear un endpoint de webhook
writeRegistra una URL para uno o varios tipos de evento. Guarda el secret de la respuesta, es la única vez que lo verás.
Parámetros del cuerpo
- urlstringObligatorioUna URL HTTPS accesible desde internet.
- eventsarray de stringsObligatorioLos tipos de evento que enviar.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringUna nota para ti.
- filtersobjectQué eventos enviar, según el buyer persona del lead.
Devuelve
El nuevo objeto webhook endpoint con su secret.
Errores
- Falta un parámetro obligatorio.
paramlo indica. - Un parámetro tiene un valor que la API no acepta.
paramlo indica. - El cuerpo tiene un campo que este endpoint no acepta.
- 400url_invalidLa URL no es HTTPS, lleva credenciales o apunta a una dirección privada.
- La cuenta ya tiene 10 endpoints.
curl -X POST https://gemlead.ai/api/v1/webhook_endpoints \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/gemlead",
"events": ["lead.hot", "reply.received"],
"description": "CRM sync",
"filters": {
"persona_ids": ["lvWBPnytpS"]
}
}'{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z",
"secret": "whsec_4QeX7nP2kR9tLm3Vb8YzC1dF6hJ0sWuA"
}Obtener un endpoint de webhook
readDevuelve un endpoint de webhook, sin su secreto.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Devuelve
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
curl https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Actualizar un endpoint de webhook
writeCambia un endpoint. Pon status en enabled para reactivar un endpoint que Gemlead desactivó. Activarlo o darle una nueva url reinicia su recuento de fallos.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Parámetros del cuerpo
- urlstringUna nueva URL HTTPS.
- eventsarray de stringsLos tipos de evento que enviar.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringUna nota para ti.
- statusstringActivar o desactivar el endpoint.
enableddisabled - filtersobjectQué eventos enviar, según el buyer persona del lead.
Devuelve
El objeto webhook endpoint actualizado.
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica. - El cuerpo tiene un campo que este endpoint no acepta.
- 400url_invalidLa URL no es HTTPS, lleva credenciales o apunta a una dirección privada.
curl -X PATCH \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "enabled"
}'{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Eliminar un endpoint de webhook
writeElimina un endpoint. Los envíos que aún esperan un reintento se descartan.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Devuelve
Un objeto con el id del endpoint y deleted en true.
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
curl -X DELETE \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"deleted": true
}Renovar el secreto de firma
writeReemplaza al instante el secreto del endpoint, y el antiguo deja de funcionar. Los envíos que fallen mientras tanto se reintentan firmados con el nuevo secreto.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Devuelve
El objeto webhook endpoint con su nuevo secret.
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
curl -X POST \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/roll_secret \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"url": "https://example.com/webhooks/gemlead",
"description": "CRM sync",
"events": ["lead.hot", "reply.received"],
"status": "enabled",
"filters": {
"persona_ids": ["lvWBPnytpS"]
},
"disabled_reason": null,
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z",
"secret": "whsec_4QeX7nP2kR9tLm3Vb8YzC1dF6hJ0sWuA"
}Enviar un evento de prueba
writeEnvía un evento de ejemplo del primer tipo de evento del endpoint, con data.test en true e ID que empiezan por test_. Un solo intento, sin reintentos.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Devuelve
Un objeto webhook delivery con el status y el status_code que respondió tu endpoint.
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
curl -X POST \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/test \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "dL5qW1zXa8",
"object": "webhook_delivery",
"endpoint_id": "wh3LpX9dKe",
"event_id": "evt_8kQ2vXr4LmT9wPz1Hc6YbN3d",
"event_type": "lead.hot",
"status": "succeeded",
"attempts": 1,
"status_code": 200,
"error": null,
"test": true,
"next_attempt_at": null,
"last_attempt_at": "2026-11-06T07:45:12.904Z",
"created_at": "2026-11-06T07:45:12.904Z"
}El objeto webhook delivery
Un evento enviado a un endpoint, con sus intentos y la última respuesta de tu servidor.
Atributos
- idstringIdentificador único del envío.
- objectstringSiempre
webhook_delivery. - endpoint_idstringEl endpoint al que se envió.
- event_idstringEl evento enviado, el
idque recibió tu servidor. - event_typestringEl tipo del evento.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstring
pendingmientras quedan intentos, luegosucceededofailed.pendingsucceededfailed - attemptsintegerIntentos hechos hasta ahora, 8 como máximo.
- status_codeinteger o nullEl código de estado HTTP de tu última respuesta.
nullsi no hubo ninguna, tras un timeout o un error de conexión. - errorstring o nullQué falló en el último intento, como el código de estado y el principio de tu respuesta, o un timeout.
- testboolean
truepara un evento de prueba. - next_attempt_atstring o nullCuándo toca el siguiente intento, mientras está en
pending. - last_attempt_atstring o nullCuándo se hizo el último intento.
- created_atstringCuándo se creó el envío, en ISO 8601.
{
"id": "dR7mK2pVn4",
"object": "webhook_delivery",
"endpoint_id": "wh3LpX9dKe",
"event_id": "evt_3Hn7QpW2xZk9LmR4tV8bYc1D",
"event_type": "reply.received",
"status": "pending",
"attempts": 2,
"status_code": 503,
"error": "HTTP 503: Service Unavailable",
"test": false,
"next_attempt_at": "2026-11-06T08:18:10.000Z",
"last_attempt_at": "2026-11-06T08:13:10.000Z",
"created_at": "2026-11-06T08:12:10.000Z"
}Listar envíos
readDevuelve los últimos envíos del endpoint, primero los más recientes, eventos de prueba incluidos. Los envíos se guardan 30 días.
Parámetros de ruta
- idstringObligatorioEl ID del endpoint de webhook.
Parámetros de consulta
- limitintegerCuántos envíos devolver, de 1 a 100. 25 por defecto.
Devuelve
Una lista de objetos webhook delivery. Esta lista no tiene next_cursor, aumenta limit para ver más.
Errores
- No hay ningún endpoint de webhook con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
curl -G \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/deliveries \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d limit=10{
"object": "list",
"data": [
{
"id": "dR7mK2pVn4",
"object": "webhook_delivery",
"endpoint_id": "wh3LpX9dKe",
"event_id": "evt_3Hn7QpW2xZk9LmR4tV8bYc1D",
"event_type": "reply.received",
"status": "pending",
"attempts": 2,
"status_code": 503,
"error": "HTTP 503: Service Unavailable",
"test": false,
"next_attempt_at": "2026-11-06T08:18:10.000Z",
"last_attempt_at": "2026-11-06T08:13:10.000Z",
"created_at": "2026-11-06T08:12:10.000Z"
},
{
"id": "dL5qW1zXa8",
"object": "webhook_delivery",
"endpoint_id": "wh3LpX9dKe",
"event_id": "evt_8kQ2vXr4LmT9wPz1Hc6YbN3d",
"event_type": "lead.hot",
"status": "succeeded",
"attempts": 1,
"status_code": 200,
"error": null,
"test": true,
"next_attempt_at": null,
"last_attempt_at": "2026-11-06T07:45:12.904Z",
"created_at": "2026-11-06T07:45:12.904Z"
}
],
"has_more": false,
"next_cursor": null
}