> ## 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

> Returns the authenticated tenant's portfolio detail by ID.

Returns a single portfolio owned by the authenticated tenant — identity,
strategy metadata, per-chain smart accounts, and rebalance schedule state.
For real-time balances and USD values call
`GET /v2/portfolios/{portfolioId}/positions`.

The `schedule` block is the canonical source for rebalance visibility:

| Field                      | Use                                                                                     |
| -------------------------- | --------------------------------------------------------------------------------------- |
| `status`                   | `active` (scheduler will tick) vs `paused` (integrator stopped automation).             |
| `frequency` / `intervalMs` | Resolved cadence of the strategy.                                                       |
| `nextDueAt`                | When the next automated rebalance will fire. Render "next rebalance in …" UI from this. |
| `lastRebalanceAt`          | When the most recent run (manual or scheduled) completed.                               |

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

All on-chain identifiers are [CAIP](https://github.com/ChainAgnostic/CAIPs)-shaped.
End-user wallets use the chain-agnostic CAIP-10 form `eip155:0:<address>`;
smart accounts use the chain-bound form `eip155:<chainId>:<address>`. Owners
are EVM EOAs today.

Returns `404` for portfolios your API key does not have access to —
same response shape as a portfolio that doesn't exist.

<ParamField path="portfolioId" type="string" required>
  Portfolio identifier returned by `POST /v2/enroll` or `GET /v2/portfolios`.
</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/pf_01JWZEE2MF30KVRMRX53N88VA4' \
    --header 'x-api-key: gldr_sk_your_api_key'
  ```

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

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "portfolioId": "pf_01JWZEE2MF30KVRMRX53N88VA4",
      "ownerAccountId": "eip155:0:0xabcdef0000000000000000000000000000000001",
      "strategyId": "01JWZEE2MF30KVRMRX53N88VA4",
      "strategyName": "Conservative Yield",
      "strategyDescription": "Multi-chain balanced allocation strategy",
      "smartAccounts": [
        { "accountId": "eip155:8453:0xe3a2d1f49aee887e42655b56371d4d76bbf58058" }
      ],
      "schedule": {
        "status": "active",
        "frequency": "daily",
        "intervalMs": 86400000,
        "nextDueAt": "2026-04-16T12:00:00.000Z",
        "lastRebalanceAt": "2026-04-15T12:00:00.000Z"
      },
      "createdAt": "2026-04-10T08:30:00.000Z",
      "strategyVersion": 4,
      "updatedAt": "2026-04-15T12:00:00.000Z"
    }
  }
  ```

  ```json 404 theme={null}
  {
    "success": false,
    "error": {
      "code": "API_006",
      "message": "Portfolio with ID pf_01JWZEE2MF30KVRMRX53N88VA4 not found"
    }
  }
  ```
</ResponseExample>
