https://api2.endstate.io.
The mental model
- Collection - a group of related items (a product line, a drop, a release). Create a collection first; it defines the namespace that units within it share.
- Unit - the unique digital record for a single physical item. One unit maps to one physical product.
- Chip - a real, physical NFC chip (an NTAG 424 DNA) attached to or embedded in the product. Pair a chip to a unit to link the hardware to its digital record. Each tap produces a fresh, one-time credential.
- Verification - pass that credential to the API to confirm the product is authentic. The API records the tap and returns a session token.
- Session token - short-lived proof that a specific chip was just tapped. Use it to authorize unit-scoped actions without exposing your API key.
Quickstart
Create a collection, add a unit, pair a chip, and run your first
verification in minutes.
Credentials
Learn about API keys, session tokens, and publishable keys - the credentials
the API uses.
Core concepts
Understand collections, units, chips, and the verification model in depth.
API reference
Full endpoint reference with request and response schemas.
How it works
- Create a collection - define a group for your items. The collection is provisioned asynchronously; poll until it is ready before adding units.
- Create a unit - add a digital record for each physical item inside the collection.
- Pair a chip - link the physical NFC chip on the item to the unit. This triggers issuance: the unit receives a serial number within the collection.
- User taps - the tap URL delivers a
chip_idand a one-time credential (evalue) to your application. - Verify - send
chip_idandetoPOST /v1/taps. The API validates the credential, records the tap, and returns the unit’s metadata plus a session token. Call it from your server with an API key, or straight from your page with a publishable key - same endpoint either way. - Use the session token - pass it to
GET /v1/session-tokens/currentfrom your client to confirm scope without exposing the API key.
is_test: true) and use POST /v1/test-helpers/taps to simulate a tap.
Next steps
- Follow the Quickstart to run a complete verification flow in a few minutes.
- Read Core concepts for a deeper look at how collections, units, and chips relate to each other.

