01 · Device intelligence pour la prévention de la fraude Les parcours que vous taguez

API de device intelligence et de risque de fraude pour le web Évaluez chaque accès. Décidez sur des preuves.

Un tag par écran, au choix

Un script sur votre site lit le navigateur et l’appareil en un dixième de seconde environ sur ordinateur. Un appel signé depuis votre backend, avec un tag que vous nommez, obtient la réponse immédiatement : un score de confiance, la couverture des preuves et 13 indicateurs, des bots et de l’automatisation au navigateur falsifié et aux émulateurs, jusqu’au VPN, au proxy et à Tor, avec la raison de chaque recommandation. Repérez la prise de contrôle de compte, les faux comptes et la fraude aux retraits sur des preuves, pas sur des suppositions. Nous recommandons. Vous décidez et vous agissez.

Réponse synchrone sur chaque écran que vous taguez · Mode shadow avant toute influence sur une décision · Vos règles, vos listes, votre décision

Comment lire cette réponse · exemple v1.1/login_completed

  1. Pourquoi cette recommandation

    ALLOWreason_codes · NO_ADVERSE_INDICATOR_MATCH

    Aucun indicateur pris en compte par la politique n’a été détecté. Exemple du contrat : la politique gérée de FingerTrackID recommande MONITOR à tout score ; ALLOW vient d’une tranche de score que votre entreprise a définie dans ses propres règles de risque. Décidé sous policy-login-v1.

  2. Ce que le score est, et ce qu’il n’est pas

    trust_score 1000–100 · plus haut, c’est mieux

    La confiance dans cet accès sous cette version de politique, pas une probabilité de fraude. Hors de COMPLETED, il vaut null, jamais une valeur par défaut.

  3. Ce qui a pu être observé

    evidence_coverage 100limitation_codes · aucun

    La part des vérifications attendues qui ont été exécutées. Une preuve manquante serait nommée ici : elle réduit la couverture et n’est jamais une raison de risque.

  4. Ensuite, c’est à vous

    customer_actionpuis le résultat

    Votre backend décide et agit, puis déclare ce qu’il a fait et le résultat réel. Nous ne bloquons jamais et ne retenons jamais d’argent.

POST /v1/assessments → 201

event-assessment.v1.1 · exemple du contrat

