curl --request GET \
--url https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"index_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"effective_date": "2023-12-25",
"event_count": 123
},
"data": [
{
"proprietary_id": "<string>",
"isin": "<string>",
"cusip": "<string>",
"ticker": "<string>",
"mic": "<string>",
"security_name": "<string>",
"ca_event_id": "<string>",
"ca_event_type": "<string>",
"ca_sub_type": "<string>",
"row_type": "<string>",
"parent_ca_event_id": "<string>",
"paf": "<string>",
"old_index_shares": "<string>",
"new_index_shares": "<string>",
"close_price_pre_event": "<string>",
"close_price_post_event": "<string>",
"redistribution_shares": "<string>",
"cash_dividend": {
"gross_dividend_per_share": "<string>",
"dividend_currency": "<string>",
"dividend_fx_rate": "<string>"
},
"stock_distribution": {
"t_term": "<string>",
"distributed_ratio": "<string>",
"distributed_proprietary_id": "<string>",
"distributed_isin": "<string>",
"distributed_cusip": "<string>",
"distributed_ticker": "<string>"
},
"rights_issue": {
"subscription_price": "<string>",
"t_rights_ratio": "<string>"
},
"share_buyback": {
"buyback_price": "<string>",
"t_buyback_ratio": "<string>"
},
"merger_acquisition": {
"ma_consideration_type": "<string>",
"t_stock": "<string>",
"t_cash": "<string>",
"acquirer_proprietary_id": "<string>",
"acquirer_isin": "<string>",
"acquirer_cusip": "<string>",
"acquirer_ticker": "<string>",
"acquirer_is_constituent": true
},
"spin_off": {
"spin_off_ratio": "<string>",
"spin_off_eligible": true,
"spun_off_proprietary_id": "<string>",
"spun_off_isin": "<string>",
"spun_off_cusip": "<string>",
"spun_off_ticker": "<string>",
"theoretical_price": "<string>"
},
"split_off": {
"split_off_ratio": "<string>",
"spun_off_proprietary_id": "<string>",
"spun_off_isin": "<string>",
"spun_off_cusip": "<string>",
"spun_off_ticker": "<string>",
"theoretical_price": "<string>"
},
"removal": {
"removal_flag": "<string>",
"removal_price": "<string>",
"redistributed_market_cap": "<string>"
},
"identifier_change": {
"new_isin": "<string>",
"new_cusip": "<string>",
"new_ticker": "<string>",
"new_mic": "<string>"
},
"redistribution_rows": [
{
"ca_event_id": "<string>",
"row_type": "<string>",
"parent_ca_event_id": "<string>",
"proprietary_id": "<string>",
"isin": "<string>",
"ticker": "<string>",
"old_index_shares": "<string>",
"new_index_shares": "<string>",
"close_price_pre_event": "<string>",
"redistribution_shares": "<string>"
}
]
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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.
curl --request GET \
--url https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tilt.io/api/v1/indexes/{index_id}/corporate-actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"index_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"effective_date": "2023-12-25",
"event_count": 123
},
"data": [
{
"proprietary_id": "<string>",
"isin": "<string>",
"cusip": "<string>",
"ticker": "<string>",
"mic": "<string>",
"security_name": "<string>",
"ca_event_id": "<string>",
"ca_event_type": "<string>",
"ca_sub_type": "<string>",
"row_type": "<string>",
"parent_ca_event_id": "<string>",
"paf": "<string>",
"old_index_shares": "<string>",
"new_index_shares": "<string>",
"close_price_pre_event": "<string>",
"close_price_post_event": "<string>",
"redistribution_shares": "<string>",
"cash_dividend": {
"gross_dividend_per_share": "<string>",
"dividend_currency": "<string>",
"dividend_fx_rate": "<string>"
},
"stock_distribution": {
"t_term": "<string>",
"distributed_ratio": "<string>",
"distributed_proprietary_id": "<string>",
"distributed_isin": "<string>",
"distributed_cusip": "<string>",
"distributed_ticker": "<string>"
},
"rights_issue": {
"subscription_price": "<string>",
"t_rights_ratio": "<string>"
},
"share_buyback": {
"buyback_price": "<string>",
"t_buyback_ratio": "<string>"
},
"merger_acquisition": {
"ma_consideration_type": "<string>",
"t_stock": "<string>",
"t_cash": "<string>",
"acquirer_proprietary_id": "<string>",
"acquirer_isin": "<string>",
"acquirer_cusip": "<string>",
"acquirer_ticker": "<string>",
"acquirer_is_constituent": true
},
"spin_off": {
"spin_off_ratio": "<string>",
"spin_off_eligible": true,
"spun_off_proprietary_id": "<string>",
"spun_off_isin": "<string>",
"spun_off_cusip": "<string>",
"spun_off_ticker": "<string>",
"theoretical_price": "<string>"
},
"split_off": {
"split_off_ratio": "<string>",
"spun_off_proprietary_id": "<string>",
"spun_off_isin": "<string>",
"spun_off_cusip": "<string>",
"spun_off_ticker": "<string>",
"theoretical_price": "<string>"
},
"removal": {
"removal_flag": "<string>",
"removal_price": "<string>",
"redistributed_market_cap": "<string>"
},
"identifier_change": {
"new_isin": "<string>",
"new_cusip": "<string>",
"new_ticker": "<string>",
"new_mic": "<string>"
},
"redistribution_rows": [
{
"ca_event_id": "<string>",
"row_type": "<string>",
"parent_ca_event_id": "<string>",
"proprietary_id": "<string>",
"isin": "<string>",
"ticker": "<string>",
"old_index_shares": "<string>",
"new_index_shares": "<string>",
"close_price_pre_event": "<string>",
"redistribution_shares": "<string>"
}
]
}
]
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}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
dateis not provided, returns corporate actions for the most recent date with corporate actions