Sopii sinun pinoosi kanssa
Yksinkertainen REST yhdellä headerilla, tyypitetty Node-asiakas, MCP-palvelin, allekirjoitetut webhookit ja omat domainit. Palvelimelle ei tarvitse asentaa mitään, ellet halua.
Viisi tapaa aloittaa
Sama tapahtuma, shellistä, koodistasi, avustajasta tai push-viestistä.
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 Lue, hae ja poista tapahtumia ja vierailijoita yhdellä headerilla.
- Palvelin-SDK Tyypitetty Node-asiakas webhook-tarkistuksilla ja suojattujen tulosten avaamisella.
- MCP-palvelin Projektisi API työkaluina tekoälyavustajalle.
- Webhookit Jokainen uusi tapahtuma lähetetään palvelimellesi POST-pyynnöllä, allekirjoitettuna ja uudelleenyrityksillä.
- Mukautettu verkkotunnus Tarjoa agentti omasta aliverkkotunnuksesta yhdellä DNS-tietueella, kuten jokaisen toimivan sivuston tulee.
- Sinetöidyt tulokset Salattu tulos, jonka palvelimesi avaa ilman API-kutsua.
Agentti kaikilla sivuilla
Käynnistä, kun lomake avautuu, ja pyydä request ID, kun käyttäjä toimii. Se toimii taustalla eikä koskaan estä sivua.
- Ei riippuvuuksia
- /agent.js script-tagina kokeiluun tai pieni npm-lataaja, joka hakee ajantasaisen agentin omen verkkotunnuksen kautta.
- Mikä tahansa framework
- React, Svelte, Vue, Next.js, Nuxt, Angular tai ei mitään.
- Noin kilotavu
- Sen lähettämä raportti. Se ei koskaan lue WebRTC-verkko-osoitteita.
- Välimuistissa
- Tulos voidaan säilyttää istunnon ajan, joten kirjautuminen ja sitä seuraava kassa vaativat vain yhden tunnistuksen.
<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>Datasi, sääntösi
Rakennettu saamiesi datapyyntöjen tarpeisiin.
Isännöity EU:ssa
Tapahtumat tallennetaan AWS eu-west-1 -palveluun, kunnes poistat ne, tai 1, 3 tai 5 vuodeksi, jos valitset sen.
Poista external ID yhdellä kutsulla
Poista external ID, jolloin sen kaikki tapahtumat ja laitelinkit poistuvat. Käytä tietopyyntöihin tai suljettuihin tileihin.
Selaimella ei ole mitään, mihin säätyä
Liput eivät koskaan päädy selaimeen. Zero trust -tila menee pidemmälle: selain saa vain request ID:n.
Ensimmäinen tunnistus minuuteissa
Public key selaimessa, secret key palvelimellasi.