Създадено да се вписва във вашия стек
Прост REST с един header, типизиран Node клиент, MCP сървър, подписани webhooks и персонализирани домейни. Нищо не се инсталира на вашия сървър, освен ако не искате.
Пет начина за влизане
Същото събитие, от 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 клиент с проверка на webhook и отваряне на запечатани резултати.
- MCP сървър API на проекта ви като инструменти за AI асистент.
- Webhooks Всяко ново събитие се изпраща с POST към вашия сървър, подписано, с повторни опити.
- Персонализиран домейн Сервирайте агента от поддомейн на вашия домейн с един DNS запис, както трябва всеки действащ сайт.
- Запечатани резултати Криптиран резултат, който вашият сървър отваря без извикване на API.
Агентът на всяка страница
Стартирайте го при отваряне на формуляра и поискайте request ID, когато потребителят действа. Работи във фонов режим и никога не блокира страницата.
- Без зависимости
- /agent.js като script таг за опит или малък npm зареждач, който изтегля текущия агент през вашия собствен домейн.
- Всеки framework
- 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>Вашите данни, вашите правила
Създадено за заявките за данни, които ще получите.
Хоствано в ЕС
Събитията се съхраняват в AWS eu-west-1, докато не ги изтриете, или за 1, 3 или 5 години, ако изберете това.
Изтрийте external ID с една заявка
Изтрийте external ID и всички събития и връзки с устройства към него ще бъдат премахнати. За заявка за данни или затворен акаунт.
Няма нищо, към което браузърът да се нагоди
Флаговете никога не достигат до браузъра. Режимът zero trust отива още по-далеч: браузърът получава само request ID.
Първата ви идентификация за минути
Public key в браузъра, secret key на вашия сървър.