# Chain analytics

Chain analytics read APIs.

`client.chain_analytics` provides public time-series reads for Zipper and unified assets.

| Method                          | Primary identifier |
| ------------------------------- | ------------------ |
| `get_zipped_asset_supply`       | zipped asset ID    |
| `get_zipped_asset_supply_group` | group ID           |
| `get_unified_asset_balances`    | unified asset ID   |

```rust
let series = client
    .chain_analytics
    .get_zipped_asset_supply(1, "24h", "", 0, 0)
    .await?;
println!("{}", series.raw);

let balances = client
    .chain_analytics
    .get_unified_asset_balances(2, "7d", "1h", 0, 0)
    .await?;
```

`range_key` selects the server window; `bucket`, `start_ts_sec`, and `end_ts_sec` refine it. Invalid range labels return `Error::Validation`. Responses use `ApiData`/`serde_json::Value` for forward compatibility.

Do not use analytical aggregation as an order-book or ledger source of truth. Use [Market data](https://testnet.polyester.com/docs/sdk/rust/guides/market-data) and [Balances](https://testnet.polyester.com/docs/sdk/rust/reference/balances).
