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

# Fund Monitoring

> Monitor fund disclosures, NAV updates, and manager activity through webhooks and event feeds.

Use this workflow when you need to:

* keep a fund directory current across managers
* refresh latest NAV or snapshot data in a product or internal workflow
* detect new disclosures and holdings updates
* trigger downstream notifications or review flows when a tracked fund changes

## What Rangler gives you

The fund workflow package is built from:

* `GET /v1/funds`
* `GET /v1/funds/{fund_id}`
* `GET /v1/funds/{fund_id}/snapshots`
* `GET /v1/funds/{fund_id}/events`
* `GET /v1/events?type=fund.snapshot.updated&type=fund.disclosure.updated`
* webhook subscriptions filtered to `fund.snapshot.updated` and `fund.disclosure.updated`

In the portal, the matching preset is **Fund monitoring**.

## Start with webhooks

Start with webhooks when fund updates should drive a customer-facing product, internal alert, or review workflow.

### Directory sync

Fetch the latest fund directory:

```bash theme={null}
curl -s "https://sandbox-api.rangler.co/v1/funds?limit=50" \
  -H "X-API-Key: rgl_test_your_key_here" | python3 -m json.tool
```

Use this to bootstrap tracked fund IDs into your system.

### Latest NAV refresh

Fetch one fund with its latest snapshot:

```bash theme={null}
curl -s "https://sandbox-api.rangler.co/v1/funds/{fund_id}" \
  -H "X-API-Key: rgl_test_your_key_here" | python3 -m json.tool
```

Read:

* `latest_snapshot`
* `latest_holdings_snapshot`
* `latest_snapshot.as_of_date`
* `latest_snapshot.price`

With `ranglerpy`:

```python theme={null}
from ranglerpy import RanglerClient

client = RanglerClient(api_key="rgl_test_your_key_here", environment="sandbox")
fund = client.funds.get("fund_uuid_here")

print(fund["name"], fund["latest_snapshot"]["as_of_date"], fund["latest_snapshot"]["price"])
```

### Latest disclosure update

Fetch historical snapshots for one fund:

```bash theme={null}
curl -s "https://sandbox-api.rangler.co/v1/funds/{fund_id}/snapshots?limit=12" \
  -H "X-API-Key: rgl_test_your_key_here" | python3 -m json.tool
```

Use this for disclosure history, not just the latest state.

With `ranglerpy`:

```python theme={null}
from ranglerpy import RanglerClient

client = RanglerClient(api_key="rgl_test_your_key_here", environment="sandbox")
snapshots = client.funds.list_snapshots("fund_uuid_here", limit=12)

for snapshot in snapshots["items"]:
    print(snapshot["as_of_date"], snapshot["factsheet_title"], snapshot["disclosure_kind"])
```

### Check the event feed for missed deliveries

```bash theme={null}
curl -s "https://sandbox-api.rangler.co/v1/events?type=fund.snapshot.updated&type=fund.disclosure.updated&limit=25" \
  -H "X-API-Key: rgl_test_your_key_here" | python3 -m json.tool
```

Use `ranglerpy` for backfills and missed-delivery checks:

```python theme={null}
from ranglerpy import RanglerClient

client = RanglerClient(api_key="rgl_test_your_key_here", environment="sandbox")

for event in client.v1.events.auto_paging_iter(
    event_types=["fund.snapshot.updated", "fund.disclosure.updated"],
    limit=100,
):
    print(event.type, event.fund_id, event.occurred_at.isoformat())
```

### Recommended rule

In the portal:

1. Create a webhook endpoint
2. Choose the **Fund monitoring** preset
3. Keep event types:
   * `fund.snapshot.updated`
   * `fund.disclosure.updated`
4. Add fund IDs if you want a narrowed rule
5. Leave company IDs empty

### Example webhook payload usage

Receiver flow:

1. verifies the Rangler signature
2. checks the event type
3. stores `event.id` in a durable inbox for duplicate-delivery protection
4. fetches additional fund detail if needed
5. updates downstream state or sends a human alert

See [Webhooks](/webhooks) for signature verification and [SDKs](/sdks) for `ranglerpy` helpers.

## Top-holdings change monitoring

Rangler does not yet ship a dedicated “holdings diff” event type.

For now:

1. receive or read `fund.disclosure.updated`
2. fetch the latest snapshot
3. compare `top_holdings` or holdings-derived fields in your own workflow

## Recommended first production path

For most teams:

1. sync the fund directory
2. register a webhook endpoint and fund-monitoring subscription
3. read event feeds periodically to catch missed deliveries and load earlier records

See [Webhooks and Event Feeds](/polling-vs-webhooks) and [Sandbox Testing](/sandbox-testing) before you go live.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.