Corporate actions

All 13 action types, their typed details, and the lifecycle stages nobody else emits.

The taxonomy

Robinhood publishes 13 corporate-action types. Each action carries a details object containing exactly one key, matching its declared type. All rate fields are decimal strings.

FieldTypeDescription
FORWARD_SPLIT / REVERSE_SPLITdetailsunderlying_symbol, old_rate, new_rate.
CASH_DIVIDENDdetailsunderlying_symbol, rate in USD per share.
STOCK_DIVIDENDdetailsunderlying_symbol, rate in shares per share.
SPIN_OFFdetailssource_underlying_symbol, source_rate, new_underlying_symbol, new_rate.
CASH_MERGERdetailsacquiree_underlying_symbol, cash_rate.
STOCK_MERGERdetailsacquirer and acquiree symbols with their rates.
STOCK_AND_CASH_MERGERdetailsAs STOCK_MERGER plus cash_rate.
REDEMPTION / NAME_CHANGE / WORTHLESS_REMOVALdetailsVariant-specific fields.
RIGHTS_DISTRIBUTION / UNIT_SPLITdetailsVariant-specific fields.

Lifecycle stages

Robinhood's REST endpoint gives you the action. It does not give you the lifecycle — when the contract will pause, how long until the multiplier takes effect, or a stream to subscribe to. We reconstruct that by joining /corporate-actions against /assets and the onchain UIMultiplierUpdated events.

FieldTypeDescription
ACTION_ANNOUNCEDstageFirst appears as IN_PROGRESS.
MULTIPLIER_PENDINGstagepending_multiplier is set; carries effective time and countdown.
PAUSE_SCHEDULEDstageThe pause window is known.The critical one. A large multiplier update requires a scheduled contract pause — a knowable, advance-warned price discontinuity.
PAUSEDstageContract paused onchain.
MULTIPLIER_APPLIEDstageUIMultiplierUpdated fires; carries old, new and effective timestamp.
UNPAUSEDstageTrading resumes.
ACTION_COMPLETEDstageStatus flips to COMPLETED.

Subscribe

for await (const event of client.corporateActions.stream({  stages: ["PAUSE_SCHEDULED", "MULTIPLIER_PENDING"],  replayInProgress: true,   // don't miss a window already scheduled})) {  console.log(    event.tokenSymbol,    event.type,    `effective in ${event.secondsUntilEffective}s`,  );}

Correctness

Correctness note

Where Robinhood's REST data and onchain state disagree about a multiplier, onchain wins and we log the divergence. Small updates apply immediately and automatically; large ones require a pause window and manual confirmation. Treating both the same way will surprise you during a split.

Related