This guide takes you from an empty account to a verified identification. It uses the browser SDK and Node.js; every step has the same shape in other languages. New accounts start with $3 of credit, and development keys are free.
Step 1: Create an account and choose a region
Sign up for the Fingerly dashboard. The owner of a new organization chooses where its visitor data will live, and the choice is permanent. See regions.
Step 2: Create a public key
In Integration > SDK keys, create a public key in the development environment and add the origin your app runs on. A public key with no allowed origins refuses every request.
http://localhost:3000Step 3: Identify a visitor in the browser
npm install @fingerly/web-jsimport { load } from '@fingerly/web-js' const fingerly = await load({ apiKey: 'fly_pk_us_development_…' }) form.addEventListener('submit', async (event) => { event.preventDefault() const { requestId } = await fingerly.identify({ tag: 'login' }) await fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: form.email.value, password: form.password.value, requestId }), }) })Step 4: Create a secret key and read the result on your server
Create a secret key in the same environment and store it in your server's environment. The secret is shown once.
When the login request reaches your backend, read the event its
requestIdnames.import { load } from '@fingerly/node' const fingerly = load({ secretKey: process.env.FINGERLY_SECRET_KEY! }) const event = await fingerly.events.get('01a0a84b-e6a2-7c09-9f51-0b3d7a26c8e4')Step 5: Decide
Check the event belongs to this action and is recent, then use the level to choose what happens. Start by recording what you would have done before enforcing it.
import { load, FingerlyAPIError } from '@fingerly/node' const fingerly = load({ secretKey: process.env.FINGERLY_SECRET_KEY! }) const MAX_AGE_MS = 2 * 60 * 1000 export async function decide(orderId: string, requestId: string) { let event try { event = await fingerly.events.get(requestId) } catch (error) { if (error instanceof FingerlyAPIError && error.status === 404) return 'refuse' throw error } if (event.tag !== 'checkout:' + orderId) return 'refuse' if (Date.now() - Date.parse(event.occurred_at) > MAX_AGE_MS) return 'refuse' if (event.suspect_level === 'high') return 'review' if (event.suspect_level === 'medium') return 'challenge' return 'allow' }
Try it
Open your page, log in, then open Identification > Events in the dashboard. Your identification is there with its visitor, score and signals. Now try a private window, a VPN or an automated browser, and watch the score change.
Go live
- Create production public and secret keys with your real origins, and deploy them.
- Production identifications cost $0.003 each. Add funds or turn on auto top-up in Settings > Billing.
- Review your risk weights and threshold against staging traffic before you enforce decisions.
- Add webhooks if you want results pushed to you.