Analyze a portfolio with multi-currency support, rebalancing, and comprehensive metrics. This endpoint uses async job processing - submit your request, receive a job ID, then poll for results.
/v1/portfolio/analyze/v1/jobs/{job_id} until status is completed| Field | Type | Required | Default | Description |
|---|---|---|---|---|
portfolio | array | Yes | - | List of holdings (see format below) |
start_date | string | No | First rebalance date | Analysis start date (YYYY-MM-DD) |
end_date | string | No | Yesterday | Analysis end date (YYYY-MM-DD) |
base_currency | string | No | USD | Base currency (USD, SGD, EUR, etc.) |
benchmark | string | No | ACWI | Benchmark for comparison (e.g., ACWI, SPY) |
initial_value | number | No | 10000 | Starting portfolio value |
include_transaction_costs | boolean | No | false | Apply market-specific transaction costs |
transaction_cost_config | object | No | Default rates | Custom transaction cost rates by market |
fields | array | No | All fields | Select specific response fields |
portfolio array:
| Field | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Rebalance date (YYYY-MM-DD) |
symbol | string | Yes | Stock symbol (e.g., AAPL.O for Apple Inc) |
weight | number | Yes | Portfolio weight as decimal (0.25 = 25%) |
fields parameter to return only specific data sections. If omitted, all fields are returned.
| Field | Description |
|---|---|
portfolio_summary | Final value, total return, P&L breakdown, transaction costs |
turnover_analysis | Turnover metrics, rebalance frequency, costs by market |
performance_metrics | Sharpe, Sortino, VaR, volatility, drawdown |
rolling_metrics | 30/60/90-day rolling Sharpe, beta, correlation |
drawdown_analysis | Drawdown episodes and recovery times |
portfolio_scores | Quant factor scores (value, quality, momentum) |
latest_holdings | Current positions with company info |
transactions | All buy/sell trades |
market_allocation | Market weights over time |
sector_allocation | Sector weights over time |
currency_allocation | Currency weights over time |
company_contribution | P&L attribution by company |
sector_contribution | P&L attribution by sector |
market_contribution | P&L attribution by market |
time_period_returns | MTD, YTD, 1Y, inception returns |
daily_summary | Equity curve with benchmark comparison |
GET /v1/jobs/{job_id} returns:
API key passed as Bearer token
Request body for portfolio analysis
List of holdings with date, symbol, and weight. Weights should sum to 1.0 for each rebalance date. Multiple dates supported for rebalancing.
1Analysis start date (YYYY-MM-DD). If not provided, defaults to first rebalance date in portfolio.
"2024-01-01"
Analysis end date (YYYY-MM-DD). If not provided, defaults to yesterday. Future dates are auto-capped to yesterday.
"2024-11-01"
Base currency for portfolio valuation. Supports USD, SGD, EUR, GBP, JPY, etc.
"USD"
Benchmark for comparison (e.g., ACWI, SPY)
"ACWI"
Initial portfolio value in base currency. Used to calculate absolute P&L and position sizes.
10000
Apply market-specific transaction costs during rebalancing
false
Custom transaction cost rates by market. Format: {'market_name': {'buy': rate, 'sell': rate}}. If not provided, uses default rates.
{
"Singapore": { "buy": 0.14, "sell": 0.14 },
"United States": { "buy": 0.1, "sell": 0.1 }
}Optional field selection. If omitted, all fields are returned. Use this to reduce response size.
portfolio_parameters, portfolio_input, data_quality, portfolio_summary, turnover_analysis, performance_metrics, rolling_metrics, drawdown_analysis, portfolio_scores, concentration_metrics, transactions, company_info, latest_holdings, market_allocation, sector_allocation, currency_allocation, company_contribution, sector_contribution, market_contribution, time_period_returns, monthly_returns, annual_returns, benchmark_prices, daily_summary [
"portfolio_summary",
"performance_metrics",
"latest_holdings"
]Job created successfully. Poll the check_url for results.