Skip to main content
The 26-character suffixes are time-sortable, but ordering must rely on version and sequence, never on id values.

Assets and tokens

A CET exists once as an asset and is deployed as one token per chain. GET /assets shows each asset with its deployments; GET /tokens shows the same deployments as a flat list, each with its assetId. Both show only the deployments linked to your account, and chainId narrows either to one chain. A corporate action belongs to the asset and applies on every chain. It is published once per token stream of the asset you hold, so a partner on one chain receives it once and a partner on two chains twice, each copy with its own sourceEventId and sequence and with data.tokenId naming the stream. Reference data about the underlying (ticker, isin, mic, lei, issuerName) can change, for example on a ticker change, and is never a key.

Streams and sequence

Every token is one stream. Each event carries stream.id (the tokenId) and a sequence that strictly increases within that stream. Use it to order the events of one token; across tokens there is no order to rely on. sequence has gaps by design: the stream carries events for every partner that holds the token, and you receive only yours.

Versions

version is per object and increases by exactly 1 on every published change. It is what you apply by: keep the highest version you have seen for each sourceCaId, restrictionId and tokenId, and ignore an event with a lower or equal one. GET /corporate-actions/{sourceCaId}/versions/{version} returns any version of a corporate action as it was published.

Scoping

Every response and every event is scoped to the tokens and chains linked to your account:
  • Lists show your tokens only, and an asset’s deployments your deployments only.
  • An id outside your account answers 404, the same as an id that does not exist: TOKEN_NOT_FOUND, ASSET_NOT_FOUND, CA_NOT_FOUND, WEBHOOK_EVENT_NOT_FOUND.
  • Webhooks and the event list carry only events on your tokens.