[{"data":1,"prerenderedAt":105},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fprivacy-and-consent":3},{"page":4,"toc":96,"updated":104},{"path":5,"title":6,"seoTitle":7,"description":8,"blocks":9},"\u002Fdocs\u002Fprivacy-and-consent","Privacy and consent","Privacy, Consent and Device Identification","What Fingerly collects and what it never does, your role and Fingerly's under data protection law, and how to gate the SDK behind consent where you need it.",[10,13,18,20,23,30,32,35,40,43,48,50,53,55,61,80,82,86,89,91,94],{"type":11,"text":12},"p","Fingerly identifies devices to prevent fraud. This page describes what that involves, so you can describe it accurately to your visitors and choose the right legal basis.",{"type":14,"level":15,"text":16,"id":17},"heading",2,"Roles","roles",{"type":11,"text":19},"You decide when and why visitors are identified, so you are the **controller** of that data. Fingerly processes it on your behalf as your **processor**.",{"type":14,"level":15,"text":21,"id":22},"What is collected","what-is-collected",{"type":24,"items":25},"list",[26,27,28,29],"Characteristics of the device, operating system and browser or app, read within a strict time budget.","On iOS and Android, device identifiers the operating system makes available to apps. Never the advertising identifier. See [App Store and Google Play](\u002Fdocs\u002Fapp-store-privacy).","The visitor's IP address, which Fingerly uses to determine the country, the network, and whether the connection comes through Tor, a VPN, a proxy or a hosting provider.","The tag you send, and the time of the request.",{"type":11,"text":31},"From these, Fingerly derives the visitor ID, the suspect score, and the signals and weights behind it.",{"type":14,"level":15,"text":33,"id":34},"What is never collected","what-is-never-collected",{"type":24,"items":36},[37,38,39],"Page content, form fields or anything a visitor types.","Mouse movements, keystrokes, clipboard contents or session recordings.","Contacts, photos, precise location or anything behind a permission prompt. No SDK ever shows one.",{"type":14,"level":15,"text":41,"id":42},"What Fingerly does not do","what-fingerly-does-not-do",{"type":24,"items":44},[45,46,47],"Set cookies, or store anything in the visitor's browser.","Link visitors across organizations. The same device has a different visitor ID for every customer.","Sell or share visitor data, or use it for advertising.",{"type":11,"text":49},"In apps, the iOS and Android SDKs keep one random installation identifier in your app's own storage, to recognise the installation over time. It is never shared with other apps.",{"type":14,"level":15,"text":51,"id":52},"Consent","consent",{"type":11,"text":54},"Every SDK takes a `consent` option: `granted`, `pending` or `denied`. It defaults to `granted`, which collects as soon as you call the SDK. Where your legal basis for fraud prevention requires consent, load the SDK with `pending` and pass on your consent tool's answer with `setConsent()`.",{"type":24,"items":56},[57,58,59,60],"Until consent is `granted`, `identify()` and `collect()` read nothing from the device, send nothing, and fail with a consent error whose code is `consent_required`.","Withdrawing consent while an identification is running stops it before anything more is sent.","`pending` and `denied` behave the same. Use whichever describes your state.","Loading the SDK never collects or sends anything, whatever the consent state.",{"type":62,"samples":63},"code",[64,68,72,76],{"label":65,"lang":66,"code":67},"JavaScript","ts","import { load, ConsentError } from '@fingerly\u002Fweb-js'\n\nconst fingerly = await load({ apiKey: 'fly_pk_us_production_…', consent: 'pending' })\n\n\u002F\u002F From your consent tool (OneTrust, Cookiebot, your own banner)\nconsentManager.onChange((consent) => {\n  fingerly.setConsent(consent.fraudPrevention ? 'granted' : 'denied')\n})\n\ntry {\n  await fingerly.identify({ tag: 'signup' })\n} catch (error) {\n  if (error instanceof ConsentError) {\n    \u002F\u002F No consent: decide on your server without a request ID.\n  }\n}",{"label":69,"lang":70,"code":71},"React","tsx","export function Providers({ children }: { children: React.ReactNode }) {\n  const { fraudPrevention } = useConsent()\n\n  return (\n    \u003CFingerlyProvider apiKey=\"fly_pk_us_production_…\" consent={fraudPrevention ? 'granted' : 'pending'}>\n      {children}\n    \u003C\u002FFingerlyProvider>\n  )\n}",{"label":73,"lang":74,"code":75},"Swift","swift","let fingerly = try await Fingerly.load(apiKey: \"fly_pk_us_production_…\", consent: .pending)\n\n\u002F\u002F From your consent tool's callback\nfingerly.setConsent(accepted ? .granted : .denied)",{"label":77,"lang":78,"code":79},"Kotlin","kotlin","val fingerly = Fingerly.load(context, apiKey = \"fly_pk_us_production_…\", consent = ConsentState.PENDING)\n\n\u002F\u002F From your consent tool's callback, on any thread\nfingerly.setConsent(if (accepted) ConsentState.GRANTED else ConsentState.DENIED)",{"type":11,"text":81},"Framework bindings wait for consent: identification set to run on mount starts once consent becomes `granted`, and not before. To connect OneTrust, Cookiebot, Google Consent Mode or your own banner, see [consent tools](\u002Fdocs\u002Fconsent-tools).",{"type":83,"tone":84,"text":85},"callout","warning","Under the ePrivacy Directive, reading information from a visitor's device generally needs consent unless it is strictly necessary for a service the visitor requested. Whether fraud prevention qualifies depends on your circumstances. Take legal advice for your use case.",{"type":14,"level":15,"text":87,"id":88},"Telling your visitors","telling-your-visitors",{"type":11,"text":90},"Your privacy notice should say that you use device identification for fraud prevention and security, that Fingerly processes that data on your behalf, and how long it is kept. See [data retention](\u002Fdocs\u002Fdata-retention).",{"type":14,"level":15,"text":92,"id":93},"Requests from visitors","requests-from-visitors",{"type":11,"text":95},"To have data about a visitor accessed or deleted, email [support@fingerly.io](mailto:support@fingerly.io) with the visitor ID and the organization it belongs to.",[97,98,99,100,101,102,103],{"id":17,"text":16,"level":15},{"id":22,"text":21,"level":15},{"id":34,"text":33,"level":15},{"id":42,"text":41,"level":15},{"id":52,"text":51,"level":15},{"id":88,"text":87,"level":15},{"id":93,"text":92,"level":15},"2026-09-17T16:58:12.000Z",1789667797515]