Skip to main content
Flujo de integración
Language

Events API

Integre cside Device Intelligence en su aplicación. Recopile señales del navegador, genere tokens de sesión y obtenga inteligencia detallada sobre los visitantes desde su backend.

Esta guía le explica cómo integrar la Events API de cside Device Intelligence de principio a fin: cargar el script del cliente, generar un token de sesión, enviarlo a su backend e interpretar la respuesta.

Flujo de integración

Agregue el script a su página

Si su app usa un bundler, instale el paquete npm y llame a initDeviceIntelligence({ teamID }) tan pronto como su app lo permita. De lo contrario, incluya el bootstrap del navegador tolerante a fallos en la parte superior del <head>, antes de otros scripts, y reemplace su valor script.src por la URL de su equipo del panel de cside. El bootstrap carga client.js de forma asíncrona, pone en cola las llamadas tempranas y las rechaza si cside falla o agota el tiempo, para que la página siga funcionando.

Envíe la telemetría y reciba un token de sesión

Una vez que el script se haya cargado, la función global sendClientTelemetry estará disponible (el paquete npm devuelve la misma función desde initDeviceIntelligence). Cargar el script no crea un fingerprint de sesión por sí solo. Llame a sendClientTelemetry(externalIds?) para enviar telemetría a https://edge.csidefd.com/client y recibir un token de sesión. Pase un objeto externalIds opcional si quiere adjuntar sus propios identificadores.

const result = await sendClientTelemetry({
  email: "user@example.com",
  userId: "1234567890",
});

// O llamarla sin argumentos
// const result = await sendClientTelemetry();

if (result.errors) {
  console.error(result.errors);
  throw new Error("La solicitud de telemetría falló.");
}

const token = result.token;

Parámetros

ParámetroTipoRequeridoDescripción
externalIdsRecord<string, string>NoIdentificadores opcionales que quiere adjuntar al fingerprint, como userId, orderId, paymentCardId o email.

Para recibir la señal de correo electrónico desechable (fingerprint_enrichment.throwaway_email_detected en /token/v2/verify), pase la dirección de correo electrónico en este objeto usando la clave email. Las reglas de cuenta y el Identity graph se basan en userId (el Identity graph también acepta teamId o customerId), y la regla de prueba de tarjetas se basa en paymentCardId; consulte Recuperar datapoints para ver el formato.

Valor de retorno

La función devuelve un objeto JSON (ya analizado, por lo que no necesita llamar a .json() sobre él):

{
  "token": "eyJhbGciOiJIUzI1NiIs..."
}

El campo token contiene el token de sesión de fingerprint. Si la recopilación de telemetría encuentra problemas, el objeto también incluye un array opcional errors que puede registrar; con el paquete npm, sendClientTelemetry nunca se rechaza y se resuelve con { token: null, errors } en su lugar. Extraiga result.token y envíe solo esa cadena del token de sesión a su backend.

Recupere datos de fingerprint desde su backend

Genere una clave API de Device Intelligence solo para backend en el dashboard de cside, guárdela como secreto del servidor y úsela para intercambiar el token de sesión con cside. La clave API se muestra solo una vez y no debe exponerse en código de navegador.

if (!token) {
  throw new Error("No se devolvió un token de sesión de fingerprint.");
}

const response = await fetch("https://api.cside.com/token/v2/verify", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CSIDE_FINGERPRINT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ token }),
});

const data = await response.json();

Cuerpo de la solicitud

