Enviar tus leads a otro sistema
Manda cada lead nuevo, al momento, a tu CRM o a otro sistema por medio de una dirección https (webhook), con firma para verificar que viene de Iguala.
Si tú o un cliente de agencia usan otro CRM o sistema, Iguala puede enviarle cada lead nuevo en cuanto entra, por cualquier canal. Solo necesitas la dirección (URL) de ese sistema que recibe los leads; normalmente te la da quien lo administra o su desarrollador.
Dónde se configura#
- Tus leads: Configuración → Leads → Integraciones.
- Los leads de un cliente de agencia: en su ficha (Clientes → menú → Ficha de agencia), sección Enviar leads a su sistema. Mira Clientes de agencia.
Cada lugar envía solo sus leads: los de tu organización no le llegan al sistema de un cliente, ni al revés.
Agregar un destino#
- Pulsa Agregar destino.
- Escribe la dirección de tu sistema. Debe empezar con
https://y ser pública (no se aceptan direcciones locales ni IP privadas). - Deja marcado Lead nuevo y pulsa Crear.
- Copia el secreto que aparece y guárdalo: con él tu sistema comprueba que cada envío viene de Iguala. Solo se muestra esta vez.

Probar y revisar las entregas#
- Enviar prueba manda un lead de ejemplo (marcado como prueba) para que veas cómo llega.
- Ver entregas muestra cada envío con su fecha, su estado (Entregado, Falló, Reintentando, Pendiente), la respuesta de tu sistema y cuántos intentos lleva. Una entrega que falló se puede Reintentar.
Si tu sistema no responde, Iguala lo vuelve a intentar a los 1 minuto, 5 minutos, 30 minutos, 2 horas y 12 horas. Si falla 10 veces seguidas, el destino se pausa y los administradores reciben un aviso. Cuando lo corrijas, usa Reactivar en el menú del destino.
En el menú del destino también están Editar, Pausar, Cambiar secreto (el anterior deja de servir de inmediato) y Eliminar.
Para tu desarrollador#
Cada envío es un POST con cuerpo JSON y estas cabeceras:
Content-Type: application/jsonX-Iguala-Event: el tipo de evento, por ejemplolead.created.X-Iguala-Delivery: el identificador de la entrega.X-Iguala-Signature:t=<marca de tiempo unix>,v1=<firma>.
El cuerpo tiene siempre la misma forma (versión v1):
{
"id": "evt_01J…",
"type": "lead.created",
"version": "v1",
"createdAt": "2026-11-02T15:00:00.000Z",
"test": false,
"tenant": { "id": "…", "name": "Tu organización" },
"client": { "id": "…", "name": "Cliente de agencia" },
"data": {
"id": "…",
"name": "Ana López",
"email": "ana@ejemplo.mx",
"phone": "+525512345678",
"source": "FACEBOOK",
"stage": { "id": "…", "name": "Nuevo" },
"notes": "¿Qué tratamiento te interesa?: blanqueamiento",
"utm": { "source": "facebook", "campaign": "otono-2026" },
"form": { "id": "…", "name": "Agenda tu valoración" },
"createdAt": "2026-11-02T15:00:00.000Z"
}
}
client es null en los leads de tu organización; utm y form solo vienen cuando el lead los trae.
Verificar la firma: calcula HMAC-SHA256, en hexadecimal, del texto <t>.<cuerpo tal cual llegó> usando el secreto, y compáralo con v1. Si no coincide, o si la marca de tiempo tiene más de 5 minutos, descarta el envío.
const crypto = require('crypto');
const [t, v1] = req.headers['x-iguala-signature'].split(',').map((p) => p.split('=')[1]);
const esperado = crypto.createHmac('sha256', SECRETO).update(`${t}.${cuerpoCrudo}`).digest('hex');
const valido = crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(v1));
Responder: contesta con un código 2xx para confirmar que lo recibiste. Un mismo evento puede llegar más de una vez (por ejemplo, tras un reintento): usa id para descartar duplicados.
La versión v1 del cuerpo no cambia. Si en el futuro se agregan datos que cambien su forma, saldrán como una versión nueva.
Si algo no sale#
- «La dirección debe empezar con https://». Tu sistema debe recibir por https.
- El destino dice «Pausado por fallos». Tu sistema respondió con error o no respondió 10 veces seguidas. Revisa la respuesta en Ver entregas, corrige y usa Reactivar.
- Tu sistema rechaza la firma. Verifica que usas el secreto vigente (si lo cambiaste, guarda el nuevo) y que calculas la firma con el cuerpo exactamente como llegó, sin volver a convertirlo a JSON.
¿Necesitas más ayuda?
Escríbenos y te respondemos por correo.