Saltar al contenido principal

Catálogo de eventos

Catálogo de eventos

Soyio emite eventos en dos capas. Este catálogo las reúne en un solo lugar, con el nombre de cada evento, cuándo se emite y el enlace a su contrato.

CapaDónde llegaPara qué sirve
WebhooksTu servidor, vía HTTP POSTSincronizar tu base de datos y disparar procesos de backend
SDK y embedsEl navegador del usuario, vía onEventReaccionar en la UI y hacer tracking de analítica en tiempo real

Las dos capas son complementarias, pero no equivalentes: cada módulo emite los eventos de sus propios flujos y con su propia nomenclatura (snake_case con punto en los webhooks, SCREAMING_SNAKE_CASE en el SDK), así que no asumas un par uno a uno entre un evento de frontend y un webhook. Usa los eventos de SDK para la UI y la analítica, y los webhooks como fuente de verdad de lo que quedó registrado en Soyio.

Eventos de webhooks

Cuando algo relevante ocurre en tu cuenta, Soyio crea un objeto de evento y lo envía a los webhooks suscritos:

Ejemplo de evento
{
"id": "evt_1B2M2Y8AsgTpgAmY7PhCfg",
"name": "disclosure_request.granted",
"payload": {
"disclosure_request_id": "dreq_1B2M2Y8AsgTpgAmY7PhCfg",
"identity_id": "id_ma21KLsmaslopask912Aa2",
"user_reference": "user_123"
},
"created_at": "2024-03-20T15:30:00Z"
}

Para entrega, reintentos, alertas y verificación de firma revisa la guía de webhooks. Si necesitas los contratos en formato máquina, consulta el endpoint de contratos de eventos.

Hoy existen 34 eventos agrupados en 15 dominios. Cada dominio tiene su propio wildcard de suscripción.

agreement.*

EventoCuándo se emiteContrato
agreement.createdSe crea un nuevo agreementVer contrato
agreement.updatedSe actualiza un agreement existenteVer contrato
agreement.data_permissions_expiredUno o más data_permissions del agreement expiran, así que el tratamiento asociado debe cesarVer contrato

api_key.*

EventoCuándo se emiteContrato
api_key.createdSe crea una nueva API keyVer contrato
api_key.updatedSe actualiza una API key existenteVer contrato
api_key.destroyedSe elimina una API keyVer contrato

auth_attempt.*

EventoCuándo se emiteContrato
auth_attempt.successfulUn intento de autenticación se completa con éxitoVer contrato
auth_attempt.failedUn intento de autenticación fallaVer contrato

auth_request.*

EventoCuándo se emiteContrato
auth_request.successfulUn auth request se completa con éxitoVer contrato
EventoCuándo se emiteContrato
consent_action.createdSe crea una nueva acción de consentimiento (grant o revoke)Ver contrato
consent_action.redec_receipt_generatedSe genera el PDF de recibo REDEC de una acción de consentimientoVer contrato

consent_action.redec_receipt_generated aparece bajo la etiqueta REDEC en la especificación, pero se suscribe con consent_action.*.

EventoCuándo se emiteContrato
consent_commit.createdSe crea una nueva agrupación de acciones de consentimientoVer contrato

consent_form_entry.*

EventoCuándo se emiteContrato
consent_form_entry.createdSe persiste el envío de un formulario de consentimientoVer contrato
consent_form_entry.updatedSe actualiza el registro, hoy solo su user_referenceVer contrato
consent_form_entry.destroyedSe revierte o elimina el registro, lo que invalida un created previoVer contrato

consent_form_entry.created no es fuente de verdad del consentimiento otorgado: llega con consent_action_id: null y granted_template_ids: []. Revisa el detalle en Orden de emisión y fuente de verdad.

data_subject_request.*

