# Get link

URL: https://docs.hanzo.ai/docs/openapi/dataroom/get-dataroom-analytics-link-by-linkid

> Reports how one share link was actually read: total viewing sessions, total page views, and per page the view count, the summed dwell measure and its average.

`GET /v1/dataroom/analytics/link/{linkId}`

> [Dataroom →](https://docs.hanzo.ai/docs/openapi/dataroom) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                            |
| ------------- | ---------------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/dataroom/analytics/link/{linkId}` |
| **Method**    | `GET`                                                      |
| **Operation** | `get_dataroom_analytics_link_by_linkid`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                     |

Reports how one share link was actually read: total viewing
sessions, total page views, and per page the view count, the summed dwell
measure and its average.

The link is resolved in the caller's OWN tenant store, so another org's link id
is not found — knowing a link id is enough to OPEN the room it shares, and
never enough to read who has been reading it.

## Request

1 field.

| Field    | In   | Type   | Required | Description                      |
| -------- | ---- | ------ | -------- | -------------------------------- |
| `linkId` | path | string | yes      | LinkID is the link to report on. |

## Response

| Status    | Body                       | Meaning |
| --------- | -------------------------- | ------- |
| `200`     | dataroom.dataroomLinkStats | ok      |
| `default` | problem-details            | refused |

`200` body — 8 fields.

| Field                   | In   | Type                         | Always | Description                                                              |
| ----------------------- | ---- | ---------------------------- | ------ | ------------------------------------------------------------------------ |
| `linkId`                | body | string                       | —      | LinkId is the link these counts are for.                                 |
| `pages`                 | body | dataroom.dataroomPageStat\[] | —      | Pages is the per-page breakdown, in page order.                          |
| `pages[].avgDuration`   | body | integer (int64)              | —      | AvgDuration is totalDuration divided by views, rounded; 0 when unviewed. |
| `pages[].pageNumber`    | body | integer (int64)              | —      | PageNumber is the page these counts are for.                             |
| `pages[].totalDuration` | body | integer (int64)              | —      | TotalDuration is the summed dwell measure reported for the page.         |
| `pages[].views`         | body | integer (int64)              | —      | Views is how many times the page was viewed.                             |
| `totalPageViews`        | body | integer (int64)              | —      | TotalPageViews is how many page views the link received.                 |
| `totalViews`            | body | integer (int64)              | —      | TotalViews is how many viewing sessions the link opened.                 |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo dataroom analytics link get <linkId>
```

**SDK**

**.ts**

```ts
import { Configuration, DataroomApi } from 'hanzoai';

const api = new DataroomApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getDataroomAnalyticsLinkByLinkid({ linkId: 'linkId' });
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import DataroomApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = DataroomApi(client).get_dataroom_analytics_link_by_linkid(link_id='linkId')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.DataroomAPI.GetDataroomAnalyticsLinkByLinkid(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, dataroom_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = dataroom_api::get_dataroom_analytics_link_by_linkid(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.DataroomApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new DataroomApi(client).getDataroomAnalyticsLinkByLinkid();
```

**HTTP**

```bash
curl https://api.hanzo.ai/v1/dataroom/analytics/link/<linkId> \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **dataroom** through the `dataroom` tool, which names its 19 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_dataroom_analytic_dataroom"
         }
       }
     }'
```

---

[Dataroom API](https://docs.hanzo.ai/docs/openapi/dataroom) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
