curl --request POST \
--url https://api.chicago.global/v1/portfolio/{portfolio_key}/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL",
"weight": 0.25
}
],
"base_currency": "USD",
"benchmark": "ACWI.OQ",
"initial_value": 10000,
"include_transaction_costs": true,
"transaction_cost_config": {}
}
'import requests
url = "https://api.chicago.global/v1/portfolio/{portfolio_key}/update"
payload = {
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL",
"weight": 0.25
}
],
"base_currency": "USD",
"benchmark": "ACWI.OQ",
"initial_value": 10000,
"include_transaction_costs": True,
"transaction_cost_config": {}
}
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', weight: 0.25}],
base_currency: 'USD',
benchmark: 'ACWI.OQ',
initial_value: 10000,
include_transaction_costs: true,
transaction_cost_config: {}
})
};
fetch('https://api.chicago.global/v1/portfolio/{portfolio_key}/update', 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}/update",
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',
'weight' => 0.25
]
],
'base_currency' => 'USD',
'benchmark' => 'ACWI.OQ',
'initial_value' => 10000,
'include_transaction_costs' => true,
'transaction_cost_config' => [
]
]),
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/portfolio/{portfolio_key}/update"
payload := strings.NewReader("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\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/portfolio/{portfolio_key}/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/portfolio/{portfolio_key}/update")
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\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Update Portfolio
Update a tracked portfolio’s holdings/params, then recompute its analytics in the background. Returns immediately (the holdings change + series clear are cheap and synchronous; the engine rebuild runs off the request path).
curl --request POST \
--url https://api.chicago.global/v1/portfolio/{portfolio_key}/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL",
"weight": 0.25
}
],
"base_currency": "USD",
"benchmark": "ACWI.OQ",
"initial_value": 10000,
"include_transaction_costs": true,
"transaction_cost_config": {}
}
'import requests
url = "https://api.chicago.global/v1/portfolio/{portfolio_key}/update"
payload = {
"portfolio": [
{
"date": "2024-01-01",
"symbol": "AAPL",
"weight": 0.25
}
],
"base_currency": "USD",
"benchmark": "ACWI.OQ",
"initial_value": 10000,
"include_transaction_costs": True,
"transaction_cost_config": {}
}
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', weight: 0.25}],
base_currency: 'USD',
benchmark: 'ACWI.OQ',
initial_value: 10000,
include_transaction_costs: true,
transaction_cost_config: {}
})
};
fetch('https://api.chicago.global/v1/portfolio/{portfolio_key}/update', 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}/update",
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',
'weight' => 0.25
]
],
'base_currency' => 'USD',
'benchmark' => 'ACWI.OQ',
'initial_value' => 10000,
'include_transaction_costs' => true,
'transaction_cost_config' => [
]
]),
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/portfolio/{portfolio_key}/update"
payload := strings.NewReader("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\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/portfolio/{portfolio_key}/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"portfolio\": [\n {\n \"date\": \"2024-01-01\",\n \"symbol\": \"AAPL\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chicago.global/v1/portfolio/{portfolio_key}/update")
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\",\n \"weight\": 0.25\n }\n ],\n \"base_currency\": \"USD\",\n \"benchmark\": \"ACWI.OQ\",\n \"initial_value\": 10000,\n \"include_transaction_costs\": true,\n \"transaction_cost_config\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Request model for updating a tracked portfolio.
All fields are optional — send only what you want to change. If portfolio
is provided, holdings are fully replaced. Analytics are recomputed in the
background up to the latest trading day; extending the series through a
specific date without changing definition is /increment's job.
Optional new holdings to replace the existing portfolio definition.
Show child attributes
Show child attributes
Override base currency for this portfolio.
"USD"
Override benchmark for this portfolio.
"ACWI.OQ"
Override initial portfolio value in base currency.
10000
Override transaction cost setting for this update.
Override transaction cost config for this update.
Response
Successful Response