What is a collection?
A collection is a named group of related units — a product line, a drop, or a release. Every unit belongs to exactly one collection, and the collection defines the serial-number namespace shared across all units within it. Create a collection once per product group. Then create units inside it for each individual physical item.Why it matters
Collections let you organize your products and enforce namespace boundaries:- Units within a collection receive sequential serial numbers that are unique within that collection.
- Keeping separate product lines in separate collections avoids serial collisions and makes filtering your unit list predictable.
- A unit cannot exist without a collection. You must create and provision a collection before you can add units to it.
Lifecycle
1
Create the collection
Call
POST /v1/collections. The API returns 201 immediately. The
collection’s contract.status is "deploying", meaning it is being
provisioned. The registry is not yet ready for units.2
Wait for provisioning
Provisioning is asynchronous. Poll
GET /v1/collections/{collection_id}
until contract.status is "active".3
Add units
Once the collection is active, create units inside it with
POST /v1/units,
passing the collection’s id as collection_id.Provisioning status values
If you attempt to create a unit in a collection that has not yet reached
active, the API returns collection.not_active (409).Collection object
Unique identifier for the collection (UUIDv4).
Human-readable name you provided at creation.
Your own identifier for this collection, if you provided one. Unique within
your organization. Useful for correlating with your internal systems. Null if
not set.
Where a user is sent after tapping the chip on any unit in this collection,
unless that unit sets its own
redirect_url. Null if not set — resolution
then falls through to your organization default. See Tap
redirects.Registry details for the collection.
Create a collection
Request fields
A human-readable name for the collection (1–256 characters). For example,
"Spring 2026 Hoodie".A short identifier for the collection (1–4 characters). Derived from
name if
omitted. For example, "S26H".Your own identifier for this collection. Must be unique within your
organization. Omit if you do not need to correlate with an external system.
The network to create the collection on. Optional — when omitted, the
collection is created on your organization’s default network, configured
by Endstate at onboarding. An explicit value must be one of the networks
enabled for your organization (
allowed_chain_ids from GET /v1/settings); any other value returns
validation.failed.Where a user is sent after tapping a chip on any unit in this collection. Must
be a valid absolute URL. Optional — you can also set or change it later with
PATCH /v1/collections/{collection_id}. See Tap
redirects.Example
contract.address is assigned at creation and present immediately; symbol is accepted on create but not returned. Poll GET /v1/collections/{collection_id} until contract.status is "active".
Active collection (polled response)
Endpoints
See the API reference for full request and response schemas.
Next steps
Units
Create units inside a collection to represent individual physical items.
Quickstart
Walk through the full flow: collection, unit, chip, and first verification.
Tap redirects
Send a user to your own destination after they tap a chip in this
collection.

