Skip to main content
Fluxo de integração
Language

Events API

Integre o cside Device Intelligence na sua aplicação. Colete sinais do navegador, gere tokens de sessão e recupere inteligência detalhada de visitantes a partir do seu backend.

Este guia orienta você na integração completa da Events API de cside Device Intelligence: carregando o script do cliente, gerando um token de sessão, enviando-o para o seu backend e interpretando o payload de resposta.

Fluxo de integração

Adicione o script à sua página

Inclua o bootstrap de navegador fail-open no topo do <head>, antes dos outros scripts. Substitua o valor de script.src pela URL do seu time no painel do cside. Ele carrega client.js de forma assíncrona e rejeita chamadas quando o cside falha ou expira, mantendo a página funcionando.

Envie a telemetria e receba um token de sessão

Depois que o script for carregado, a função global sendClientTelemetry ficará disponível. Carregar o script não cria um fingerprint de sessão sozinho. Chame sendClientTelemetry(externalIds?) para enviar telemetria para /client e receber um token de sessão. Passe um objeto externalIds opcional se quiser anexar os seus próprios identificadores.

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

// Ou chame sem argumentos
// const result = await sendClientTelemetry();

if (result.errors) {
  console.error(result.errors);
  throw new Error("A solicitação de telemetria falhou.");
}

const token = result.token;

Parâmetros

ParâmetroTipoObrigatórioDescrição
externalIdsRecord<string, string>NãoIdentificadores opcionais que você quer anexar ao fingerprint, como accountId, orderId ou email.

Para receber o sinal throwawayEmail, passe o endereço de e-mail neste objeto usando a chave email.

Valor de retorno

A função retorna um objeto JSON (já analisado, então você não precisa chamar .json() nele):

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

O campo token contém o token de sessão de fingerprint. Se a coleta de telemetria encontrar problemas, o objeto também inclui um array opcional errors que você pode registrar. Extraia result.token e envie apenas essa string do token de sessão para o seu backend.

Recupere dados de fingerprint a partir do seu backend

Gere uma chave de API de Device Intelligence apenas para backend no dashboard do cside, armazene-a como segredo do servidor e use-a para trocar o token de sessão com o cside. A chave de API é exibida apenas uma vez e não deve ser exposta em código de navegador.

if (!token) {
  throw new Error("O token de sessão de fingerprint não foi retornado.");
}

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();

Corpo da requisição

Envie JSON no formato { "token": "<token de sessão>" }, em que o valor é result.token da etapa anterior.

Opções de lookup do token

Use o endpoint autenticado para trocas server-to-server em produção. Os endpoints públicos continuam disponíveis quando uma integração precisa especificamente do fluxo de lookup não autenticado.

EndpointRespostaUse quando
/token/v2/verifyJSONVocê precisar de recuperação backend autenticada com uma chave de API de Device Intelligence.
/token/v2/device/entriesJSONVocê precisar de avaliações concluídas para o mesmo ID de dispositivo de um token de sessão.
/token/v1/clientJSONVocê precisar do payload público de resposta de fingerprinting.
/token/v1/clientIdTexto simplesVocê precisar apenas do fingerprint ID estável do fluxo público de lookup.

/token/v2/verify retorna 202 Accepted com { "status": "pending" } durante o processamento, e depois 200 OK com o payload concluído. /token/v2/device/entries aceita { "token": "...", "limit": 100, "offset": 0 } e retorna { "device_id": "...", "entries": [...], "next_offset": 100, "has_more": true }, em que cada entrada usa o formato de resposta de /token/v2/verify. limit é opcional, o padrão é 500 e o limite máximo é 500. O endpoint clientId retorna apenas o identificador único do fingerprint em texto simples. Se não existir um identificador único do fingerprint para o token de sessão, ele retorna 404.

Exemplo de requisição no 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 a resposta do backend

Seu backend retorna uma resposta JSON contendo o resultado da identificação e sinais associados. Consulte a referência completa de resposta abaixo.

Referência de resposta

