Get Portfolio Analytics
curl --request GET \
--url https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics', 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.chicago.global/v1/portfolio/{portfolio_key}/analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.chicago.global/v1/portfolio/{portfolio_key}/analytics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.chicago.global/v1/portfolio/{portfolio_key}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"detail": {
"error": "Insufficient credits",
"balance": 0.02,
"required": 0.05,
"endpoint": "/v1/company-info"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Portfolio Tracker
Get Analytics
Read analytics from a tracked portfolio’s stored series. If cached analytics are missing or use an older calculation version, derive updated analytics from those series. Returns status ready with analytics, or status not_computed with HTTP 200 while the initial series is unavailable. Missing or inaccessible portfolios return HTTP 404. Per-holding recommendation labels in the analytics are returned only to KYC-verified organizations; see https://docs.chicago.global/problems/kyc-required.
Credits: 1 credit per call. Deducted after a successful HTTP response. HTTP errors do not deduct credits.
GET
/
v1
/
portfolio
/
{portfolio_key}
/
analytics
Get Portfolio Analytics
curl --request GET \
--url https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics', 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.chicago.global/v1/portfolio/{portfolio_key}/analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.chicago.global/v1/portfolio/{portfolio_key}/analytics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.chicago.global/v1/portfolio/{portfolio_key}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/portfolio/{portfolio_key}/analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"detail": {
"error": "Insufficient credits",
"balance": 0.02,
"required": 0.05,
"endpoint": "/v1/company-info"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}analytics has the same sections as an Analyze Portfolio
result, including analytics_version: the version of the analytics calculation
that produced it. When the calculation changes, the version increases and each
tracked portfolio’s analytics are recomputed on its next read, so you always get
results from the current calculation.Last modified on October 2, 2026
⌘I