Gebaut fir Ären Stack ze passen
Einfach REST mat engem Header, en typiséierte Node-Client, en MCP-Server, signéiert Webhooks an eegen Domainen. Näischt muss op Ären Server installéiert ginn, ausser Dir wëllt et.
Fënnef Weeër fir an ze kommen
Selwecht Evenement, vun enger Shell, Ärem Code, engem Assistent oder engem Push.
curl "https://api.zeno.id/events/1792578564800.yU4Ety" \
-H "Auth-API-Key: sk_..."const event = await fetch(`https://api.zeno.id/events/${requestId}`, {
headers: { 'Auth-API-Key': process.env.FP_SECRET_KEY },
}).then(response => response.json())import { createClient } from '@zeno-id/server'
const fingerprint = createClient({ secretKey: process.env.FP_SECRET_KEY, endpoint: 'https://api.zeno.id' })
const event = await fingerprint.getEvent(requestId)
const page = await fingerprint.searchEvents({ externalId: user.id, signal: 'vpn' })
await fingerprint.updateEvent(requestId, { action: 'checkout' })
await fingerprint.forgetExternalId(user.id)# Your project's API as tools for Claude Code, Cursor or any MCP client.
claude mcp add zeno --env FP_SECRET_KEY=sk_... --env FP_ENDPOINT=https://api.zeno.id -- npx -y @zeno-id/mcpimport { verifyWebhook } from '@zeno-id/server'
app.post('/fingerprint', express.text({ type: 'application/json' }), (request, response) => {
if (!verifyWebhook(request.body, request.header('fingerprint-signature') ?? '', process.env.FP_WEBHOOK_SECRET)) {
return response.sendStatus(401)
}
const event = JSON.parse(request.body)
response.sendStatus(200)
})// Serve the agent and identify from a subdomain of your own site, so content
// blockers that list ours don't drop identifications. Add it in Settings ›
// Custom domain, create the one DNS record it shows, then:
import { start } from 'zeno-id'
const agent = start({ publicKey: 'pk_...', endpoint: 'https://metrics.example.com' })- Server API Liest, sicht a läscht Eventer an Besucher mat engem Header.
- Server SDK Typiséierten Node-Client mat Webhook-Checks a gesécherte Resultater opmaachen.
- MCP-Server Den API vun Ärem Projet als Tools fir en AI-Assistent.
- Webhooks All nei Evenement gëtt per POST op Ären Server geschéckt, signéiert, mat Neiversichen.
- Personaliséiert Domain Servéiert den Agent vun enger Ënnerdomän vun Ären eegenen mat engem DNS-Rekord, wéi all Live-Site dat soll.
- Versiegelt Resultater Verschlüsselt Resultat, dat Ären Server ouni API-Opruff opmécht.
De Agent op all Säit
Start et wann d'Formulaire opmécht a frot en request ID, wann de Benotzer eppes mécht. Et leeft am Hannergrond a blockéiert ni d'Säit.
- Keng Ofhängegkeet
- /agent.js als Script-Tag fir ze probéieren, oder en klenge npm-Loader deen den aktuellen Agent iwwer deng eege Domain lued.
- Iergendeng Framework
- React, Svelte, Vue, Next.js, Nuxt, Angular oder keins.
- Ongeféier e Kilobyte
- Den Report, deen en schéckt. Hie liest ni WebRTC-Netzwierkadressen.
- Gecacht
- E Resultat kann fir d'Sessioun gespäichert ginn, sou datt en Login an den Checkout duerno just eng Identifikatioun kaschten.
<script src="https://zenocdn.net/agent.js"></script>
<script>
const agent = FingerprintAgent.start({ endpoint: 'https://zenocdn.net', publicKey: 'pk_...' })
// Once the user logs in, hand the request ID to your server:
agent.get({ externalId: user.id }).then(({ requestId }) => verifyOnServer(requestId))
</script>Är Daten, Är Regelen
Gebaut fir d'Datenufroen, déi s'kréien.
Hu an der EU
Evenementer wäerte op AWS eu-west-1 gespäichert bis Dir se läscht, oder fir 1, 3 oder 5 Joer wann Dir dat wielt.
Läscht eng external ID mat engem Opruff
Läscht en external ID, da sinn all Eventer a Apparat-Verbindungen ginn ewech. Fir eng Datenufro oder en zougemaachte Kont.
Näischt, wou de Browser sech kann upassen
Flags erreechen den Browser ni. Den Zero-Trust-Modus geet nach weider: den Browser kritt nëmmen eng request ID an näischt anerš.
Är éischt Identifikatioun, an e puer Minutten
Public key am Browser, secret key op Ärem Server.