← FingerprintCONTENT HISTORY

Update to Fingerprint

Snapshot Sep 30, 2026 · 23:11 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "fingerprint-tagging",
  "description": "Attach your own metadata (user IDs, account IDs, order IDs) to Fingerprint identification events using tag and linkedId in the v4 JS Agent, then read it back from the Server API and webhooks. Use to join Fingerprint data with your business data for fraud use-cases, tracking logged-in devices, and analytics.",
  "included_files": [
    {
      "relative_path": "skill.json",
      "size_in_bytes": 241
    },
    {
      "relative_path": "snippets/identify-with-tag.jsx",
      "size_in_bytes": 908
    },
    {
      "relative_path": "snippets/read-tag.js",
      "size_in_bytes": 888
    }
  ],
  "skill_md_contents": "---\nname: fingerprint-tagging\ndescription: Attach your own metadata (user IDs, account IDs, order IDs) to Fingerprint identification events using tag and linkedId in the v4 JS Agent, then read it back from the Server API and webhooks. Use to join Fingerprint data with your business data for fraud use-cases, tracking logged-in devices, and analytics.\n---\n\n# Fingerprint — Tagging events with your data (v4)\n\nMaps to the dashboard **\"Tag an event with your data\"** Get Started step. Tagging attaches your\nown context (user/account/order IDs, a plan name, a flow name) to an identification event so you\ncan join Fingerprint's `visitor_id` and signals with your business data — in the Server API, in\nwebhooks, and in dashboard search.\n\n> **Note the client→server name change:** you send **`tag`** in the client `getData(...)` call, but\n> it comes back on the server event as **`event.tags`** (plural). `linkedId` → `event.linked_id`.\n\n## Two tools\n- **`tag`** — arbitrary JSON metadata stored on the event (e.g. `{ userId, orderId, action }`).\n  Use it to label *what the user was doing* when identified.\n- **`linkedId`** — a string that groups related events under one identifier (e.g. a session id or\n  a user id). Use it to **follow one entity across many events** and to query them together.\n\n## Where it goes\nPass both when you identify, on the client. With the v4 React/Vue/Svelte/Angular SDKs the\nidentify call accepts them:\n\n```js\n// React/Next.js — useVisitorData hook\nconst { getData } = useVisitorData({ immediate: false })\nconst { event_id } = await getData({\n  tag: { action: 'checkout', orderId, plan: 'pro' },\n  linkedId: `user_${userId}`,\n})\n```\n\nSee `snippets/identify-with-tag.jsx` (client) and `snippets/read-tag.js` (server).\n\n## How to apply\n1. **Tag at the moment of the action**, alongside the existing identify call — don't add a second\n   identify just to tag. The action handler already calls `getData()`; pass `tag`/`linkedId` there.\n2. **Put identifiers in `linkedId`, descriptive context in `tag`.** `linkedId` is what you'll\n   filter/group by; `tag` is the payload you read back.\n3. **Send the `event_id` to your backend as usual.** The tag and linkedId come back on the\n   server-side event from `getEvent(eventId)` (`event.tags`, `event.linked_id`) — verify the event\n   first, then trust the tag you yourself set.\n4. **Never put secrets or sensitive PII in a tag** — tags are set from the browser and are visible\n   in the dashboard. Use opaque ids (`user_123`), not emails or tokens.\n5. **Keep tags small and consistent** — a stable shape (`{ action, userId, ... }`) makes dashboard\n   search and downstream joins reliable.\n\n## Verify it worked\nAfter wiring it up, trigger the tagged action once and confirm the tag appears: search recent\nevents in the dashboard (or via `search_events`) and check `event.tags` / `event.linked_id`. This\nis exactly what the Get Started step checks for.\n\n## Framework notes\n- **React / Next.js**: `getData({ tag, linkedId })` from `useVisitorData`.\n- **Vue / Svelte**: same `getData({ tag, linkedId })` on the composable/hook result.\n- **Angular**: `fingerprint.getVisitorData({ tag, linkedId })`.\n- **Plain JS Agent / CDN**: `fp.get({ tag, linkedId })`.\n"
}

SHA-256: 07ef0e703683950bf5f669214e82ba4ff6d9ed2aa032c39339ccf6896d8faa7b