Navrhnuté tak, aby sa hodilo do vášho stacku
Jednoduché REST s jednou hlavičkou, typovaný Node klient, MCP server, podpísané webhooky a vlastné domény. Na server nemusíte nič inštalovať, pokiaľ nechcete.
Päť spôsobov, ako sa dostať dnu
Rovnaká udalosť, zo shellu, z vášho kódu, od asistenta alebo z 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 Čítajte, hľadajte a mažte udalosti a návštevníkov jedinou hlavičkou.
- Serverové SDK Typovaný Node klient s kontrolou webhookov a otváraním zapečatených výsledkov.
- MCP server API vášho projektu ako nástroje pre AI asistenta.
- Webhooks Každá nová udalosť sa odošle POSTom na váš server, podpísaná, s opakovaním.
- Vlastná doména Poskytujte agenta zo subdomény vašej domény jedným DNS záznamom, ako má každý živý web.
- Zapečatené výsledky Šifrovaný výsledok, ktorý váš server otvorí bez volania API.
Agent na ľubovoľnej stránke
Spustite ju pri otvorení formulára a po akcii používateľa požiadajte o request ID. Beží na pozadí a nikdy neblokuje stránku.
- Žiadne závislosti
- /agent.js ako script tag na vyskúšanie alebo malý npm loader, ktorý načíta aktuálneho agenta cez vašu vlastnú doménu.
- Akýkoľvek framework
- React, Svelte, Vue, Next.js, Nuxt, Angular, alebo žiadny.
- Približne kilobajt
- Report, ktorý odosiela. Nikdy nečíta sieťové adresy WebRTC.
- Uložené vo vyrovnávacej pamäti
- Výsledok možno uchovať pre reláciu, takže prihlásenie a následná pokladnica stoja jednu identifikáciu.
<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>Vaše údaje, vaše pravidlá
Vytvorené pre dátové požiadavky, ktoré dostanete.
Hostované v EU
Udalosti sa ukladajú v AWS eu-west-1, kým ich neodstránite, alebo na 1, 3 alebo 5 rokov, ak si to vyberiete.
Vymažte external ID jedným volaním
Odstráňte external ID a všetky jeho udalosti a prepojenia so zariadeniami zmiznú. Použite pri žiadosti o údaje alebo zrušenom účte.
Prehliadač nemá nič, podľa čoho by sa mohol riadiť
Príznaky sa do prehliadača nikdy nedostanú. Režim zero trust ide ďalej: prehliadač dostane iba request ID.
Vaša prvá identifikácia za pár minút
Public key v prehliadači, secret key na vašom serveri.