Corporate Actions
Explore corporate actions for the assets behind Pyth price feeds with the Pyth Intelligence API
Corporate actions are events that affect an asset's price or identity, including dividends, splits, ticker changes and delistings. The Pyth Intelligence API provides corporate action records for the assets behind Pyth price feeds.
Each feed references an asset through base_asset. The /assets/{id}/corporate_actions endpoint returns the events that belong to that asset.
The examples in the following guide use October 2026 API responses and follow Apple, feed 922, except where an example names another asset. The IDs and spines in the examples are permanent.
Configure requests
Send the Pyth-Version header on every request. The current version is 2026-09-29. Each request also requires an API key as a bearer credential. In a browser, use an access token from POST /auth/token instead.
BASE=https://pyth.dourolabs.app/v3/intelligence
curl -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/feeds/922?expand=base_asset"The header pins the response structure. A request without it receives the server's default version, which can change on a release, so set the header in the client's shared request configuration. An unsupported version returns 400 with code version_unsupported, and the message lists the supported versions.
Retrieve a feed's corporate actions
Start from the feed, then read the events for its base_asset.
1. Find the asset behind the feed
Request GET /feeds/922?expand=base_asset using the command above. The feed path accepts a numeric Lazer feed ID, the feed's id or a spine such as equity.aapl.usd.57sc.
With expand=base_asset, the response includes the asset inline. The following excerpt shows the asset ID and spine for the next request:
{
"type": "feed",
"id": "feed-01m14btkssejctyrzpnxzga945",
"pyth_lazer_id": 922,
"spine": "equity.aapl.usd.57sc",
"symbol": "Equity.US.AAPL/USD",
"base_asset": {
"type": "asset",
"id": "asset-01m0a6sd8me54bsx692f90ws91",
"slug": "equity.aapl",
"spine": "equity.aapl.1ccs",
"ticker": "AAPL",
"full_name": "APPLE INC",
"class": "equity",
"status": "active"
}
}Without expand, base_asset contains only the asset ID. A feed without a linked asset, such as Crypto.BTC/USD, has no base_asset.
The symbol filter resolves a Lazer symbol to its feed:
curl -G -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/feeds" \
--data-urlencode "symbol=Equity.US.AAPL/USD"This returns a list containing the matching feed.
2. Request the asset's events
Pass the base_asset ID to the asset's corporate actions endpoint:
curl -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/assets/asset-01m0a6sd8me54bsx692f90ws91/corporate_actions?limit=2"The endpoint also accepts an asset spine. A request to /assets/equity.aapl.1ccs/corporate_actions retrieves Apple's events without a feed lookup.
The API returns events newest first:
{
"type": "list",
"data": [
{
"type": "corporate_action",
"id": "ca-01m14cxqtkenq8n0qvdc3rxx2m",
"event_type": "cash_dividend",
"ex_date": "2026-08-10",
"record_date": "2026-08-10",
"pay_date": "2026-08-13",
"declaration_date": "2026-07-30",
"gross_amount": "0.270000",
"status": "applied",
"applies_to": "asset-01m0a6sd8me54bsx692f90ws91",
"paid_in": "asset-01m14btkhresy9fe9afcf95sht",
"meta": { "recorded_at": "2026-08-28T14:39:01.654Z" }
},
{
"type": "corporate_action",
"id": "ca-01m14cxqv2er7v6ggstgbva6n3",
"event_type": "cash_dividend",
"ex_date": "2026-05-11",
"record_date": "2026-05-11",
"pay_date": "2026-05-14",
"declaration_date": "2026-04-30",
"gross_amount": "0.270000",
"status": "applied",
"applies_to": "asset-01m0a6sd8me54bsx692f90ws91",
"paid_in": "asset-01m14btkhresy9fe9afcf95sht",
"meta": { "recorded_at": "2026-08-28T14:39:01.654Z" }
}
],
"continues": true,
"next": "MjAyNi0wNS0xMXxjYS0wMW0xNGN4cXYyZXI3djZnZ3N0Z2J2YTZuMw",
"meta": { "recorded_at": "2026-10-05T13:47:11.817Z" }
}To retrieve one event directly, request /corporate_actions/{id}.
3. Resolve asset references
Each event's applies_to identifies the asset it affects. A dividend's paid_in identifies its currency asset.
Add expand=paid_in to inline the currency, or fetch it separately with GET /assets/{id}. The expand=applies_to parameter inlines the affected asset.
In the response above, paid_in refers to the US dollar asset, whose spine is fx.usd.6w8c. Currencies use the same asset model as equities, with class: "fx".
Filter and paginate events
Both /corporate_actions and /assets/{id}/corporate_actions support the same event and date filters. The first searches across assets. The second limits results to one asset.
| Filter | Accepted values |
|---|---|
event_type | One event type or a comma-separated list |
status | One status or a comma-separated list |
ex_date, record_date, pay_date, declaration_date, effective_date | A date or comma-separated date bounds |
Event types and statuses are case-insensitive. Unknown filter values return 400.
For dates, a bare YYYY-MM-DD selects that day. Prefix a date with gte:, gt:, lte:, lt: or eq: to set a bound. Filters combine, so this request selects splits with an ex-date in November or December 2025:
curl -G -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/corporate_actions" \
--data-urlencode "event_type=split" \
--data-urlencode "ex_date=gte:2025-11-01,lt:2026-01-01"The filter status=confirmed,announced selects events with either status.
List responses contain type, data, continues, next and meta. When continues is true, pass the next value unchanged as the after query parameter to fetch the following page. Repeat the original filters, limit, expand and effective on every page request. Do not parse or construct cursors.
The default limit is 50 and the maximum is 100. The API sorts corporate actions newest first by ex_date, or by effective_date when there is no ex-date.
Read historical state
Every read accepts effective, an RFC 3339 instant. The response is the state at that moment, from what the API knows today. Omit effective to get the current state.
curl -G -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/assets/equity.aapl.1ccs/corporate_actions" \
--data-urlencode "effective=2026-06-01T00:00:00Z"This lists Apple's events as of June 1, 2026. The newest event is the dividend with ex-date 2026-05-11. The list's meta.effective_at echoes the requested instant.
URL-encode timestamps that contain a + offset. The command above uses --data-urlencode to encode the parameter.
Interpret assets and events
Asset records identify the instruments behind price feeds. Corporate action records describe the events that affect those instruments.
Asset identifiers
An asset's id and spine are stable identifiers suitable for persistent keys. A spine provides a readable handle that works wherever an ID does. The API never reuses spines. The slug, such as equity.aapl, can change.
Assets also carry descriptive fields such as ticker and full_name, a class such as equity or fx, and a status such as active, delisted, merged or retired. The identifiers array holds external identifiers, such as a Nasdaq symbol. visibility describes access to the asset. Responses contain only assets visible to the authenticated caller.
meta.recorded_at indicates when the API recorded the data in the response.
Event fields
Each corporate action represents one event for an asset. The API omits fields that do not apply or have no known value.
| Field | Meaning |
|---|---|
event_type | The kind of corporate action |
status | announced → confirmed → applied, or cancelled |
ex_date | The first trading day the price reflects the event |
effective_date | The date an identity event takes effect. Never present together with ex_date |
record_date | The date that determines entitlement to a distribution |
pay_date | The date holders receive the distribution |
declaration_date | The date the issuer declared a dividend, if the issuer publishes it |
gross_amount | Dividend per share before withholding tax, in the paid_in currency |
net_amount | Dividend per share after published deductions, where available |
split_from, split_to | Old and new share counts for a split |
previous_ticker, new_ticker | The symbols before and after a ticker change |
applies_to | Reference to the affected asset |
paid_in | Reference to a dividend's currency asset |
Amounts and ratios are decimal strings, such as "0.270000" or "10.0000000000". Parse them with a decimal type rather than a floating-point type.
Cash dividends
The reference dividend amount is gross_amount. Some dividends, mostly on ADRs, also include net_amount. A dividend without gross_amount has net_amount as its only amount. Published net amounts can reflect fees as well as withholding tax.
The API includes a dividend once its issuer publishes an amount. The API does not return payment dates alone when an issuer announces them before the amount. Each dividend therefore has an amount and a paid_in currency. Most also have a declaration_date.
If an issuer cancels a published dividend, the API retains its record with status: "cancelled".
Splits and reverse splits
split_from old shares become split_to new shares. The following excerpt shows the fields for Netflix's 2025 ten-for-one split:
{
"event_type": "split",
"ex_date": "2025-11-17",
"record_date": "2025-11-10",
"pay_date": "2025-11-14",
"split_from": "1.0000000000",
"split_to": "10.0000000000",
"status": "applied"
}To compare prices before and after the ex-date, divide the earlier prices by split_to / split_from. For this split, divide by 10.
A reverse_split uses the same fields. A one-for-eight reverse split has split_from: "8.0000000000" and split_to: "1.0000000000".
Ticker changes and delistings
A ticker_change includes effective_date, previous_ticker and new_ticker. A delisting includes effective_date. These identity events have no ex-date.
Handle errors and schema changes
Errors use a consistent response structure:
{
"error": {
"category": "auth",
"code": "credential_missing",
"message": "authentication required: pass a Pyth Lazer access token as a bearer credential (`Authorization: Bearer <token>`)"
}
}Branch on code. Error messages may change.
| HTTP status | Code | Cause |
|---|---|---|
401 | credential_missing | The request omits a bearer credential |
401 | credential_unknown | The API does not recognize the token |
400 | version_unsupported | The API does not serve the requested version |
400 | parameter_invalid | A query parameter is unknown. The message names it and lists the route's accepted parameters |
404 | resource_missing | No feed, asset or corporate action matches the requested ID or spine |
Generate client types from the versioned OpenAPI spec:
curl -H "Authorization: Bearer $TOKEN" \
-H "Pyth-Version: 2026-09-29" \
"$BASE/openapi/2026-09-29.json"The spec requires the same authentication as the data endpoints and defines their paths, parameters and response schemas.
Enumerations such as class, status and event_type include unknown and can gain values. Treat an unrecognized value as unknown.
Coverage in October 2026
Pyth sources corporate actions from EDI and updates them daily. Coverage includes the assets behind Pyth Lazer's US equity and ETF feeds, about 100 securities, with history from September 2025 onward. All dividends in the covered history specify US dollars as their payment currency.
| Event type | Availability | Coverage notes |
|---|---|---|
cash_dividend | Available | Most events are cash dividends |
split | Available | Includes Netflix 10:1, ServiceNow 5:1 and Booking Holdings 25:1 |
reverse_split | API records events as they occur | None in the covered window yet |
ticker_change | API records events as they occur | None in the covered window yet |
delisting | API records events as they occur | None in the covered window yet |
stock_dividend | API records events as they occur | None in the covered window yet |
rights_issue | Partial | The API records events but derives no price-adjustment factor |
spinoff | API does not produce these events | |
merger | API does not produce these events | |
| Other events, such as board meetings | API does not produce these events |