Core Platform
Run governed Portfolio Construction 2.0
POST
/investment/portfolios/{portfolio}/construct
Overview
Quickstart
API reference
Guides
LQM Builder
SDKs
Auth & webhooks
Changes
Versioning
CI
Support
Certification
Programme
Ecosystem
Solutions
References
Evidence exchange
Status
Marketplace
API plans
Contract
Runs observed-data portfolio construction with CVaR, tracking error, risk budgets, Black-Litterman, thematic bounds, turnover/cost and verified tax-lot awareness. Fresh observed option IV may be used as a risk floor. Synthetic option surfaces are research comparison only and cannot select the model portfolio or execute a Financial Action.
Authentication
Bearer credential required
Required scope
investment:run
Status
Published
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
portfolio |
path | string | Yes | — |
Request body
application/json
·
required
{
"symbols": [
"string"
],
"restricted_symbols": [
"string"
],
"objective": "balanced",
"max_position_pct": 1,
"risk_aversion": 0.01000000000000000020816681711721685132943093776702880859375,
"history_months": 12,
"benchmark_symbol": "string",
"cvar_alpha_pct": 95,
"max_turnover_pct": 100,
"transaction_cost_bps": 10,
"min_monthly_dollar_volume_usd": 0,
"tax_rate_pct": 0
}
Code examples
These examples compose a request only. Public reference pages never transmit your credential or execute the operation.
curl
curl -X POST \
-H "Authorization: Bearer $FINANCEGPT_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data '{
"symbols": [
"string"
],
"restricted_symbols": [
"string"
],
"objective": "balanced",
"max_position_pct": 1,
"risk_aversion": 0.01000000000000000020816681711721685132943093776702880859375,
"history_months": 12,
"benchmark_symbol": "string",
"cvar_alpha_pct": 95,
"max_turnover_pct": 100,
"transaction_cost_bps": 10,
"min_monthly_dollar_volume_usd": 0,
"tax_rate_pct": 0
}' \
"https://financegpt.dev/api/v2/investment/portfolios/{portfolio}/construct"
javascript
const response = await fetch("https:\/\/financegpt.dev\/api\/v2\/investment\/portfolios\/{portfolio}\/construct", {
method: "POST",
headers: {
Authorization: `Bearer ${FINANCEGPT_API_KEY}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"symbols": [
"string"
],
"restricted_symbols": [
"string"
],
"objective": "balanced",
"max_position_pct": 1,
"risk_aversion": 0.01000000000000000020816681711721685132943093776702880859375,
"history_months": 12,
"benchmark_symbol": "string",
"cvar_alpha_pct": 95,
"max_turnover_pct": 100,
"transaction_cost_bps": 10,
"min_monthly_dollar_volume_usd": 0,
"tax_rate_pct": 0
}),
});
const data = await response.json();
python
import json
import os
import requests
response = requests.request(
'POST',
'https://financegpt.dev/api/v2/investment/portfolios/{portfolio}/construct',
headers={
'Authorization': 'Bearer ' + os.environ['FINANCEGPT_API_KEY'],
'Accept': 'application/json',
},
json=json.loads('{"symbols":["string"],"restricted_symbols":["string"],"objective":"balanced","max_position_pct":1,"risk_aversion":0.01000000000000000020816681711721685132943093776702880859375,"history_months":12,"benchmark_symbol":"string","cvar_alpha_pct":95,"max_turnover_pct":100,"transaction_cost_bps":10,"min_monthly_dollar_volume_usd":0,"tax_rate_pct":0}'),
)
response.raise_for_status()
print(response.json())
php
<?php
$ch = curl_init('https://financegpt.dev/api/v2/investment/portfolios/{portfolio}/construct');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('FINANCEGPT_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(array (
'symbols' =>
array (
0 => 'string',
),
'restricted_symbols' =>
array (
0 => 'string',
),
'objective' => 'balanced',
'max_position_pct' => 1,
'risk_aversion' => 0.01000000000000000020816681711721685132943093776702880859375,
'history_months' => 12,
'benchmark_symbol' => 'string',
'cvar_alpha_pct' => 95,
'max_turnover_pct' => 100,
'transaction_cost_bps' => 10,
'min_monthly_dollar_volume_usd' => 0,
'tax_rate_pct' => 0,
)),
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Responses
| Status | Description |
|---|---|
201 |
Construction evidence created; no order placed |
422 |
Invalid input |
Authority boundary
A developer credential proves application identity and permits only its scopes. It does not grant model promotion, policy override, QLM rebinding, or Financial Actions execution authority unless those separate controls are satisfied.
investment:run