> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tilt.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Index Corporate Actions

> Corporate actions affecting the index on the given date.

The feed includes every CA the index applied — dividends, special dividends, splits, stock distributions, bonus issues, removals (delisting/bankruptcy/M&A), spin-offs, and exchange changes.

With no `date`, returns the most recent date that has corporate actions for this index (an event feed, so this differs from /levels and /constituents, which default to the latest level date). Because dividends are included, the default date typically lands on a recent dividend/distribution date rather than the last structural event. When the index has no corporate actions for the requested or defaulted date, returns 200 with an empty `data` array and `effective_date: null` (not 404).

Each Primary row describes one CA. Any CA can carry Redistribution rows describing per-ticker share changes attributed to it. Removal CAs (delisting, bankruptcy, M&A, sanction removal, and an exchange change that moves the ticker off a home-exchange-restricted index's eligible exchange) carry rows whenever value was reassigned. A removal is not guaranteed to have at least one row; an empty `redistribution_rows` array can mean either the CA produced no share change or no recorded attribution exists for it yet (see below).

**Redistribution rows — content and reconciliation:**
Redistribution rows are recorded by the index at the time it applied the corporate action and describe the action's isolated, as-applied effect (the acquirer's legs, any replacement constituent it forced, and the level-preserving rescale) — not a re-derivation. An empty `redistribution_rows` array means either the CA produced no share change (the typical case for vanilla dividends, identifier-rotation exchange changes, and other no-op CAs) or no recorded attribution exists for that CA; the two cases are not separately signaled. When two or more removals share a single rescale on the same proposal, that shared rescale is recorded identically on each contributing removal's redistribution rows — both jointly caused it. Do not sum `redistribution_shares` across CAs on the same proposal; each row set independently describes the joint effect. Implicit signals are `old_index_shares=null` for a newly-added constituent and a negative `redistribution_shares` for a survivor whose shares were scaled down.

**Spin-offs:** the deal terms are reported via the `spin_off` sub-object. By default (`spin_off_eligible=true`) the spun-off company is ADDED as a new constituent, the parent is retained, and the new name is re-evaluated against the index rules at the next reconstitution; the addition appears as a Redistribution row when recorded (`old_index_shares=null`, `new_index_shares` equal to the spun-off shares). When `spin_off_eligible=false` the spun-off company is dropped and its value redistributed pro-rata (delisting-style) on the settlement date; that share change is reflected in the settlement date's constituent shares, not as Redistribution rows attached to this spin-off row.

**As-applied event values:** the event-input values on each Primary row and its sub-object (cash_per_share, exchange_ratio, deal_type, dist_pct, price adjustment factor, etc.) are frozen as of when the index applied the action, so a later edit to a still-pending corporate action does not change them. Security identity — the ticker the action targets and any acquirer/spun-off ticker — instead reflects the current corporate-action record, not the as-applied snapshot.

## Description

Retrieves corporate actions for a specific index.

## Parameters

### Path Parameters

| Parameter  | Required | Description                        |
| ---------- | -------- | ---------------------------------- |
| `index_id` | Yes      | The unique identifier of the index |

### Query Parameters

| Parameter | Required | Description                                                                                     |
| --------- | -------- | ----------------------------------------------------------------------------------------------- |
| `date`    | No       | Effective date in `YYYY-MM-DD` format. Defaults to the most recent date with corporate actions. |

### Default Behavior

* If `date` is not provided, returns corporate actions for the most recent date with corporate actions


## OpenAPI

````yaml GET /api/v1/indexes/{index_id}/corporate-actions
openapi: 3.0.3
info:
  title: TILT
  version: 0.0.1
