Contents Lesson 9 of 17

5 min read · practitioner

What about the corporate actions that are neither?

Dividends and splits are the two corporate actions with dedicated global endpoints, and between them they cover most of what moves a share price mechanically. They are not the whole list. Bonus issues, rights issues, buybacks, capital returns and share purchase plans all change what a shareholder holds, and most feeds handle them badly or not at all.

One exchange is the exception, and it is worth studying precisely because it shows what complete corporate-action data looks like.

The ASX case

The ASX corporate actions endpoint is built on the official ASX ReferencePoint feed and refreshed daily. It covers .AU-suffixed tickers only, costs one API call per request, and takes a type filter with these values:

dividends, splits, bonus-issues, rights-issues, buybacks, capital-returns, spp, other

Omit type and you get every type; pass one it does not know and it answers 422 naming the parameter, which is the only one of these that tells you when you are wrong. It also takes symbol, with the .AU suffix. Paging is JSON:API-style and the brackets are not optional — page[limit] (1–1000, and 1001 is a 422) and page[offset], returning a meta.total alongside the data array. A bare limit or offset is accepted and silently ignored, as are start_date and end_date: filter the window in your own code, or read date off every row and discard what you did not want.

What one record carries

Here is a real dividend record for BHP.AU, trimmed:

date: "2026-03-05"   value: 1.038469   period: "Interim"
currency: "USD"      recordDate: "2026-03-06"
paymentDate: "2026-03-26"   declarationDate: null
_asx_extra: {
  isin: "AU000000BHP4", franked_percent: 100,
  franked_amount_aud: 1.0385, drp_indicator: 3,
  drp_price_aud: 35.2475, withholding_tax_rate: 0,
  special_dividend_amount_aud: 0,
  comment: "USD 0.73, 0.73 FRANKED, 30% CTR, DRP NIL DISC"
}

The top-level fields mirror /div exactly — same four dates, same value and unadjustedValue — so the same parser works. Everything exchange-specific is quarantined inside _asx_extra, which is a design worth copying: extend without breaking the shared shape.

Franking is the field that does not exist anywhere else. Australia operates dividend imputation: company tax already paid is attached to the dividend as a credit. This record is franked_percent: 100 at a 30% company tax rate, so the credit attached to A$1.0385 of cash is 1.0385 × (30 ÷ 70) = A$0.4451, and the grossed-up figure is A$1.4836. Without that field, an Australian yield comparison is missing about 43% of the payout. This is a description of how the imputation mechanism appears in data, not tax guidance — the treatment of a credit depends entirely on who holds the share.

Also in there: drp_indicator and drp_price_aud describe the dividend reinvestment plan and the price at which stock is issued instead of cash. A holder on a DRP receives shares, not the cash amount in value — so a cash-flow model built from value alone will be wrong for them.

One thing to verify

On this record, currency reads "USD" while value is 1.038469, which matches franked_amount_aud (1.0385) rather than the USD 0.73 in the comment. BHP declares in US dollars and pays in Australian dollars, and the two blocks describe the same event in different currencies. Cross-check the currency label against _asx_extra for any dual-currency payer rather than assuming the top-level field settles it.

Everywhere else

Outside the ASX, there is no structured feed for bonus issues, rights issues or buybacks. What you have instead: unusual ratios in /splits that often turn out to be spinoffs or bonus issues, a shrinking outstandingShares series in fundamentals that reveals a buyback after the fact, and news. That is a real coverage gap, worth knowing before you promise someone complete corporate-action history for a non-Australian market.

Try it now

  1. Three rows from the ASX endpoint, three shapes. The dividend record for BHP.AU is printed above; below are a bonus-issue row and the newest buyback row. List the fields each carries that the others lack. Then read what type=everything returned on 28 September 2026, status 422: that error is the endpoint telling you which parameter it actually reads.
Live API response: asx bonus issue record
Live API response: mda12 asx buyback rows
{"errors": {"type": ["The selected type is invalid."]}}
  1. Take any franked dividend and compute the grossed-up amount with the (30 ÷ 70) multiplier. Compare it to the raw value. That gap is what a naive cross-border yield screen would miss.
  2. Here is outstandingShares from /fundamentals/AAPL.US, a company that buys back stock, four quarters deep. Compute the fall in shares over those three quarter-steps, as a count and as a percentage. The declining series is the buyback, visible only as a consequence. For another company, open its fundamentals in the Terminal and change the symbol.
Live API response: mda1 apple quarterly share count

Open AAPL.US — fundamentals in the EODHD Terminal