Skip to main content
Integratieflow
Language

Events API

Integreer cside Device Intelligence in uw applicatie. Verzamel browsersignalen, genereer sessietokens en haal gedetailleerde bezoekersinformatie op via uw backend.

Deze handleiding begeleidt u bij het integreren van de cside Device Intelligence Events API van begin tot eind: het laden van het clientscript, het genereren van een sessietoken, het verzenden naar uw backend en het interpreteren van de respons.

Integratieflow

Voeg het script toe aan uw pagina

Als uw app met een bundler wordt gebouwd, installeer dan het npm-pakket en roep initDeviceIntelligence({ teamID }) zo vroeg aan als uw app toelaat. Neem anders de fail-open browser-bootstrap bovenaan de <head> op, vóór andere scripts, en vervang de waarde van script.src door de team-URL uit het cside-dashboard. De bootstrap laadt client.js asynchroon, zet vroege aanroepen in een wachtrij en wijst ze af als cside niet beschikbaar is of een time-out krijgt, zodat uw pagina blijft werken.

Verzend telemetry en ontvang een sessietoken

Zodra het script is geladen, wordt de globale functie sendClientTelemetry beschikbaar (het npm-pakket geeft dezelfde functie terug uit initDeviceIntelligence). Het laden van het script maakt niet zelf een sessiefingerprint. Roep sendClientTelemetry(externalIds?) aan om telemetry naar https://edge.csidefd.com/client te verzenden en een sessietoken te ontvangen. Geef optioneel een externalIds-object mee als u eigen identifiers wilt koppelen.

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

// Of roep de functie zonder argumenten aan
// const result = await sendClientTelemetry();

if (result.errors) {
  console.error(result.errors);
  throw new Error("Telemetry-aanvraag is mislukt.");
}

const token = result.token;

Parameters

ParameterTypeVereistBeschrijving
externalIdsRecord<string, string>NeeOptionele identifiers die u aan de fingerprint wilt koppelen, zoals userId, orderId, paymentCardId of email.

Geef het e-mailadres in dit object mee met de sleutel email om het wegwerp-e-mailsignaal (fingerprint_enrichment.throwaway_email_detected op /token/v2/verify) te ontvangen. De accountregels en de Identity graph gebruiken userId als sleutel (de Identity graph accepteert ook teamId of customerId), en de card-testing-regel gebruikt paymentCardId; zie Datapoints ophalen voor het formaat.

Retourwaarde

De functie retourneert een JSON-object (al geparseerd, dus u hoeft er geen .json() op aan te roepen):

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

Het veld token bevat het fingerprint-sessietoken. Als het verzamelen van telemetry op problemen stuit, bevat het object ook een optionele errors-array die u kunt loggen; met het npm-pakket wordt sendClientTelemetry nooit afgewezen, maar opgelost met { token: null, errors }. Haal result.token eruit en stuur alleen die sessietokenstring naar uw backend.

Haal fingerprintdata op vanuit uw backend

Genereer een backend-only Device Intelligence API-sleutel in het cside-dashboard, sla deze op als server-side secret en gebruik deze om het sessietoken met cside uit te wisselen. De API-sleutel wordt maar één keer getoond en mag niet in browsercode worden blootgesteld.

if (!token) {
  throw new Error("Fingerprint-sessietoken is niet geretourneerd.");
}

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

Verzoekbody