Esta referência de resposta se aplica a /token/v1/client. O endpoint autenticado /token/v2/verify retorna um payload JSON plano com status, created_at, updated_at e os campos de enriquecimento disponíveis, como vpn_evaluation, fingerprint, geo_data, ip_enrichment, bot, network_client_metrics e fingerprint_enrichment. O endpoint autenticado /token/v2/device/entries retorna um device_id, um array entries com esses mesmos payloads planos para avaliações concluídas associadas a esse ID de dispositivo e campos de paginação como limit, offset, next_offset e has_more.

A resposta do backend inclui identificação do visitante, detalhes do navegador, inteligência de IP e um conjunto de sinais de detecção de fraude.

Campos de nível superior

CampoTipoDescrição
linked_idstringUm identificador que você associou a este visitante.
tagsobjectMetadados personalizados anexados ao evento.
timestampnumberTimestamp Unix (milissegundos) do evento.
event_idstringIdentificador único para este evento de fingerprinting.
urlstringA URL da página onde o fingerprint foi coletado.
ip_addressstringO endereço IP do visitante.
user_agentstringA string User-Agent bruta do navegador do visitante.
client_referrerstringA URL de referência da página.

browser_details

Detalhes sobre o navegador e sistema operacional do visitante.

CampoTipoDescrição
browser_namestringNome do navegador (ex.: "Chrome").
browser_major_versionstringNúmero da versão principal.
browser_full_versionstringString da versão completa.
osstringNome do sistema operacional.
os_versionstringVersão do sistema operacional.
devicestringTipo de dispositivo (ex.: "Other", "Mobile").

identification

O resultado principal de identificação do visitante.

CampoTipoDescrição
visitor_idstringUm identificador único e estável para este visitante.
confidence.scorenumberPontuação de confiança entre 0 e 1.
confidence.versionstringVersão do modelo de confiança utilizado.
visitor_foundbooleanSe este visitante foi visto anteriormente.
first_seen_atnumberTimestamp Unix (ms) da primeira identificação do visitante.
last_seen_atnumberTimestamp Unix (ms) da identificação mais recente do visitante.

supplementary_id_high_recall

Uma identificação secundária otimizada para maior recall (menos falsos negativos) ao custo de precisão ligeiramente menor.

CampoTipoDescrição
visitor_idstringIdentificador do visitante sob o modelo de alto recall.
visitor_foundbooleanSe este visitante foi encontrado.
confidence.scorenumberPontuação de confiança entre 0 e 1.
confidence.versionstringVersão do modelo de confiança utilizado.
first_seen_atnumberTimestamp Unix (ms) da primeira identificação.
last_seen_atnumberTimestamp Unix (ms) da identificação mais recente.

proximity

Dados de geolocalização de proximidade do visitante.

CampoTipoDescrição
idstringIdentificador de localização de proximidade.
precision_radiusnumberRaio de precisão em quilômetros.
confidencenumberPontuação de confiança para a estimativa de proximidade.

ip_info

Informações do endereço IP do visitante.

CampoTipoDescrição
v4.addressstringEndereço IPv4.
v6.addressstringEndereço IPv6.

ip_blocklist

Se o IP do visitante aparece em listas de bloqueio conhecidas.

CampoTipoDescrição
email_spambooleanIP está associado a spam de e-mail.
attack_sourcebooleanIP é uma fonte de ataque conhecida.
tor_nodebooleanIP é um nó de saída Tor.

Sinais de fraude e ambiente

Sinais indicando atributos suspeitos ou notáveis do visitante.

Alguns destes não são preenchidos atualmente

root_apps, emulator, jailbroken, frida, mitm_attack, replayed e high_activity_device estão presentes na resposta mas nunca são definidos. Retornam sempre false. Não construa lógica de detecção ou de fraude sobre eles. Cada um está marcado na tabela.

