Veidots, lai atbilstu jūsu stekam
Vienkāršs REST ar vienu galvenī, tipizēts Node klients, MCP serveris, parakstīti webhook un pielāgoti domēni. Serverī nekas nav jāinstalē, ja vien to nevēlaties.
Pieci veidi, kā ieiet
Tas pats notikums, no shell, jūsu koda, asistenta vai 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 Lasiet, meklējiet un dzēsiet notikumus un apmeklētājus ar vienu header.
- Servera SDK Tipizēts Node klients ar webhook pārbaudēm un aizzīmogotu rezultātu atvēršanu.
- MCP serveris Jūsu projekta API kā rīki MI asistentam.
- Webhooks Katrs jauns notikums tiek POST nosūtīts uz jūsu serveri, parakstīts, ar atkārtotiem mēģinājumiem.
- Pielāgots domēns Aģentu pasniedziet no sava apakšdomēna ar vienu DNS ierakstu, kā to dara katra aktīva vietne.
- Aizzīmogoti rezultāti Šifrēts rezultāts, ko jūsu serveris atver bez API izsaukuma.
Aģents jebkurā lapā
Palaidiet to, kad tiek atvērta forma, un pieprasiet request ID, kad lietotājs veic darbību. Tas darbojas fonā un nekad nebloķē lapu.
- Bez atkarībām
- /agent.js kā script tagu, lai izmēģinātu, vai neliels npm ielādētājs, kas iegūst pašreizējo aģentu caur jūsu domēnu.
- Jebkurš framework
- React, Svelte, Vue, Next.js, Nuxt, Angular vai neviens.
- Aptuveni kilobaits
- Pārskats, ko tas nosūta. Tas nekad nenolasa WebRTC tīkla adreses.
- Kešatmiņā
- Rezultātu var saglabāt sesijai, tāpēc pieteikšanās un pēc tam veiktais maksājums prasa tikai vienu identifikāciju.
<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>Jūsu dati, jūsu noteikumi
Veidots datu pieprasījumiem, ko saņemsiet.
Mitinā ES
Notikumi tiek glabāti AWS eu-west-1, līdz tos dzēsīsit, vai 1, 3 vai 5 gadus, ja izvēlaties šo opciju.
Dzēsiet external ID ar vienu izsaukumu
Dzēsiet external ID, un visi tā notikumi un ierīču saites tiks dzēstas. Datu pieprasījumam vai slēgtam kontam.
Pārlūkprogrammai nav, pret ko pielāgoties
Karogi nekad nenonāk pārlūkprogrammā. Zero trust režīms iet tālāk: pārlūkprogramma saņem tikai request ID un neko citu.
Jūsu pirmā identifikācija dažu minūšu laikā
Public key pārlūkprogrammā, secret key jūsu serverī.