Chaque identification, en direct
Les nouveaux événements apparaissent en quelques secondes, avec le visiteur, l'external ID et l'heure.
Reconnaissez un navigateur déjà connu même en navigation privée ou avec les cookies effacés, détectez les bots et les appareils usurpés, et confirmez chaque résultat sur votre serveur avant d'agir.
Découvrez ce que nous pouvons savoir sur ce navigateur. La démo nous envoie ses signaux et y stocke un ID.
Dans l'API pour votre code et dans le tableau de bord pour la personne qui examine le cas.
Les nouveaux événements apparaissent en quelques secondes, avec le visiteur, l'external ID et l'heure.
Automatisation, navigateurs headless, rendu logiciel, natifs remplacés et fuseaux horaires incohérents.
Un appareil liste chaque external ID vue dessus, pour repérer les comptes multiples.
Le navigateur ne reçoit qu'un request ID. Votre serveur récupère l'événement avec sa secret key et décide.
Supprimez un external ID et tous ses événements et liens d'appareil disparaissent.
Sans forfaits ni engagements. Après chaque cycle de facturation, vous payez les identifications utilisées, chacune avec tous les signaux, l'API serveur et le tableau de bord.
Voir les offres et tous les prix →Les prix affichés n'incluent pas les taxes ou frais applicables (ex. TVA).
Le navigateur reçoit un request ID, votre serveur obtient tous les détails.
Une balise script servie par l'api, ou un module ES typé depuis npm.
<script src="https://zenocdn.net/agent.js"></script>
<script>
const agent = FingerprintAgent.start({ endpoint: 'https://zenocdn.net', publicKey: 'pk_...' })
</script>Lancez-le à l'ouverture du formulaire, obtenez un request ID à la connexion de l'utilisateur.
// After a successful login:
const { requestId } = await agent.get({ externalId: user.id })
await fetch('/api/login/verify', { method: 'POST', body: JSON.stringify({ requestId }) })Lisez l'événement avec la secret key et décidez. Le navigateur ne voit jamais de flag.
const response = await fetch(`https://api.zeno.id/events/${requestId}`, {
headers: { 'Auth-API-Key': process.env.FP_SECRET_KEY },
})
const event = await response.json()
if (event.bot === 'bad' || event.riskScore >= 15) {
throw new Error('Review this login')
}GET, PATCH et DELETE sur /events, /visitors et /external-ids, avec un seul header.
Préfixes pk_ et sk_ avec checksum ; les secret keys sont stockées sous forme de hash et affichées une seule fois.
Filtrer par visiteur, external ID, IP, flag, verdict bot, score de risque et date.
DELETE /external-ids/{id} supprime tous les événements et liens d'appareil de cet ID.
Oui. L'agent est un module ES simple sans dépendances : il fonctionne avec React, Svelte, Vue ou sans framework. Sans bundler, chargez /agent.js et utilisez le global FingerprintAgent.
Non. Les appareils identiques, comme le même modèle de téléphone sous le même OS, ont la même empreinte, donc un navigateur sans son ID stocké peut correspondre au visitor ID d'un autre. Considérez-le comme une piste à examiner avec les external IDs, les flags et la connexion.
Plus de 100 signaux d'appareil : canvas, WebGL, audio, polices, écran, matériel, langue, plugins et traces d'automatisation. Il ne lit jamais les adresses réseau WebRTC.
L'identification se met en pause discrètement : l'agent répond avec capped au lieu d'un request ID, ainsi vos utilisateurs ne voient jamais d'erreur et votre connexion continue de fonctionner. Définissez des budgets par jour, semaine ou mois, et une limite de dépenses par clé. Rien d'autre n'est limité en débit.
Vous êtes remboursé. Pas satisfait durant les trois premiers mois après votre première facture payée ? Nous vous remboursons tout ce que vous avez payé pendant cette période, sans poser de questions.
Dans l'UE, dans AWS eu-west-1. Les événements sont conservés jusqu'à leur suppression, ou pendant 1, 3 ou 5 ans si vous le choisissez, et un seul appel API efface toutes les données stockées pour l'un de vos utilisateurs.
Paiement à l'usage, tous les signaux inclus.