Skip to main content
A corporate action keeps one id, sourceCaId, for its whole life, and gets a new version on every change. Each version is published as one event whose data is the whole object as of that version, and can be read back at any time. Your job is to keep the latest version of each one and to react to what changed.

The lifecycle

Not every corporate action goes through every status: a mandatory cash dividend never opens an election, and ops-executed types can move straight from CONFIRMED to SETTLING.

The events, version by version

Whatever the event, apply it the same way: if version is higher than what you hold, replace the object with data. changedFields lists the dot paths that differ from the previous version (terms.grossAmountPerShare, dates.exDate) so you can tell what to show or notify. A dividend, through five versions:

Replacements

When an issuer withdraws an event and announces a new one, the new corporate action is a new sourceCaId with supersedesCaId pointing at the old one, and the old one is cancelled in the same instant with supersededByCaId pointing at the new one. Two events, two objects, one step. Keep both: the old one is the audit trail, the new one is what applies. Several corporate actions can be active on one asset at the same time, for example a dividend and a shareholder meeting. Each has its own id; relatedCaIds links the ones that belong together, such as a merger and its appraisal option.

Read the current state

The object has no tokenId: a corporate action is registered once per asset and applies to every chain. The events carry the tokenId of the stream they were published on.
  • Any version, as published: GET /corporate-actions/{sourceCaId}/versions/{version} returns the object as it stood at that version, which is what the event of that version carried in data.
  • Everything on a token: GET /tokens/{tokenId}/corporate-actions, latest version of each, with status, caType, from and to filters. from/to match a corporate action when any of its dates falls in the range.

Reading the terms

terms depends on caType; options and venueActions tell you what holders and your venue need to do. Corporate actions lists the terms of each type. Three things hold for all of them:
  • Amounts are decimal strings. Parse them as decimals, never as floats.
  • Every published date and, for cash distributions and splits, every term is always present, null when not known or not applicable. dataCompleteness says whether anything is still null because it is pending.
  • A caType you do not know is informational. Store it, show description and documents if venueActions.displayToHolders is set, and keep applying versions.

Dates to watch

What is settled, and where, is in settlement on the COMPLETED version: distribution contracts, transaction hashes and aggregate totals for the asset. Individual payments are read on chain, from those contracts and the holders’ balances.