Skip to main content
Two packages, covering the two halves of an Endstate integration: talking to the API, and reading a physical tap. Everything they produce speaks the same vocabulary as the REST API - chip_id, external_id, session_token - so nothing is renamed and you can mix SDK and direct API calls freely.

Core SDK

The Endstate API in TypeScript - typed operations, typed errors, retries derived from the spec, and tap sessions. Runs in Node, edge, and the browser. @endstate-sdk/core

Reader SDK

Read Endstate chips from your own application - desktop USB readers and Android phone NFC behind one interface. @endstate-sdk/reader
Both are TypeScript-first, ship zero runtime dependencies, and are licensed Apache-2.0. Each is versioned on its own - upgrading one never forces you to upgrade the other - and follows semantic versioning, so a patch or minor release will not break your build.

Which do I need?

  • Calling the API from TypeScript, on a server or in a browser? Start with the Core SDK quickstart. It covers every operation in the spec, so you rarely need anything else.
  • Pairing or verifying physical chips from a browser app an operator uses? Add the Reader SDK for the tap itself, then follow Pair chips from your own application for the full operator flow. The two compose: the reader produces chip_id and e, and Core’s verify() turns them into a session.
  • Not using TypeScript? Call the API directly; see the guides for end-to-end flows.

How they fit together

Core is the foundation and has no dependency on the reader. The reader is standalone too, so an operator tool that only encodes chips does not pull in an API client. Used together, the reader captures the tap and Core exchanges it for a session:

Working with AI tools

Every SDK package ships an AGENTS.md for AI coding agents, and these docs are agent-readable - see Use Endstate with AI tools.