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.
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
Theexecution 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
The recipient’s wallet address (EVM address,
0x followed by 40 hex
characters). Ownership of the unit transfers to this address.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
Thesubmission 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.
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
The claim’s unique identifier.
The unit being transferred.
The recipient wallet address.
The current owner’s wallet address.
One of
claiming, claimed, expired, failed.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.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.

