Φτιαγμένο για να ταιριάζει με το stack σας
Απλό REST με ένα header, typed Node client, διακομιστής MCP, υπογεγραμμένα webhooks και προσαρμοσμένα domains. Τίποτα δεν χρειάζεται εγκατάσταση στον διακομιστή σας, εκτός αν θέλετε.
Πέντε τρόποι εισόδου
Το ίδιο συμβάν, από ένα 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 Διαβάστε, αναζητήστε και διαγράψτε συμβάντα και επισκέπτες με ένα header.
- SDK διακομιστή Τυποποιημένος Node client με έλεγχο webhook και άνοιγμα σφραγισμένων αποτελεσμάτων.
- Διακομιστής MCP Το API του έργου σας ως εργαλεία για έναν βοηθό AI.
- Webhooks Κάθε νέο συμβάν αποστέλλεται με POST στον διακομιστή σας, υπογεγραμμένο, με επαναδοκιμές.
- Προσαρμοσμένος τομέας Σερβίρετε τον agent από ένα subdomain σας με μία εγγραφή DNS, όπως κάθε ενεργός ιστότοπος.
- Σφραγισμένα αποτελέσματα Ένα κρυπτογραφημένο αποτέλεσμα που ο server σας ανοίγει χωρίς να καλέσει το API.
Ο agent σε κάθε σελίδα
Ξεκινήστε το όταν ανοίγει η φόρμα και ζητήστε ένα request ID όταν ο χρήστης ενεργήσει. Εκτελείται στο παρασκήνιο και δεν μπλοκάρει ποτέ τη σελίδα.
- Χωρίς εξαρτήσεις
- /agent.js ως ετικέτα script για δοκιμή, ή ένας μικρός npm loader που ανακτά τον τρέχοντα agent μέσω του δικού σας domain.
- Οποιοδήποτε framework
- React, Svelte, Vue, Next.js, Nuxt, Angular ή καμία.
- Περίπου ένα kilobyte
- Η αναφορά που στέλνει. Δεν διαβάζει ποτέ διευθύνσεις δικτύου WebRTC.
- Στην cache
- Ένα αποτέλεσμα μπορεί να διατηρηθεί για τη συνεδρία, ώστε η σύνδεση και το επόμενο checkout να κοστίζουν μία ταυτοποίηση.
<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>Τα δεδομένα σας, οι κανόνες σας
Φτιαγμένο για τα αιτήματα δεδομένων που θα λαμβάνετε.
Φιλοξενείται στην ΕΕ
Τα συμβάντα αποθηκεύονται στο AWS eu-west-1 μέχρι να τα διαγράψετε, ή για 1, 3 ή 5 χρόνια αν επιλέξετε αυτή την επιλογή.
Διαγράψτε ένα external ID με μία κλήση
Διαγράψτε ένα external ID και όλα τα γεγονότα και οι συνδέσεις συσκευών του θα διαγραφούν. Για αίτημα δεδομένων ή κλειστό λογαριασμό.
Τίποτα για να ρυθμιστεί ο browser
Οι σημαίες δεν φτάνουν ποτέ στον browser. Η λειτουργία zero trust πάει ακόμα πιο μακριά: ο browser λαμβάνει μόνο ένα request ID.
Η πρώτη σας ταυτοποίηση, σε λίγα λεπτά
Ένα public key στον browser, ένα secret key στον server σας.