> ## Documentation Index
> Fetch the complete documentation index at: https://docs.glider.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Portfolio Performance

> Returns portfolio performance for an enrolled portfolio.

Returns a daily performance curve for the authenticated tenant's portfolio.
By default, returns are reported as money-weighted return (MWR), which reflects
the user's actual money outcome after deposits and withdrawals. B2B clients can
pass `returnMethod=TWR` when they need the strategy-style time-weighted view.

* Auth: `x-api-key` header (required)
* Scope: `portfolios:read`

<ParamField path="portfolioId" type="string" required>
  Portfolio identifier returned by `POST /v2/enroll` or `GET /v2/portfolios`.
</ParamField>

<ParamField query="returnMethod" type="MWR | TWR" optional>
  Return methodology for the curve. Defaults to `MWR`.
</ParamField>

Common error responses:

* `400` when the path parameter is invalid
* `401` when `x-api-key` header is missing or the key is invalid
* `403` when the API key lacks the `portfolios:read` scope
* `404` when the portfolio does not exist or does not belong to the tenant
* `500` on unexpected server errors

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.glider.fi/v2/portfolios/a1b2c3d4/performance' \
    --header 'x-api-key: gldr_sk_your_api_key'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.glider.fi/v2/portfolios/a1b2c3d4/performance",
    { headers: { "x-api-key": "gldr_sk_your_api_key" } },
  );
  const data = await response.json();
  ```
</RequestExample>

The response carries a `meta` block describing the calculation method and a
`summary` block with available lookback returns. `summary` is omitted when
there are not enough points to calculate a lookback.

* `meta.method` is `MWR` by default, or `TWR` when requested.
* `meta.resolution` is `1d`; `points[]` has at most one entry per UTC date.
* `points[].percentChange` is the cumulative return at that point under `meta.method`, or `null` when a return is unavailable for that point. `TWR` is compounded from the first returned point; `MWR` is your money-weighted return, whose basis shifts as deposits and withdrawals change. For `MWR`, use `summary.windows[]` for lookback returns rather than differencing two `percentChange` values.
* `points[].valueUsd` is the portfolio value for that UTC day.
* `points[].cashFlowUsd` is the signed net cash flow for that UTC day: positive on net-deposit days, negative on net-withdrawal days, `0` otherwise.
* `summary.windows[]` carries lookbacks ordered shortest to longest (`1d`,
  `1w`, `1m`, `3m`, `6m`, `12m`) when enough history is available.

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "portfolioId": "a1b2c3d4",
      "strategyId": "01JWZEE2MF30KVRMRX53N88VA4",
      "meta": {
        "method": "MWR",
        "currency": "USD",
        "resolution": "1d",
        "asOf": "2026-04-30T12:00:00.000Z"
      },
      "points": [
        {
          "date": "2026-04-28",
          "percentChange": "0.0000",
          "valueUsd": "1000",
          "cashFlowUsd": "0"
        },
        {
          "date": "2026-04-29",
          "percentChange": "1.2000",
          "valueUsd": "912",
          "cashFlowUsd": "-100"
        },
        {
          "date": "2026-04-30",
          "percentChange": "2.5000",
          "valueUsd": "1025",
          "cashFlowUsd": "100",
          "isLive": true
        }
      ],
      "summary": {
        "windows": [
          { "window": "1d", "percentChange": "1.2846", "since": "2026-04-29" }
        ]
      }
    }
  }
  ```
</ResponseExample>
