Skip to main content
POST
Portfolio Risk
Full instantaneous, single-currency repricing of a portfolio of supplied vanilla positions (stocks, ETFs, and European or American options), from caller-supplied spot and implied-vol inputs. Synchronous — no job ID.
This never substitutes option deltas into historical returns, and uses no live market data. Every price and Greek comes from what you send in the request. A baseline scenario (no shocks) is always included alongside any scenarios you supply.

Request Body

Holding object: Contract object (option terms). Every field below is required whenever option is present; there are no optional or defaulted fields in this object: Scenario object:
Request-size caps: positions × (scenarios + 1) ≤ 500 position-scenarios, and American-style option valuations ≤ 40 across the request (scaled by scenario count). A scenario naming an underlying not in positions is rejected.

Response

Every position, in every scenario, carries base_greeks and position_risk, whether it’s a stock, ETF, or option. If no position has asset_type: "option", these are computed directly (exact stock arithmetic) and come out trivial for stocks and ETFs (delta 1, all other Greeks 0, as in the example below). With any option position, every position in the request is priced through the same options-pricing path instead, so Greeks stay additive across the book.
With an option position, each scenario’s positions[] row also carries contract_eligibility and pricing_diagnostics; see the response example for exact field presence, which varies by position.

Errors

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
valuation_date
string<date>
required
currency
string
required
Pattern: ^[A-Z]{3}$
nav
number
required
positions
Positions · object[]
required
Required array length: 1 - 100 elements
scenarios
Scenarios · object[]
Maximum array length: 20

Response

Successful Response

Last modified on November 6, 2026