Skip to main content
Optional, and the single highest-value thing you can add after the widget itself. With it, a customer who is logged in to your site is recognised by the agent — their website chat, their WhatsApp messages and their history become one customer in your inbox. Without it, every visitor is anonymous. That is the safe default, not a broken one.

Why a signature is required

Anyone can put anything in a POST body. If an unsigned user id were enough to bind somebody to stored history, a stranger could read another customer’s conversations by guessing their user id. So the claim is signed with a secret only your server and we hold, and we recompute it before acting on it. A claim that does not verify is dropped — never downgraded to “probably them”.

The recipe

Your identity secret is on the agent’s Channels page. Keep it on your server; it must never reach the browser.
Then render it into the widget tag:
If your site is a single-page app, call ThinnestAgents.identify({…}) after sign-in instead.

Which fields do what

Only the id is signed as an identity. Name and email are written to the record but never used to find one, so changing a display name does not mean re-signing anything.
The phone number is the field that makes WhatsApp join up, and it is exactly why the whole claim has to be signed. A phone number is trivially guessable, so an unsigned one would hand a stranger the matching WhatsApp history. Leave it out and everything else still works.

Per channel, not per workspace

The secret belongs to a channel. If you run a brochure site and a logged-in app, install two widgets with two secrets — a key lifted from the brochure site must not be able to assert identities against the app.

Common mistakes

The digest must be of the user id alone. A digest of the secret itself is a constant and verifies nothing.
That publishes the secret to every visitor, and the secret is the only thing stopping anyone forging any customer’s identity.
It is treated as unverified and bound to nothing. The widget works; the customer stays anonymous, and it looks exactly like a working feature.