Install FindIP Shield in under two minutes
Install from npm for bundled applications or add one script tag directly. Every visit gets a session, risk signals, and auto-detected form events.
npm install
Recommended for React, Next.js, Vue, Vite, and other bundled applications.
npm install @findip/shieldimport { init, track } from '@findip/shield';
init({
siteKey: 'pub_xxxxxxxxx',
privacyMode: 'balanced',
autoTrack: true,
autoDetectForms: true,
});
await track('signup_attempt', { plan: 'free' });The official @findip/shield package includes ESM, CommonJS, and TypeScript declarations. Replace pub_xxxxxxxxx with your public site key from the dashboard.
To attach your own user to each session, pass identify: { userId, email, plan } to init(); the SDK hashes the values in the browser. The Install page's npm snippet has an Identify logged-in visitors toggle that adds this for you; see Identify users and add context.
CDN script tag install
For sites without a bundler, paste before the closing </body> tag. Replace pub_xxxxxxxxx with your public site key from the dashboard.
<script
src="https://cdn.findip.net/shield/v1.js"
data-site-key="pub_xxxxxxxxx"
data-auto-track="true"
data-privacy-mode="balanced">
</script>That's it — the v1.js URL always serves the latest non-breaking 1.x build, so you get fixes and improvements automatically. Prefer to lock down an exact version? See Versions below.
To attach your own user to each session, enable Identify logged-in visitors on the Install page. The snippet then carries the user's ID, email and plan as data-* attributes; the SDK hashes them in the browser before sending. See Identify users and add context.
What happens automatically
data-* attributes._fip_sid) is created.page_view event is sent to FindIP.dataLayer if Google Tag Manager is present.Verify & next steps
Identify your users: events are anonymous until you attach your own user identifier. Push a hashed user ID to the dataLayer or pass it to FindIP.track() so a risky session can be traced back to an account in your system. See Identify users and add context.
Verify the install: open browser DevTools → Network tab and filter for shield/track. You should see POST requests after page load — and the event on your site's dashboard moments later.
Options
All configuration via data-* attributes
| Attribute | Default | Description |
|---|---|---|
data-site-key | required | Your public site key |
data-privacy-mode | balanced | strict, balanced, or advanced |
data-auto-track | true | Auto page view tracking |
data-auto-detect-forms | true | Auto form submit detection |
data-push-to-data-layer | true | Push risk results to the GTM dataLayer |
data-debug | false | Enable console debug logging |
strict privacy mode.Versions
All published SDK builds on the CDN
| Version | URL | SRI hash |
|---|---|---|
v1 (latest 1.x) | https://cdn.findip.net/shield/v1.js | — |
1.9.1 | https://cdn.findip.net/shield/1.9.1/findip-shield.min.js | sha384-/cU3Q0LvX5WyiTbgWG5kpRDHwY0cKtWl1FMKxGdyouAcuTQnAr4geWrKrW4zIaxr |
1.9.0 | https://cdn.findip.net/shield/1.9.0/findip-shield.min.js | sha384-nqqwTlNg99a2WHJhblPvEjzJx/Q8m68rq4i5GMTJp7tQFb9Fm+bDtqFfwE7EQ02G |
1.8.0 | https://cdn.findip.net/shield/1.8.0/findip-shield.min.js | sha384-s2u0HohmDbM4e12SVTLA7C0Sum+DsI5uCNtHlgh3TmdK0ilSMzCi4fl2OC0d3B31 |
1.7.0 | https://cdn.findip.net/shield/1.7.0/findip-shield.min.js | sha384-85U691YpuN0ipEJPYPpdK2IWnPqQq9DhtondXow8MZjborI1BFHa0cQqiMrBVoGA |
1.6.0 | https://cdn.findip.net/shield/1.6.0/findip-shield.min.js | sha384-E56gf1e1SsGWnzGGX6e6RmVRKb8vW4RTzyvZS17ICLWS0ZKdwonB6bqIWJw9n6HC |
1.5.0 | https://cdn.findip.net/shield/1.5.0/findip-shield.min.js | sha384-ZHkLOcacAGSXBALZ4fRQlIEF/w0slyEhyVSdX9rmjrq9o60Vzdj7UhJ0/mJu9lLm |
1.4.0 | https://cdn.findip.net/shield/1.4.0/findip-shield.min.js | sha384-0OUNcvB2USrb38dA9KS4Orv/my1urn6iquUkyCMF1fOGCq5TFU4aeNKALQeUEwae |
1.3.0 | https://cdn.findip.net/shield/1.3.0/findip-shield.min.js | sha384-+dDaz4EuCdh6HuSKFlP05sC2R5bAOupk1rK0Sskd23Pu21xSF/yQLWuHZTdmFVka |
1.2.0 | https://cdn.findip.net/shield/1.2.0/findip-shield.min.js | sha384-KH6w9C2LjmT0BP2dQMLeT45qWSoo0ElBbzzfKOZ37uYIdo7jE3e8a0cuQoKHFU26 |
1.1.1 | https://cdn.findip.net/shield/1.1.1/findip-shield.min.js | sha384-GeIy6YA9lzaIjzHZ/rZwKrHrjkY37iYl40C5qVoWtUuh5mb4nIs79j1lXPWzOv23 |
1.1.0 | https://cdn.findip.net/shield/1.1.0/findip-shield.min.js | sha384-uwbpX8BIGnmr0VmdLjyl1VN40msXMEKAheZW0kJy8DRSEVILrS/3piH8srDhmHmM |
1.0.9 | https://cdn.findip.net/shield/1.0.9/findip-shield.min.js | sha384-T5yBu6mnMnYPNaG1411zldSDyO73DeJqfCAkhAIvslThk1mvhLqWOnlVy8KMwyJV |
1.0.8 | https://cdn.findip.net/shield/1.0.8/findip-shield.min.js | sha384-aJa5dlL7hwJ6DtWQEKKDt6ScyoyaUwd9tayFZod2uWxGU4/s2dGMqzmGa8MWkdAr |
1.0.7 | https://cdn.findip.net/shield/1.0.7/findip-shield.min.js | sha384-bmSqh1lpjT7HOgHC6ashLVMkYXQefCX+pvv0CQDRvdRRSCWYfOgHLsmnQT7PeHQ2 |
1.0.6 | https://cdn.findip.net/shield/1.0.6/findip-shield.min.js | sha384-bF++3gi7opAIskDJwzrfKVtMMSWIB5kqFFuUvIPS/edUz7kXzFpYOMoBBypjBOVx |
1.0.5 | https://cdn.findip.net/shield/1.0.5/findip-shield.min.js | sha384-rwISMrRaCS6RMzWGm8J3VimsKtyhHuJwOc+ZmUYZPyynHyU5kICyoXXQsYlTp/5e |
1.0.4 | https://cdn.findip.net/shield/1.0.4/findip-shield.min.js | sha384-sStx4NQ370t3JTfuEWFjXyE8bjX6BVkL7G5CBq1Vuu+vc/MBVMjXybrKjh5MUrAM |
1.0.1 | https://cdn.findip.net/shield/1.0.1/findip-shield.min.js | sha384-4h6bh1btv0FKVS4QdmCwBQLPJKWjzZnaEiC4KyugJBf8RLfhTNT0fvHvvSelG8Og |
1.0.0 | https://cdn.findip.net/shield/1.0.0/findip-shield.min.js | sha384-PeQP/w5zFyMfV9tAzduMXZi85Z+MsaQ92jaK0L0BBBmp72Qt8exJTtf/776MSD4D |
Pinning an exact version. The rolling v1.js URL is the easiest option and safe for most sites. If your security policy requires a fixed, verifiable build, load a versioned URL with subresource integrity instead — the browser then refuses to run the script unless it exactly matches the hash:
<script
src="https://cdn.findip.net/shield/1.9.1/findip-shield.min.js"
integrity="sha384-/cU3Q0LvX5WyiTbgWG5kpRDHwY0cKtWl1FMKxGdyouAcuTQnAr4geWrKrW4zIaxr"
crossorigin="anonymous"
data-site-key="pub_xxxxxxxxx"
data-auto-track="true"
data-privacy-mode="balanced">
</script>Pinned URLs are immutable — the file at a versioned URL never changes. Upgrading means updating both the version in the URL and the integrity hash (your site's Install page always shows the current pinned snippet). SRI hashes can't be used with v1.js, since its content changes as new 1.x builds are released.