Skip to main content
Fluxo de integração
Language

Events API

Integre o fingerprinting do cside 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 fingerprinting do cside: 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 script de fingerprinting do cside no <head> da sua página. Ele deve ser carregado antes de chamar qualquer função de fingerprinting.

<script
  src="https://<YOUR_SUBDOMAIN>.csidefd.com/client.js"
  referrerpolicy="origin"
  data-src="6">
</script>

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 fingerprint 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 fingerprint.
/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.

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.
emulatorbooleanDispositivo é um emulador.
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".
incognitobooleanNavegador está no modo anônimo/privado.
tamperingbooleanAtributos do navegador foram adulterados.
jailbrokenbooleanDispositivo está com jailbreak.
fridabooleanKit de instrumentação Frida detectado.
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.
replayedbooleanA requisição é uma repetição de uma requisição anterior.
high_activity_devicebooleanNúmero incomumente alto de identificações deste dispositivo.
throwawayEmailbooleantrue quando o identificador email enviado é um endereço de e-mail descartável ou temporário.

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",
  "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?