ออกแบบมาให้เข้ากับ stack ของคุณ
REST แบบเรียบง่ายด้วย header เดียว, Node client แบบมี type, MCP server, webhook ที่ลงนามแล้ว และโดเมนแบบกำหนดเอง ไม่ต้องติดตั้งอะไรบนเซิร์ฟเวอร์ของคุณ เว้นแต่คุณต้องการ
5 วิธีในการเริ่มต้น
เหตุการณ์เดียวกัน จาก 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 แบบมี type พร้อมการตรวจสอบ webhook และการเปิดผลลัพธ์ที่ปิดผนึก
- เซิร์ฟเวอร์ MCP API ของโปรเจกต์คุณในรูปแบบเครื่องมือสำหรับผู้ช่วย AI
- Webhooks ทุกเหตุการณ์ใหม่จะถูก POST ไปยังเซิร์ฟเวอร์ของคุณ พร้อมลายเซ็นและการลองใหม่
- โดเมนที่กำหนดเอง ให้บริการ agent จากซับโดเมนของคุณด้วย DNS record เพียงรายการเดียว ตามแนวทางของเว็บไซต์ทั่วไป
- ผลลัพธ์แบบปิดผนึก ผลลัพธ์ที่เข้ารหัสแล้ว ซึ่งเซิร์ฟเวอร์ของคุณเปิดได้โดยไม่ต้องเรียก API
เอเจนต์ในทุกหน้า
เริ่มทำงานเมื่อฟอร์มเปิด และขอ request ID เมื่อผู้ใช้ดำเนินการ ทำงานในเบื้องหลังและไม่บล็อกหน้าเว็บ
- ไม่มี dependencies
- /agent.js ในรูปแบบแท็ก script เพื่อลองใช้ หรือ npm loader ขนาดเล็กที่ดึง agent ปัจจุบันผ่านโดเมนของคุณเอง
- เฟรมเวิร์กใดก็ได้
- React, Svelte, Vue, Next.js, Nuxt, Angular หรือไม่ใช้เลย
- ประมาณ 1 กิโลไบต์
- รายงานที่ส่งออกไป ไม่เคยอ่านที่อยู่เครือข่าย 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 แล้วเหตุการณ์และการเชื่อมโยงอุปกรณ์ทั้งหมดจะถูกลบไปด้วย ใช้สำหรับคำขอข้อมูลหรือบัญชีที่ปิดแล้ว
ไม่มีอะไรให้เบราว์เซอร์ปรับตาม
Flag จะไม่ถูกส่งไปยังเบราว์เซอร์เลย โหมด zero trust ไปไกลกว่านั้น: เบราว์เซอร์จะได้รับเพียง request ID เท่านั้น
การระบุตัวตนครั้งแรกของคุณ ภายในไม่กี่นาที
public key ในเบราว์เซอร์ secret key บนเซิร์ฟเวอร์ของคุณ