View as Markdown

Performance

Performance is the daily return series for a lens: time-weighted return, contributions, and market value per date, in one reporting currency of the lens's client. One point per day over the window you ask for, or per day and asset, custody account or tag with group_by.

Reading requires the positions:read scope.

Every holding is kept once per reporting currency of its client, as in holdings: currency picks the leg, the client's primary currency by default. Its currencies are its primary currency, its entities' primary currencies and their alternative currencies; any other currency is a 400 that lists them.

A lens synced from the legacy platform counts a portfolio that sits in more than one of its portfolio groups once per group, as the legacy API does. A lens built in v1 is read through its rules, as holdings reads it: each day's figures count with the lens's weight of the row and within your own share, each row once, and nothing before the lens's start_date. A lens with a custody account, cash account or custodian rule (also through a lens it takes or the folder it sits in) is read per custody or cash account, and so is group_by=custody_account.

Amounts follow your ownership, as holdings do: if you see a portfolio only as its owner, daily_return, net_contribution and net_market_value are your share of it on each day. A change of your share is a flow on the day it takes effect, never a return: buying into 10 % more of a portfolio worth 1 000 000 shows 100 000 in net_contribution on that day and is not on the transaction list. The time-weighted return is the portfolio's own, whatever your share.

Data model

dateISO 8601 date

The day of the point.

asset_idstring or null

The asset, with group_by=asset; null otherwise.

custody_account_idstring or null

The custody account, with group_by=custody_account; null otherwise, and on figures held outside a custody account.

tag_idstring or null

The asset's detailed asset class as a tag, with group_by=tag; null otherwise, and on a class without a tag.

twrdecimal string or null

Time-weighted return for the day, rounded to 12 decimals. null on an asset or tag of a class the legacy platform shows no return for (forwards, derivatives, money market); its amounts are still there.

accumulated_twrdecimal string or null

Time-weighted return compounded from from_date through the date; null where twr is.

daily_returndecimal string

Return in money for the day.

accumulated_returndecimal string

Return in money summed from from_date through the date.

net_contributiondecimal string

Net external cash flow on the date — contributions positive, withdrawals negative.

net_market_valuedecimal string

Market value at close of the date.

currency_codestring

ISO 4217 currency the point is valued in.


GET/v1/performance

List performance

Returns the daily series for a lens over a date window, in the standard v1 list envelope plus from_date and currency. The window starts on from_date or at the start of period, exactly one of the two, and ends on as_of, today when left out. Both or neither, an unknown period, an as_of before the start, a currency outside the client's currencies and an unknown query parameter (also the old to_date) are a 400. The envelope's as_of is the day the window ends on, from_date the day it starts on (the lens's start_date when that is later) and currency the currency read. A window that ends before the lens's start_date is an empty list.

Query parameters

lens_idstring

The lens to compute over. Required.

from_dateISO 8601 date

Inclusive start of the window; the accumulated figures run from it. Not together with period.

periodstring

The window ending on as_of, in place of from_date: dtd (the day), mtd (from the 1st of the month), qtd, htd and ytd (from the start of the quarter, half-year and year of the lens's accounting year, 1 January unless the lens has its own), itd (from the lens's first day: its start_date, else its first figures), 1m, 3m, 6m and 1y (from the day after the same day one unit back) and 3y and 5y (from the same day three or five years back). A lens whose sub-lenses have different accounting years takes from_date only.

as_ofISO 8601 date

The inclusive end of the window. Today when left out.

currencystring

The reporting currency to read, one of the lens client's currencies. The client's primary currency when left out.

group_bystring

asset, custody_account or tag: one point per day per group, each accumulated on its own. Any other value is a 400. Omit for one point per day.

limitinteger

Page size. Defaults to 366 — one year of daily points — capped at 3 650.

cursorstring

Opaque cursor from the previous page's next_cursor. Omit for the first page.

Request
GET/v1/performance
curl -G https://api.aleta.ai/v1/performance \
  -H "Authorization: Bearer {access_token}" \
  -d lens_id=019f91be-1d83-7f0a-bbfc-e64861142e87 \
  -d from_date=2025-01-30 \
  -d as_of=2025-02-28
Response
{
  "data": [
    {
      "date": "2025-01-30",
      "asset_id": null,
      "custody_account_id": null,
      "tag_id": null,
      "twr": "0.0012505",
      "accumulated_twr": "0.0012505",
      "daily_return": "1250.5",
      "accumulated_return": "1250.5",
      "net_contribution": "0",
      "net_market_value": "1001250.5",
      "currency_code": "DKK"
    },
    {
      "date": "2025-01-31",
      "asset_id": null,
      "custody_account_id": null,
      "tag_id": null,
      "twr": "-0.000475861843",
      "accumulated_twr": "0.000774043092",
      "daily_return": "-500.25",
      "accumulated_return": "750.25",
      "net_contribution": "50000",
      "net_market_value": "1050750.25",
      "currency_code": "DKK"
    }
  ],
  "next_cursor": null,
  "limit": 366,
  "as_of": "2025-02-28",
  "from_date": "2025-01-30",
  "currency": "DKK"
}
GET/v1/performance/private-markets

List private-market figures

Returns the private-equity figures of a lens's funds, in the standard v1 list envelope: one row per fund and holding date (holding_date), at the market price date date. A NAV dated 1 June is the price for every day until the next NAV, so one date can carry many rows. Takes lens_id and from_date (required), to_date (today when left out; both on date) and currency (one of the lens client's currencies, its primary currency when left out, as on GET /v1/performance). The envelope's as_of is the to_date used. The funds are the ones the lens held within the window. An unknown query parameter (also the old reporting_currency), a currency outside the client's currencies and a to_date before from_date are a 400.

Each row has, in this order, date, holding_date, asset_id, nav_date, reporting_currency_code, fund_currency_code, nav, market_value (in the fund's currency), market_value_reporting (in the reporting currency), commitment_total, commitment_called and commitment_uncalled (fund currency) and their _reporting twins, dpi, rvpi, tvpi, capital_calls (the capital called), distributions, accumulated_return (summed per fund from its first day) and irr. Rows are ordered by date, then asset and holding date. nav_date and every figure from nav on can be null (a ratio over a zero commitment is null, not a number). limit defaults to 100, at most 1 000.

The amounts follow your ownership and the lens's rules per portfolio, as performance does: market_value, the commitments, capital_calls, distributions and accumulated_return are your share of each portfolio's figures on the holding date, summed over the portfolios. nav, dpi, rvpi, tvpi and irr are the fund's own and are not weighted.

  • Holdings — the positions behind the numbers.
  • Benchmarks — reference series to compare returns against.
  • Lenses — the scope performance is computed over.