Создадено да се вклопи во вашиот стек
Едноставен 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 loader што го вчитува тековниот agent преку вашиот домен.
- Која било рамка
- 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 на вашиот сервер.