servers: []
security: []
paths:
  /api/v1/indexes/{index_id}/corporate-actions:
    get:
      tags:
        - api
      description: >-
        Corporate actions affecting the index on the given date.


        The feed includes every CA the index applied — dividends, special
        dividends, splits, stock distributions, bonus issues, removals
        (delisting/bankruptcy/M&A), spin-offs, and exchange changes.


        With no `date`, returns the most recent date that has corporate actions
        for this index (an event feed, so this differs from /levels and
        /constituents, which default to the latest level date). Because
        dividends are included, the default date typically lands on a recent
        dividend/distribution date rather than the last structural event. When
        the index has no corporate actions for the requested or defaulted date,
        returns 200 with an empty `data` array and `effective_date: null` (not
        404).


        Each Primary row describes one CA. Any CA can carry Redistribution rows
        describing per-ticker share changes attributed to it. Removal CAs
        (delisting, bankruptcy, M&A, sanction removal, and an exchange change
        that moves the ticker off a home-exchange-restricted index's eligible
        exchange) carry rows whenever value was reassigned. A removal is not
        guaranteed to have at least one row; an empty `redistribution_rows`
        array can mean either the CA produced no share change or no recorded
        attribution exists for it yet (see below).


        **Redistribution rows — content and reconciliation:**

        Redistribution rows are recorded by the index at the time it applied the
        corporate action and describe the action's isolated, as-applied effect
        (the acquirer's legs, any replacement constituent it forced, and the
        level-preserving rescale) — not a re-derivation. An empty
        `redistribution_rows` array means either the CA produced no share change
        (the typical case for vanilla dividends, identifier-rotation exchange
        changes, and other no-op CAs) or no recorded attribution exists for that
        CA; the two cases are not separately signaled. When two or more removals
        share a single rescale on the same proposal, that shared rescale is
        recorded identically on each contributing removal's redistribution rows
        — both jointly caused it. Do not sum `redistribution_shares` across CAs
        on the same proposal; each row set independently describes the joint
        effect. Implicit signals are `old_index_shares=null` for a newly-added
        constituent and a negative `redistribution_shares` for a survivor whose
        shares were scaled down.


        **Spin-offs:** the deal terms are reported via the `spin_off`
        sub-object. By default (`spin_off_eligible=true`) the spun-off company
        is ADDED as a new constituent, the parent is retained, and the new name
        is re-evaluated against the index rules at the next reconstitution; the
        addition appears as a Redistribution row when recorded
        (`old_index_shares=null`, `new_index_shares` equal to the spun-off
        shares). When `spin_off_eligible=false` the spun-off company is dropped
        and its value redistributed pro-rata (delisting-style) on the settlement
        date; that share change is reflected in the settlement date's
        constituent shares, not as Redistribution rows attached to this spin-off
        row.


        **As-applied event values:** the event-input values on each Primary row
        and its sub-object (cash_per_share, exchange_ratio, deal_type, dist_pct,
        price adjustment factor, etc.) are frozen as of when the index applied
        the action, so a later edit to a still-pending corporate action does not
        change them. Security identity — the ticker the action targets and any
        acquirer/spun-off ticker — instead reflects the current corporate-action
        record, not the as-applied snapshot.
      operationId: api_v1_indexes_corporate_actions_retrieve
      parameters:
        - in: query
          name: date
          schema:
            type: string
          description: Effective date (YYYY-MM-DD). Defaults to most recent date with CAs.
        - in: path
          name: index_id
          schema:
            type: string
          required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexCorporateActionsResponse'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexAPIError'
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexAPIError'
          description: ''
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexAPIError'
          description: ''
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndexAPIError'
          description: ''
      security:
        - ProAPIToken: []
