---
title: "Blend asset-class assumptions into a portfolio return & volatility"
method: POST
path: "/v1/capital-market-assumptions"
tags: ["Portfolio"]
---

# Blend asset-class assumptions into a portfolio return & volatility

`POST /v1/capital-market-assumptions`

## Request

- Base URL: `https://api.numeratica.com`
- URL: `https://api.numeratica.com/v1/capital-market-assumptions`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Combines per-asset-class capital-market assumptions (expected return, volatility, weight) and a correlation structure into a single portfolio expected return and volatility via mean/variance (Markowitz) aggregation. The outputs map directly to the Monte Carlo endpoint's expected_return and return_volatility. Deterministic.

## Request body

- CMARequest
  - `assets` object[], required: Asset classes; weights must sum to 1.0.
    - `name` string
    - `expected_return` number, required
    - `volatility` number, required
    - `weight` number, required
  - `correlation` array[]: Optional N×N correlation matrix (N = number of assets). If omitted, default_correlation is used for every pair.
    - number[]
  - `default_correlation` number: Pairwise correlation used when no matrix is given.

## Response `200`

Blended portfolio

- CMAResponse
  - `result_id` string
  - `engine_version` string
  - `inputs` CMARequest
    - `assets` object[], required: Asset classes; weights must sum to 1.0.
      - `name` string
      - `expected_return` number, required
      - `volatility` number, required
      - `weight` number, required
    - `correlation` array[]: Optional N×N correlation matrix (N = number of assets). If omitted, default_correlation is used for every pair.
      - number[]
    - `default_correlation` number: Pairwise correlation used when no matrix is given.
  - `result` object
    - `expected_return` number: Weighted-mean portfolio return (feed to Monte Carlo expected_return).
    - `volatility` number: Portfolio standard deviation (feed to Monte Carlo return_volatility).
    - `variance` number
  - `disclaimer` string

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key.
- `405`: Method not allowed
- `429`: The key's per-minute request budget is exceeded. Retry after the delay in the Retry-After header.
- `503`: A dependency (e.g. the key store) is temporarily unavailable, or the request exceeded its compute deadline. Retryable.

---

[API](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api.md) · [All operations](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/llms.txt) · [OpenAPI document](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/revisions/075bcfbd1ebf?raw)
