chip_id and one-time e. Verifying that tap is a single call - POST /v1/taps - and it takes either credential:
One endpoint, one response shape, and the same result either way: a session token bound to that tap. Pick the backendless path if your verify page is static or you have no server to run.
Prerequisites
- Registered items - a collection, a unit per item, and a paired chip. See Set up your catalog.
- A secret API key (
end_sk_...), used server-side only. Needed to configure redirects either way. - A page on your domain to receive taps (the redirect destination).
- Backendless only: your publishable key from
GET /v1/publishable-keys, and your page’s origin on your browser allow-list.
1
Point taps at your page
Set a From now on, a tap on any item covered by that redirect sends the user to your URL with the tap’s The most specific redirect wins (unit → collection → org default). See Tap redirects for the full resolution order.
redirect_url to the page you’ll host. Choose the level that matches how broadly it applies - a single unit, a whole collection, or your organization default:chip_id and e appended:2
Read the tap on your page
Both paths start here - pull the two values off the query string.With
@endstate-sdk/core, tryParseTapUrl does the reading for you and returns null when the page carries no tap - see Tap sessions.3
Verify the tap
A successful verify is the proof of authenticity - it can only be produced by a genuine chip that was just tapped.See Verify a unit for the full response, the session-token model, and error handling.
- With a backend
- Without a backend
Forward the two values to your server. Your browser code never calls Endstate with your secret key.Your server verifies the tap. The unit comes back with the session, so you are
done in one call.
4
Render the result
Render a branded authenticity view from the
unit - its name, attributes, and serial (unit.collection.token.serial). With a backend, return the unit to your page and pass the session_token.token (end_sess_...) along if a follow-on action needs it; it’s safe in the browser, unlike your API key. Backendless, the page already holds both.A successful verify means authentic. A failure (chip.invalid_e_value, chip.already_scanned) means the tap couldn’t be confirmed - show a “tap again” state rather than asserting the item is fake on a single failed tap.The session token also authorizes claiming the unit - transferring
ownership to a recipient. You can add that to your page as a next step. See
Claim a unit.
Next steps
Verify a unit
The full server-side verification flow and its response in depth.
CORS origins
Allow-listing the origins your page is served from, required for the
backendless path.
Tap redirects
Resolution order and how to set redirects per unit, collection, or org.