assessment_statusTerminéeévaluation terminée
trust_score1000–100 · plus haut, c’est mieux
device_match_confidence0.980–1 · force de la correspondance
evidence_coverage1000–100 · suffisance
ALLOWrecommendation_basis · EVALUATIONrecommandation, pas action
reason_codes NO_ADVERSE_INDICATOR_MATCH  ·  limitation_codes none
{  "schema_version": "event-assessment.v1.1",  "tag": "login",  "assessment_status": "COMPLETED",  "trust_score": 100,  "device_match_confidence": 0.98,  "evidence_coverage": 100,  "signals": [ … 13 objects ],  "limitation_codes": [],  "reason_codes": ["NO_ADVERSE_INDICATOR_MATCH"],  "recommended_action": "ALLOW",  "recommendation_basis": "EVALUATION",  "policy_version": "policy-login-v1"  // … 21 more fields in the full response: ids, snapshot, versions, timestamps}
Réponse complète · 54 lignes · 13 signaux, les non détectés repliés
1{2  "schema_version": "event-assessment.v1.1",3  "assessment_id": "01996f2a-0000-7000-8000-000000000101",4  "assessment_version": 1,5  "supersedes_assessment_id": null,6  "business_event_id": "01996f2a-0000-7000-8000-000000000102",7  "external_event_id": "login_20260904_000001",8  "tag": "login",9  "assessment_status": "COMPLETED",10  "retryable": false,11  "trust_score": 100,12  "device_intelligence_snapshot_id": "01996f2a-0000-7000-8000-000000000103",13  "device_intelligence_snapshot_version": 1,14  "device_id": "dev_0123456789abcdefghij",15  "device_match_confidence": 0.98,16  "evidence_coverage": 100,17  "data_freshness": {18    "evidence_cutoff_at": "2026-09-04T12:00:00Z",19    "oldest_required_observed_at": "2026-09-04T11:59:59Z",20    "maximum_required_age_ms": 300000,21    "all_required_fresh": true22  },23  "signals": [24    { "signal_code": "ANTI_FINGERPRINTING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },25    { "signal_code": "BOT_AUTOMATION", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },26    { "signal_code": "BROWSER_SPOOFING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },27    { "signal_code": "EMULATED_ENVIRONMENT", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },28    { "signal_code": "PRIVATE_BROWSING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },29    { "signal_code": "BROWSER_PRIVACY_BRAVE", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },30    { "signal_code": "BROWSER_PRIVACY_SAFARI", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },31    { "signal_code": "BROWSER_PRIVACY_SAMSUNG_INTERNET", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },32    { "signal_code": "NETWORK_PROXY", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },33    { "signal_code": "NETWORK_VPN", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },34    { "signal_code": "NETWORK_HOSTING", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },35    { "signal_code": "NETWORK_TOR", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … },36    { "signal_code": "DEVICE_MULTI_USER", "signal_state": "NOT_DETECTED", "source": "DERIVED", "detector_version": "detector-web-v1", … }37  ],38  "limitation_codes": [],39  "reason_codes": ["NO_ADVERSE_INDICATOR_MATCH"],40  "recommended_action": "ALLOW",41  "recommendation_basis": "EVALUATION",42  "policy_version": "policy-login-v1",43  "fallback_policy_version": "production-observation-fallback-v2",44  "ruleset_version": "ruleset-web-v1",45  "signal_catalog_version": "signals-web-v1",46  "feature_schema_version": "features-v1",47  "resolver_version": "resolver-v1",48  "sdk_version": "web-sdk-1.0.0",49  "provider_versions": ["network-provider-2026-09-04"],50  "evidence_cutoff_at": "2026-09-04T12:00:00Z",51  "evaluated_at": "2026-09-04T12:00:01Z",52  "expires_at": "2026-09-04T12:05:00Z",53  "correlation_id": "corr-assessment-login-0001"54}

Les versions qui l’ont produite · policy-login-v1 · production-observation-fallback-v2 · ruleset-web-v1 · signals-web-v1 · features-v1 · resolver-v1 · web-sdk-1.0.0 · network-provider-2026-09-04

13 signaux dans la réponse complète · matrice des indicateurs ↓

Le produit en chiffres

La réponse

13

Indicateurs web dans chaque réponse

3

États par indicateur : détecté, non détecté, non évalué

14

Des raisons nommées pour « non évalué », jamais un faux silencieux

5

Recommandations possibles

3

Mesures séparées : confiance, correspondance d’appareil, couverture des preuves

1

Appel signé par événement évalué

La collecte

17

Sections de preuves sur le navigateur et l’appareil par collecte

48

API du navigateur confrontées à la version que le navigateur déclare

125

Millisecondes ou moins : collecte médiane sur ordinateur dans Chrome, Firefox et Safari

0

Demandes d’autorisation affichées à votre utilisateur

Vos règles et votre investigation

54

Éléments de contexte calculés dans chaque évaluation

67

Règles que votre entreprise peut pondérer dans son propre score : 13 indicateurs et 54 éléments de contexte

6

Listes de référence publiées derrière les indicateurs réseau

6

Langues de la console : anglais, portugais (Brésil et Portugal), espagnol, français, allemand

Jamais — et cela ne change selon aucune offre

  • Mouvements du pointeur et frappes au clavier : le SDK ne collecte ni les uns ni les autres
  • Pixels, échantillons audio, noms du fabricant et du moteur de rendu du GPU ou noms de polices : canvas, WebGL, WebGPU, audio et polices ne quittent le navigateur que sous forme de hashs, d’une famille de GPU et d’un masque de présence sur une liste fixe de polices
  • WebRTC, ports locaux, batterie, capteurs de mouvement : jamais lus
  • Aucune demande d’autorisation, aucune décision prise dans le navigateur, aucune action de notre part sur votre compte

— Chaque valeur est un décompte issu d’un contrat, d’un catalogue ou d’une liste versionnés, sauf le temps de collecte, mesuré sur nos machines de test avec un cache vide. Aucune ne change selon l’offre ou le volume.

03 · Cas d’usage

La prévention de la fraude sur les écrans où la décision compte.

La device intelligence répond à une question avant que votre backend ne laisse passer l’action : qu’y a-t-il vraiment de l’autre côté de cet écran ? Le même appel sert tous les parcours ; le tag que vous envoyez ne fait que le classer.

login · password_recovery · profile_change

Prévention de la prise de contrôle de compte

Un compte connu sur un appareil qu’il n’a jamais utilisé, un navigateur qui ment sur lui-même, un navigateur anti-détection, un trajet impossible dans le temps imparti. Chacun revient sous forme de preuve, pour que vous ne demandiez un second facteur que lorsque cela compte.

signup · login · checkout

Détection de bots et d’automatisation

Navigateurs headless, frameworks d’automatisation, agents IA identifiés par signature et trafic issu de datacenters. BOT_AUTOMATION et NETWORK_HOSTING disent ce qui a été vu ; la couverture dit ce qui a pu être vu.

signup · deposit · promotions

Faux comptes et multi-comptes

Comptes et personnes par appareil et par IP, rareté du profil d’appareil dans votre base, une même collecte rejouée sur un autre appareil. Du contexte que vos règles peuvent pondérer, jamais un verdict automatique : une personne peut avoir plusieurs comptes légitimes.

withdrawal · pix_transfer · trade

Fraude aux retraits, au Pix et aux virements

Un retrait dans la première heure après un nouvel appareil, des bénéficiaires partagés entre comptes, des voisins que vous avez marqués comme fraude confirmée. Votre backend retient ou examine l’argent ; nous, jamais.

tout parcours

Émulateurs et navigateurs falsifiés

Émulateurs Android et virtualisation, un GPU impossible pour le système déclaré, une version de navigateur que ses propres API contredisent. Des signaux de device fingerprinting lus sous forme de hashs et de familles, jamais de pixels bruts.

tout parcours

Détection de VPN, de proxy et de Tor

Fournisseurs de VPN connus, proxys publics, sorties Tor, plages d’hébergement et Apple iCloud Private Relay, à partir de listes publiées et actualisées de notre côté. L’anonymisation est un contexte, pas une culpabilité : votre politique décide de son poids.

04 · Les mesures

Des mesures séparées. Pas de moyenne déguisée en certitude.

Fusionner confiance, couverture et correspondance d’appareil en un seul nombre cache précisément ce que l’analyste doit voir : si le problème vient de l’accès ou des preuves.

trust_score

Confiance dans l’accès

72

0100 · plus haut, c’est mieux

Indique à quel point cet accès est digne de confiance sous cette version de politique ; le tag que vous envoyez ne le change pas. Entier de 0 à 100. N’existe que lorsque assessment_status = COMPLETED ; dans tout autre état, il vaut null, jamais une valeur par défaut.

Ni une probabilité de fraude, ni la réputation de la personne, ni une valeur par défaut pour une donnée manquante. Nous affichons 72/100, jamais « fiable à 72 % ».

device_match_confidence

Correspondance d’appareil

0.94

01 · plafond 0,98

Force des preuves que cet accès vient du même appareil déjà vu, de 0 à 1. Accompagnée de device_id, un identifiant public opaque du cluster probabiliste.

Ni l’identité de la personne, ni une preuve matérielle. Party et Account sont deux choses différentes.

evidence_coverage

Suffisance des preuves

100

0100 · 13 sur 13 évalués

La part de l’ensemble attendu de vérifications qui a pu être exécutée, de 0 à 100. Chaque indicateur applicable resté NOT_EVALUATED réduit la couverture et apparaît dans limitation_codes.

Ne fait pas partie du score. Une couverture faible ne tire pas le score vers le bas et ne le pousse pas vers le haut : elle rend l’évaluation non concluante.

Pourquoi nous ne les additionnons pas

Un score unique de « suspicion » mélange trois questions différentes : cet accès mérite-t-il la confiance ? Les preuves étaient-elles suffisantes ? Est-ce le même appareil ? Quand la réponse arrive séparée, votre analyste sait s’il faut demander un second facteur, attendre la collecte ou consulter l’historique. Quand elle arrive fusionnée, il sait seulement que « ça a fait 42 ».

05 · 13 indicateurs

Treize indicateurs. Chacun dit s’il a vu, s’il n’a pas vu, ou s’il n’a pas pu évaluer.

Chaque évaluation web renvoie les 13 codes, toujours. Ce qui change, c’est l’état de chacun, jamais la liste. Chaque indicateur a son propre détecteur versionné, et la réponse nomme la version qui l’a évalué. Un détecteur absent, expiré ou en échec ne devient jamais false.

signal_catalog web · 13 codes · exemple withdrawal_completed

  • Détecté
  • Not_detected
  • — Non_évalué

Intégrité de l’environnement

Confidentialité du navigateur · contexte neutre

Réseau · contexte neutre

Appareil

reason_codes · NETWORK_TOR_DETECTED REVIEW

Dans nos politiques gérées, Tor seul ne justifie jamais BLOCK_RECOMMENDED ; les règles que votre entreprise configure suivent les poids et le seuil qu’elle a choisis. Dans cet exemple du contrat v1, policy-withdrawal-v1 a demandé un examen du retrait, pas un blocage, et l’unique reason code dit exactement cela. La politique gérée en production aujourd’hui recommande MONITOR à tout score.

Le même indicateur, trois états

  • Détecté · NETWORK_TOR PROVIDER · ftid-network-tor.v1 · 0.9 · exemple withdrawal_completed
  • Non_détecté · NETWORK_TOR PROVIDER · ftid-network-tor.v1 · 0.9 · exemple login_completed
  • — Non_évalué · NETWORK_TOR not_evaluated_reason_code PROVIDER_UNAVAILABLE · limitation_codes ["PROVIDER_UNAVAILABLE"] · evidence_coverage 69 · exemple provider_unavailable

Un détecteur absent, expiré ou en échec ne devient jamais false. NOT_APPLICABLE ne vient que de la matrice immuable du catalogue par canal, moteur et plateforme ; votre tag ne la change jamais, et une politique désactivée, un timeout ou une panne ne prennent jamais ce raccourci.

Contexte neutre par défaut

PRIVATE_BROWSINGBROWSER_PRIVACY_BRAVEBROWSER_PRIVACY_SAFARIBROWSER_PRIVACY_SAMSUNG_INTERNETNETWORK_PROXYNETWORK_VPNNETWORK_TOR

Ils peuvent limiter ce que nous observons. La couverture ne baisse que là où une preuve n’est pas évaluée. Ce n’est pas de la fraude. Ils décrivent l’environnement ; ils n’accusent pas la personne. Dans nos politiques gérées, seuls, ils ne justifient jamais BLOCK_RECOMMENDED ; les règles que votre entreprise configure suivent les poids et le seuil qu’elle a choisis. Quand le type de réseau ne peut pas être distingué, comme derrière iCloud Private Relay d’Apple, hébergement, VPN et proxy restent tous NOT_EVALUATED avec NETWORK_TYPE_AMBIGUOUS : nous ne marquons jamais trois détections à partir d’un seul booléen.

Les preuves réseau viennent de listes de référence publiées que nous actualisons sur notre propre infrastructure : adresses de sortie Tor, plages des fournisseurs cloud, listes de réseaux d’hébergement, plages des fournisseurs de VPN et une base de proxys publics. Les adresses de vos utilisateurs ne sont jamais envoyées aux éditeurs des listes. Une liste qui dépasse son âge maximal laisse son indicateur NOT_EVALUATED, jamais NOT_DETECTED.

06 · Éléments de contexte

Au-delà des 13 indicateurs : 54 éléments de contexte. Pour l’investigation, et pour votre score si vous le choisissez.

Dans chaque évaluation, avant la réponse, nous calculons 54 éléments de contexte à partir de ce qui a été collecté et de l’historique propre à votre entreprise : qui d’autre utilise l’appareil, à quelle vitesse le compte s’active, depuis quel réseau, à côté de quels comptes. La politique gérée de FingerTrackID les garde hors du score. Dans vos propres règles de risque, chacun peut être désactivé, fantôme ou actif, avec des points pour inhabituel et très inhabituel : un élément actif qui se déclenche retire des points au score de confiance et se nomme dans reason_codes.

context-insight.v1 · 54 éléments en six thèmes · regroupés comme dans la console et dans vos règles

  • Compte et appareil · 10

    Nouvel appareil et nouveau système d’exploitation pour le compte · comptes et personnes distincts sur l’appareil sur 30 jours · comptes d’une même personne sur l’appareil · appareils par compte et par personne sur 24 heures · appareil à forte activité · fréquence du profil d’appareil dans votre entreprise, courant, peu courant ou rare · cookie d’appareil perdu

  • Retraits et ordres · 7

    Retraits dans la première heure après un nouvel appareil · bénéficiaires par appareil et comptes par bénéficiaire sur 30 jours · nombre et montant des retraits par compte · nombre d’ordres par compte et intervalle médian entre les ordres

  • Réseau et localisation · 12

    Nouveau pays et nouveau fournisseur d’accès (ASN) pour le compte · pays, fournisseurs et IP distincts par compte · comptes et personnes par IP · trajet impossible · fuseau horaire du navigateur qui ne correspond pas au pays de l’IP · pays de sortie du VPN · fournisseur figurant sur une liste publique d’abus · Apple iCloud Private Relay

  • Intégrité du navigateur et du SDK · 16

    Outils de développement ouverts · marques d’automatisation · marqueur de navigateur anti-détection · signature TLS qui ne correspond pas au navigateur déclaré, et sa stabilité sur 30 jours · moteur de rendu logiciel et famille de GPU · canvas ou audio qui change entre deux lectures · navigateur intégré à une application · mode invité possible · agent IA identifié par signature · catégorie de bot · SDK différent du paquet approuvé · une session SDK sur plusieurs appareils · collecte identique rejouée sur un autre appareil · cookie d’appareil utilisé dans des lieux trop éloignés

  • Vélocité · 5

    Accès par appareil et par compte sur 5 minutes, 1 heure et 24 heures ; par IP sur 5 minutes et 1 heure · évaluations avec le même tag par compte et par appareil sur 1 minute, 5 minutes et 1 heure

  • Liens entre comptes, à un saut · 4

    Autres comptes ayant utilisé les mêmes appareils · comptes voisins où une automatisation ou une falsification du navigateur a été détectée · comptes voisins que vous avez marqués comme fraude confirmée · bénéficiaires de retraits partagés avec d’autres comptes

Trois états · une raison, jamais un zéro

  • Observé · la condition est présente, ou le décompte ou la mesure diffère de sa valeur neutre.
  • Non observé · évalué, et absent ou neutre.
  • Non évalué · toujours avec sa raison, jamais affiché comme zéro.

Certains éléments dépendent de ce que vous envoyez. Sans référence de compte ou de personne, sans tag ou sans résultats, l’élément le dit : compte non envoyé, évaluation sans tag, aucun résultat envoyé. Une requête taguée ne porte ni montant ni bénéficiaire, donc les éléments de montant et de bénéficiaire des retraits le disent aussi. Un premier accès, un réseau anonymisé ou une IP hors de la fenêtre d’une heure d’une vérification sont aussi des raisons.

Ce qu’ils ne sont pas

  • Ni l’un des 13 indicateurs, ni jamais un code de limitation. Ils n’atteignent reason_codes que par une règle que votre entreprise a rendue active.
  • Jamais dans le score de la politique gérée de FingerTrackID. Un élément actif sans données ne retire rien : une preuve manquante ne devient jamais un risque.
  • Pas un modèle caché : chaque élément est lu comme attendu, inhabituel ou très inhabituel selon une échelle que votre entreprise peut ajuster, à partir d’une valeur par défaut publiée.
  • Pas une accusation : un nombre élevé de comptes ou de personnes sur un appareil n’est pas une preuve de fraude, et il n’existe pas de règle « N comptes par appareil = fraude ».

Où l’analyste les lit

Détail de l’accès. Une carte « Contexte de l’accès » regroupe les éléments par thème, avec leurs fenêtres de temps, la date limite de l’historique pris en compte, le degré d’inhabituel de chacun sur votre échelle et la raison de chaque élément resté sans valeur. Un élément qui ne tient pas dans le budget de temps de l’évaluation est terminé en arrière-plan et le signale ; il ne retarde ni ne fait jamais échouer la réponse.

Catalogue d’indicateurs. Une page explique ce que cherche chacun des 13 indicateurs, ce qui le laisse non évalué et s’il peut faire bouger le score, et liste les éléments de contexte avec les raisons pour lesquelles ils peuvent rester sans valeur.

Canvas, WebGL, audio et polices sont lus selon la politique de collecte gérée de chaque entreprise, uniquement sous forme de valeurs dérivées, et alimentent quelques-uns de ces éléments, comme la famille de GPU, un moteur de rendu logiciel ou un rendu qui change entre deux lectures. Là où le navigateur n’autorise pas une vérification, l’élément reste non évalué, avec sa raison.

07 · Non concluant est un résultat

Quand nous ne pouvons pas évaluer, nous le disons, et nous disons pourquoi.

Une preuve manquante ne produit pas une confiance de 100, et elle ne devient pas un signal de fraude. Sans score, la recommandation vient du repli figé dans la version de politique et couvert par son hash, et c’est une seule réponse pour tout état sans score, quel que soit le tag : MONITOR. Jamais ALLOW.

Cas sans score tirés des exemples du contrat

Le tag ne choisit jamais le repli. Dans la politique gérée, tout état sans score, sur n’importe quel tag, recommande MONITOR : continuer et l’enregistrer. Les trois exemples du contrat ci-dessous aussi.

  • INCONCLUSIVEtag login · le SDK ne s’est pas chargé

    MONITOR

    Pas de collecte : trust_score: null, evidence_coverage: 0, COLLECTOR_NOT_LOADED, base INSUFFICIENT_EVIDENCE. Rien n’est jamais libéré en ALLOW.

  • INCONCLUSIVEpreuves réseau indisponibles

    MONITOR

    Quatre indicateurs réseau NOT_EVALUATED, evidence_coverage: 69, PROVIDER_UNAVAILABLE. Quelle que soit l’opération, elle reste dans votre système, sous votre décision ; nous ne retenons jamais d’argent.

  • FAILEDtag pix_transfer · politique indisponible

    MONITOR

    Défaillance technique : POLICY_UNAVAILABLE, policy_version: null, base TECHNICAL_FAILURE. Jamais lu comme « aucun risque ».

Sans score, nous ne recommandons jamais ALLOW · fallback_policy_version production-observation-fallback-v2 dans les exemples · le repli est validé avec la politique à chaque lecture de la politique

Quatre états d’évaluation

Terminée 72 base EVALUATION · les reason_codes expliquent le score
Non concluante null base INSUFFICIENT_EVIDENCE · les limitation_codes disent ce qui manquait
Non notable null base OUT_OF_POLICY_SCOPE · événement valide, la politique ne le couvre pas
Échouée null base TECHNICAL_FAILURE · POLICY_UNAVAILABLE, policy_version null · jamais « aucun risque »

Les 14 codes de limitation du catalogue · ce qui manquait, jamais pourquoi c’est risqué

NO_FIRST_PARTY_COOKIEINSTALLATION_COOKIE_REJECTEDNO_EDGE_SIGNALSSTALE_DEVICE_PROFILEPROVIDER_UNAVAILABLEPROVIDER_BUDGET_EXCEEDEDCOLLECTOR_NOT_LOADEDUNSUPPORTED_RUNTIMEREQUIRED_EVIDENCE_MISSINGDETECTOR_TIMEOUTDETECTOR_ERRORNETWORK_TYPE_AMBIGUOUSCLIENT_CLOCK_SKEWPOLICY_UNAVAILABLE

Un code de limitation explique la collecte et la qualité ; un reason code explique la politique. Chaque indicateur NOT_EVALUATED pointe vers le sien ; l’évaluation les agrège tous dans limitation_codes. Une limitation de collecte n’est jamais une raison de risque.

08 · Vous décidez

Cinq recommandations. Zéro action de notre part.

recommended_action dit ce que la politique suggère. customer_action dit ce que vous avez fait. Deux champs, parce que ce sont deux faits.

Qui recommande, qui décide, qui agit

FingerTrackID recommande

  • ALLOW
  • MONITOR
  • STEP_UP
  • REVIEW
  • BLOCK_RECOMMENDED

Jamais sur la seule confidentialité · Tor, VPN, proxy, navigation privée, appareil partagé

Votre parcours décide

Votre backend décide et agit. Nous renvoyons une recommandation ; aujourd’hui, la politique gérée répond MONITOR, en observation seulement. Ce qui arrive à l’accès est décidé et exécuté de votre côté. Vous connaissez le compte, la limite, l’historique et le coût de la friction. Pas nous.

Vous agissez et vous le déclarez

  • ALLOWED
  • CHALLENGED
  • HELD
  • REVIEWED
  • BLOCKED
  • CANCELLED

customer_action · le champ que vous renvoyez

  • Nous n’authentifions jamais une personne.
  • Nous ne bloquons jamais votre interface.
  • Nous ne déplaçons jamais d’argent.

Ce que chaque recommandation ne signifie pas

  • ALLOW

    La politique n’a trouvé aucune raison d’ajouter de la friction à cet accès. Ne signifie pas que la personne est légitime ni que l’accès est certifié. N’est émise qu’avec un score et les preuves requises évaluées.

  • MONITOR

    Continuer, mais l’enregistrer. C’est le repli sans score sur tous les tags, et aujourd’hui aussi la réponse de la politique gérée à tout score. Ne signifie pas une suspicion confirmée, et n’exige aucune action de l’utilisateur.

  • STEP_UP

    Demander un second facteur ou une confirmation. Ne signifie pas que nous mettons qui que ce soit à l’épreuve : c’est vous qui affichez le défi.

  • REVIEW

    L’envoyer en revue humaine. Ne signifie pas que nous retenons de l’argent : l’opération reste dans votre système, sous votre décision.

  • BLOCK_RECOMMENDED

    La politique suggère de refuser. Ne signifie pas un blocage exécuté, une fraude confirmée ni un bannissement. Quand vous bloquez, cela devient customer_action: BLOCKED, un événement à vous, qui alimente la mesure de précision.

09 · Intégration

Trois étapes, un contrat. Le navigateur collecte ; votre backend demande ; nous répondons.

Un script sur votre site, un endpoint serveur à serveur dans votre backend et deux appels pour renvoyer l’action et le résultat. Aucune décision côté client.

Le SDK sur votre site

Le SDK collecte et renvoie un jeton. C’est tout.

Servi depuis un de vos sous-domaines. Avant que vous n’envoyiez la requête à évaluer, quel que soit l’écran, il collecte les signaux du navigateur et de l’environnement et reçoit 202 PROCESSING : cela confirme la réception, pas un résultat. Les signaux réseau sont ajoutés par l’edge sur votre domaine de collecte, jamais par le script. Aucun score, signal ou décision ne revient au navigateur.

import { initializeSdk } from '@ftid/sdk-web'

// publicKey is a public locator, not a secret.
// collectionOrigin is YOUR collection domain (https).
const sdk = initializeSdk({
  publicKey: 'pub_app_0123456789abcdef',
  collectionOrigin: 'https://collect.yourcompany.com',
})

// ACCEPTED (202 PROCESSING on the wire): confirms receipt, not a result.
const collection = await sdk.collect()
if (collection.status !== 'ACCEPTED') {
  // Without collection the journey continues; the backend will get
  // INCONCLUSIVE / COLLECTOR_NOT_LOADED: no fake score.
  return continueWithoutToken()
}

// Create the event before sending the request to be assessed.
const event = sdk.createEvent(collection.observation)

// Only a COMPLETED collection yields a token. The token goes in the POST
// that YOUR backend makes; the decision never comes back here.
const ctx = await sdk.getEventContext(event)
const token =
  ctx.status === 'COMPLETED'
    ? ctx.eventContextToken
    : null

Votre backend appelle

Un appel signé et synchrone, dans votre délai.

HMAC-SHA-256 sur dix lignes canoniques — marqueur, key_id, méthode, chemin, horodatage, identifiants d’événement et de requête, métadonnées du contenu, et le SHA-256 des octets exacts du corps sur la dernière ligne. Ne resérialisez jamais le JSON avant de calculer le hash ; le contrat porte le vecteur normatif. key_id est le seul localisateur public. Le secret ne circule jamais. Vecteur canonique requests.both_refs_deadline_750 du contrat v1.1 : même route et même signature que v1, avec un tag au lieu de journey, action et journey_context.

POST /v1/assessments HTTP/1.1
Host: api.fingertrackid.com
Content-Type: application/json
X-FTID-Signature: v1=<key_id>:<mac-hex>
X-FTID-Timestamp: 1791720000
X-FTID-Request-Id: <uuidv7 of the attempt>
X-FTID-External-Event-Id: evt:tag-0003

{
  "schema_version": "event-assessment-request.v1.1",
  "external_event_id": "evt:tag-0003",
  "idempotency_key": "idem-tag-0003",
  "occurred_at": "2026-10-11T12:00:00.000Z",
  "subject_ref": "subject:synthetic",
  "account_ref": "account:synthetic",
  "event_context_token": "ctx.synthetic-token_0003",
  "tag": "pix_transfer_a1b2c3d4e5f6g7h8i9j0abcdeabcdeabcdeabcdeabcdeabcdez",
  "deadline_ms": 750
}

tag est un slug en minuscules de 64 caractères au plus (lettres, chiffres et underscore, dix chiffres au plus), jamais une donnée personnelle ; ce vecteur est à cette limite · subject_ref et account_ref peuvent être null, et un account_ref exige un subject_ref · les refs sont des codes opaques à vous, jamais un numéro d’identité, un e-mail ou un identifiant séquentiel · deadline_ms est un entier de 250 à 5000, ou null pour 5000 ; s’il est dépassé, un Problem 503 réessayable revient, pas un score partiel

Réponse synchrone

Lisez-la, décidez, renvoyez ce que vous avez fait.

status
COMPLETED
trust_score
72
device_match
0.94
coverage
100
reason_codes
NETWORK_TOR_DETECTED
limitations
none
policy
policy-withdrawal-v1
expires_at
+5 min
REVIEW

Puis deux appels de retour : customer_action avec ce que vous avez fait et, une fois connu, truth_status avec le résultat réel (l’outcome : légitime, fraude confirmée ou preuves insuffisantes). Le contrat les soumet à la même discipline que l’appel d’évaluation : rien n’est considéré comme accepté avant un commit durable, et un nouvel essai identique n’ajoute aucun second effet. Un outcome peut être corrigé plus tard — la correction est ajoutée comme successeur, et l’enregistrement précédent reste lisible.

POST /v1/assessments/{assessment_id}/customer-actions
POST /v1/assessments/{assessment_id}/outcomes

↑ retour à l’exemple complet

  • Web SDK
  • API S2S synchrone
  • SDK serveur pour Node.js
  • Serveur MCP pour les agents de code
  • API d’action et de résultat
  • Console

Web, dans tout navigateur moderne · aucune application à installer · SDK, évaluation et retour dans le même contrat versionné

npm install @fingertrackid/server signe l’appel pour vous, et @fingertrackid/mcp permet à Claude Code, Cursor ou à tout agent de code compatible MCP de câbler l’intégration à partir du contrat publié. Pas à pas dans le guide de démarrage, le guide du Web SDK et la référence de l’API.

10 · Zero trust dans le navigateur

Le navigateur ne fait que collecter. Ni la décision ni l’identifiant n’y passent.

Rien de ce qui vient du navigateur n’est traité comme une autorité. L’évaluation se fait de serveur à serveur, signée, et chaque tentative compte une seule fois : la répéter ne crée aucun nouvel effet.

Qui parle à qui

Browser Your backend FingerTrackID event_context_token (that is all) HMAC · request_id assessment no decision no device_id

Le navigateur ne reçoit que des identifiants opaques de session et d’événement. Score, signaux et recommandation naissent et restent sur le serveur. Le cookie first-party est signé, HttpOnly, Secure et limité à votre tenant et à votre application.

Anatomie de l’appel

POST /v1/assessmentssecurity ftidHmacV1 du contrat
X-FTID-Signature: v1=<key_id>:<mac-hex>key_id UUIDv7 est le seul localisateur ; tenant, application, environnement et capacités ne deviennent une autorité qu’après un MAC valide comparé en temps constant. X-Client-Id, l’ancien nonce et les signatures multiples sont refusés.
X-FTID-Timestamp: 1791720000Epoch en secondes. Tolérance de ±300 s. Un horodatage dans le futur ne prolonge jamais la rétention.
X-FTID-Request-Id: <uuidv7>Un usage par tentative, réservé après un MAC valide. Un nouvel essai logique signe un nouveau request_id ; un MAC invalide ne crée aucune réservation.
X-FTID-External-Event-Id: evt:tag-0003Identique, octet pour octet, à celui du corps et de la chaîne signée.
body.idempotency_keyMême clé, même opération : un nouvel essai identique renvoie la même évaluation persistée, sans recalcul.
body.deadline_msVotre budget. Dépassé avant l’évaluation : Problem assessment-unavailable (503, retryable: true), pas un score partiel.
  • 401uniforme : un key_id inexistant, révoqué ou une mauvaise signature produisent tous le même authentication-failed.
  • 403un identifiant authentifié sans la capacité d’évaluation de la route.
  • 503dépendance de secrets indisponible : un verrou global rend la réponse uniforme sans révéler si le key_id existe. Signez un nouveau request_id.

11 · Politique versionnée

Chaque décision a une version. La version fige tout ce qui l’a produite.

Changer la sensibilité d’un indicateur crée une nouvelle version, avec auteur, période de validité, simulation et retour arrière. L’historique ne change pas. L’absence d’une vraie version bloque l’usage.

Version qui a décidé · exemple withdrawal_completed

policy-withdrawal-v1

fallback_policy_version
production-observation-fallback-v2
ruleset_version
ruleset-web-v1
signal_catalog_version
web-detectors-v3
feature_schema_version
configured-assessment-features.v1
resolver_version
first-party-installation-v1
sdk_version
0.1.0
provider_versions
asn-reputation.v1 · cloud-ranges.v1 · icloud-private-relay.v1 · ip2proxy-lite-px2.v1 · tor-exit.v1 · x4b-vpn.v1
evidence_cutoff_at
2026-09-04T12:00:00Z
evaluated_at
2026-09-04T12:00:01Z
expires_at
2026-09-04T12:05:00Z
correlation_id
corr-assessment-withdrawal-0001

correlation_id sert au support sans exposer d’identifiant personnel. Les versions exposées sont des tags publics opaques ; les identifiants internes de la base de données n’apparaissent jamais dans l’API, dans le webhook ni dans la console.

Ce que fige une version de politique

  • catalogue de signaux
  • normalisation
  • features
  • résolveur d’appareils
  • règles
  • stratégie de corrélation
  • niveaux par indicateur
  • plafonds et seuils

Reproductible, jamais réécrit

exemple login_completed

assessment_version1

supersedes_assessment_idnull

exemple login_completed_revision_2

assessment_version2

supersedes_assessment_id…0000000101

Une révision opérationnelle conserve la politique et toutes les autres versions en vigueur au received_at de l’événement. Une nouvelle politique appliquée à un ancien événement est une simulation distincte ; elle ne réécrit jamais quelle recommandation a guidé la décision historique.

12 · Mode shadow

En parallèle d’abord. Ensuite seulement, la réponse influence une action.

Le mode shadow consiste à faire tourner FingerTrackID côte à côte avec ce que vous utilisez aujourd’hui, sans que la réponse touche à aucune décision. Vous comparez, vous renvoyez les résultats réels, et ensuite seulement vous commencez à utiliser la recommandation. C’est ainsi que nous recommandons de commencer.

Le cycle complet

  1. 01

    Le SDK collecte

    202 PROCESSING · event_context_token

  2. 02

    Votre backend demande l’évaluation

    POST /v1/assessments · synchrone

  3. 03

    Vous décidez dans votre parcours

    en shadow, sans utiliser la réponse

  4. 04

    Vous déclarez l’action

    customer_action · POST …/customer-actions

  5. 05

    Vous déclarez le résultat

    truth_status · POST …/outcomes

recommendation_alignment · dérivé sur le serveur à partir de la paire recommandation × action ; jamais déclaré par le client. Une coïncidence ne prouve ni la causalité, ni la justesse, ni la fraude.

Comparaison, champ par champ

recommended_actioncustomer_actionrecommendation_alignment
REVIEWREVIEWED ou HELDALIGNED
STEP_UPALLOWEDNOT_ALIGNED
ALLOW ou MONITORALLOWEDALIGNED
BLOCK_RECOMMENDEDBLOCKEDALIGNED
quelconqueCANCELLEDNOT_COMPARABLE

Bloquer ne prouve pas la fraude. Confirmer une fraude exige des preuves indépendantes : truth_status passe de PENDING à LEGITIMATE, FRAUD_CONFIRMED ou INSUFFICIENT_EVIDENCE, avec une maturité PROVISIONAL ou MATURE. Seul un label mûr devient une métrique de qualité.

Ce que le cycle alimente

  • Faux positifs et faux négatifs comme métriques dérivées de labels mûrs, pas comme champs saisis.
  • Recalibrage des règles et des seuils, toujours sous forme de nouvelle version de politique.
  • Qualité des détecteurs mesurée dans votre mode shadow, avant que la réponse n’influence une quelconque de vos actions.
  • Ce qu’il ne fait pas : devenir une application automatique de sanctions. customer_action et truth_status sont des faits distincts, et chaque correction crée un successeur.

13 · Confidentialité par contrat

Bornée par le contrat, pas par un réglage.

Les données personnelles en clair ne sont pas une exigence du produit. Vous envoyez des refs opaques de personne et de compte ; nous ne demandons ni numéro d’identité, ni e-mail, ni numéro de téléphone pour évaluer un accès.

packages/contracts/src/sdk-handshake-v1.ts · politique de collecte

canvas: z.boolean(),
audio: z.boolean(),
fonts: z.boolean(),
behavioral: z.literal(false),

packages/contracts/src/sdk-signals/rendering-v1.ts · extrait

const Hash128 = z.string().regex(/^[0-9a-f]{32}$/)
canvas_hash: Hash128.optional(),
webgl_gpu_family: z.enum(SDK_RENDERING_GPU_FAMILY_V1).optional(),
audio_hash: Hash128.optional(),
fonts_count: z.number().int().min(0).max(SDK_RENDERING_FONT_COUNT_V1).optional(),

La collecte comportementale, c’est-à-dire les mouvements du pointeur et les frappes au clavier, n’accepte que la valeur désactivée : l’activer exige de modifier le contrat, pas un réglage. Canvas, WebGL, audio hors ligne et présence de polices sont lus selon la politique de collecte gérée, qui les active pour chaque entreprise, et ne quittent le navigateur que sous forme de valeurs dérivées : des hashs de longueur fixe, une famille de GPU fermée, un décompte et un masque de présence sur une liste fixe de polices. Le contrat n’a aucun champ pour les pixels, les échantillons audio, les noms du fabricant ou du moteur de rendu du GPU, ni les noms de polices. Ensemble, ces valeurs dérivées peuvent reconnaître à nouveau le même navigateur ; elles sont donc traitées comme des données d’appareil, pas comme des données anonymes. Jamais collectés, en règle absolue : mot de passe, texte saisi, contenu de chat ou de document, presse-papiers, capture d’écran, microphone, caméra. Chaque preuve a une classe de confidentialité, et la classe n’est pas un poids de risque.

Des garanties qui ne dépendent pas de la bonne volonté

  • Les données personnelles n’entrent pas dans les logs. Les données brutes n’apparaissent pas librement dans la console : chaque accès est enregistré. Un identifiant ou une valeur personnelle ne va jamais dans une URL.
  • La corrélation entre tenants est désactivée. Chaque table de domaine porte tenant_id avec une isolation imposée dans la base de données. Aucune réputation ni aucun label n’est partagé entre clients.
  • Cookie first-party servi depuis votre domaine : signé, HttpOnly, Secure, limité à votre tenant et à votre application. La valeur ne transite jamais vers une base de données, une file ou un log ; s’il manque ou est rejeté, la continuité se dégrade en limitation et l’évaluation ne s’arrête pas.
  • Chaque fusion d’appareils est réversible et enregistre la version du résolveur qui l’a faite. L’IP ne consolide jamais des appareils à elle seule.
  • Chaque type de preuve a une finalité déclarée, une classe de confidentialité, une règle d’accès et une durée de conservation dans notre inventaire de données. Base légale, résidence des données et DPA sont traités avec votre équipe juridique à la contractualisation ; rien sur cette page ne constitue un conseil juridique.

Party n’est pas Account

Party Account Account Account

Le lien vient de votre backend · jamais déduit de l’empreinte

Une personne, plusieurs comptes légitimes. Un compte ne change jamais de personne en silence ; la session ne progresse que d’anonyme à personne, puis à un compte de la même personne. Une contradiction est un conflit, pas une nouvelle association ni une preuve négative improvisée.

Où vivent les données

cloud
Google Cloud, us-central1 region
source of truth
PostgreSQL, single
isolation
RLS forced per tenant, with a negative test
secrets
Secret Manager; never in code or in infrastructure state
logs
no PII; raw data never displayed freely

14 · Console

Une console pour intégrer, investiguer et boucler la boucle.

La console répond d’abord à « recevons-nous, évaluons-nous et expliquons-nous avec qualité ? », et ensuite seulement laisse parler de légitimité. Chaque pourcentage nomme son dénominateur.

Schéma, pas une capture d’écran · tons de la console dans le cadre

Détail de l’accès. Les trois mesures en trois composants séparés ; la recommandation avec son recommendation_basis, la politique en vigueur et ce que votre équipe a déclaré avoir fait ; la fraîcheur des preuves ; les 13 indicateurs avec état, applicabilité, source, confiance du détecteur, fraîcheur et raison de tout non évalué ; limitations et reason codes ; session, appareil et leurs associations ; la multiplicité sur l’appareil ; une localisation approximative à partir du réseau ; le contexte de l’accès ; et un onglet de données techniques avec tout ce que le SDK et l’edge ont collecté, y compris la vraie version du navigateur lue à partir des API qu’il expose, à côté de la version qu’il déclare.

Filtres d’investigation. La liste des accès se restreint par fournisseur d’accès (ASN), pays du réseau, installation de l’appareil, raison pour laquelle un indicateur n’a pas été évalué, et jusqu’à deux indicateurs dans des états choisis en même temps, et elle retrouve un accès par votre propre ref de compte ou de personne. Il n’y a pas de filtre par adresse IP : c’est une donnée personnelle. Chaque détail d’accès porte aussi ses éléments de contexte ↑.

Investiguer en profondeur. Depuis n’importe quel accès, un graphe de liens ouvre les appareils et les comptes autour de lui, un saut à la fois, sur jusqu’à 92 jours de votre propre historique. Chaque expansion est une lecture enregistrée ; les adresses IP ne deviennent jamais des nœuds.

Listes de blocage et d’autorisation. Depuis le détail de l’accès, votre équipe place un appareil, une ref de compte ou une seule IP sur la liste de blocage (blocage ou revue) ou la liste d’autorisation de votre entreprise, avec une note et le nom de la personne qui l’a ajouté. Sur un accès de production avec score, une entrée remplace la recommandation et se nomme dans reason_codes. Rien n’est supprimé : retirer une entrée enregistre qui l’a retirée et quand.

Assistant IA. Un panneau latéral explique chaque écran et répond aux questions sur votre propre intégration et vos accès, dans les limites de votre entreprise et de votre rôle.

Configuration du risque. Les propres règles de risque de votre entreprise, par application : chacun des 13 indicateurs est désactivé, fantôme ou actif, avec un poids de 1 à 100 points, et vous définissez les tranches de score et l’action de chacune. Une règle fantôme est calculée et enregistrée mais ne change jamais la réponse. Avant de publier, la carte d’impact rejoue votre brouillon sur les évaluations des 1, 7 ou 30 derniers jours. Chacun des 54 éléments de contexte ↑ peut s’y ajouter avec ses propres points. Votre administrateur ou votre superviseur du risque publie directement ; chaque publication est une nouvelle version auditée, et tout en fantôme arrête toutes vos règles d’un coup. FingerTrackID n’active jamais une règle à votre place : son support peut seulement mettre toutes les règles d’une application en fantôme, avec un motif que votre console affiche. Tant qu’aucune règle n’est active, c’est la politique gérée qui répond, publiée par l’équipe FingerTrackID avec une approbation enregistrée.

Seize écrans en quatre groupes · principal, détection, opération, administration

  • 01Accueil
  • 09Intégration et santé
  • 02Vue d’ensemble
  • 10Utilisation
  • 03Accès
  • 11Exports
  • 04File de révision
  • 12Rapports
  • 05Configuration du risque
  • 13Utilisateurs et accès
  • 06Simulations de politique
  • 14Audit
  • 07Listes
  • 15Cycle de vie client
  • 08Catalogue d’indicateurs
  • 16Compte et sécurité

La file de révision est le module de revue des retraits : une file opérationnelle construite sur le même socle, qui présente à une personne chaque retrait v1 pour lequel REVIEW est recommandé, avec les preuves à côté. Les évaluations taguées n’y entrent jamais, et elle reste vide tant que la politique recommande MONITOR, comme le fait aujourd’hui la politique gérée.

En anglais, portugais (Brésil et Portugal), espagnol, français et allemand. Connexion par passkey ou second facteur ; permissions par rôle ; une piste d’audit de qui a vu des données sensibles et de qui a modifié quoi. Les données brutes n’apparaissent pas librement : chaque accès est enregistré.

15 · Notre tarification

Une seule unité de facturation. Tout le reste ne compte pas.

Prix selon le volume de collectes terminées, fixé dans la proposition. Le mode shadow consomme les mêmes unités et apparaît dans la console comme usage estimé ; ce qui figure sur la facture pour cette période est défini dans la proposition.

L’unité

Un snapshot de device intelligence en production, demandé par votre intégration et terminé.

C’est l’unité de mesure et l’unité de facturation candidate. Chaque device_intelligence_snapshot_id produit au plus une unité, quel que soit le nombre d’évaluations, de tags, de fournisseurs ou de retraitements qui utilisent cette collecte.

  • Score, recommandation, action et résultat ne déterminent pas la facturation. Un résultat risqué ne coûte pas plus ; un résultat légitime ne coûte pas moins.
  • Une limite commerciale ne devient jamais un blocage, une limitation de débit ou une dégradation automatique du service.
  • Chaque snapshot demandé produit un enregistrement d’usage immuable, même lorsqu’il n’est pas facturable. Les exclusions sont prouvées par cet enregistrement, pas reconstituées à partir des logs.

Événement · crée une unité ?

  • Applications hors production (développement, staging)non
  • Nouvel essai avec le même idempotency_keynon
  • Toute évaluation, sur tout tag, qui réutilise un snapshot récentnon
  • Retraitement, rejeu historique, changement de politiquenon
  • Enrichissement asynchrone et rafraîchissement lancés par nousnon
  • Appel à un fournisseur ou nouvel essainon
  • Livraison de webhooknon
  • customer_action et résultatnon
  • Requête, tableau de bord, rapport, exportnon
  • 4xx pour authentification, autorisation ou contrat invalidenon
  • 5xx, un timeout de notre côté, collecte INCONCLUSIVE ou FAILEDnon
  • Snapshot de production, demandé par l’intégration, terminéoui · 1

Proposition selon le volume, avec l’usage en mode shadow sur la table.

Demander une proposition

16 · FAQ

Les questions que posent un responsable du risque et un CTO.

Q01Comment commence l’intégration ?
En mode shadow. Vous installez le SDK sur votre site, vous activez l’appel serveur à serveur, et la réponse commence à tourner à côté de votre parcours réel sans toucher à aucune décision. Vous renvoyez customer_action et le résultat, et dans la console vous comparez, accès par accès, la recommandation avec ce que votre équipe a déclaré avoir fait, et vous suivez la couverture des preuves. Quand les chiffres sont convaincants, votre équipe décide si et où la recommandation commence à influencer une décision, toujours exécutée par votre backend.
Q02Quels parcours évaluez-vous ?
Tout écran que vous choisissez. Votre backend envoie un tag à vous avec chaque évaluation, un slug en minuscules comme login, withdrawal ou pix_transfer : pas d’enregistrement, pas de liste fermée et pas de limite. La console filtre, regroupe et exporte par tag, et les modèles (inscription, connexion, récupération du mot de passe, second facteur, modification du profil, dépôt, retrait, virement Pix, ordre de bourse, paiement) sont un guide d’intégration. Le tag ne choisit jamais la politique, les détecteurs, le repli ni le délai : chaque évaluation taguée passe par la même politique et les mêmes 13 indicateurs. Il ne doit jamais porter de donnée personnelle. La requête ne porte ni montant, ni devise, ni bénéficiaire.
Q03Pourquoi ne bloquez-vous pas ?
Parce qu’un événement n’est pas une fraude, qu’un score n’est pas une décision et que bloquer ne prouve rien. C’est vous qui connaissez le compte, la limite, l’historique et le coût de la friction. Nous fournissons des preuves, une couverture et une recommandation expliquée. BLOCK_RECOMMENDED est la recommandation la plus forte qui existe, et cela reste une recommandation. Quand vous bloquez, vous enregistrez customer_action: BLOCKED, et cela devient une donnée pour mesurer si la recommandation était juste.
Q04Un VPN, Tor ou un onglet privé font-ils baisser le score ?
Dans nos politiques gérées, aucun d’eux ne produit BLOCK_RECOMMENDED à lui seul ; les règles que votre entreprise configure suivent les poids et le seuil qu’elle a choisis. Le mode privé et les protections du navigateur sont un contexte neutre : ils peuvent réduire la couverture et apparaissent dans le détail, sans reason code défavorable. Tor, proxy, VPN et hébergement sont un contexte d’anonymisation : une politique peut les pondérer avec ce qui a été vu par ailleurs, jamais selon le tag. Dans la politique gérée aujourd’hui, seules l’automatisation et la falsification du navigateur font bouger le score, et la recommandation est MONITOR. Dans l’exemple de retrait du contrat v1 sur cette page, Tor détecté a conduit à REVIEW, et le reason code le dit. Ce n’est jamais une fraude en soi.
Q05Et si le SDK ne se charge pas, ou si l’utilisateur bloque les scripts ?
Le parcours continue. Votre backend appelle l’API sans event_context_token et reçoit INCONCLUSIVE, trust_score: null, evidence_coverage: 0, limitation_codes: ["COLLECTOR_NOT_LOADED"] et la recommandation de repli, MONITOR. Jamais un score inventé. Jamais ALLOW par manque de preuves.
Q06Quelle est la latence ? Y a-t-il un SLA ?
Le délai vous appartient. La valeur par défaut du contrat est de 5000 ms, et deadline_ms le règle entre 250 et 5000 (gardez votre timeout HTTP au-dessus d’environ 6 s pour la valeur par défaut) ; s’il est dépassé, vous recevez un Problem assessment-unavailable (503, retryable: true, avec Retry-After), pas une réponse partielle. Répétez la même opération logique avec un nouveau request_id. Latence et SLA figurent dans la proposition, mesurés dans votre mode shadow avant qu’une décision ne dépende de la réponse.
Q07Comment savoir que la réponse n’a pas été falsifiée ?
Elle ne passe jamais par le navigateur. Votre backend signe chaque appel en HMAC-SHA-256 sur dix lignes canoniques, dont la dernière est le SHA-256 des octets exacts du corps ; key_id UUIDv7 est le seul localisateur public ; request_id est réservé contre le rejeu ; un échec d’authentification renvoie un 401 uniforme sans révéler si la clé existe. Le secret ne circule jamais. Le vecteur de test normatif du protocole fait partie du contrat ; avec lui, vous reproduisez la signature octet pour octet.
Q08Dois-je envoyer un numéro d’identité, un e-mail ou un numéro de téléphone ?
Non. L’évaluation utilise des refs opaques de personne et de compte que seul votre système résout. Les données personnelles en clair ne sont pas une exigence du produit. Le comportement du pointeur et du clavier est désactivé dans le contrat. Les vérifications canvas, WebGL, audio et polices s’exécutent selon la politique de collecte gérée de chaque entreprise et ne quittent le navigateur que sous forme de hashs, d’une famille de GPU et d’un masque de présence sur une liste fixe de polices, jamais sous forme de pixels, de son, de noms de GPU ou de noms de polices. Mot de passe, texte saisi, presse-papiers, capture d’écran, microphone et caméra sont interdits. Chaque type de preuve a une finalité déclarée, une classe de confidentialité et une durée de conservation ; la base légale est revue avec votre équipe juridique avant la mise en production, et rien sur cette page ne remplace cette revue.
Q09Combien ça coûte et que doit faire mon équipe ?
Prix selon le volume de collectes terminées, dans une proposition. L’unité de facturation candidate est un snapshot terminé en production ; rien hors production ne compte. De votre côté : un script sur le site, un endpoint serveur à serveur dans le backend pour demander l’évaluation, et deux appels API pour renvoyer l’action prise et le résultat réel (l’outcome). Le SDK est web et tourne dans tout navigateur moderne ; il n’y a aucune application à installer.
Q10Qu’est-ce que la device intelligence, et en quoi diffère-t-elle du device fingerprinting (empreinte d’appareil) ?
Le device fingerprinting lit des caractéristiques stables d’un navigateur pour le reconnaître à nouveau. La device intelligence part de là et va plus loin : elle vérifie si ces caractéristiques sont cohérentes entre elles et avec le réseau, si une automatisation, un émulateur ou un navigateur anti-détection est à l’œuvre, et comment cet appareil se comporte à travers vos comptes. FingerTrackID la restitue sous forme d’un score de confiance, d’une correspondance d’appareil avec sa propre confiance, d’une couverture des preuves et de 13 indicateurs, chacun avec la version du détecteur qui l’a lu.
Q11Pouvons-nous définir nos propres règles, scores et listes ?
Oui. Dans la console, votre entreprise attribue des points à n’importe lequel des 13 indicateurs et des 54 éléments de contexte, choisit les tranches de score et la recommandation de chaque tranche, et peut d’abord faire tourner n’importe quelle règle en fantôme, calculée et enregistrée sans changer la réponse. Les listes de blocage et d’autorisation acceptent un appareil, une ref de compte ou une seule IP, une entrée à la fois, avec une note et le nom de la personne qui l’a ajoutée. Chaque publication est une nouvelle version auditée. FingerTrackID n’active jamais une règle et n’ajoute jamais d’entrée de liste à votre place.
Q12Un agent de code IA peut-il faire l’intégration ?
Oui. Le SDK serveur @fingertrackid/server signe l’appel, le serveur MCP @fingertrackid/mcp donne à Claude Code, Cursor ou à tout agent compatible MCP les contrats, les vecteurs de signature, un module serveur prêt à l’emploi par tag et une vérification de votre domaine de collecte, le tout en lecture seule, et la documentation publie llms.txt et un bloc de règles prêt pour votre AGENTS.md. Le secret reste dans votre environnement ; l’agent n’a jamais besoin de le voir.
Q13Quel est le poids du SDK, et ralentit-il la page ?
Le SDK collecte une seule fois, en parallèle, en une seule requête vers votre propre sous-domaine de collecte. Sur ordinateur, la collecte complète a pris entre 80 et 125 ms environ en médiane dans Chrome, Firefox et Safari, sous un budget strict de 250 ms ; chaque vérification prend au plus 2 ms du thread principal, et celles qui attendent, comme le timing des frames ou un Worker, attendent en parallèle. Il n’affiche jamais de demande d’autorisation et ne bloque jamais votre interface.

17 · Contact

Évaluez le parcours de votre choix, en mode shadow.

Commencez en mode shadow : la réponse tourne à côté de votre parcours réel sans toucher à aucune décision, vous comparez, vous renvoyez les résultats, et ensuite seulement vous commencez à utiliser la recommandation. Si vous avez des écrans où la décision compte et que vous voulez voir la réponse expliquée avant de lui faire confiance, parlons-en.

Demander une démo

Saisissez un e-mail avec un domaine.
Saisissez le nom de l’entreprise.
Ce que vous voulez évaluer

Un parcours, c’est n’importe quel écran de votre choix, avec le nom que vous lui donnez. Cochez ceux que vous avez déjà en tête ; le reste viendra dans la conversation.

Pas de newsletter · nous répondons par e-mail, une personne à la fois · ou écrivez directement à contato@fingertrackid.com

Comment ça commence

  1. Une conversation de 30 minutes sur les parcours que vous voulez évaluer et sur votre circuit de décision.
  2. Identifiant serveur pour votre application, contrat exécutable et vecteur HMAC. Il n’y a pas de sandbox : vous testez en production, en mode shadow.
  3. Mode shadow avec votre parcours réel : vous comparez et renvoyez les résultats avant que la réponse n’influence une quelconque décision.
  4. Production sur les écrans que vous taguez, avec une politique versionnée ; chaque décision reste du ressort de votre backend.

Ce qui est inclus

  • Console avec la couverture des preuves et, accès par accès, la recommandation à côté de l’action que vous avez déclarée
  • Contrat event-assessment.v1 exécutable, avec un vecteur de test HMAC
  • Mode shadow en production dès le premier jour : la réponse tourne à côté de votre parcours et ne touche jamais à une décision
  • Canal direct avec les personnes qui écrivent la politique