The effective status
reasonmixes two vocabularies: the restriction reason codes when a restriction decides the status, and the market’s own reasons otherwise. Branch onmarketStatusfirst.- Never
OPENby default. When the market status cannot be read, the token isUNAVAILABLEwithMARKET_STATUS_UNKNOWN. SPECIAL_RESTRICTIONis listed, not enforced. It appears inactiveRestrictions(for example removals-only during an election window) but does not by itself make the tokenUNAVAILABLE. Read itsreasonCodeand act on it.- Asset-level view:
GET /assets/{assetId}/statuslists theASSETandUNDERLYING_MARKETrestrictions only, with no market status. - Filter your tokens by status:
GET /tokens?status=UNAVAILABLEorstatus=OPEN&status=CLOSEDfilters onmarketStatus. It is not the token object’sstatus(ACTIVE/RETIRED):status=ACTIVEanswers400.
Restrictions as events
Each restriction is one object with its ownrestrictionId and version, published on every token stream it applies to:
Apply restriction events like any other: deduplicate, keep the highest
version per restrictionId, replace with data. A restriction is in force from the moment you hold a version without removedAt until you hold one with it.
What to do when one arrives
- On
ca.restriction.added, stop trading the tokens inscope: the one named forTOKEN, every token of the asset for the other two. Confirm withGET /tokens/{tokenId}/statusif you want the computed answer. - On
ca.restriction.updated, update what you show; nothing resumes. - On
ca.restriction.removed, resume, for that restriction. Another one may still be in force: readactiveRestrictions, or keep your own set keyed byrestrictionId.
Underlying market signals
ForUNDERLYING_MARKET restrictions, Securitize’s events follow the listing exchange’s halt and resumption and can arrive with a short delay. They are best effort: halts and suspensions are published when known to Securitize, and short limit-up/limit-down pauses are not. Your obligation to stop trading alongside the exchange stays with you and your own market data; use these events for confirmation and audit, and marketStatus for the computed answer at any moment.
Market-wide halts arrive as one UNDERLYING_MARKET restriction per asset you hold, all with the same reasonCode MARKET_WIDE_CIRCUIT_BREAKER, and are lifted together.