EventoCuándo se emiteContrato
data_subject_request.createdSe crea una nueva solicitud de ejercicio de derechosVer contrato
data_subject_request.updatedSe actualiza una solicitud existenteVer contrato
data_subject_request.validatingLa solicitud entra en proceso de validación de identidadVer contrato
data_subject_request.processingLa validación resulta exitosa y la solicitud entra en procesamientoVer contrato
data_subject_request.data_missmatchLa validación se completa, pero los datos no coinciden con los de la solicitudVer contrato
data_subject_request.resolvedLa solicitud se resuelve, sea aprobada o rechazadaVer contrato

disclosure_request.*

EventoCuándo se emiteContrato
disclosure_request.grantedEl disclosure request se completa y se otorga acceso a los datosVer contrato
disclosure_request.failedEl disclosure request falla durante el procesoVer contrato
disclosure_request.timed_outEl disclosure request expira sin completarseVer contrato

export.*

EventoCuándo se emiteContrato
export.completedUna exportación asíncrona termina y el archivo queda disponibleVer contrato
export.failedUna exportación asíncrona falla, con el motivo en error_messageVer contrato

government_check_request.*

EventoCuándo se emiteContrato
government_check_request.successfulUn government check request se completa con éxitoVer contrato
government_check_request.failedUn government check request fallaVer contrato

redec.*

EventoCuándo se emiteContrato
redec.rdc40_no_changesNo hubo eventos que gatillen el reporte RDC40 en las últimas 24 horasVer contrato

report.*

EventoCuándo se emiteContrato
report.createdSe genera un nuevo reporteVer contrato

redec.rdc40_no_changes y report.created comparten la etiqueta Reports en la especificación, pero se suscriben por separado con redec.* y report.*.

signature_attempt.*

EventoCuándo se emiteContrato
signature_attempt.successfulUn intento de firma se completa con éxitoVer contrato
signature_attempt.failedUn intento de firma fallaVer contrato

validation_attempt.*

EventoCuándo se emiteContrato
validation_attempt.successfulUn intento de validación de identidad se completa con éxitoVer contrato
validation_attempt.failedUn intento de validación de identidad fallaVer contrato

Wildcards de suscripción

Al crear un webhook puedes elegir eventos individuales, un dominio completo o todo. Estos son los valores válidos de wildcard:

*, agreement.*, api_key.*, auth_attempt.*, auth_request.*, consent_action.*, consent_commit.*, consent_form_entry.*, data_subject_request.*, disclosure_request.*, export.*, government_check_request.*, redec.*, report.*, signature_attempt.*, validation_attempt.*

No recomendamos el wildcard * en producción. Nuestros eventos son altamente transaccionales, así que suscribirte a todo genera un volumen de entregas que tu servidor debe procesar y descartar sin necesidad. Úsalo solo para explorar en sandbox.

Suscríbete solo a lo que tu aplicación procesa. Revisa el detalle en Suscripción a eventos.

Eventos de SDK y embeds

Todos los eventos del SDK web llegan por el callback onEvent y traen un campo eventName que actúa como discriminador. Si usas TypeScript, importa los tipos desde @soyio/soyio-widget para obtener autocompletado y type narrowing.

Widget popup

Aplican a los flujos de disclosure, firma y autenticación que abren el popup de Soyio. Tipo: EventData.

EventoCuándo se emitePayload (además de eventName)Guía
DISCLOSURE_REQUEST_SUCCESSFULEl usuario completa el flujo de disclosureuserReference, identityIdValida la identidad
AUTH_REQUEST_SUCCESSFULNombre declarado para el término del auth requestuserReference, identityIdAutentica usuarios
IDENTITY_SIGNATUREEl usuario completa el proceso de firmauserReference, identityIdFirma documentos
REJECTED_SIGNATUREEl usuario cancela el proceso de firmaFirma documentos
DENIED_CAMERA_PERMISSIONEl usuario rechaza el permiso de cámaraValida la identidad
UNEXPECTED_ERROROcurre un error inesperado en el flujoManeja errores
WIDGET_OPENEDEl popup de Soyio se abreValida la identidad
WIDGET_CLOSEDEl usuario cierra el popup de SoyioValida la identidad
CLOSE_POPUPEl popup entrega hoy este nombre al terminar el auth requestuserReference, identityIdAutentica usuarios

