---
title: "Get advanced analytics insights"
method: GET
path: "/api/v2/projects/{slug}/analytics/insights/"
tags: ["Analytics"]
---

# Get advanced analytics insights

`GET /api/v2/projects/{slug}/analytics/insights/`

## Request

- Base URL: `https://app.biel.ai`
- URL: `https://app.biel.ai/api/v2/projects/{slug}/analytics/insights/`
- Auth: API key in header `Authorization`

Surface conversation-driven insights for the project: top recurring questions (`faqs`) and content gaps where users asked something the assistant could not answer (`content_gaps`). Each item includes the related chats so you can drill into the original conversations.

**Plan-gated:** requires a plan that includes advanced analytics. When your team does not have access, the endpoint returns 200 with `{ "has_access": false }` and no payload. Treat that as a successful response rather than an error, and prompt the user to upgrade.

**Required permission:** `analytics_read`

## Path parameters

- `slug` string, required

## Query parameters

- `from` string, date
- `to` string, date

## Response `200`

Insights retrieved successfully (or `has_access: false` if the team is on a plan without advanced analytics)

- InsightsAnalytics: Conversation-driven insights for a project. When the team is not on a plan with advanced analytics, only `has_access: false` is returned and the `faqs` / `content_gaps` fields are omitted.
  - `has_access` boolean, required: `true` when the team has advanced analytics access; `false` otherwise.
  - `faqs` InsightsItem[]: Top 10 most frequently asked questions in the date range. Only present when `has_access` is `true`.
    - `question_text` string, required: Canonical question text identified by the analyser.
    - `total_occurrences` integer, required: Number of times this question (or close variants) appeared in the range.
    - `related_chats` InsightsRelatedChat[], required: Chats that fed into this insight, with their original question wording.
      - `chat_uuid` string, uuid, required: UUID of the chat.
      - `original_question` string, required: The user's original message that triggered the analysis.
      - `date` string, date, nullable: ISO-8601 date (`YYYY-MM-DD`) the chat was analysed on, or `null` if no date is available.
  - `content_gaps` InsightsItem[]: Top 10 questions the assistant could not answer satisfactorily in the date range. Only present when `has_access` is `true`.
    - `question_text` string, required: Canonical question text identified by the analyser.
    - `total_occurrences` integer, required: Number of times this question (or close variants) appeared in the range.
    - `related_chats` InsightsRelatedChat[], required: Chats that fed into this insight, with their original question wording.
      - `chat_uuid` string, uuid, required: UUID of the chat.
      - `original_question` string, required: The user's original message that triggered the analysis.
      - `date` string, date, nullable: ISO-8601 date (`YYYY-MM-DD`) the chat was analysed on, or `null` if no date is available.

## Other responses

- `400`: Bad request. Invalid or missing data.
- `403`: Forbidden. Missing permissions.
- `404`: Resource not found.

---

[API](https://skmtc.dev/biel/apis/biel-ai-api.md) · [All operations](https://skmtc.dev/biel/apis/biel-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/biel/apis/biel-ai-api/revisions/ac7034d82696?raw)
