## Portfolio
Today's positions and your demat holdings, from the
[Portfolio](/api/v1/reference/portfolio/) endpoints. Examples use `api` from
[Getting started](/sdk/python/).

### api.get_positions(...) — Positions

**Calls:** [`GET /v1/positions`](/api/v1/reference/portfolio/#get-v1positions--positions) · **Scope:** `positions.read`

Today's net positions. A position squared off today is still listed with
`net_qty` `0`, so filter on `net_qty` before acting.

#### Signature

```python
api.get_positions(*, timeout: float | None = None) -> dict
```

#### Returns

`{"positions": [...]}`; fields are on [the endpoint](/api/v1/reference/portfolio/#get-v1positions--positions).

#### Raises

- [`SahiRateLimitException`](/sdk/python/errors/#sahiratelimitexception): over 5/s, 250/min or 10,000/day.

#### Example

```python
open_positions = [p for p in api.get_positions()["positions"] if p["net_qty"] != 0]
```

### api.get_holdings(...) — Holdings

**Calls:** [`GET /v1/holdings`](/api/v1/reference/portfolio/#get-v1holdings--holdings) · **Scope:** `holdings.read`

One entry per ISIN, with no name or price. Get the symbol from
[`get_instruments_by_isin`](/sdk/python/scrip-master/#apiget_instruments_by_isin--instruments-by-isin)
and the price from [`get_ltp`](/sdk/python/market-data/#apiget_ltp--last-traded-price).

#### Signature

```python
api.get_holdings(*, timeout: float | None = None) -> dict
```

#### Returns

`{"holdings": [...]}`; fields are on [the endpoint](/api/v1/reference/portfolio/#get-v1holdings--holdings).

#### Raises

- [`SahiRateLimitException`](/sdk/python/errors/#sahiratelimitexception): over 5/s, 250/min or 10,000/day.

#### Example

```python
for h in api.get_holdings()["holdings"]:
    print(h["isin"], h["holding_qty"])
```

