Napravljeno da se uklopi u vaš stack
Једноставан REST са једним headerom, типизирани Node клијент, MCP сервер, потписани webhook-ови и прилагођени домени. Ништа не треба инсталирати на сервер, осим ако не желите.
Пет начина за улазак
Исти догађај, из shell-а, вашег кода, асистента или 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 Читајте, претражујте и бришите догађаје и посетиоце једним headerom.
- Серверски SDK Типизовани Node клијент са провером webhook-ова и отварањем запечаћених резултата.
- MCP сервер API vašeg projekta kao alati za AI asistenta.
- Webhooks Сваки нови догађај се шаље POST-ом на ваш сервер, потписан, са поновним покушајима.
- Прилагођени домен Служите агента из свог поддомена једним DNS записом, као што сваки живи сајт треба.
- Запечаћени резултати Šifrovani rezultat koji vaš server otvara bez pozivanja API-ja.
Агент на свакој страници
Покрените га када се форма отвори и затражите request ID када корисник нешто уради. Ради у позадини и никада не блокира страницу.
- Bez zavisnosti
- /agent.js kao script oznaku za probu, ili mali npm loader koji preuzima trenutni agent preko vašeg domena.
- Било који framework
- React, Svelte, Vue, Next.js, Nuxt, Angular или nijedan.
- Око килобајт
- Izveštaj koji šalje. Nikada ne čita WebRTC mrežne adrese.
- Keširano
- Rezultat može da se čuva za sesiju, pa prijava i plaćanje posle toga koštaju jednu identifikaciju.
<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ši podaci, vaša pravila
Направљено за захтеве за подацима које ћете добијати.
Хостовано у ЕУ
Događaji se čuvaju u AWS eu-west-1 dok ih ne obrišete, ili 1, 3 ili 5 godina ako tako izaberete.
Обришите external ID једним позивом
Избришите external ID и сви његови догађаји и везе с уређајима нестају. За захтев за подацима или затворен налог.
Ништа за прилагођавање прегледачу
Zastavice nikada ne stižu do pregledača. Zero trust režim ide dalje: pregledač dobija samo request ID i ništa drugo.
Ваша прва идентификација, за неколико минута
Public key у прегледачу, secret key на вашем серверу.