Úgy készült, hogy illeszkedjen a stackjébe
Egyszerű REST egyetlen fejléccel, típusos Node kliens, MCP szerver, aláírt webhookok és egyéni domainek. Nem kell semmit telepíteni a szerverre, hacsak nem szeretnéd.
Öt belépési mód
Ugyanaz az esemény, shellből, a kódodból, asszisztensből vagy push-ból.
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' })- Szerver API Olvasson, keressen és töröljön eseményeket és látogatókat egyetlen headerrel.
- Szerver SDK Típusos Node kliens webhook-ellenőrzéssel és lezárt eredmények megnyitásával.
- MCP-szerver A projekt API-ja eszközökként AI-asszisztensek számára.
- Webhooks Minden új esemény aláírva, POST kéréssel érkezik a szerverére, újrapróbálkozással.
- Egyéni domain Az ügynököt a saját aldomainedről szolgáltasd ki egyetlen DNS-rekorddal, ahogy minden élő oldalnak kell.
- Lezárt eredmények Titkosított eredmény, amelyet a szerver API hívás nélkül nyit meg.
Az ügynök bármely oldalon
Indítsa el az űrlap megnyitásakor, és kérjen request ID-t, amint a felhasználó cselekszik. Háttérben fut, és soha nem blokkolja az oldalt.
- Nincs függőség
- /agent.js script-címkeként a kipróbáláshoz, vagy egy kis npm-betöltő, amely a saját domained keresztül tölti be az aktuális agentet.
- Bármilyen keretrendszer
- React, Svelte, Vue, Next.js, Nuxt, Angular, vagy egyik sem.
- Körülbelül egy kilobájt
- A általa küldött jelentés. Soha nem olvassa be a WebRTC hálózati címeket.
- Gyorsítótárazva
- Az eredmény a munkamenetre menthető, így a bejelentkezés és az azt követő fizetés egy azonosításba kerül.
<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>Az Ön adatai, az Ön szabályai
Az adatkérésekhez készült, amelyeket kapsz.
Az EU-ban üzemeltetve
Az események az AWS eu-west-1 régióban tárolódnak, amíg törölöd őket, vagy 1, 3 vagy 5 évig, ha ezt választod.
Külső azonosító törlése egyetlen hívással
Töröljön egy external ID-t, és minden hozzá tartozó esemény és eszközkapcsolat törlődik. Adatkérésre vagy lezárt fiókhoz.
Nincs semmi, amihez a böngésző igazodhatna
A flagek soha nem jutnak el a böngészőig. A zero trust mód ennél is tovább megy: a böngésző csak egy request ID-t kap.
Első azonosítása percek alatt
Public key a böngészőben, secret key a szerveren.