curl --request POST \
--url https://api.chicago.global/v1/cio-report \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL.O",
"weight": 0.25
}
],
"base_currency": "USD",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"initial_value": 10000,
"benchmark": "ACWI.OQ",
"format": "pdf",
"portfolio_name": "Client Portfolio",
"mandate": "",
"portfolio_id": "<string>",
"report_snapshot": {},
"portfolio_report_metrics": {},
"prior_report_snapshot": {},
"fee_basis": "<string>",
"transaction_cost_basis": "<string>",
"distribution_classification": "current_client_service_report",
"lookthrough_mode": "auto",
"constituent_redistribution_rights": "unverified"
}
'import requests
url = "https://api.chicago.global/v1/cio-report"
payload = {
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL.O",
"weight": 0.25
}
],
"base_currency": "USD",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"initial_value": 10000,
"benchmark": "ACWI.OQ",
"format": "pdf",
"portfolio_name": "Client Portfolio",
"mandate": "",
"portfolio_id": "<string>",
"report_snapshot": {},
"portfolio_report_metrics": {},
"prior_report_snapshot": {},
"fee_basis": "<string>",
"transaction_cost_basis": "<string>",
"distribution_classification": "current_client_service_report",
"lookthrough_mode": "auto",
"constituent_redistribution_rights": "unverified"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
portfolio: [{date: '2024-01-01', symbol: 'AAPL.O', weight: 0.25}],
base_currency: 'USD',
start_date: '2024-01-01',
end_date: '2024-12-31',
initial_value: 10000,
benchmark: 'ACWI.OQ',
format: 'pdf',
portfolio_name: 'Client Portfolio',
mandate: '',
portfolio_id: '<string>',
report_snapshot: {},
portfolio_report_metrics: {},
prior_report_snapshot: {},
fee_basis: '<string>',
transaction_cost_basis: '<string>',
distribution_classification: 'current_client_service_report',
lookthrough_mode: 'auto',
constituent_redistribution_rights: 'unverified'
})
};
fetch('https://api.chicago.global/v1/cio-report', 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/cio-report",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'portfolio' => [
[
'date' => '2024-01-01',
'symbol' => 'AAPL.O',
'weight' => 0.25
]
],
'base_currency' => 'USD',
'start_date' => '2024-01-01',
'end_date' => '2024-12-31',
'initial_value' => 10000,
'benchmark' => 'ACWI.OQ',
'format' => 'pdf',
'portfolio_name' => 'Client Portfolio',
'mandate' => '',
'portfolio_id' => '<string>',
'report_snapshot' => [
],
'portfolio_report_metrics' => [
],
'prior_report_snapshot' => [
],
'fee_basis' => '<string>',
'transaction_cost_basis' => '<string>',
'distribution_classification' => 'current_client_service_report',
'lookthrough_mode' => 'auto',
'constituent_redistribution_rights' => 'unverified'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.chicago.global/v1/cio-report"
payload := strings.NewReader("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.chicago.global/v1/cio-report")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/cio-report")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}"
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": {}
}
]
}Generate CIO Report
Generate a Chief Investment Officer report (ASYNC - returns job_id immediately).
Credits: 10 credits per job. Charged when the job completes successfully. Polling is free.
curl --request POST \
--url https://api.chicago.global/v1/cio-report \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL.O",
"weight": 0.25
}
],
"base_currency": "USD",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"initial_value": 10000,
"benchmark": "ACWI.OQ",
"format": "pdf",
"portfolio_name": "Client Portfolio",
"mandate": "",
"portfolio_id": "<string>",
"report_snapshot": {},
"portfolio_report_metrics": {},
"prior_report_snapshot": {},
"fee_basis": "<string>",
"transaction_cost_basis": "<string>",
"distribution_classification": "current_client_service_report",
"lookthrough_mode": "auto",
"constituent_redistribution_rights": "unverified"
}
'import requests
url = "https://api.chicago.global/v1/cio-report"
payload = {
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL.O",
"weight": 0.25
}
],
"base_currency": "USD",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"initial_value": 10000,
"benchmark": "ACWI.OQ",
"format": "pdf",
"portfolio_name": "Client Portfolio",
"mandate": "",
"portfolio_id": "<string>",
"report_snapshot": {},
"portfolio_report_metrics": {},
"prior_report_snapshot": {},
"fee_basis": "<string>",
"transaction_cost_basis": "<string>",
"distribution_classification": "current_client_service_report",
"lookthrough_mode": "auto",
"constituent_redistribution_rights": "unverified"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
portfolio: [{date: '2024-01-01', symbol: 'AAPL.O', weight: 0.25}],
base_currency: 'USD',
start_date: '2024-01-01',
end_date: '2024-12-31',
initial_value: 10000,
benchmark: 'ACWI.OQ',
format: 'pdf',
portfolio_name: 'Client Portfolio',
mandate: '',
portfolio_id: '<string>',
report_snapshot: {},
portfolio_report_metrics: {},
prior_report_snapshot: {},
fee_basis: '<string>',
transaction_cost_basis: '<string>',
distribution_classification: 'current_client_service_report',
lookthrough_mode: 'auto',
constituent_redistribution_rights: 'unverified'
})
};
fetch('https://api.chicago.global/v1/cio-report', 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/cio-report",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'portfolio' => [
[
'date' => '2024-01-01',
'symbol' => 'AAPL.O',
'weight' => 0.25
]
],
'base_currency' => 'USD',
'start_date' => '2024-01-01',
'end_date' => '2024-12-31',
'initial_value' => 10000,
'benchmark' => 'ACWI.OQ',
'format' => 'pdf',
'portfolio_name' => 'Client Portfolio',
'mandate' => '',
'portfolio_id' => '<string>',
'report_snapshot' => [
],
'portfolio_report_metrics' => [
],
'prior_report_snapshot' => [
],
'fee_basis' => '<string>',
'transaction_cost_basis' => '<string>',
'distribution_classification' => 'current_client_service_report',
'lookthrough_mode' => 'auto',
'constituent_redistribution_rights' => 'unverified'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.chicago.global/v1/cio-report"
payload := strings.NewReader("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.chicago.global/v1/cio-report")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/cio-report")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL.O\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"start_date\": \"2024-01-01\",\n \"end_date\": \"2024-12-31\",\n \"initial_value\": 10000,\n \"benchmark\": \"ACWI.OQ\",\n \"format\": \"pdf\",\n \"portfolio_name\": \"Client Portfolio\",\n \"mandate\": \"\",\n \"portfolio_id\": \"<string>\",\n \"report_snapshot\": {},\n \"portfolio_report_metrics\": {},\n \"prior_report_snapshot\": {},\n \"fee_basis\": \"<string>\",\n \"transaction_cost_basis\": \"<string>\",\n \"distribution_classification\": \"current_client_service_report\",\n \"lookthrough_mode\": \"auto\",\n \"constituent_redistribution_rights\": \"unverified\"\n}"
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, start_date, and end_date.
Snapshot-based requests require enabled snapshot support and USD as the base
currency. Supply either report_snapshot or raw portfolio inputs. Additional
report options are listed in the request schema below.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
CIO report request. Raw requests require portfolio, start_date, and end_date. Snapshot requests require enabled snapshot support and USD base currency. Supply either a report_snapshot or raw portfolio inputs.
Portfolio target weights. Omit when report_snapshot is supplied.
Show child attributes
Show child attributes
Base currency for portfolio
"USD"
Analysis start date in YYYY-MM-DD format
"2024-01-01"
Analysis end date in YYYY-MM-DD format
"2024-12-31"
Initial portfolio value in base currency
10000
Benchmark for comparison
"ACWI.OQ"
Output format: html, pdf, or both
html, pdf, both Reader-facing portfolio name.
Reader-facing mandate description.
Stable portfolio identifier included in the snapshot.
Report snapshot supplied instead of raw portfolio inputs. Requires enabled snapshot support and USD base currency.
Metrics from a Portfolio Report based on the same supplied report_snapshot.
Previous report snapshot used to compare reporting periods.
Report distribution category. This route does not support marketing advertisements.
current_client_service_report, marketing_advertisement Whether to include ETF constituent exposure. auto includes available qualified exposure, required rejects missing qualified exposure, and off excludes it.
auto, required, off Permission to include ETF constituent evidence. Unverified rights omit constituent evidence.
unverified, aggregate_only, constituent_detail_permitted Response
Successful Response