Webhooks e integraciones
Webhooks de verificación de identidad, una página alojada y un widget.
Envíe a un solicitante a una página de verificación alojada o integre el widget en su propio flujo, reciba un webhook firmado en el momento en que haya un resultado, y permita que cualquiera con el enlace lo confirme en una página pública de verificación de credenciales. Una integración de API de KYC pensada para ponerse en marcha en una tarde.
- Callbacks firmados con HMAC-SHA256
- Traspaso por QR del escritorio al teléfono
- Las sesiones del entorno de pruebas (sandbox) nunca se facturan
Página de verificación alojada
Un solo enlace realiza todo el flujo.
Cree una sesión mediante la API y recibirá una URL de verificación. Envíela por correo electrónico, mensaje de texto o dentro de su propia aplicación; la página se encarga del resto.
Computadora de escritorio
El solicitante abre el enlace en su escritorio.
Transferencia por QR
La página muestra un código QR y una breve tarjeta de instrucciones.
Captura desde el teléfono
Al escanearlo, la misma sesión pasa a la captura del documento y la selfie.
Verificado
La sesión llega a VERIFIED, todavía en el teléfono.
De vuelta a usted
Una redirección a su URL de retorno, más un webhook firmado, en cualquier caso.
Funciona como una redirección de pago
El solicitante llega a una página en la URL propia de su sesión. Sin cuenta y sin aplicación que instalar.
Traspaso por QR, del escritorio al teléfono
Cuando se abre en un escritorio, la página muestra un código QR y una breve tarjeta de instrucciones en lugar de solicitar acceso a la cámara. Al escanearlo se abre el mismo enlace en el teléfono, que pasa directamente a la captura del documento y del selfie.
Regresa a usted, con la respuesta
Una vez que la sesión alcanza el estado VERIFIED, la página redirige a su URL de retorno con el ID de sesión y el estado agregados, para que su aplicación sepa qué ocurrió sin esperar nada más.
Con su marca, en los planes que califiquen
El nombre de su empresa, logotipo, color de acento y enlaces de términos y de privacidad, aplicados a la página alojada y a la página de verificación de credenciales.
Webhooks
Un callback firmado, en el momento en que hay un resultado.
Indíquenos una URL de webhook al crear una sesión y le enviaremos el resultado en cuanto la sesión termine, sin necesidad de consultas periódicas.
Firmado, no solo enviado
Cada entrega incluye un encabezado X-Bio-Signature: un HMAC-SHA256 del cuerpo de la solicitud, para que pueda comprobar que proviene de nosotros antes de confiar en ella.
Con reintentos, no de enviar y olvidar
Una entrega que falla se reintenta tres veces, con una espera más larga antes de cada intento.
Cada intento queda registrado
Ya sea que tenga éxito o falle, conservamos de nuestro lado un registro del intento.
Próximamente Próximamente habrá un registro de entregas dentro del portal para que usted mismo pueda ver cada intento.
Considere el VERIFIED más reciente como la verdad
Los reintentos implican que una entrega puede, en casos poco frecuentes, llegar fuera de orden. No base su lógica en la recepción de un webhook; hágalo en el ID de sesión, y permita que un VERIFIED posterior sobrescriba uno anterior. Si mantiene su propio estado, elimine duplicados por ID de sesión en lugar de por recepción de webhook.
Verifique la firma
Confíe en la carga útil antes de actuar sobre ella.
Recalcule el HMAC-SHA256 sobre el cuerpo sin procesar de la solicitud y compárelo con X-Bio-Signature antes de analizar cualquier dato.
const crypto = require("crypto");
function verifySignature(rawBody, signatureHeader, secret) {
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(expected, "hex");
const b = Buffer.from(signatureHeader || "", "hex");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
// Read the raw body — don't let a JSON body-parser touch it first.
app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => {
const signature = req.header("X-Bio-Signature") || "";
if (!verifySignature(req.body, signature, process.env.SHIELDID_WEBHOOK_SECRET)) {
return res.status(401).send("invalid signature");
}
const event = JSON.parse(req.body);
// Treat the latest VERIFIED status as authoritative; de-duplicate by session_id.
res.status(200).send("ok");
});Widget de JS
El flujo alojado, integrado en su propia página.
El widget crea una sesión y muestra el mismo flujo alojado dentro de la página, en un iframe, de modo que los solicitantes nunca salen de su sitio.
- Se muestra en un iframe con acceso a la cámara y al micrófono, ajustado al tamaño de su contenedor.
- Lee el estado de la sesión de la misma manera que lo hace la página alojada: a través de su URL de retorno y su webhook, una vez que la sesión termina.
Próximamente Las devoluciones de llamada de finalización dentro de la página (onComplete, onCancel, onStep, cambio de tamaño automático) llegarán próximamente. Mientras tanto, use return_url y webhooks para saber cuándo termina una sesión: funcionan hoy.
Antes de llevar esto a producción
Actualmente el widget acepta una clave de API directamente en el navegador. Considérelo una comodidad del entorno de pruebas (sandbox), no un patrón para producción: cree la sesión desde su propio backend manteniendo su clave del lado del servidor, y entregue al widget solo la sesión resultante, nunca una clave activa que el navegador de un visitante pueda leer.
<script src="https://cdn.shieldid.ca/sdk/v1/widget.js"></script>
<div id="shieldid-verify"></div>
<script>
TLVerify.init({
apiKey: "vk_sand_your_key", // sandbox only — see the note above for production
containerId: "shieldid-verify",
returnUrl: "https://yourapp.example/verified",
webhookUrl: "https://yourapp.example/hooks/shieldid",
locale: "en",
});
</script>Página de verificación de credenciales
Una página pública para una sesión verificada.
Una vez que una sesión alcanza VERIFIED, su propio enlace de verificación de credenciales muestra una confirmación en lenguaje sencillo: el nombre del solicitante, el tipo de documento y el estado. Cualquier persona con el enlace —un cofirmante, un recepcionista, una contraparte— puede confirmar el resultado sin iniciar sesión en su panel.
Jordan Reyes
Datos de ejemploLicencia de conducir de Ontario
Verificado
- No se requiere iniciar sesión para verla.
- Nunca aparece en ella una imagen de documento sin procesar ni una puntuación de confianza: solo un estado y la identidad, nada más.
- Con la misma marca que la página alojada, en los planes que califiquen.
Patrones de integración
Cómo conectan esto seis tipos de negocios.
Los componentes son los mismos en todas partes: una sesión, un enlace o un widget, y un webhook. El patrón que más le conviene cambia según cómo y cuándo necesite la respuesta.
Servicios legales y despachos de abogados
Corporaciones de condominios
Fintech y préstamos
Marketplaces y plataformas gig
E-signature
Preguntas
Respuestas claras sobre la integración.
Comience ahora
Configure un webhook. Véalo en acción.
Cree una sesión en el entorno de pruebas (sandbox) con una URL de webhook, ejecute una verificación en su propio teléfono y lea el callback firmado que se envía.