Al término de un auth request, el popup entrega hoy CLOSE_POPUP y no AUTH_REQUEST_SUCCESSFUL. Maneja ambos nombres mientras se alinean SDK y aplicación, y confirma el resultado con el webhook auth_request.successful.

EventData declara además IDENTITY_VALIDATED e IDENTITY_AUTHENTICATED. Se mantienen por compatibilidad de tipos y ningún flujo los emite: escucha DISCLOSURE_REQUEST_SUCCESSFUL para disclosure e IDENTITY_SIGNATURE para firma.

Passkeys en DisclosureRequestBox

Solo aplican al embed DisclosureRequestBox, que delega el registro y la autenticación con llave de acceso a tu aplicación.

EventoCuándo se emitePayload (además de eventName)Guía
PASSKEY_REQUIREDEl flujo necesita registrar una llave de accesotype, sessionToken, companyIdDisclosure embebido
PASSKEY_AUTHENTICATION_REQUIREDEl flujo necesita autenticar con una llave de acceso existentetype, requestableTokenDisclosure embebido
PASSKEY_REGISTEREDLa llave de acceso queda registradatype, identifierDisclosure embebido
PASSKEY_AUTHENTICATEDLa autenticación con llave de acceso resulta exitosatype, identifierDisclosure embebido

Privacy Center

Tipo: PrivacyCenterEvent.

EventoCuándo se emitePayload (además de eventName)Guía
REQUEST_SUBMITTEDEl usuario envía una solicitud de ejercicio de derechosdataSubjectRequestId, kind, entityIdEventos del Privacy Center
REQUEST_SUBMISSION_FAILEDEl envío de la solicitud fallakind, errorCode?, errorMessage?Eventos del Privacy Center
VALIDATION_SUCCESSFULLa validación de identidad asociada termina con éxitodataSubjectRequestIdEventos del Privacy Center
VALIDATION_FAILEDLa validación de identidad falladataSubjectRequestId, errorReason?Eventos del Privacy Center
CONSENT_UPDATEDEl usuario otorga o revoca un consentimiento en modo immediateconsentTemplateId, action, actionToken?Gestiona consentimientos
CONSENT_UPDATE_FAILEDUna operación de consentimiento falla en modo immediateconsentTemplateId, action, errorCode?Gestiona consentimientos
CONSENT_BATCH_UPDATEDEl usuario guarda un conjunto de consentimientos en modo batchupdatesGestiona consentimientos
CONSENT_BATCH_UPDATE_FAILEDEl guardado del conjunto falla en modo batchconsentTemplateIds, errorCode?Gestiona consentimientos
UNEXPECTED_ERRORError no clasificado dentro del flujocontext, errorMessage?Eventos del Privacy Center

Checkbox de consentimiento

Tipo: ConsentEvent.

EventoCuándo se emitePayload (además de eventName)Guía
CONSENT_CHECKBOX_CHANGEEl usuario marca o desmarca el checkbox de consentimientoisSelected, actionToken?, identifierCaptura consentimiento

Formulario de consentimiento

Tipo: ConsentFormEvent.

EventoCuándo se emitePayload (además de eventName)Guía
CONSENT_FORM_SUBMITTEDEl registro del envío se persisteentryToken, redirectUrlEmbebe el formulario
CONSENT_FORM_COMPLETEDEl usuario hace clic en el botón final de la pantalla de éxitoentryToken, redirectUrlEmbebe el formulario
CONSENT_FORM_PAGE_CHANGEEl usuario avanza o retrocede de páginacurrentPage, totalPagesEmbebe el formulario
CONSENT_FORM_LOAD_ERROREl formulario no carga, por ejemplo si el host no está permitidokind, message?Embebe el formulario
CONSENT_FORM_SUBMIT_ERROREl envío del formulario fallamessageEmbebe el formulario

SDK móvil

El SDK de React Native usa el campo type en vez de eventName y tiene nombres propios, como SUCCESS para el término exitoso del flujo o WEBVIEW_PROCESS_TERMINATED cuando el sistema operativo mata el webview. No asumas paridad de nombres con el SDK web.