Boot the widget
The widget’s first call, from the developer’s own page. Two shapes share it.
Anonymous — a publishable key and the device’s anonymous_id go in; a visitor contact and an unverified session come back. First touch (UTMs, referrer, landing page) is captured here, on the anonymous contact, which is where attribution is born.
Federated — external_id alongside, optionally email and the HMAC hash. The hash proves the external_id and nothing else: an email arriving by boot is stored as an attribute and never resolves to or merges with an existing contact, because anyone can type an email and only a magic link proves one.
A valid hash makes the session verified. An absent hash leaves it unverified — usable in development, marked in the panel, barred from anything another person’s data could leak through. A wrong hash is refused outright, never downgraded, so a typo in the developer’s HMAC code cannot be invisible.
Rate limited to 240 requests per minute per IP, and 240 per minute per publishable key.
Corpo
uk_pk_live_… or uk_pk_test_….
Required unless external_id is present.
First touch, captured on the visitor at first load and preserved through a merge. All fields optional; empty means unknown.
Federated mode only.
Stored as an attribute. Never an identity edge on this route.
hex(HMAC-SHA256(identity_secret, external_id)). Computed on the developer's server, never in the browser.
Resposta
The contact already existed.
One of the developer's own users — anonymous or identified.
Contact session token, uk_ct_….
The publishable key's environment.
live, test True only when a valid HMAC hash proved the external_id.