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

# Personal Holdings

> Read the holdings you saved in Dashboard Profile for portfolio-aware agent answers.

<Note icon="sparkles">
  **Available as MCP tool**: `personal_holdings` — call directly from Claude / Cursor / any MCP client. See [MCP Server](/en/integration/mcp-server) for the 60-second setup.
</Note>

<Badge color="green" icon="circle-check">Live</Badge>
 
<Badge color="gray" size="sm">free · 0 credits</Badge>

## What it does for your agent

`personal_holdings` returns the positions you saved in **Dashboard → Profile**. Use it when an agent needs your portfolio context before calling market, filing, or research tools: concentration checks, "what do I own?", asset-class filters, or portfolio-aware research.

The tool is read-only. It does not place trades, connect to a brokerage account, or fetch live balances. Values are what you saved in Profile; combine this with price tools when the answer needs current market data.

Only your own account's Profile data is returned.

## Response

<ResponseField name="data" type="object" required>
  Saved holdings envelope for the caller's own account.

  <Expandable title="data fields">
    <ResponseField name="total_count" type="number" required>
      Number of returned holdings after filters and limit.
    </ResponseField>

    <ResponseField name="holdings" type="PersonalHolding[]" required>
      Holdings saved in Profile, most recently saved rows first.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="data.holdings[]" type="PersonalHolding" required>
  <Expandable title="PersonalHolding fields">
    <ResponseField name="symbol" type="string" nullable>Ticker or symbol, when saved.</ResponseField>
    <ResponseField name="name" type="string" nullable>Display name, when saved.</ResponseField>

    <ResponseField name="asset_class" type="string" required>
      One of `equity`, `etf`, `crypto`, `cash`, `fund`, `bond`, or `other`.
    </ResponseField>

    <ResponseField name="quantity" type="number" nullable>Saved position size.</ResponseField>
    <ResponseField name="market_value" type="number" nullable>Saved market value.</ResponseField>

    <ResponseField name="cost_basis" type="number" nullable>
      Saved aggregate total cost for the position. If both `cost_basis` and `quantity` exist, agents can derive an average cost as `cost_basis / quantity`.
    </ResponseField>

    <ResponseField name="currency" type="string" required>Currency code, usually `USD`.</ResponseField>
    <ResponseField name="as_of_date" type="string" nullable>Date attached to the saved value (`YYYY-MM-DD`).</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta.creditsUsed" type="number">Always `0` — this read is free.</ResponseField>
<ResponseField name="meta.remainingCredits" type="number">Account credits remaining.</ResponseField>

```json title="200 OK · personal_holdings" expandable theme={null}
{
  "data": {
    "total_count": 2,
    "holdings": [
      {
        "symbol": "AAPL",
        "name": "Apple Inc.",
        "asset_class": "equity",
        "quantity": 10,
        "market_value": 2120.5,
        "cost_basis": 1800,
        "currency": "USD",
        "as_of_date": "2026-06-21"
      },
      {
        "symbol": "BTC",
        "name": "Bitcoin",
        "asset_class": "crypto",
        "quantity": 0.25,
        "market_value": 25000,
        "cost_basis": null,
        "currency": "USD",
        "as_of_date": "2026-06-21"
      }
    ]
  },
  "meta": { "creditsUsed": 0, "remainingCredits": 100 }
}
```

```json title="200 OK · empty portfolio" expandable theme={null}
{
  "data": { "total_count": 0, "holdings": [] },
  "meta": { "creditsUsed": 0, "remainingCredits": 100 }
}
```

## Notes

<Tip>
  Start with `personal_holdings` when the user asks a portfolio-aware question, then call market tools only for the tickers that matter. This keeps the agent focused on the user's saved positions.
</Tip>

<Warning>
  Any active API key or Remote MCP URL for your account can read this saved Profile data until you delete the saved rows or revoke the credential.
</Warning>

<Warning>
  Values are user-saved profile values, not live market quotes or brokerage balances. Use price tools for current market data.
</Warning>

## Direct invocation

<Accordion title="HTTP / SDK examples" icon="terminal">
  <CodeGroup>
    ```typescript MCP (Claude / Cursor) theme={null}
    {
      "method": "tools/call",
      "params": {
        "name": "personal_holdings",
        "arguments": { "asset_class": "equity", "limit": 10 }
      }
    }
    ```

    ```python Python (HTTP) theme={null}
    import os, requests

    resp = requests.get(
        "https://api.llmquantdata.com/api/personal/holdings",
        headers={"Authorization": f"Bearer {os.environ['LLMQUANT_API_KEY']}"},
        params={"asset_class": "equity", "limit": 10},
    ).json()
    print(resp["data"]["total_count"], resp["data"]["holdings"])
    ```

    ```bash cURL theme={null}
    curl "https://api.llmquantdata.com/api/personal/holdings?asset_class=equity&limit=10" \
      -H "Authorization: Bearer $LLMQUANT_API_KEY"
    ```
  </CodeGroup>
</Accordion>

## Full parameter reference

<Accordion title="All request parameters" icon="sliders">
  <ParamField query="asset_class" type="string">
    Optional filter. One of `equity`, `etf`, `crypto`, `cash`, `fund`, `bond`, or `other`.
  </ParamField>

  <ParamField query="limit" type="number" default={30}>
    Maximum holdings returned. Range `1-50`; values above `50` are capped at `50`.
  </ParamField>
</Accordion>

## Related

<Columns cols={2}>
  <Card title="Personal Profile" icon="user" href="/en/api/personal/profile">
    Read saved risk preference, time horizon, base currency, and notes.
  </Card>

  <Card title="MCP Server setup" icon="plug" href="/en/integration/mcp-server">
    Connect Claude / Cursor / any agent harness in 60 seconds.
  </Card>
</Columns>
