आपके स्टैक के साथ काम करने के लिए बनाया गया
एक header वाला सरल REST, typed Node client, MCP server, signed webhooks और custom domains। जब तक आप न चाहें, अपने server पर कुछ भी install करने की ज़रूरत नहीं।
शुरू करने के पाँच तरीके
वही इवेंट, 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 webhook जाँच और सील्ड परिणाम खोलने की सुविधा वाला टाइप्ड Node क्लाइंट।
- MCP सर्वर आपके प्रोजेक्ट का API AI असिस्टेंट के लिए टूल्स के रूप में।
- Webhooks हर नई इवेंट आपके सर्वर पर साइन करके POST की जाती है, retries के साथ।
- कस्टम डोमेन एक DNS रिकॉर्ड के साथ अपने सबडोमेन से एजेंट सर्व करें, जैसा हर लाइव साइट को करना चाहिए।
- सील किए गए परिणाम एक एन्क्रिप्टेड परिणाम, जिसे आपका सर्वर API कॉल किए बिना खोल सकता है।
किसी भी पेज पर एजेंट
फ़ॉर्म खुलने पर इसे शुरू करें और उपयोगकर्ता कार्रवाई करने पर request ID मांगें। यह बैकग्राउंड में चलता है और पेज को कभी ब्लॉक नहीं करता।
- कोई डिपेंडेंसी नहीं
- आज़माने के लिए script टैग के रूप में /agent.js, या एक छोटा npm लोडर जो अपने डोमेन के माध्यम से मौजूदा एजेंट लाता है।
- कोई भी फ़्रेमवर्क
- React, Svelte, Vue, Next.js, Nuxt, Angular, या कोई नहीं।
- लगभग एक किलोबाइट
- यह जो रिपोर्ट भेजता है। यह कभी WebRTC नेटवर्क पते नहीं पढ़ता।
- कैश किया गया
- परिणाम सत्र के लिए सहेजा जा सकता है, इसलिए लॉगिन और उसके बाद का चेकआउट एक ही पहचान की लागत में होता है।
<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>आपका डेटा, आपके नियम
आपको मिलने वाली डेटा रिक्वेस्ट के लिए बनाया गया।
EU में होस्ट किया गया
इवेंट्स आपके हटाने तक AWS eu-west-1 में संग्रहीत रहते हैं, या अगर आप वह विकल्प चुनते हैं तो 1, 3 या 5 साल तक।
एक ही कॉल में external ID हटाएं
external ID हटाएँ, और उससे जुड़ी हर इवेंट और डिवाइस लिंक भी हट जाएगी, डेटा अनुरोध या बंद खाते के लिए।
ब्राउज़र के लिए कुछ भी मिलान करने को नहीं
फ्लैग कभी ब्राउज़र तक नहीं पहुँचते। ज़ीरो ट्रस्ट मोड और आगे जाता है: ब्राउज़र को केवल एक request ID मिलता है।
कुछ ही मिनटों में आपकी पहली पहचान
ब्राउज़र में public key, आपके सर्वर पर secret key।