CampoTipoDescrição
bot.resultstringStatus da detecção de bot. Use "detected" ou "not_detected".
bot.scorenumberPontuação numérica de bot.
bot.signalstring[]Sinais que contribuíram para a detecção de bot.
root_appsbooleanDispositivo tem aplicativos root/superusuário instalados. Não preenchido atualmente; sempre false.
emulatorbooleanDispositivo é um emulador. Não preenchido atualmente; sempre false.
proxybooleanVisitante está usando um proxy.
proxy_confidencestringNível de confiança: "low", "medium" ou "high".
vpnbooleanVisitante está usando uma VPN.
vpn_confidencestringNível de confiança: "low", "medium" ou "high".
vpn_origin_timezonestringFuso horário IANA informado pelo navegador.
vpn_origin_countrystringPaís inferido a partir do enriquecimento de IP ou "unknown".
vpn_methodsobjectSinais no nível de método relacionados ao uso de VPN e ao tráfego anonimizado. Consulte a subseção abaixo.
incognitobooleanNavegador está no modo anônimo/privado.
tamperingbooleanAtributos do navegador foram adulterados.
jailbrokenbooleanDispositivo está com jailbreak. Não preenchido atualmente; sempre false.
fridabooleanKit de instrumentação Frida detectado. Não preenchido atualmente; sempre false.
virtual_machinebooleanVisitante está executando em uma máquina virtual.
developer_toolsbooleanFerramentas de desenvolvedor do navegador estão abertas.
mitm_attackbooleanAtaque man-in-the-middle detectado. Não preenchido atualmente; sempre false.
replayedbooleanA requisição é uma repetição de uma requisição anterior. Não preenchido atualmente; sempre false.
high_activity_devicebooleanNúmero incomumente alto de identificações deste dispositivo. Não preenchido atualmente; sempre false.
throwawayEmailbooleantrue quando o identificador email enviado é um endereço de e-mail descartável ou temporário.

vpn_methods

vpn_methods contém sinais no nível de método relacionados ao uso de VPN e ao tráfego anonimizado. Use o campo de nível superior vpn como veredito geral. O valor de um método pode ser true quando vpn é false, por exemplo, quando o cside detecta tráfego de proxy ou relay que o modelo de VPN não classifica como VPN.

CampoTipoDescrição
timezone_mismatchbooleanO fuso horário do navegador não corresponde à geolocalização do IP.
public_vpnbooleanO IP corresponde a um sinal conhecido de VPN pública ou de data center.
auxiliary_mobilebooleanReservado para detecção específica de dispositivos móveis. Atualmente é false para eventos do navegador.
os_mismatchbooleanO sistema operacional informado pelo navegador não corresponde à assinatura de rede.
relaybooleanO cside detectou um relay que anonimiza o tráfego, um proxy ou tráfego semelhante ao de um relay.
Nomes de campos achatados

Alguns pipelines de dados adicionam prefixos e achatam os campos aninhados. Nesses conjuntos de dados, vpn_methods.relay pode aparecer como cside_fingerprint_vpn_methods_relay.

raw_device_attributes

Componentes de fingerprint de baixo nível do navegador.

CampoTipoDescrição
mathstringHash da saída do motor matemático.
vendorstringString do fornecedor de GPU/gráficos.

Exemplo completo de resposta

{
  "linked_id": "somelinkedId",
  "tags": {},
  "timestamp": 1708102555327,
  "event_id": "1708102555327.NLOjmg",
  "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": "https://example.com/blog/my-article",
  "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.97, "version": "1.1" },
    "visitor_found": false,
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "supplementary_id_high_recall": {
    "visitor_id": "3HNey93AkBW6CRbxV6xP",
    "visitor_found": true,
    "confidence": { "score": 0.97, "version": "1.1" },
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "proximity": {
    "id": "w1aTfd4MCvl",
    "precision_radius": 10,
    "confidence": 0.95
  },
  "bot": {
    "result": "not_detected",
    "score": 0,
    "signal": []
  },
  "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",
  "vpn": false,
  "vpn_confidence": "high",
  "vpn_origin_timezone": "Europe/Amsterdam",
  "vpn_origin_country": "NL",
  "vpn_methods": {
    "timezone_mismatch": false,
    "public_vpn": false,
    "auxiliary_mobile": false,
    "os_mismatch": false,
    "relay": true
  },
  "incognito": false,
  "tampering": false,
  "jailbroken": false,
  "frida": false,
  "virtual_machine": false,
  "developer_tools": false,
  "mitm_attack": false,
  "replayed": false,
  "high_activity_device": false,
  "throwawayEmail": false,
  "raw_device_attributes": {
    "math": "5f030fa7d2e5f9f757bfaf81642eb1a6",
    "vendor": "Google Inc."
  }
}
Was this page helpful?