Được xây dựng để phù hợp với stack của bạn
REST đơn giản với một header, Node client có kiểu dữ liệu, máy chủ MCP, webhook có chữ ký và tên miền tùy chỉnh. Không cần cài đặt gì trên máy chủ trừ khi bạn muốn.
Năm cách bắt đầu
Cùng một sự kiện, từ shell, mã của bạn, trợ lý hoặc 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 Đọc, tìm kiếm và xóa sự kiện và khách truy cập chỉ với một header.
- SDK máy chủ Client Node có kiểu dữ liệu, hỗ trợ kiểm tra webhook và mở kết quả đã niêm phong.
- Máy chủ MCP API dự án của bạn dưới dạng công cụ cho trợ lý AI.
- Webhook Mỗi sự kiện mới được POST tới máy chủ của bạn, có chữ ký và thử lại.
- Tên miền tùy chỉnh Phục vụ agent từ một subdomain của bạn chỉ với một bản ghi DNS, như mọi trang web đang hoạt động nên làm.
- Kết quả được niêm phong Kết quả được mã hóa mà máy chủ của bạn mở ra mà không cần gọi API.
Agent trên mọi trang
Khởi động khi biểu mẫu mở và yêu cầu request ID khi người dùng thao tác. Chạy ở nền và không bao giờ chặn trang.
- Không có dependencies
- /agent.js dưới dạng thẻ script để thử, hoặc một npm loader nhỏ lấy agent hiện tại qua tên miền của bạn.
- Bất kỳ framework nào
- React, Svelte, Vue, Next.js, Nuxt, Angular, hoặc không dùng gì cả.
- Khoảng một kilobyte
- Báo cáo mà nó gửi đi. Nó không bao giờ đọc địa chỉ mạng WebRTC.
- Đã lưu cache
- Kết quả có thể được lưu cho phiên, nên đăng nhập và thanh toán sau đó chỉ tốn một lần nhận diện.
<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>Dữ liệu của bạn, quy tắc của bạn
Được xây dựng cho các yêu cầu dữ liệu bạn sẽ nhận.
Lưu trữ tại EU
Các sự kiện được lưu trữ trên AWS eu-west-1 cho đến khi bạn xóa chúng, hoặc trong 1, 3 hoặc 5 năm nếu bạn chọn tùy chọn đó.
Xóa external ID chỉ trong một lần gọi
Xóa một external ID, mọi sự kiện và liên kết thiết bị của nó cũng sẽ bị xóa, dùng cho yêu cầu dữ liệu hoặc tài khoản đã đóng.
Không có gì để trình duyệt điều chỉnh theo
Flag không bao giờ đến được trình duyệt. Chế độ zero trust còn đi xa hơn: trình duyệt chỉ nhận một request ID.
Lần nhận dạng đầu tiên của bạn, chỉ trong vài phút
Public key trong trình duyệt, secret key trên máy chủ.