Skip to main content
A claim transfers on-chain ownership of a unit to a recipient wallet address. It is the action that hands a verified physical item to a new owner. Claims are authorized by a session token — the user must have just tapped that unit’s chip. This binds an ownership change to a real, recent tap of the physical product.
A claim hands a unit to its first owner, and Endstate can submit it for you. To move a unit between owners afterwards, use a transfer — the current owner submits that one from their own wallet.
For a step-by-step walkthrough from the tap to on-chain confirmation, follow the Claim a unit guide. This page is the reference.

How claiming works

1

Verify a tap

The user taps the item’s chip; your server verifies it (POST /v1/chips/ {chip_id}) and receives a session token scoped to that chip and unit.
2

Create the claim

Call POST /v1/units/{unit_id}/claims with the recipient’s wallet address and an execution mode, authorized by the session token. Endstate signs the transfer authorization for the unit’s token.
3

Settle on-chain

Depending on the execution mode, Endstate either submits the transfer transaction for you, or returns a transaction for you to broadcast.
4

Poll for status

Poll GET /v1/units/{unit_id}/claims/{claim_id} until status is claimed.

Execution modes

The execution field controls who broadcasts the on-chain transaction. With client_broadcast, the response includes submission: { to, data }to is the collection’s contract address and data is the encoded transfer call. Send it as a transaction on the network the collection was provisioned on.

Authorization

POST /v1/units/{unit_id}/claims requires a session token (end_sess_...), and that token must come from a tap of the same unit’s chip. An API key alone cannot create a claim — claiming always traces back to a physical tap. GET /v1/units/{unit_id}/claims/{claim_id} accepts either an API key or a session token, so your backend or your client can poll for status. (Client-side polling from a browser requires your web origin on your organization’s CORS allowlist — see Session tokens.)

Create a claim

POST /v1/units/{unit_id}/claims
to
string
required
The recipient’s wallet address (EVM address, 0x followed by 40 hex characters). Ownership of the unit transfers to this address.
execution
string
default:"endstate_relay"
endstate_relay — Endstate submits the transaction for you. client_broadcast — Endstate returns a transaction in submission for you to broadcast.

Endstate relay

Client broadcast

Pass "execution": "client_broadcast". The response adds a submission object — broadcast it to the network yourself.

Broadcasting the transaction

The submission is already authorized by Endstate’s signature, so any account with gas on the collection’s network can broadcast it — your own funded account or relayer works, and the recipient never signs. You need an RPC endpoint for that network and a sender account with gas.
Use any EVM wallet client or signer — see the viem or ethers docs for wallet setup. After broadcasting, poll the claim for status.

Claim status

GET /v1/units/{unit_id}/claims/{claim_id} — poll this until the claim settles.
The signed transfer authorization is valid for 30 minutes from claim creation; a claim that does not settle in that window becomes expired. With endstate_relay this rarely matters — Endstate submits immediately. With client_broadcast, broadcast the submission well within the window.

The claim object

id
string (UUID)
The claim’s unique identifier.
unit_id
string (UUID)
The unit being transferred.
to
string
The recipient wallet address.
from
string
The current owner’s wallet address.
status
string
One of claiming, claimed, expired, failed.
submission
object | null
Present only for client_broadcast. The transaction to broadcast — to (the collection’s contract address) and data (the encoded transfer call). null or absent for endstate_relay.
created_at
string (ISO-8601)
When the claim was created.

Errors

Branch on error.code, not the HTTP status. See Errors for the full envelope.

Next steps

Session tokens

How a tap produces the session token that authorizes a claim.

Units

The unit a claim transfers, and its issuance lifecycle.