Envíe JSON con la forma { "token": "<token de sesión>" }, donde el valor es result.token del paso anterior. Solo los endpoints /token/v2/* aceptan JSON; los endpoints /token/v1/* aceptan el token de sesión sin procesar como body text/plain.

Opciones de lookup del token

Use el endpoint autenticado para intercambios server-to-server de producción. Los endpoints públicos siguen disponibles cuando una integración necesita específicamente el flujo de lookup no autenticado.

EndpointAutenticaciónBody de la solicitudÚselo cuando
/token/v2/verifyClave APIJSON { "token" }Necesite recuperación backend autenticada con una clave API de Device Intelligence.
/token/v2/device/entriesClave APIJSON { "token", "limit", "offset" }Necesite evaluaciones completadas para el mismo ID de dispositivo que un token de sesión.
/token/v1/clientNingunaToken sin procesar, text/plainNecesite el payload público de respuesta de fingerprinting.
/token/v1/clientIdNingunaToken sin procesar, text/plainSolo necesite el fingerprint ID estable del flujo público de lookup.

Todos los endpoints devuelven 202 Accepted con { "status": "pending" } mientras la evaluación sigue en proceso, y luego 200 OK cuando ha terminado. /token/v2/device/entries acepta { "token": "...", "limit": 100, "offset": 0 } y devuelve { "device_id": "...", "entries": [...], "next_offset": 100, "has_more": true }, donde cada entrada usa la forma de respuesta de /token/v2/verify. limit es opcional, su valor predeterminado es 500 y el máximo permitido es 500. /token/v1/clientId devuelve JSON { "status": "completed", "device_id": "..." }. Si no existe un fingerprint ID para el token de sesión, devuelve 404.

Errores y límites de solicitudes

Las respuestas de error llevan un body JSON { "error": "<message>", "code": <HTTP status> }:

EstadoSignificado
400Body mal formado o un token de sesión que no se puede decodificar.
401Clave API ausente o inválida, un token expirado o un token emitido para un equipo distinto al de la clave API.
404No existe ninguna evaluación para el token (token not found) o, en /token/v1/clientId, ningún fingerprint ID (fingerprint id not found).
429Límite de solicitudes superado. La respuesta lleva un header retry-after: 60. El límite predeterminado es de 1.000 solicitudes por minuto por equipo.

Una evaluación completada que falló no es un error HTTP: devuelve 200 OK con "status": "failed" y un campo error_message. Compruebe status antes de leer los campos de enriquecimiento.

Ejemplo de solicitud backend

const csideResponse = await fetch("https://api.cside.com/token/v2/verify", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CSIDE_FINGERPRINT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ token }),
});

const data = await csideResponse.json();

Interprete la respuesta del backend

Su backend devuelve una respuesta JSON que contiene el resultado de identificación y las señales asociadas. Consulte la referencia completa de la respuesta a continuación.

Respuesta de /token/v2/verify

El endpoint autenticado devuelve un payload JSON plano. Cada entrada de /token/v2/device/entries usa la misma forma.

CampoTipoDescripción
statusstringpending, completed o failed. Los campos de enriquecimiento solo están presentes cuando es completed.
error_messagestringPor qué falló la evaluación. Solo está presente cuando status es failed.
created_atnumberMarca de tiempo Unix (milisegundos) de creación de la evaluación.
updated_atnumberMarca de tiempo Unix (milisegundos) de la última actualización.
fingerprintobjectEl fingerprint completo del dispositivo: señales de navegador, hardware, renderizado, entorno y automatización, más los external_ids que adjuntó. Mismos campos que el objeto fingerprint de la exportación S3.
network_client_metricsobjectCaracterísticas TCP y TLS de la conexión.
geo_dataobjectGeolocalización a nivel de ciudad de la IP del visitante.
ip_enrichmentobjectDatos de ASN, geolocalización y privacidad (hosting, proxy, relay, tor, vpn, señales de centro de datos) de la IP del visitante.
vpn_evaluationobjectis_vpn, vpn_probability, vpn_confidence, reasons, features y context.
botobjectEl veredicto de bot: is_bot, bot_probability, bot_confidence, bot_agent_id, reasons, puntuaciones y umbrales por modelo, y session_event_count. Consulte Detección de agentes de IA.
fingerprint_enrichmentobjectSeñales derivadas del fingerprint. throwaway_email_detected es true cuando el ID externo email usa un dominio desechable.
rule_evaluationsobjectResultados de reglas legado (rules, policy_version). Vacío en las evaluaciones creadas después del 2026-08-27; se mantiene en la respuesta para que los registros antiguos sigan decodificándose.
rule_evaluations_v2objectResultados del motor de reglas: un array values donde cada elemento envuelve una evaluation con rule_slug, rule_version, outcome, evaluated_as (live o shadow), transition y evaluated_at.

Los objetos anidados coinciden con la estructura del registro de la exportación S3, donde cada campo está documentado en detalle.

rule_evaluations_v2

La tabla anterior resume este campo. Lleva el resultado de cada regla que se ejecutó para el dominio, anidado tres niveles adentro en rule_evaluations_v2.values[].evaluation, y los valores son enteros en lugar de cadenas, así que vale la pena detallarlos. No forma parte del payload de /token/v1/client documentado más abajo.

CampoTipoDescripción
rule_slugstringEl identificador de la regla, por ejemplo "account_shared_detected".
outcomenumberEl resultado de la evaluación. Vea la tabla siguiente.
evaluated_asnumberEl estado del ciclo de vida de la regla en el momento de la evaluación. Vea la tabla siguiente.
transitionnumberSi el resultado cambió en esta evaluación, independientemente de cuál sea el resultado. 2 significa sin cambios desde la última evaluación, 3 significa que cambió en esta. Combinado con outcome: 1, un 3 significa que la regla acaba de empezar a coincidir; combinado con outcome: 2, significa que acaba de dejar de coincidir. 1 nunca se produce.
key.key_hashstringUn hash del valor sobre el que indexó la regla. Es una cadena JSON, no un número, así que sobrevive a JSON.parse sin pérdida de precisión. No lleva el id de cuenta en sí.
event_time, evaluated_atobject{ seconds, nanos }, a diferencia de created_at y updated_at a nivel superior de la respuesta, que son timestamps en milisegundos.

outcome y evaluated_as son enteros sin procesar, no cadenas:

outcomeSignificadoCuándo lo observará
0Sin especificarNo se produce
1TrueDe forma continua, en cada evaluación mientras se cumpla la condición
2FalseDe forma continua, en cada evaluación mientras no se cumpla. Es el estado estable para una regla sana que no coincide, no una transición rara
3Ausente (estructural)De forma continua, en cada evaluación donde la regla no puede leer el campo que necesita, como una clave de id externo incorrecta. Persistente, no un pico aislado
4Pendiente (transitorio)Cuando una medición requerida existe pero aún no está caliente. Distinto de un status de nivel superior igual a pending: volver a solicitar el mismo token no lo resolverá, pero una evaluación posterior de la misma entidad puede devolver 1 o 2
evaluated_asSignificado
1Draft
2Shadow (un experimento; puede aparecer en cualquier momento)
3Active
4Archived

Cada regla evaluada y publicada reporta una entrada en cada evento, con cualquier resultado. rule_evaluations_v2 es un registro de lo que se evaluó, no un flujo de notificaciones, así que outcome: 2 (false) y outcome: 3 (ausente) no se suprimen: viajan en el array con la misma fiabilidad que outcome: 1. transition es lo que le indica si ese resultado cambió desde la evaluación anterior.

Una entrada ausente para un rule_slug dado significa que la regla no se evaluó en absoluto: no está activada para el dominio, es una regla de solo medición que no publica, o la evaluación no se ejecutó para ese evento. No significa “evaluó a false”: ese caso es outcome: 2, presente en el array como cualquier otro. Consulte Detectar el uso compartido de cuentas para un ejemplo trabajado que lee este campo de principio a fin.

Referencia de la respuesta de /token/v1/client

Esta referencia se aplica al endpoint público /token/v1/client. Es una vista más antigua y más plana de la misma evaluación. Muchos de sus campos son placeholders fijos que se mantuvieron por compatibilidad hacia atrás; el callout siguiente los enumera. Para integraciones nuevas, prefiera /token/v2/verify.

Valores siempre placeholder en v1

Estos campos están presentes en cada respuesta pero nunca se calculan:

  • identification.confidence y supplementary_id_high_recall.confidence son siempre { "score": 0.0, "version": "unknown" }
  • identification.visitor_found es siempre false; first_seen_at y last_seen_at son iguales al timestamp del evento
  • proximity es siempre { "id": "unknown", "precision_radius": 0, "confidence": 0.0 }
  • client_referrer es siempre "unknown"
  • ip_blocklist.email_spam e ip_blocklist.attack_source son siempre false (solo se completa tor_node)
  • raw_device_attributes.math es siempre "unknown"

No construya lógica de detección o fraude sobre ellos.

Explicaciones de reglas

Las reglas publicadas que se evalúan como verdaderas pueden incluir rule_evaluations_v2.values[].evaluation.explanation.nodes. Cada nodo visitado puede describir su node_id, outcome, valor tipado observed, subject y compared_to. Las explicaciones son opcionales; los resultados falsos, pendientes o sin datos no las incluyen. La ausencia de explicación no cambia el resultado registrado.

Trata subject y compared_to como texto para mostrar, no como un formato que analizar. Usa node_id, los valores tipados de observed y outcome en tu código. Lee estos campos de rule_evaluations_v2, no del objeto heredado rule_evaluations. Consulta la API de eventos para ver los valores y la diferencia con los resultados heredados.

Campos de nivel superior

CampoTipoDescripción
linked_idstringEl ID de sesión del navegador, o el ID del evento cuando no se capturó ningún ID de sesión. No es un identificador que usted haya proporcionado; sus externalIds aparecen en tags como external_id:<key>.
tagsobjectUn mapa de diagnóstico de cside, no metadatos del cliente: domain_id, team_id, request_id, session_id, fingerprint_match, network_match, flags de soporte de detección como incognito_support, y sus externalIds como entradas external_id:<key>.
timestampnumberMarca de tiempo Unix (milisegundos) del evento.
event_idstringIdentificador único para este evento de fingerprinting.
urlstringLa URL de la página donde se recopiló el fingerprint.
ip_addressstringLa dirección IP del visitante.
user_agentstringLa cadena User-Agent sin procesar del navegador del visitante.
client_referrerstringSiempre "unknown".
statusstringcompleted o failed.
error_messagestringPresente cuando status es failed.
domain_id, team_id, session_id, request_idstringMetadatos de la evaluación copiados del registro interno.
created_atstringHora de la evaluación como cadena RFC 3339 (a diferencia de /token/v2/verify, que usa milisegundos).

La respuesta también incluye los objetos network_client_metrics, vpn_evaluation, proxy_details, tampering_details, tampering_anomaly_score, velocity y sdk. Los recuentos de velocity se derivan únicamente del evento actual (su ventana events.24_hours es el único valor histórico); sdk indica platform: "js" con version: "unknown". Se muestran en el ejemplo completo, pero no forman parte del contrato estable.

browser_details

Detalles sobre el navegador y el sistema operativo del visitante.

CampoTipoDescripción
browser_namestringNombre del navegador (por ejemplo, "Chrome").
browser_major_versionstringNúmero de versión principal.
browser_full_versionstringCadena de versión completa.
osstringNombre del sistema operativo.
os_versionstringVersión del sistema operativo.
devicestringTipo de dispositivo (por ejemplo, "Other", "Mobile").

identification

El resultado de identificación principal del visitante.

CampoTipoDescripción
visitor_idstringEl ID de dispositivo estable de este visitante. Es el único campo calculado del objeto.
confidence.scorenumberSiempre 0.0.
confidence.versionstringSiempre "unknown".
visitor_foundbooleanSiempre false.
first_seen_atnumberSiempre igual a timestamp.
last_seen_atnumberSiempre igual a timestamp.

supplementary_id_high_recall

Un identificador secundario derivado de sus externalIds (con preferencia por userId y después accountId) para que una cuenta pueda vincularse entre dispositivos. Recurre al ID de dispositivo cuando no se adjuntó ningún ID externo.

CampoTipoDescripción
visitor_idstringHash del ID externo elegido, o el ID de dispositivo cuando no se adjuntó ninguno.
visitor_foundbooleantrue cuando se adjuntó un ID externo; de lo contrario, false.
confidence.scorenumberSiempre 0.0.
confidence.versionstringSiempre "unknown".
first_seen_atnumberSiempre igual a timestamp.
last_seen_atnumberSiempre igual a timestamp.

proximity

No se completa. Siempre { "id": "unknown", "precision_radius": 0, "confidence": 0.0 }. Use geo_data e ip_enrichment en /token/v2/verify para la ubicación.

ip_info

Información de la dirección IP del visitante.

CampoTipoDescripción
v4.addressstringDirección IPv4.
v6.addressstringDirección IPv6.

ip_blocklist

Si la IP del visitante aparece en listas de bloqueo conocidas.

CampoTipoDescripción
email_spambooleanNo se completa; siempre false.
attack_sourcebooleanNo se completa; siempre false.
tor_nodebooleanLa IP es un nodo de salida de Tor.

Señales de fraude y entorno

Señales que indican atributos sospechosos o notables del visitante.

Algunos de estos no se completan actualmente

root_apps, emulator, jailbroken, frida, mitm_attack, replayed, high_activity_device, cloned_app, privacy_settings y location_spoofing están presentes en la respuesta pero nunca se establecen. Siempre devuelven false (factory_reset_timestamp es siempre 0). No construyas lógica de detección o fraude sobre ellos. Cada uno está marcado en la tabla.

CampoTipoDescripción
botstringUna cadena simple derivada únicamente del User-Agent: "detected" cuando contiene bot, crawler, spider o headless; "unknown" cuando no se capturó ningún User-Agent; de lo contrario, "not_detected". No es el modelo de bot. Use bot.is_bot en /token/v2/verify para el veredicto real. Consulte Detección de agentes de IA.
root_appsbooleanEl dispositivo tiene aplicaciones root/superusuario instaladas. No se completa actualmente; siempre false.
emulatorbooleanEl dispositivo es un emulador. No se completa actualmente; siempre false.
proxybooleanEl visitante está usando un proxy, un relay o una IP de centro de datos.
proxy_confidencestring"low", "medium" o "high" cuando proxy es true; "unknown" en caso contrario.
vpnbooleanEl visitante está usando una VPN.
vpn_confidencestring"low", "medium" o "high" cuando se ejecutó el modelo de VPN; "unknown" en caso contrario.
vpn_origin_timezonestringZona horaria IANA indicada por el navegador.
vpn_origin_countrystringPaís inferido a partir del enriquecimiento de IP o "unknown".
vpn_methodsobjectSeñales a nivel de método relacionadas con el uso de VPN y el tráfico anonimizado. Consulte la subsección a continuación.
incognitobooleanEl navegador está en modo incógnito/privado.
tamperingbooleanLos atributos del navegador han sido manipulados.
jailbrokenbooleanEl dispositivo tiene jailbreak. No se completa actualmente; siempre false.
fridabooleanSe detectó el toolkit de instrumentación Frida. No se completa actualmente; siempre false.
virtual_machinebooleanEl visitante está ejecutando en una máquina virtual.
developer_toolsbooleanLas herramientas de desarrollo del navegador están abiertas.
mitm_attackbooleanSe detectó un ataque man-in-the-middle. No se completa actualmente; siempre false.
replayedbooleanLa solicitud es una repetición de una solicitud anterior. No se completa actualmente; siempre false.
high_activity_devicebooleanNúmero inusualmente alto de identificaciones desde este dispositivo. No se completa actualmente; siempre false.

La señal de correo electrónico desechable no forma parte de esta respuesta. Lea fingerprint_enrichment.throwaway_email_detected desde /token/v2/verify en su lugar.

vpn_methods

vpn_methods contiene señales a nivel de método relacionadas con el uso de VPN y el tráfico anonimizado. Use el campo de nivel superior vpn como veredicto general. El valor de un método puede ser true cuando vpn es false, por ejemplo, cuando cside detecta tráfico de proxy o relay que el modelo de VPN no clasifica como VPN.

CampoTipoDescripción
timezone_mismatchbooleanLa zona horaria del navegador no coincide con la geolocalización de la IP.
public_vpnbooleanLa IP coincide con una señal conocida de VPN pública o de centro de datos.
auxiliary_mobilebooleanReservado para la detección específica de dispositivos móviles. Actualmente es false en los eventos del navegador.
os_mismatchbooleanEl sistema operativo indicado por el navegador no coincide con la firma de red.
relaybooleancside detectó un relay que anonimiza el tráfico, un proxy o tráfico similar al de un relay.
Nombres de campos aplanados

Algunos pipelines de datos añaden prefijos y aplanan los campos anidados. En esos conjuntos de datos, vpn_methods.relay puede aparecer como cside_fingerprint_vpn_methods_relay.

raw_device_attributes

Componentes de bajo nivel del fingerprint del navegador.

CampoTipoDescripción
mathstringNo se completa; siempre "unknown".
vendorstringCadena del proveedor de GPU/gráficos.

Ejemplo completo de respuesta

Una respuesta completada de /token/v1/client. Los objetos anidados que no forman parte del contrato estable (network_client_metrics, vpn_evaluation, velocity) están abreviados.

{
  "linked_id": "b3f1c9e2-4d7a-4b0e-9f1a-2c8d7e6f5a41",
  "tags": {
    "domain_id": "7371466449724252160",
    "team_id": "7196353823991660544",
    "request_id": "01J9ZK3Q8W",
    "session_id": "b3f1c9e2-4d7a-4b0e-9f1a-2c8d7e6f5a41",
    "fingerprint_match": "7371466449724252160",
    "external_id:userId": "1234567890",
    "incognito_support": "supported",
    "developer_tools_support": "supported",
    "virtual_machine_support": "heuristic",
    "tor_support": "ipinfo_privacy",
    "visit_summary_source": "recent_fingerprint.available"
  },
  "timestamp": 1708102555327,
  "event_id": "289076244130249728",
  "url": "http://www.example.com/login",
  "ip_address": "61.127.217.15",
  "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...",
  "client_referrer": "unknown",
  "browser_details": {
    "browser_name": "Chrome",
    "browser_major_version": "74",
    "browser_full_version": "74.0.3729",
    "os": "Windows",
    "os_version": "7",
    "device": "Other"
  },
  "identification": {
    "visitor_id": "Ibk1527CUFmcnjLwIs4A9",
    "confidence": { "score": 0.0, "version": "unknown" },
    "visitor_found": false,
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "supplementary_id_high_recall": {
    "visitor_id": "3HNey93AkBW6CRbxV6xP",
    "visitor_found": true,
    "confidence": { "score": 0.0, "version": "unknown" },
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "proximity": {
    "id": "unknown",
    "precision_radius": 0,
    "confidence": 0.0
  },
  "bot": "not_detected",
  "root_apps": false,
  "emulator": false,
  "ip_info": {
    "v4": { "address": "94.142.239.124" },
    "v6": { "address": "2001:db8:3333:4444:5555:6666:7777:8888" }
  },
  "ip_blocklist": {
    "email_spam": false,
    "attack_source": false,
    "tor_node": false
  },
  "proxy": true,
  "proxy_confidence": "low",
  "proxy_details": {
    "proxy_type": "datacenter",
    "last_seen_at": 1708102555327,
    "provider": "Example Hosting"
  },
  "vpn": false,
  "vpn_confidence": "high",
  "vpn_origin_timezone": "Europe/Amsterdam",
  "vpn_origin_country": "NL",
  "vpn_methods": {
    "timezone_mismatch": false,
    "public_vpn": true,
    "auxiliary_mobile": false,
    "os_mismatch": false,
    "relay": true
  },
  "vpn_evaluation": { "is_vpn": false, "vpn_probability": 0.04, "vpn_confidence": 0.91 },
  "incognito": false,
  "tampering": false,
  "tampering_anomaly_score": 0.0,
  "tampering_anti_detect_browser": false,
  "tampering_details": { "anomaly_score": 0.0, "anti_detect_browser": false },
  "cloned_app": false,
  "factory_reset_timestamp": 0,
  "jailbroken": false,
  "frida": false,
  "privacy_settings": false,
  "virtual_machine": false,
  "location_spoofing": false,
  "velocity": {
    "distinct_ip": { "5_minutes": 1, "1_hour": 1, "24_hours": 1 },
    "distinct_country": { "5_minutes": 0, "1_hour": 0, "24_hours": 0 },
    "events": { "5_minutes": 1, "1_hour": 1, "24_hours": 3 },
    "ip_events": { "5_minutes": 1, "1_hour": 1, "24_hours": 1 },
    "distinct_ip_by_linked_id": { "5_minutes": 1, "1_hour": 1, "24_hours": 1 },
    "distinct_visitor_id_by_linked_id": { "5_minutes": 1, "1_hour": 1, "24_hours": 1 }
  },
  "developer_tools": false,
  "mitm_attack": false,
  "sdk": { "platform": "js", "version": "unknown", "integrations": [] },
  "replayed": false,
  "high_activity_device": false,
  "raw_device_attributes": {
    "math": "unknown",
    "vendor": "Google Inc."
  },
  "network_client_metrics": { "client_ip": "61.127.217.15", "tls_ja4": "t13d1516h2_8daaf6152771_b186095e22b6" },
  "status": "completed",
  "domain_id": "7371466449724252160",
  "team_id": "7196353823991660544",
  "session_id": "b3f1c9e2-4d7a-4b0e-9f1a-2c8d7e6f5a41",
  "request_id": "01J9ZK3Q8W",
  "created_at": "2024-02-16T17:35:55.327Z"
}
Was this page helpful?