Get forward guidance
curl --request GET \
--url https://api.financialdatasets.ai/kpi/guidance \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.financialdatasets.ai/kpi/guidance"
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.financialdatasets.ai/kpi/guidance', 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.financialdatasets.ai/kpi/guidance",
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.financialdatasets.ai/kpi/guidance"
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.financialdatasets.ai/kpi/guidance")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.financialdatasets.ai/kpi/guidance")
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{
"kpi_guidance": [
{
"ticker": "DAL",
"metric_name": "Operating Margin",
"period": "Q2 2026",
"period_type": "quarterly",
"value": 123,
"unit": "%",
"segment": "<string>",
"low": 6,
"high": 8,
"point_estimate": 123,
"prior_value": 123,
"raw_text": "<string>",
"change_direction": "initiated",
"source_text": "<string>",
"source_url": "<string>"
}
],
"next_page_url": "<string>"
}{
"error": "Bad Request",
"message": "Invalid request parameters"
}{
"error": "Unauthorized",
"message": "Invalid API key provided"
}Operating KPIs
Guidance
Get forward guidance from earnings releases.
GET
/
kpi
/
guidance
Get forward guidance
curl --request GET \
--url https://api.financialdatasets.ai/kpi/guidance \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.financialdatasets.ai/kpi/guidance"
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.financialdatasets.ai/kpi/guidance', 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.financialdatasets.ai/kpi/guidance",
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.financialdatasets.ai/kpi/guidance"
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.financialdatasets.ai/kpi/guidance")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.financialdatasets.ai/kpi/guidance")
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{
"kpi_guidance": [
{
"ticker": "DAL",
"metric_name": "Operating Margin",
"period": "Q2 2026",
"period_type": "quarterly",
"value": 123,
"unit": "%",
"segment": "<string>",
"low": 6,
"high": 8,
"point_estimate": 123,
"prior_value": 123,
"raw_text": "<string>",
"change_direction": "initiated",
"source_text": "<string>",
"source_url": "<string>"
}
],
"next_page_url": "<string>"
}{
"error": "Bad Request",
"message": "Invalid request parameters"
}{
"error": "Unauthorized",
"message": "Invalid API key provided"
}Overview
The KPI Guidance API returns structured forward guidance extracted from earnings releases. Guidance is delivered as ranges (low/high), point estimates, or directional signals. Examples: operating margin guidance of 6-8%, EPS guidance of 1.00−1.50, capacity growth of flat YoY, fuel price assumptions, FFO per share outlook.Coverage
| Tickers | Years of Coverage | Updated |
|---|---|---|
| 600+ | 3+ years | Within 10 seconds |
Available Tickers
You can fetch a list of available tickers with aGET request to:
https://api.financialdatasets.ai/kpi/guidance/tickers/
Getting Started
- Add your API key to the header of the request as
X-API-KEY. - Add the required query param
ticker. - Execute the API request.
Filtering the Data
| Parameter | Required | Description |
|---|---|---|
ticker | Yes | Stock ticker symbol (e.g., DAL, PLD) |
metric_name | No | Filter to a specific metric (snake_case, e.g., revenue, operating_margin; case-insensitive) |
period | No | quarterly (default) or annual |
report_period_gte | No | Only return guidance on or after this date (YYYY-MM-DD) |
report_period_lte | No | Only return guidance on or before this date (YYYY-MM-DD) |
limit | No | Number of periods to return (default: 4, max: 50) |
Example
KPI Guidance
import requests
headers = {
"X-API-KEY": "your_api_key_here"
}
ticker = "DAL"
url = f"https://api.financialdatasets.ai/kpi/guidance?ticker={ticker}"
response = requests.get(url, headers=headers)
data = response.json()
kpi_guidance = data["kpi_guidance"]
Example Response
{
"kpi_guidance": [
{
"ticker": "DAL",
"metric_name": "operating_margin",
"unit": "%",
"period": "Q2 2026",
"period_type": "quarterly",
"low": 6.0,
"high": 8.0,
"change_direction": "initiated",
"source_text": "Operating margin guidance of 6-8%",
"source_url": "https://www.sec.gov/Archives/..."
},
{
"ticker": "DAL",
"metric_name": "earnings_per_share_diluted",
"unit": "dollars",
"period": "Q2 2026",
"period_type": "quarterly",
"low": 1.0,
"high": 1.5,
"change_direction": "initiated",
"source_text": "Earnings per share of $1.00-$1.50",
"source_url": "https://www.sec.gov/Archives/..."
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
low | number | Low end of the guidance range |
high | number | High end of the guidance range |
point_estimate | number | Single-point guidance (when no range is given) |
prior_value | number | Prior guidance value (for revisions) |
change_direction | string | Direction of guidance: raised, lowered, maintained, initiated, withdrawn |
raw_text | string | Original guidance text from the filing |
Notes
- Guidance periods are forward-looking (e.g., Q2 2026 guidance reported in a Q1 2026 filing).
- The
source_urllinks directly to the source document with text highlighting when available.
Authorizations
API key for authentication.
Query Parameters
The ticker symbol.
Filter to a specific metric.
Filter by period type: quarterly or annual.
Available options:
quarterly, annual Only return guidance on or after this date (YYYY-MM-DD).
Only return guidance on or before this date (YYYY-MM-DD).
Number of periods to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by next_page_url.
Required range:
x <= 50Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it.