Stuur JSON in de vorm { "token": "<sessietoken>" }, waarbij de waarde result.token uit de vorige stap is. Alleen de /token/v2/*-endpoints accepteren JSON; de /token/v1/*-endpoints accepteren het ruwe sessietoken als text/plain-body.

Token lookup-opties

Gebruik het geauthenticeerde endpoint voor server-to-serveruitwisselingen in productie. De publieke endpoints blijven beschikbaar wanneer een integratie specifiek de niet-geauthenticeerde lookupflow nodig heeft.

EndpointAuthRequestbodyGebruik wanneer
/token/v2/verifyAPI-sleutelJSON { "token" }U geauthenticeerde backendopvraging met een Device Intelligence API-sleutel nodig hebt.
/token/v2/device/entriesAPI-sleutelJSON { "token", "limit", "offset" }U voltooide evaluaties nodig hebt voor dezelfde device-ID als een sessietoken.
/token/v1/clientGeenRuw token, text/plainU de publieke fingerprinting response payload nodig hebt.
/token/v1/clientIdGeenRuw token, text/plainU alleen de stabiele fingerprint-ID uit de publieke lookupflow nodig hebt.

Elk endpoint retourneert 202 Accepted met { "status": "pending" } zolang de evaluatie nog wordt verwerkt, daarna 200 OK zodra die klaar is. /token/v2/device/entries accepteert { "token": "...", "limit": 100, "offset": 0 } en retourneert { "device_id": "...", "entries": [...], "next_offset": 100, "has_more": true }, waarbij elke entry dezelfde responsevorm gebruikt als /token/v2/verify. limit is optioneel, is standaard 500 en heeft een maximum van 500. /token/v1/clientId retourneert JSON { "status": "completed", "device_id": "..." }. Als er geen fingerprint-ID voor het sessietoken bestaat, retourneert het 404.

Fouten en rate limits

Foutresponses bevatten een JSON-body { "error": "<bericht>", "code": <HTTP-status> }:

StatusBetekenis
400Ongeldige body, of een sessietoken dat niet kan worden gedecodeerd.
401Ontbrekende of ongeldige API-sleutel, een verlopen token, of een token dat voor een ander team is uitgegeven dan de API-sleutel.
404Er bestaat geen evaluatie voor het token (token not found), of, op /token/v1/clientId, geen fingerprint-ID (fingerprint id not found).
429Rate limit overschreden. De response bevat een retry-after: 60-header. De standaardlimiet is 1.000 requests per minuut per team.

Een voltooide evaluatie die is mislukt, is geen HTTP-fout: die retourneert 200 OK met "status": "failed" en een error_message-veld. Controleer status voordat u verrijkingsvelden leest.

Voorbeeld van een backendrequest

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

Interpreteer de backendrespons

Uw backend retourneert een JSON-respons met het identificatieresultaat en bijbehorende signalen. Zie de volledige responsreferentie hieronder.

/token/v2/verify-response

Het geauthenticeerde endpoint retourneert een vlakke JSON-payload. Elke entry in /token/v2/device/entries gebruikt dezelfde vorm.

VeldTypeBeschrijving
statusstringpending, completed of failed. Verrijkingsvelden zijn alleen aanwezig bij completed.
error_messagestringWaarom de evaluatie is mislukt. Alleen aanwezig wanneer status failed is.
created_atnumberUnix-tijdstempel (milliseconden) waarop de evaluatie is aangemaakt.
updated_atnumberUnix-tijdstempel (milliseconden) van de laatste update.
fingerprintobjectDe volledige apparaatfingerprint: browser-, hardware-, rendering-, omgevings- en automatiseringssignalen, plus de external_ids die u hebt gekoppeld. Dezelfde velden als het fingerprint-object van de S3-export.
network_client_metricsobjectTCP- en TLS-kenmerken van de verbinding.
geo_dataobjectGeolocatie op stadsniveau voor het bezoeker-IP.
ip_enrichmentobjectASN-, geo- en privacygegevens (hosting, proxy, relay, tor, vpn, datacentersignalen) voor het bezoeker-IP.
vpn_evaluationobjectis_vpn, vpn_probability, vpn_confidence, reasons, features en context.
botobjectHet botoordeel: is_bot, bot_probability, bot_confidence, bot_agent_id, reasons, scores en drempelwaarden per model, en session_event_count. Zie AI-agentdetectie.
fingerprint_enrichmentobjectSignalen afgeleid van de fingerprint. throwaway_email_detected is true wanneer de externe ID email een wegwerpdomein gebruikt.
rule_evaluationsobjectVerouderde regeluitkomsten (rules, policy_version). Leeg op evaluaties die na 2026-08-27 zijn aangemaakt; blijft in de response staan zodat oudere records nog decoderen.
rule_evaluations_v2objectUitkomsten van de rule engine: een values-array waarin elk item één evaluation bevat met rule_slug, rule_version, outcome, evaluated_as (live of shadow), transition en evaluated_at.

De geneste objecten komen overeen met de recordstructuur van de S3-export, waar elk veld in detail is gedocumenteerd.

rule_evaluations_v2

De tabel hierboven vat dit veld samen. Het bevat de uitkomst van elke regel die voor het domein is gedraaid, drie niveaus diep genest onder rule_evaluations_v2.values[].evaluation, en de waarden zijn integers in plaats van strings, dus die zijn het waard om uit te schrijven. Het maakt geen deel uit van de /token/v1/client-payload die hieronder is gedocumenteerd.

VeldTypeBeschrijving
rule_slugstringDe identifier van de regel, bijvoorbeeld "account_shared_detected".
outcomenumberHet evaluatieresultaat. Zie de tabel hieronder.
evaluated_asnumberDe levenscyclusstatus van de regel op het moment van evaluatie. Zie de tabel hieronder.
transitionnumberOf de uitkomst bij deze evaluatie is veranderd, los van wat de uitkomst is. 2 betekent ongewijzigd sinds de vorige evaluatie, 3 betekent dat deze bij deze evaluatie is veranderd. Gecombineerd met outcome: 1 betekent een 3 dat de regel net begon te matchen; gecombineerd met outcome: 2 betekent het dat de regel net stopte met matchen. 1 wordt nooit geproduceerd.
key.key_hashstringEen hash van de waarde waarop de regel keyde. Dit is een JSON-string, geen getal, zodat deze JSON.parse doorstaat zonder precisieverlies. Het bevat niet de account-id zelf.
event_time, evaluated_atobject{ seconds, nanos }, anders dan de created_at en updated_at op het hoogste niveau van de response, die milliseconde-tijdstempels zijn.

outcome en evaluated_as zijn onbewerkte integers, geen strings:

outcomeBetekenisWanneer u dit ziet
0Niet gespecificeerdWordt niet geproduceerd
1TrueContinu, bij elke evaluatie zolang de voorwaarde geldt
2FalseContinu, bij elke evaluatie zolang dat niet zo is. Dit is de stabiele toestand voor een gezonde, niet-matchende regel, geen zeldzame overgang
3Ontbrekend (structureel)Continu, bij elke evaluatie waarbij de regel het veld dat hij nodig heeft niet kan lezen, zoals een verkeerde external-id-key. Aanhoudend, geen eenmalige uitschieter
4Pending (tijdelijk)Wanneer een vereiste meting wel bestaat maar nog niet is opgewarmd. Anders dan een status op het hoogste niveau van pending: hetzelfde token opnieuw opvragen lost dit niet op, maar een latere evaluatie van dezelfde entiteit kan 1 of 2 teruggeven
evaluated_asBetekenis
1Draft
2Shadow (een experiment; kan op elk moment verschijnen)
3Active
4Archived

Elke geëvalueerde, gepubliceerde regel rapporteert bij elk event een entry, met welke uitkomst dan ook. rule_evaluations_v2 is een registratie van wat is geëvalueerd, geen notificatiestream, dus outcome: 2 (false) en outcome: 3 (ontbrekend) worden niet onderdrukt: ze rijden net zo betrouwbaar mee in de array als outcome: 1. transition vertelt u of die uitkomst is veranderd sinds de vorige evaluatie.

Een afwezige entry voor een gegeven rule_slug betekent dat de regel helemaal niet is geëvalueerd: hij is niet geactiveerd voor het domein, het is een meet-only regel die niet publiceert, of er liep geen evaluatie voor dat event. Het betekent niet “geëvalueerd als false”, dat geval is outcome: 2, net als al het andere aanwezig in de array. Zie Accountdeling detecteren voor een uitgewerkt voorbeeld dat dit veld end-to-end uitleest.

/token/v1/client-responsreferentie

Deze referentie geldt voor het publieke /token/v1/client-endpoint. Het is een oudere, vlakkere weergave van dezelfde evaluatie. Veel van de velden zijn vaste placeholders die voor achterwaartse compatibiliteit zijn behouden; de callout hieronder somt ze op. Gebruik voor nieuwe integraties bij voorkeur /token/v2/verify.

Altijd placeholderwaarden op v1

Deze velden zitten in elke response, maar worden nooit berekend:

  • identification.confidence en supplementary_id_high_recall.confidence zijn altijd { "score": 0.0, "version": "unknown" }
  • identification.visitor_found is altijd false; first_seen_at en last_seen_at zijn gelijk aan de timestamp van het evenement
  • proximity is altijd { "id": "unknown", "precision_radius": 0, "confidence": 0.0 }
  • client_referrer is altijd "unknown"
  • ip_blocklist.email_spam en ip_blocklist.attack_source zijn altijd false (alleen tor_node wordt gevuld)
  • raw_device_attributes.math is altijd "unknown"

Bouw hier geen detectie- of fraudelogica op.

Uitleg bij regels

Gepubliceerde regels met een waar resultaat kunnen rule_evaluations_v2.values[].evaluation.explanation.nodes bevatten. Elke bezochte node kan node_id, outcome, de getypeerde waarde observed, subject en compared_to beschrijven. Uitleg is optioneel; onware, wachtende en ontbrekende resultaten bevatten deze niet. Ontbrekende uitleg verandert het vastgelegde resultaat niet.

Behandel subject en compared_to als weergavetekst, niet als een formaat om te ontleden. Gebruik node_id, getypeerde observed-waarden en outcome in uw code. Lees deze velden uit rule_evaluations_v2, niet uit het oude object rule_evaluations. Zie de Events API voor resultaatwaarden en het verschil met het oude formaat.

Velden op het hoogste niveau

VeldTypeBeschrijving
linked_idstringDe browsersessie-ID, of de event-ID wanneer er geen sessie-ID is vastgelegd. Het is geen identifier die u hebt meegegeven; uw externalIds staan onder tags als external_id:<key>.
tagsobjectEen diagnostische map van cside, geen klantmetadata: domain_id, team_id, request_id, session_id, fingerprint_match, network_match, ondersteuningsvlaggen voor detecties zoals incognito_support, en uw externalIds als external_id:<key>-vermeldingen.
timestampnumberUnix-tijdstempel (milliseconden) van het evenement.
event_idstringUnieke identificatie voor dit fingerprinting-evenement.
urlstringDe pagina-URL waar de fingerprint is verzameld.
ip_addressstringHet IP-adres van de bezoeker.
user_agentstringDe onbewerkte User-Agent-string van de browser van de bezoeker.
client_referrerstringAltijd "unknown".
statusstringcompleted of failed.
error_messagestringAanwezig wanneer status failed is.
domain_id, team_id, session_id, request_idstringEvaluatiemetadata gekopieerd uit het interne record.
created_atstringEvaluatietijd als RFC 3339-string (anders dan /token/v2/verify, dat milliseconden gebruikt).

De response bevat ook de objecten network_client_metrics, vpn_evaluation, proxy_details, tampering_details, tampering_anomaly_score, velocity en sdk. De tellingen in velocity zijn alleen afgeleid van het huidige evenement (het venster events.24_hours is de enige historische waarde); sdk rapporteert platform: "js" met version: "unknown". Ze staan in het volledige voorbeeld, maar maken geen deel uit van het stabiele contract.

browser_details

Details over de browser en het besturingssysteem van de bezoeker.

VeldTypeBeschrijving
browser_namestringBrowsernaam (bijv. "Chrome").
browser_major_versionstringHoofdversienummer.
browser_full_versionstringVolledige versiereeks.
osstringNaam van het besturingssysteem.
os_versionstringVersie van het besturingssysteem.
devicestringApparaattype (bijv. "Other", "Mobile").

identification

Het primaire identificatieresultaat van de bezoeker.

VeldTypeBeschrijving
visitor_idstringDe stabiele device-ID voor deze bezoeker. Dit is het enige berekende veld in het object.
confidence.scorenumberAltijd 0.0.
confidence.versionstringAltijd "unknown".
visitor_foundbooleanAltijd false.
first_seen_atnumberAltijd gelijk aan timestamp.
last_seen_atnumberAltijd gelijk aan timestamp.

supplementary_id_high_recall

Een secundaire identifier afgeleid van uw externalIds (met voorkeur voor userId, daarna accountId), zodat één account over meerdere apparaten kan worden gekoppeld. Valt terug op de device-ID wanneer er geen externe ID is gekoppeld.

VeldTypeBeschrijving
visitor_idstringHash van de gekozen externe ID, of de device-ID wanneer er geen is gekoppeld.
visitor_foundbooleantrue wanneer een externe ID is gekoppeld, anders false.
confidence.scorenumberAltijd 0.0.
confidence.versionstringAltijd "unknown".
first_seen_atnumberAltijd gelijk aan timestamp.
last_seen_atnumberAltijd gelijk aan timestamp.

proximity

Wordt niet gevuld. Altijd { "id": "unknown", "precision_radius": 0, "confidence": 0.0 }. Gebruik geo_data en ip_enrichment op /token/v2/verify voor locatie.

ip_info

IP-adresinformatie van de bezoeker.

VeldTypeBeschrijving
v4.addressstringIPv4-adres.
v6.addressstringIPv6-adres.

ip_blocklist

Of het IP-adres van de bezoeker op bekende blokkeerlijsten staat.

VeldTypeBeschrijving
email_spambooleanWordt niet gevuld; altijd false.
attack_sourcebooleanWordt niet gevuld; altijd false.
tor_nodebooleanIP is een Tor-exitnode.

Fraude- en omgevingssignalen

Signalen die verdachte of opvallende bezoekerskenmerken aangeven.

Sommige hiervan worden momenteel niet gevuld

root_apps, emulator, jailbroken, frida, mitm_attack, replayed, high_activity_device, cloned_app, privacy_settings en location_spoofing zitten in het antwoord maar worden nooit gezet. Ze geven altijd false terug (factory_reset_timestamp is altijd 0). Bouw hier geen detectie- of fraudelogica op. Elk is gemarkeerd in de tabel hieronder.

VeldTypeBeschrijving
botstringEen platte string die alleen van de User-Agent is afgeleid: "detected" wanneer die bot, crawler, spider of headless bevat; "unknown" wanneer er geen User-Agent is vastgelegd; anders "not_detected". Dit is niet het botmodel. Gebruik bot.is_bot op /token/v2/verify voor het echte oordeel. Zie AI-agentdetectie.
root_appsbooleanApparaat heeft root-/supergebruikersapps geïnstalleerd. Wordt momenteel niet gevuld; altijd false.
emulatorbooleanApparaat is een emulator. Wordt momenteel niet gevuld; altijd false.
proxybooleanBezoeker gebruikt een proxy, relay of datacenter-IP.
proxy_confidencestring"low", "medium" of "high" wanneer proxy true is; anders "unknown".
vpnbooleanBezoeker gebruikt een VPN.
vpn_confidencestring"low", "medium" of "high" wanneer het VPN-model is uitgevoerd; anders "unknown".
vpn_origin_timezonestringIANA-tijdzone die door de browser is gerapporteerd.
vpn_origin_countrystringLand dat via IP-verrijking is afgeleid, of "unknown" als het niet kan worden bepaald.
vpn_methodsobjectSignalen per detectiemethode voor VPN- en geanonimiseerd verkeer. Zie de subsectie hieronder.
incognitobooleanBrowser is in incognito-/privémodus.
tamperingbooleanBrowserkenmerken zijn gemanipuleerd.
jailbrokenbooleanApparaat is gejailbreakt. Wordt momenteel niet gevuld; altijd false.
fridabooleanFrida-instrumentatietoolkit gedetecteerd. Wordt momenteel niet gevuld; altijd false.
virtual_machinebooleanBezoeker draait in een virtuele machine.
developer_toolsbooleanBrowser-ontwikkelaarstools zijn geopend.
mitm_attackbooleanMan-in-the-middle-aanval gedetecteerd. Wordt momenteel niet gevuld; altijd false.
replayedbooleanHet verzoek is een herhaling van een eerder verzoek. Wordt momenteel niet gevuld; altijd false.
high_activity_devicebooleanOngebruikelijk hoog aantal identificaties van dit apparaat. Wordt momenteel niet gevuld; altijd false.

Het wegwerp-e-mailsignaal maakt geen deel uit van deze response. Lees in plaats daarvan fingerprint_enrichment.throwaway_email_detected uit /token/v2/verify.

vpn_methods

vpn_methods bevat signalen per detectiemethode die verband houden met VPN- en geanonimiseerd verkeer. Gebruik het veld vpn op hoofdniveau als eindoordeel. Een methode kan true zijn terwijl vpn false is, bijvoorbeeld bij proxy- of relayverkeer dat niet als VPN is geclassificeerd.

VeldTypeBeschrijving
timezone_mismatchbooleanDe door de browser gerapporteerde tijdzone komt niet overeen met de geografische IP-locatie.
public_vpnbooleanHet IP-adres wijst op een bekende openbare VPN-provider of een datacenter.
auxiliary_mobilebooleanGereserveerd voor mobiele detectie en momenteel false voor browsergebeurtenissen.
os_mismatchbooleanHet door de browser gerapporteerde besturingssysteem komt niet overeen met de netwerksignatuur.
relaybooleanEr is anonimiserend relayverkeer, proxyverkeer of vergelijkbaar verkeer gedetecteerd.
Afgevlakte veldnamen

Sommige datapipelines voegen voorvoegsels toe en vlakken geneste velden af. In die datasets kan vpn_methods.relay verschijnen als cside_fingerprint_vpn_methods_relay.

raw_device_attributes

Laag-niveau browserfingerprint-componenten.

VeldTypeBeschrijving
mathstringWordt niet gevuld; altijd "unknown".
vendorstringGPU-/grafische leveranciersreeks.

Volledig responsvoorbeeld

Een voltooide /token/v1/client-response. Geneste objecten die geen deel uitmaken van het stabiele contract (network_client_metrics, vpn_evaluation, velocity) zijn verkort.

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