Navrženo tak, aby zapadlo do vašeho stacku
Jednoduché REST s jednou hlavičkou, typovaný Node klient, MCP server, podepsané webhooky a vlastní domény. Na váš server nemusíte nic instalovat, pokud nechcete.
Pět způsobů, jak se dostat dovnitř
Stejná událost, ze shellu, z vašeho kódu, od asistenta nebo 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 Čtěte, hledejte a mažte události a návštěvníky jednou hlavičkou.
- Serverové SDK Typovaný Node klient s kontrolou webhooků a otevíráním zapečetěných výsledků.
- MCP server API vašeho projektu jako nástroje pro AI asistenta.
- Webhooks Každá nová událost je odeslána POSTem na váš server, podepsaná, s opakováním.
- Vlastní doména Poskytujte agenta ze subdomény vaší domény pomocí jediného DNS záznamu, jak má každý živý web.
- Zapečetěné výsledky Šifrovaný výsledek, který váš server otevře bez volání API.
Agent na libovolné stránce
Spusťte ji při otevření formuláře a požádejte o request ID, jakmile uživatel něco udělá. Běží na pozadí a nikdy neblokuje stránku.
- Žádné závislosti
- /agent.js jako script tag pro vyzkoušení, nebo malý npm loader, který načítá aktuálního agenta přes vlastní doménu.
- Libovolný framework
- React, Svelte, Vue, Next.js, Nuxt, Angular, nebo žádný.
- Přibližně kilobajt
- Report, který odesílá. Nikdy nečte síťové adresy WebRTC.
- Uloženo v mezipaměti
- Výsledek lze uložit pro relaci, takže přihlášení a následná pokladna stojí jednu identifikaci.
<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 data, vaše pravidla
Vytvořeno pro datové požadavky, které dostanete.
Hostováno v EU
Události se ukládají v AWS eu-west-1, dokud je neodstraníte, nebo po dobu 1, 3 nebo 5 let, pokud to zvolíte.
Smažte external ID jedním voláním
Smažte external ID a všechny jeho události a propojení se zařízeními zmizí. Použijte pro žádost o data nebo uzavřený účet.
Prohlížeč nemá nic, podle čeho by se mohl řídit
Příznaky se do prohlížeče nikdy nedostanou. Režim zero trust jde dál: prohlížeč dostane pouze request ID.
Vaše první identifikace během minut
Public key v prohlížeči, secret key na vašem serveru.