The Corporate Events Calendar covers the scheduled events that move a price: earnings reports, analyst estimate revisions, IPOs, stock splits and dividend dates. Five endpoints sit under the same /api/calendar/ prefix and the same access right, each answering a different question, and each carrying history as well as what is still scheduled.
| Endpoint | What it answers | Coverage measured in August 2026 |
|---|---|---|
| /api/calendar/earnings | Who reports when, with actual EPS against the consensus estimate | Back to the 1990s, and 26,414 reports already scheduled between today and the end of 2027 — dense through March 2027, thinning to a handful after that |
| /api/calendar/trends | Consensus EPS and revenue estimates, and how they have been revised | About 96 records per symbol for a large US name, anchored on fiscal periods from 2017 to 2027 |
| /api/calendar/ipos | Filings, expected listings and priced deals | Continuous from February 2013, plus an isolated batch of 84 deals in early 2010. Forward visibility is short — about three weeks |
| /api/calendar/splits | Effective split and reverse-split ratios | Continuous from February 2013, plus 134 records in the first quarter of 2010. Announced splits reach into February 2027 |
| /api/calendar/dividends | Dividend dates for a symbol or a single day | Deep history and forward dates both — Apple’s 92 dividend dates start on 1987-05-11, and 347 symbols already carried a date on 2026-09-15 |
Those counts were measured on 18 August 2026 and grow with the feed. The calendar is part of the Fundamentals Data Feed and All-In-One plans, and is also sold on its own together with the news feed as Corporate Events Calendar & News Feed. Every request across all five endpoints costs one API call, whatever the size of the window.
Read this before your first request: on the earnings and splits endpoints the symbols parameter narrows a date window rather than replacing it, and when you omit from and to that window silently defaults to today through today + 7 days. A request for a single ticker with no dates therefore comes back with an empty list — the company almost certainly has no event in the next week. Always pass from and to alongside symbols. At the other end of the scale, more than ten years between the two bounds returns HTTP 422 with “Maximum date range is 10 years” on earnings, IPOs and splits alike — though that check is skipped when symbols is present, so a symbols query can span the whole archive.
Earnings
https://eodhd.com/api/calendar/earnings?from=2025-01-01&to=2025-01-31&api_token=YOUR_API_TOKEN&fmt=json
Reported and upcoming earnings, one record per company and fiscal period, with the actual EPS, the consensus estimate and the surprise already worked out for you.
Parameters
api_token
string
required
from
date
optional
to
date
optional
symbols
string
optional
fmt
enum
optional
A window whose end precedes its start is not rejected: it returns HTTP 200 with an empty list. A symbol that does not exist, however, returns HTTP 404 with a body complaining about a missing “type” — a misleading message that means the ticker was not found. When you pass symbols the response echoes the symbols back instead of the from and to you used, and records are grouped by ticker; in a plain date window they arrive sorted by report date, one record per company and fiscal period, with no duplicates.
Keep earnings windows short. Nothing here is paginated, and this is the largest of the five datasets: one year is about 120,000 records and 21 MB, and a six-year window came back as a 158 MB payload after 45 seconds. Beyond roughly five years the request often fails outright with HTTP 500 and a bare “Error occurred” body, returned within ten seconds — the same window can succeed on one attempt and fail on the next, so treat the ten-year ceiling as a validation limit rather than a workable size. Slice long histories by month or quarter, or pass symbols to pull one company’s full record instead.
Request Example
https://eodhd.com/api/calendar/earnings?symbols=AAPL.US&from=2025-01-01&to=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/earnings?symbols=AAPL.US&from=2025-01-01&to=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/calendar/earnings?symbols=AAPL.US&from=2025-01-01&to=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/calendar/earnings?symbols=AAPL.US&from=2025-01-01&to=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/calendar/earnings?symbols=AAPL.US&from=2025-01-01&to=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"type": "Earnings",
"description": "Historical and upcoming Earnings",
"symbols": "AAPL.US",
"earnings": [
{
"code": "AAPL.US",
"report_date": "2025-01-30",
"date": "2024-12-31",
"before_after_market": "AfterMarket",
"currency": "USD",
"actual": 2.4,
"estimate": 2.34,
"difference": 0.06,
"percent": 2.5641
},
{
"code": "AAPL.US",
"report_date": "2025-05-01",
"date": "2025-03-31",
"before_after_market": "AfterMarket",
"currency": "USD",
"actual": 1.65,
"estimate": 1.62,
"difference": 0.03,
"percent": 1.8519
},
{
"code": "AAPL.US",
"report_date": "2025-07-31",
"date": "2025-06-30",
"before_after_market": "AfterMarket",
"currency": "USD",
"actual": 1.57,
"estimate": 1.43,
"difference": 0.14,
"percent": 9.7902
},
{
"code": "AAPL.US",
"report_date": "2025-10-30",
"date": "2025-09-30",
"before_after_market": "AfterMarket",
"currency": "USD",
"actual": 1.85,
"estimate": 1.77,
"difference": 0.08,
"percent": 4.5198
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| code | string | Ticker in EODHD format |
| report_date | date | Day the results are announced — the date the window filters on |
| date | date | End of the fiscal period the figures belong to |
| before_after_market | string or null | BeforeMarket or AfterMarket, null when the timing is unknown |
| currency | string or null | Reporting currency of the EPS figures |
| actual | number or null | Reported EPS. Null for a report that has not happened yet |
| estimate | number or null | Consensus EPS estimate, where analysts cover the name |
| difference | number | actual minus estimate — but 0, not null, whenever the estimate is missing. In the default seven-day window all 1,636 records without an estimate carried difference 0 and percent null, so test estimate rather than difference before you trust a surprise of zero |
| percent | number or null | Surprise in percent against the estimate |
Earnings trends
https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json
Consensus estimates rather than results: EPS and revenue forecasts with their high, low and analyst count, plus the same EPS consensus as it stood 7, 30, 60 and 90 days ago and the count of revisions in each direction. This is the endpoint for tracking whether the street is walking a number up or down before the report lands.
The response is nested one level deeper than the other endpoints: trends is an array of arrays, and the n-th inner array holds the records for the n-th ticker in your symbols list. Each inner array is a history, not a snapshot — Apple returned 96 records anchored on 40 different fiscal period ends, from 2017 to 2027.
Parameters
api_token
string
required
symbols
string
required
fmt
enum
optional
Every numeric value in the trends payload arrives as a string, padded to four decimals — “9.5347”, “40.0000”, “523204888660.00”. Cast before you compute. Null appears where a figure is genuinely missing, so a parser has to handle both a quoted number and null in the same field.
Request Example
https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/calendar/trends?symbols=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"type": "Trends",
"description": "Historical and upcoming earning trends",
"symbols": "AAPL.US",
"trends": [
[
{
"code": "AAPL.US",
"date": "2027-09-30",
"period": "+1y",
"growth": "0.0804",
"earningsEstimateAvg": "9.5347",
"earningsEstimateLow": "8.2400",
"earningsEstimateHigh": "10.6700",
"earningsEstimateYearAgoEps": "8.8027",
"earningsEstimateNumberOfAnalysts": "40.0000",
"earningsEstimateGrowth": "0.0832",
"revenueEstimateAvg": "523204888660.00",
"revenueEstimateLow": "483496000000.00",
"revenueEstimateHigh": "594863000000.00",
"revenueEstimateYearAgoEps": null,
"revenueEstimateNumberOfAnalysts": "40.00",
"revenueEstimateGrowth": "0.0955",
"epsTrendCurrent": "9.5347",
"epsTrend7daysAgo": "9.5490",
"epsTrend30daysAgo": "9.6928",
"epsTrend60daysAgo": "9.6669",
"epsTrend90daysAgo": "9.6328",
"epsRevisionsUpLast7days": "6.0000",
"epsRevisionsUpLast30days": "8.0000",
"epsRevisionsDownLast30days": "19.0000"
}
]
]
}
One symbol, one inner array — the record above is the first of Apple’s 96, read on 18 August 2026, and the estimate fields in it move as analysts publish. It also shows what the endpoint is for: the consensus for fiscal 2027 stood at 9.5347 against 9.6928 a month earlier, with 19 analysts cutting their number in that month against 8 raising it. Ask for three tickers and the outer array holds three inner arrays, in the order you listed them.
Response Fields
| Field | Description |
|---|---|
| code | Ticker in EODHD format |
| date | Fiscal period end the estimate refers to — quarter end for a quarterly record, year end for an annual one |
| period | Which horizon this record was: 0q current quarter, +1q next quarter, 0y current fiscal year, +1y next fiscal year. The same label repeats across many dates, because the file keeps the history |
| growth, earningsEstimateGrowth, revenueEstimateGrowth | Growth against the comparable prior period, as a ratio rather than a percentage |
| earningsEstimateAvg / Low / High | Consensus EPS and the range of individual estimates |
| earningsEstimateYearAgoEps | EPS actually delivered in the comparable prior period |
| earningsEstimateNumberOfAnalysts | How many analysts stand behind the EPS consensus |
| revenueEstimateAvg / Low / High | Consensus revenue and the range, in the reporting currency |
| revenueEstimateNumberOfAnalysts | Analyst count behind the revenue consensus |
| revenueEstimateYearAgoEps | Revenue in the comparable prior period. Frequently null |
| epsTrendCurrent, epsTrend7daysAgo, epsTrend30daysAgo, epsTrend60daysAgo, epsTrend90daysAgo | The same EPS consensus as it stood at those points — the drift is the signal |
| epsRevisionsUpLast7days, epsRevisionsUpLast30days, epsRevisionsDownLast30days | Number of analysts who moved their EPS estimate up or down in that period |
A symbol with no analyst coverage keeps its slot as an empty inner array rather than disappearing, so positions stay aligned with your symbols list — an ETF or a newly filed shell comes back as an empty group next to a populated one. Watch the size: Apple alone is 71 KB of JSON and two large caps 143 KB, so batch long lists.
IPOs
https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token=YOUR_API_TOKEN&fmt=json
New listings from filing to pricing. A January 2025 window returned 161 deals — 108 still expected, 49 priced and 4 amended. The same listing reappears as it moves through the process: over the first half of 2025, 93 codes turned up more than once, among them 2613.HK, expected on 7 January with no price and priced at 31.8 two days later. Records are not sorted by date, so sort on your side.
Parameters
api_token
string
required
from
date
optional
to
date
optional
fmt
enum
optional
This endpoint takes no symbols parameter. Passing one is accepted and silently ignored — you get the date window back, not the company you asked for. Filter by code on your side, or look the listing up in the Fundamental Data API once it trades.
Request Example
https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token={YOUR_API_TOKEN}&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token={YOUR_API_TOKEN}&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/calendar/ipos?from=2025-01-01&to=2025-01-31&api_token={YOUR_API_TOKEN}&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"type": "IPOs",
"description": "Historical and upcoming IPOs",
"from": "2025-01-01",
"to": "2025-01-31",
"ipos": [
{
"code": "MCW.US",
"name": "Mister Car Wash, Inc. Common Stock",
"exchange": "Nasdaq",
"currency": "USD",
"start_date": "2025-01-02",
"filing_date": null,
"amended_date": null,
"price_from": 15,
"price_to": 17,
"offer_price": 15,
"shares": 0,
"deal_type": "Expected"
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| code | string | Ticker in EODHD format |
| name | string or null | Company name as filed |
| exchange | string or null | Listing venue, as a name rather than an EODHD exchange code |
| currency | string or null | Offering currency. Can also be an empty string |
| start_date | date or null | Expected or effective first trading date. This is the field the window filters on |
| filing_date | date or null | Initial filing date, where the feed carries it |
| amended_date | date or null | Most recent amended filing |
| price_from, price_to | number | Indicated price range. Both are 0 before a range is set — not null |
| offer_price | number | Final price. 0 until the deal prices |
| shares | number | Shares offered. 0 when unknown |
| deal_type | string | Where the deal stands. Four values appear: Expected, Priced, Amended and Filed — over 2024 the split was 1,180 / 426 / 102 / 13 |
Treat 0 as “not known yet” rather than as a real price, and re-read a window you have already stored: filings get amended, and both the date and the price range can change before the first trade.
Splits
https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token=YOUR_API_TOKEN&fmt=json
Splits and reverse splits by effective date, as a share-count ratio. Announced splits run well ahead of today — in August 2026 the calendar already held effective dates into February 2027.
Parameters
api_token
string
required
from
date
optional
to
date
optional
symbols
string
optional
fmt
enum
optional
Request Example
https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token={YOUR_API_TOKEN}&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token={YOUR_API_TOKEN}&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/calendar/splits?symbols=TSLA.US&from=2010-01-01&to=2030-01-01&api_token={YOUR_API_TOKEN}&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"type": "Splits",
"description": "Historical and upcoming splits",
"from": "2010-01-01",
"to": "2030-01-01",
"symbols": "TSLA.US",
"splits": [
{
"code": "TSLA.US",
"split_date": "2020-08-31",
"optionable": "N",
"old_shares": 1,
"new_shares": 5
},
{
"code": "TSLA.US",
"split_date": "2022-08-25",
"optionable": "N",
"old_shares": 1,
"new_shares": 3
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| code | string | Ticker in EODHD format |
| split_date | date | Effective date of the split — the date the window filters on |
| optionable | string | Y or N, whether options trade on the name |
| old_shares | number | Shares held before the split |
| new_shares | number | Shares held after it |
Read the two counts as a ratio in the direction old to new. Tesla’s 2020 event is 1 to 5 — a five-for-one split — while a reverse split arrives the other way round, as in the 10 to 1 on Korean listing 090150.KQ. Reverse splits are not rare: 36 of the 97 events in one August 2026 week ran that way, so branch on which number is larger instead of assuming a forward split. Ratios are not always tidy either — 1000 to 729 turns up on Taiwanese names — and a record can carry new_shares 0, which will divide by zero if you let it.
Dividend dates
https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json
This one is built differently from its four siblings: filters are nested under filter, paging under page, and the payload is deliberately thin — a date and a symbol, nothing else. It answers “when”, not “how much”, and it goes back a long way: Apple returns 92 dividend dates starting on 1987-05-11.
For amounts, currencies, declaration and payment dates, use the Corporate Actions: Splits and Dividends API. This endpoint answers the narrower question — which symbols have a dividend on a given day — in one call, so you know what to fetch in detail. Future dates are covered as well as past ones: 347 symbols already carried a date on 2026-09-15.
Parameters
api_token
string
required
filter[symbol]
string
optional
filter[date_eq]
date
optional
filter[date_from]
date
optional
filter[date_to]
date
optional
page[limit]
integer
optional
page[offset]
integer
optional
fmt
enum
optional
Request Example
https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&filter[date_from]=2025-01-01&filter[date_to]=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&filter[date_from]=2025-01-01&filter[date_to]=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&filter[date_from]=2025-01-01&filter[date_to]=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&filter[date_from]=2025-01-01&filter[date_to]=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&filter[date_from]=2025-01-01&filter[date_to]=2025-12-31&api_token={YOUR_API_TOKEN}&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"meta": {
"total": 4,
"offset": 0,
"limit": 1000,
"symbol": "AAPL.US",
"date_from": "2025-01-01",
"date_to": "2025-12-31"
},
"data": [
{ "date": "2025-11-10", "symbol": "AAPL.US" },
{ "date": "2025-08-11", "symbol": "AAPL.US" },
{ "date": "2025-05-12", "symbol": "AAPL.US" },
{ "date": "2025-02-10", "symbol": "AAPL.US" }
],
"links": {
"next": null
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| meta.total | integer | Matching records across all pages, not just this one |
| meta.limit, meta.offset | integer | The paging you asked for, echoed back |
| meta | object | Also echoes the filters you passed — only the ones you actually sent appear as keys |
| data[].date | date | Dividend date |
| data[].symbol | string | Ticker in EODHD format |
| links.next | string or null | Ready-made URL for the next page, null on the last one |
Newest dates come first here, the opposite of the date-window endpoints. A ticker that does not exist is not an error either — you get HTTP 200 with total 0, whereas the other four endpoints answer an unknown symbol with a 404 whose body mentions a missing “type”. Both mean the same thing in practice: nothing matched.
Where to go next
The calendar tells you when something happens; three other feeds tell you what it did to the numbers. Dividend and split amounts, with declaration and payment dates, live in the Corporate Actions: Splits and Dividends API, and the whole market for one day at a time in the Bulk API. Reported financials behind an earnings date are in the Fundamental Data API, and prices around the event in the End-of-Day API.
To resolve a ticker before you query, use the Search API; to see how requests are counted against your plan, see API Limits. Headlines around the same events come from the Financial News API, which ships in the same standalone package as this calendar.