components:
  schemas:
    IndexCorporateActionsResponse:
      type: object
      properties:
        meta:
          $ref: '#/components/schemas/IndexCorporateActionsMeta'
        data:
          type: array
          items:
            $ref: '#/components/schemas/IndexCorporateAction'
      required:
        - data
        - meta
    IndexAPIError:
      type: object
      description: |-
        Canonical error shape for the index API endpoints: every 4xx response is
        a single object ``{"error": {"code", "message"}}``.
      properties:
        error:
          $ref: '#/components/schemas/IndexAPIErrorDetail'
      required:
        - error
    IndexCorporateActionsMeta:
      type: object
      properties:
        index_id:
          type: string
          format: uuid
        effective_date:
          type: string
          format: date
          nullable: true
        event_count:
          type: integer
      required:
        - effective_date
        - event_count
        - index_id
    IndexCorporateAction:
      type: object
      properties:
        proprietary_id:
          type: string
          nullable: true
        isin:
          type: string
          nullable: true
        cusip:
          type: string
          nullable: true
        ticker:
          type: string
        mic:
          type: string
          nullable: true
        security_name:
          type: string
        ca_event_id:
          type: string
        ca_event_type:
          type: string
          description: >-
            CamelCase event category, e.g. CashDividend, StockDistribution,
            RightsIssue, ShareBuyback, MergerAcquisition, SpinOff, SplitOff,
            Removal, SpecialCashDividend, ExchangeChange, Suspension.
        ca_sub_type:
          type: string
          nullable: true
        row_type:
          type: string
        parent_ca_event_id:
          type: string
          nullable: true
        paf:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        old_index_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
        new_index_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
        close_price_pre_event:
          type: string
          format: decimal
          pattern: ^-?\d{0,16}(?:\.\d{0,4})?$
          nullable: true
        close_price_post_event:
          type: string
          format: decimal
          pattern: ^-?\d{0,16}(?:\.\d{0,4})?$
          nullable: true
        redistribution_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
        cash_dividend:
          allOf:
            - $ref: '#/components/schemas/CashDividend'
          nullable: true
        stock_distribution:
          allOf:
            - $ref: '#/components/schemas/StockDistribution'
          nullable: true
        rights_issue:
          allOf:
            - $ref: '#/components/schemas/RightsIssue'
          nullable: true
        share_buyback:
          allOf:
            - $ref: '#/components/schemas/ShareBuyback'
          nullable: true
        merger_acquisition:
          allOf:
            - $ref: '#/components/schemas/MergerAcquisition'
          nullable: true
        spin_off:
          allOf:
            - $ref: '#/components/schemas/SpinOff'
          nullable: true
        split_off:
          allOf:
            - $ref: '#/components/schemas/SplitOff'
          nullable: true
        removal:
          allOf:
            - $ref: '#/components/schemas/Removal'
          nullable: true
        identifier_change:
          allOf:
            - $ref: '#/components/schemas/IdentifierChange'
          nullable: true
        redistribution_rows:
          type: array
          items:
            $ref: '#/components/schemas/RedistributionRow'
      required:
        - ca_event_id
        - ca_event_type
        - ca_sub_type
        - cash_dividend
        - close_price_post_event
        - close_price_pre_event
        - cusip
        - identifier_change
        - isin
        - merger_acquisition
        - mic
        - new_index_shares
        - old_index_shares
        - paf
        - parent_ca_event_id
        - proprietary_id
        - redistribution_rows
        - redistribution_shares
        - removal
        - rights_issue
        - row_type
        - security_name
        - share_buyback
        - spin_off
        - split_off
        - stock_distribution
        - ticker
    IndexAPIErrorDetail:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code, e.g. not_found, invalid_parameter.
        message:
          type: string
          description: Human-readable error description.
      required:
        - code
        - message
    CashDividend:
      type: object
      properties:
        gross_dividend_per_share:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
        dividend_currency:
          type: string
        dividend_fx_rate:
          type: string
          format: decimal
          pattern: ^-?\d{0,4}(?:\.\d{0,6})?$
      required:
        - dividend_currency
        - dividend_fx_rate
        - gross_dividend_per_share
    StockDistribution:
      type: object
      properties:
        t_term:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        distributed_ratio:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
          description: Shares of the distributed security received per parent share held.
        distributed_proprietary_id:
          type: string
          nullable: true
          description: >-
            proprietary_id (tilt_asset_id) of the distributed security added as
            a constituent.
        distributed_isin:
          type: string
          nullable: true
          description: ISIN of the distributed security.
        distributed_cusip:
          type: string
          nullable: true
          description: CUSIP of the distributed security.
        distributed_ticker:
          type: string
          nullable: true
          description: Ticker symbol of the distributed security.
      required:
        - distributed_cusip
        - distributed_isin
        - distributed_proprietary_id
        - distributed_ratio
        - distributed_ticker
        - t_term
    RightsIssue:
      type: object
      properties:
        subscription_price:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        t_rights_ratio:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
      required:
        - subscription_price
        - t_rights_ratio
    ShareBuyback:
      type: object
      properties:
        buyback_price:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        t_buyback_ratio:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
      required:
        - buyback_price
        - t_buyback_ratio
    MergerAcquisition:
      type: object
      properties:
        ma_consideration_type:
          type: string
          nullable: true
        t_stock:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        t_cash:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
        acquirer_proprietary_id:
          type: string
          nullable: true
        acquirer_isin:
          type: string
          nullable: true
        acquirer_cusip:
          type: string
          nullable: true
        acquirer_ticker:
          type: string
          nullable: true
        acquirer_is_constituent:
          type: boolean
          nullable: true
      required:
        - acquirer_cusip
        - acquirer_is_constituent
        - acquirer_isin
        - acquirer_proprietary_id
        - acquirer_ticker
        - ma_consideration_type
        - t_cash
        - t_stock
    SpinOff:
      type: object
      properties:
        spin_off_ratio:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
          description: Shares of the spun-off company received per share of the parent.
        spin_off_eligible:
          type: boolean
          nullable: true
          description: >-
            How the spun-off company is treated in the index. When true (the
            default, including a null config treatment), the spun-off company is
            ADDED as a new constituent (shares = parent shares *
            spin_off_ratio), the parent is retained, and no weight is
            redistributed; the new name is re-evaluated against the index rules
            at the next reconstitution. When false, the spun-off company is not
            retained and its value is redistributed pro-rata across the
            remaining constituents (the delisting-style path) on the settlement
            date; that change is reflected in the settlement date's constituent
            shares, not as Redistribution rows on this spin-off row. False only
            when the config opts in (always_ineligible) or the index restricts
            to a home exchange the spun-off company is not on.
        spun_off_proprietary_id:
          type: string
          nullable: true
          description: proprietary_id (tilt_asset_id) of the spun-off company.
        spun_off_isin:
          type: string
          nullable: true
          description: ISIN of the spun-off company.
        spun_off_cusip:
          type: string
          nullable: true
          description: CUSIP of the spun-off company.
        spun_off_ticker:
          type: string
          nullable: true
          description: Ticker symbol of the spun-off company.
        theoretical_price:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
          description: >-
            Fallback price used to value the spun-off line (or the parent's
            value loss) before the spun-off company has its first real market
            close.
      required:
        - spin_off_eligible
        - spin_off_ratio
        - spun_off_cusip
        - spun_off_isin
        - spun_off_proprietary_id
        - spun_off_ticker
        - theoretical_price
    SplitOff:
      type: object
      properties:
        split_off_ratio:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
          description: >-
            Shares of the split-off company ADDED to the index per parent share
            held: added index shares = parent index shares * split_off_ratio.
            This is the factor the index applied (shares_distributed / parent
            free-float shares outstanding), not the deal's per-tendered-share
            exchange ratio. The parent's offsetting scale-down is on the Primary
            row (old_index_shares -> new_index_shares). Null when the parent's
            free-float shares outstanding isn't available.
        spun_off_proprietary_id:
          type: string
          nullable: true
          description: >-
            proprietary_id (tilt_asset_id) of the split-off company added as a
            constituent.
        spun_off_isin:
          type: string
          nullable: true
          description: ISIN of the split-off company.
        spun_off_cusip:
          type: string
          nullable: true
          description: CUSIP of the split-off company.
        spun_off_ticker:
          type: string
          nullable: true
          description: Ticker symbol of the split-off company.
        theoretical_price:
          type: string
          format: decimal
          pattern: ^-?\d{0,10}(?:\.\d{0,10})?$
          nullable: true
          description: >-
            Fallback price used to value the split-off line before it has its
            first real market close.
      required:
        - split_off_ratio
        - spun_off_cusip
        - spun_off_isin
        - spun_off_proprietary_id
        - spun_off_ticker
        - theoretical_price
    Removal:
      type: object
      properties:
        removal_flag:
          type: string
        removal_price:
          type: string
          format: decimal
          pattern: ^-?\d{0,16}(?:\.\d{0,4})?$
          nullable: true
        redistributed_market_cap:
          type: string
          format: decimal
          pattern: ^-?\d{0,18}(?:\.\d{0,2})?$
          nullable: true
      required:
        - redistributed_market_cap
        - removal_flag
        - removal_price
    IdentifierChange:
      type: object
      properties:
        new_isin:
          type: string
          nullable: true
        new_cusip:
          type: string
          nullable: true
        new_ticker:
          type: string
          nullable: true
        new_mic:
          type: string
          nullable: true
      required:
        - new_cusip
        - new_isin
        - new_mic
        - new_ticker
    RedistributionRow:
      type: object
      properties:
        ca_event_id:
          type: string
        row_type:
          type: string
          description: Always "Redistribution" for these rows.
        parent_ca_event_id:
          type: string
          description: >-
            ca_event_id of the Primary CA this redistribution row is attributed
            to (any CA type, not only removals).
        proprietary_id:
          type: string
          nullable: true
        isin:
          type: string
          nullable: true
        ticker:
          type: string
        old_index_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
          description: >-
            Index shares before the event. Null signals a newly-ADDED
            replacement constituent (fixed-constituent indices): the index added
            this company to fill the removed slot.
        new_index_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
          description: Index shares after the redistribution.
        close_price_pre_event:
          type: string
          format: decimal
          pattern: ^-?\d{0,16}(?:\.\d{0,4})?$
          nullable: true
        redistribution_shares:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
          nullable: true
          description: >-
            Change in index shares from the redistribution (new minus old).
            Positive = shares added to this constituent; a negative value on a
            survivor means its shares were scaled DOWN to make room for an added
            replacement. Rows are recorded by the index at apply time and
            describe the action's isolated, as-applied effect; do NOT sum
            `redistribution_shares` across CAs on the same proposal — when two
            or more removals share a single rescale, that rescale is recorded
            identically on each contributing removal.
      required:
        - ca_event_id
        - close_price_pre_event
        - isin
        - new_index_shares
        - old_index_shares
        - parent_ca_event_id
        - proprietary_id
        - redistribution_shares
        - row_type
        - ticker
  securitySchemes:
    ProAPIToken:
      type: apiKey
      in: header
      name: X-Api-Key

````