With our Financial Calendar data feed, we provide information about upcoming earnings, IPOs, and splits. If you are looking for an economic calendar, including an earnings calendar API and an IPOs calendar, this API is for you.
For IPOs, we provide data from January 2015 and up to 2-3 weeks into the future. For splits, we have data from January 2015 to several months into the future, with full historical data available through our Splits and Dividends API. For earnings, including the NASDAQ earnings calendar API, we provide data from the beginning and up to several months into the future, ensuring comprehensive coverage for your financial analysis needs.
Learn more about the standalone package “Financial Events (Calendar) & News Feed“, where you can also access the Financial News Feed.
Quick jump:
Historical & Upcoming Earnings API
Endpoint
https://eodhd.com/api/calendar/earnings
Description
Returns historical and upcoming earnings dates with key fields (company symbol, report date/time, and additional metadata when available). Use either a date window or a symbol list.
Request example
By symbol:
https://eodhd.com/api/calendar/earnings?symbols=AAPL.US,MSFT.US,AI.PA&from=2018-01-01&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/earnings?symbols=AAPL.US,MSFT.US,AI.PA&from=2018-01-01&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,MSFT.US,AI.PA&from=2018-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/earnings?symbols=AAPL.US,MSFT.US,AI.PA&from=2018-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/earnings?symbols=AAPL.US,MSFT.US,AI.PA&from=2018-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)
Note: Without dates, default window – “today +7 days”.
By date window:
https://eodhd.com/api/calendar/earnings?from=2018-12-02&to=2018-12-06&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/earnings?from=2018-12-02&to=2018-12-06&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://eodhd.com/api/calendar/earnings?from=2018-12-02&to=2018-12-06&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?from=2018-12-02&to=2018-12-06&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?from=2018-12-02&to=2018-12-06&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)
Parameters
Parameter | Required | Type | Description |
---|---|---|---|
api_token | Yes | string | Your API key. |
from | No | date (YYYY-MM-DD) | Start date. Default: today. |
to | No | date (YYYY-MM-DD) | End date. Default: today + 7 days. |
symbols | No | string | One or more tickers (comma-separated). If set, from/to are ignored. Example: AAPL.US,MSFT.US,AI.PA. |
fmt | No | string | Output format: json or csv (default). |
Output Format
Field | Type | Description |
---|---|---|
code | string | Ticker in EODHD format. |
report_date | string (YYYY-MM-DD) | Date when the company reported/announced results. |
date | string (YYYY-MM-DD) | Fiscal period end date the result refers to. |
before_after_market | string or null | Report timing relative to market hours (e.g., BeforeMarket, AfterMarket), or null if unknown. |
currency | string or null | Reporting currency for EPS. |
actual | number | Reported EPS (or metric used by the feed). |
estimate | number or null | Consensus EPS estimate, if available. |
difference | number or null | actual − estimate. |
percent | number or null | Surprise in percent (difference / estimate * 100), when estimate is available. |
Output Response Example
{
"type": "Earnings",
"description": "Historical and upcoming Earnings",
"from": "2018-12-02",
"to": "2018-12-06",
"earnings": [
{
"code": "PIGEF.US",
"report_date": "2018-12-02",
"date": "2018-09-30",
"before_after_market": "AfterMarket",
"currency": "USD",
"actual": 34.52,
"estimate": 36.73,
"difference": -2.21,
"percent": -6.0169
},
{
"code": "ANTM.JK",
"report_date": "2018-12-02",
"date": "2018-09-30",
"before_after_market": "AfterMarket",
"currency": "IDR",
"actual": 11.9295,
"estimate": null,
"difference": 0,
"percent": null
},
{
"code": "ITOEF.US",
"report_date": "2018-12-02",
"date": "2018-10-31",
"before_after_market": "AfterMarket",
"currency": "JPY",
"actual": 59.48,
"estimate": null,
"difference": 0,
"percent": null
},
{
"code": "2910.TSE",
"report_date": "2018-12-02",
"date": "2018-10-31",
"before_after_market": "AfterMarket",
"currency": "JPY",
"actual": 15.95,
"estimate": 14.68,
"difference": 1.27,
"percent": 8.6512
},
Earnings Trends API
Endpoint
https://eodhd.com/api/calendar/trends
Description
Returns forward-looking and historical earnings trend points for one or more symbols. Each symbol returns a list of dated items that indicate whether that point is an estimate or an actual. The endpoint is JSON-only.
Request Example
https://eodhd.com/api/calendar/trends?symbols=AAPL.US,MSFT.US,AI.PA&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/trends?symbols=AAPL.US,MSFT.US,AI.PA&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,MSFT.US,AI.PA&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,MSFT.US,AI.PA&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,MSFT.US,AI.PA&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)
Parameters
Parameter | Required | Type | Description |
---|---|---|---|
api_token | Yes | string | Your API key. |
symbols | Yes | string | One or more tickers, comma-separated (example: AAPL.US,MSFT.US,AI.PA). |
Output Format
Field | Type | Description |
---|---|---|
type | string | Constant label of the payload (example: Trends). |
description | string | Human-readable description of the dataset. |
symbols | string | Comma-separated list of requested tickers. |
trends | array of arrays | For each symbol, an array of trend records. The i-th inner array corresponds to the i-th symbol in the symbols list. Each record is a trend item (see fields below). |
Trend item fields
Field | Type | Description |
---|---|---|
code | string | Ticker code for this record (EODHD format). |
date | string (YYYY-MM-DD) | Anchor date of the estimate window (quarter or year end). |
period | string | Relative horizon: 0q (current quarter), +1q (next quarter), 0y (current FY), +1y (next FY). |
growth | number (stringified) or null | Overall EPS growth vs prior comparable period. |
earningsEstimateAvg | number (stringified) | Consensus EPS. |
earningsEstimateLow | number (stringified) | Low EPS estimate. |
earningsEstimateHigh | number (stringified) | High EPS estimate. |
earningsEstimateYearAgoEps | number (stringified) | EPS for the comparable prior period. |
earningsEstimateNumberOfAnalysts | number (stringified) | Analyst count for EPS estimate. |
earningsEstimateGrowth | number (stringified) | EPS growth vs prior comparable period. |
revenueEstimateAvg | number (stringified) | Consensus revenue. |
revenueEstimateLow | number (stringified) | Low revenue estimate. |
revenueEstimateHigh | number (stringified) | High revenue estimate. |
revenueEstimateYearAgoEps | number (stringified) or null | Revenue for the comparable prior period (if available). |
revenueEstimateNumberOfAnalysts | number (stringified) | Analyst count for revenue estimate. |
revenueEstimateGrowth | number (stringified) or null | Revenue growth vs prior comparable period. |
epsTrendCurrent | number (stringified) | Current EPS consensus for this period. |
epsTrend7daysAgo | number (stringified) | EPS consensus 7 days ago. |
epsTrend30daysAgo | number (stringified) | EPS consensus 30 days ago. |
epsTrend60daysAgo | number (stringified) | EPS consensus 60 days ago. |
epsTrend90daysAgo | number (stringified) | EPS consensus 90 days ago. |
epsRevisionsUpLast7days | number (stringified) | Upward EPS revisions in last 7 days. |
epsRevisionsUpLast30days | number (stringified) | Upward EPS revisions in last 30 days. |
epsRevisionsDownLast30days | number (stringified) or null | Downward EPS revisions in last 30 days. |
Output Response Example
{
"type": "Trends",
"description": "Historical and upcoming earning trends",
"symbols": "AAPL.US,MSFT.US,AI.PA",
"trends": [
[
{
"code": "AAPL.US",
"date": "2026-09-30",
"period": "+1y",
"growth": "0.0846",
"earningsEstimateAvg": "7.9816",
"earningsEstimateLow": "7.1300",
"earningsEstimateHigh": "9.0000",
"earningsEstimateYearAgoEps": "7.3676",
"earningsEstimateNumberOfAnalysts": "40.0000",
"earningsEstimateGrowth": "0.0833",
"revenueEstimateAvg": "437035017610.00",
"revenueEstimateLow": "408100000000.00",
"revenueEstimateHigh": "477463000000.00",
"revenueEstimateYearAgoEps": null,
"revenueEstimateNumberOfAnalysts": "41.00",
"revenueEstimateGrowth": "0.0527",
"epsTrendCurrent": "7.9816",
"epsTrend7daysAgo": "7.9628",
"epsTrend30daysAgo": "7.9665",
"epsTrend60daysAgo": "7.8069",
"epsTrend90daysAgo": "7.8143",
"epsRevisionsUpLast7days": "1.0000",
"epsRevisionsUpLast30days": "4.0000",
"epsRevisionsDownLast30days": "2.0000"
},
{
"code": "AAPL.US",
"date": "2025-12-31",
"period": "+1q",
"growth": "0.0355",
"earningsEstimateAvg": "2.4851",
"earningsEstimateLow": "2.2900",
"earningsEstimateHigh": "2.6700",
"earningsEstimateYearAgoEps": "2.4000",
"earningsEstimateNumberOfAnalysts": "23.0000",
"earningsEstimateGrowth": "0.0355",
"revenueEstimateAvg": "130076630320.00",
"revenueEstimateLow": "125551070150.00",
"revenueEstimateHigh": "137497000000.00",
"revenueEstimateYearAgoEps": null,
"revenueEstimateNumberOfAnalysts": "19.00",
"revenueEstimateGrowth": "0.0465",
"epsTrendCurrent": "2.4851",
"epsTrend7daysAgo": "2.4712",
"epsTrend30daysAgo": "2.4749",
"epsTrend60daysAgo": "2.4228",
"epsTrend90daysAgo": "2.4232",
"epsRevisionsUpLast7days": "1.0000",
"epsRevisionsUpLast30days": "2.0000",
"epsRevisionsDownLast30days": "3.0000"
},
{
"code": "AAPL.US",
"date": "2025-09-30",
"period": "+1q",
"growth": "0.0135",
"earningsEstimateAvg": "1.6556",
"earningsEstimateLow": "1.5100",
"earningsEstimateHigh": "1.8200",
"earningsEstimateYearAgoEps": "0.9700",
"earningsEstimateNumberOfAnalysts": "28.0000",
"earningsEstimateGrowth": "0.7068",
"revenueEstimateAvg": "97853199420.00",
"revenueEstimateLow": "93352000000.00",
"revenueEstimateHigh": "102366000000.00",
"revenueEstimateYearAgoEps": null,
"revenueEstimateNumberOfAnalysts": "27.00",
"revenueEstimateGrowth": "0.0308",
"epsTrendCurrent": "1.6556",
"epsTrend7daysAgo": "1.6552",
"epsTrend30daysAgo": "1.6573",
"epsTrend60daysAgo": "1.6587",
"epsTrend90daysAgo": "1.7167",
"epsRevisionsUpLast7days": "3.0000",
"epsRevisionsUpLast30days": "3.0000",
"epsRevisionsDownLast30days": "4.0000"
Notes
• JSON-only due to nested structure.
• If a provided symbol has no data, it may be omitted from the response.
• For point-in-time analysis, use updated_at to detect revisions.
• To paginate large symbol sets, split your symbols into batches (for example, 50–100 per call).
Historical & Upcoming IPOs API
Endpoint
https://eodhd.com/api/calendar/ipos
Description
Returns historical and upcoming IPOs in a date window. Items may include filing/amended dates, expected or effective first trading date, price range or offer price, and share count. The response supports JSON (recommended for full field coverage).
Request Example
https://eodhd.com/api/calendar/ipos?symbols=AAPL.US,MSFT.US,AI.PA&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/ipos?symbols=AAPL.US,MSFT.US,AI.PA&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://eodhd.com/api/calendar/ipos?symbols=AAPL.US,MSFT.US,AI.PA&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?symbols=AAPL.US,MSFT.US,AI.PA&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?symbols=AAPL.US,MSFT.US,AI.PA&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)
Parameters
Parameter | Required | Type | Description |
---|---|---|---|
api_token | Yes | string | Your API key. |
from | No | date (YYYY-MM-DD) | Start date of the query window. Default: today. |
to | No | date (YYYY-MM-DD) | End date of the query window. Default: today + 7 days. |
fmt | No | string | json or csv (default). |
Output Format
Field | Type | Description |
---|---|---|
type | string | Constant label of the payload (example: IPOs). |
description | string | Human-readable description of the dataset. |
from | string (YYYY-MM-DD) | Start date used for the query. |
to | string (YYYY-MM-DD) | End date used for the query. |
ipos | array of objects | List of IPO records for the window. |
IPO record fields
Field | Type | Description |
---|---|---|
code | string | Ticker in EODHD format. |
name | string or null | Company name. |
exchange | string or null | Listing exchange. |
currency | string or null | Trading currency. |
start_date | string (YYYY-MM-DD) or null | Expected/effective first trading date (if known). |
filing_date | string (YYYY-MM-DD) or null | Initial filing date. |
amended_date | string (YYYY-MM-DD) or null | Latest amended filing date. |
price_from | number | Lower end of indicated price range (0 if not provided). |
price_to | number | Upper end of indicated price range (0 if not provided). |
offer_price | number | Final priced offer (0 if not priced yet). |
shares | number | Shares offered (0 if not provided). |
deal_type | string | Lifecycle state such as Filed, Expected, Amended, Priced. |
Notes
• Numbers may be 0 when the value is unknown or not yet set (for example before pricing).
• start_date may be null for filings without a scheduled first trading date.
• Use deal_type to track lifecycle changes (for example, Amended or Priced updates).
Output Response Example
{
"type": "IPOs",
"description": "Historical and upcoming IPOs",
"from": "2018-12-02",
"to": "2018-12-06",
"ipos": [
{
"code": "603629.SHG",
"name": "Jiangsu Lettall Electronic Co Ltd",
"exchange": "Shanghai",
"currency": "CNY",
"start_date": "2018-12-11",
"filing_date": "2017-06-15",
"amended_date": "2018-12-03",
"price_from": 0,
"price_to": 0,
"offer_price": 0,
"shares": 25000000,
"deal_type": "Expected"
},
{
"code": "SPK.MC",
"name": "Solarpack Corporacion Tecnologica S.A",
"exchange": "MCE",
"currency": "EUR",
"start_date": "2018-12-03",
"filing_date": "2018-11-05",
"amended_date": "2018-11-20",
"price_from": 0,
"price_to": 0,
"offer_price": 0,
"shares": 0,
"deal_type": "Expected"
},
...
Historical & Upcoming Splits API
Endpoint
https://eodhd.com/api/calendar/splits
Description
Returns historical and upcoming stock splits and reverse splits for selected symbols or a date window. Each item includes the effective split date and the ratio (for example 4:1). Ratios may represent forward splits (is_reverse = false) or reverse splits (is_reverse = true).
Request Example
By symbols (JSON recommended):
https://eodhd.com/api/calendar/splits?symbols=AAPL.US,MSFT.US,AI.PA&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/splits?symbols=AAPL.US,MSFT.US,AI.PA&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://eodhd.com/api/calendar/splits?symbols=AAPL.US,MSFT.US,AI.PA&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=AAPL.US,MSFT.US,AI.PA&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=AAPL.US,MSFT.US,AI.PA&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)
By date window (all symbols):
https://eodhd.com/api/calendar/splits?from=2024-01-01&to=2024-12-31&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/splits?from=2024-01-01&to=2024-12-31&api_token={YOUR_API_TOKEN}&fmt=json"
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://eodhd.com/api/calendar/splits?from=2024-01-01&to=2024-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/splits?from=2024-01-01&to=2024-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/splits?from=2024-01-01&to=2024-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)
Parameters
Parameter | Required | Type | Description |
---|---|---|---|
api_token | Yes | string | Your API key. |
symbols | Conditional | string (comma-separated) | One or more tickers in EODHD format. Required if from/to not provided. |
from | Conditional | date (YYYY-MM-DD) | Start of the calendar window. Required if symbols not provided. |
to | Conditional | date (YYYY-MM-DD) | End of the calendar window. Required if symbols not provided. |
fmt | No | string | json or csv (default). |
Output Format
Field | Type | Description |
---|---|---|
type | string | Constant label of the payload (example: Splits). |
description | string | Human-readable description of the dataset. |
symbols | string or null | Echoes the requested symbols when provided. |
from | string or null | Echoes the start date when using a date window. |
to | string or null | Echoes the end date when using a date window. |
splits | array of objects | List of split records. |
Split record fields
Field | Type | Description |
---|---|---|
code | string | Ticker in EODHD format. |
name | string or null | Company name, if available. |
exchange | string or null | Listing exchange, if available. |
date | string (YYYY-MM-DD) | Effective split date (ex-date). |
ratio | string | Split ratio in readable form, for example 4:1 or 1:20. |
numerator | number | First number of the ratio (shares after). |
denominator | number | Second number of the ratio (shares before). |
is_reverse | boolean | true for reverse splits (for example 1:20), false for forward splits (for example 4:1). |
Notes
• Forward split example: 4:1 means numerator = 4, denominator = 1, is_reverse = false.
• Reverse split example: 1:10 means numerator = 1, denominator = 10, is_reverse = true.
• Upcoming items may be announced and subject to change.
Output Response Example
"type": "IPOs",
"description": "Historical and upcoming IPOs",
"from": "2018-12-02",
"to": "2018-12-06",
"ipos": [
{
"code": "603629.SHG",
"name": "Jiangsu Lettall Electronic Co Ltd",
"exchange": "Shanghai",
"currency": "CNY",
"start_date": "2018-12-11",
"filing_date": "2017-06-15",
"amended_date": "2018-12-03",
"price_from": 0,
"price_to": 0,
"offer_price": 0,
"shares": 25000000,
"deal_type": "Expected"
},
{
"code": "SPK.MC",
"name": "Solarpack Corporacion Tecnologica S.A",
"exchange": "MCE",
"currency": "EUR",
"start_date": "2018-12-03",
"filing_date": "2018-11-05",
"amended_date": "2018-11-20",
"price_from": 0,
"price_to": 0,
"offer_price": 0,
"shares": 0,
"deal_type": "Expected"
},
...
Historical & Upcoming Dividends API
Endpoint
https://eodhd.com/api/calendar/dividends
Description
Returns a calendar of dividend dates filtered by symbol or by date. Supports pagination. To get dividend details navigate to our Corporate Actions: Splits and Dividends API.
Request Example
By symbol:
https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&api_token={YOUR_API_TOKEN}&fmt=json
curl --location "https://eodhd.com/api/calendar/dividends?filter[symbol]=AAPL.US&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&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&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&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)
By date window:
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)
Parameters
Parameter | Required | Type | Description |
---|---|---|---|
api_token | Yes | string | Your API key. |
filter[symbol] | Conditional | string | Limit results to a single ticker. Required if filter[date_eq] is not provided. |
filter[date_eq] | Conditional | date (YYYY-MM-DD) | Exact dividend date. Required if filter[symbol] is not provided. |
filter[date_from] | No | date (YYYY-MM-DD) | Return dividends on or after this date. |
filter[date_to] | No | date (YYYY-MM-DD) | Return dividends on or before this date. |
page[limit] | No | integer (1–1000, default 1000) | Max results per page. |
page[offset] | No | integer (default 0) | Offset for pagination. |
fmt | No | string | json only. |
Output Format
Field | Type | Description |
---|---|---|
meta | object | Metadata about the response. |
meta.total | integer | Total number of results across all pages. |
meta.limit | integer | Max number of results returned in this page. |
meta.offset | integer | Offset used for this page. |
meta.symbol | string or null | Echo of requested symbol, if provided. |
meta.date_eq | string or null | Echo of requested exact date, if provided. |
data | array | List of dividend records. |
links | object | Pagination links. |
links.next | string or null | URL to the next page, or null if none. |
Dividend record fields (items inside data)
Field | Type | Description |
---|---|---|
date | string (YYYY-MM-DD) | Dividend date. |
symbol | string | Ticker. |
Notes
• At least one of filter[symbol] or filter[date_eq] must be provided.
• Use page[limit] and page[offset] for large datasets.
• filter[date_from] and filter[date_to] can be used together (with filter[symbol]) to narrow the range.
Output Response Example
{
"meta": {
"total": 3,
"offset": 0,
"limit": 1000,
"symbol": "AAPL.US",
"date_eq": null
},
"data": [
{ "date": "2025-08-11", "symbol": "AAPL.US" },
{ "date": "2025-05-12", "symbol": "AAPL.US" },
{ "date": "2025-02-10", "symbol": "AAPL.US" }
],
"links": {
"next": null
}
}