---
title: "Get a custom report with its widget data"
method: GET
path: "/custom_reports/{id}"
tags: ["Custom Reports"]
---

# Get a custom report with its widget data

`GET /custom_reports/{id}`

## Request

- Base URL: `https://api.llmpulse.ai/api/v1`
- URL: `https://api.llmpulse.ai/api/v1/custom_reports/{id}`
- Auth: API key in header `Authorization`

The configuration of one custom report (date range, filters, schedule, layout) and the data of every widget computed for today, the same numbers the report page, its shared link and its PDF show. Each widget carries its `kind` and a `data` object shaped by it: `series` for `timeseries`, `slices` for `donut`, `bars` for `bar`, `values` and `changes` for `kpi_grid`, `rows` for `table`. A widget whose data source is not connected has `available: false` and `data: null`. Nothing is saved or sent. Requires the Scale plan or above.

## Path parameters

- `id` integer, required

## Query parameters

- `project_id` integer, required

## Response `200`

Report configuration and widget data

- CustomReportDetailResponse
  - `project_id` integer, required
  - `id` integer, required
  - `name` string, required
  - `date_range` CustomReportDateRange, required
    - `type` 'rolling' | 'previous_month', required: rolling (the last range_days days) or previous_month (the previous calendar month)
    - `range_days` integer, nullable, required: Length of a rolling window; null for previous_month
    - `from` string, date: First day of the window as of now (detail only)
    - `to` string, date: Last day of the window as of now (detail only)
    - `label` string: The window as the report shows it (detail only)
  - `schedule` CustomReportSchedule, required
    - `enabled` boolean, required
    - `day_of_week` integer, nullable: 0 (Sunday) to 6 (Saturday)
    - `hour` integer, nullable
    - `timezone` string, nullable
  - `recipients_count` integer
  - `published` boolean
  - `public_link_active` boolean
  - `password_protected` boolean
  - `portal_only` boolean
  - `last_sent_at` string, date-time, nullable: When the report was last emailed, on its schedule or with Send now
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `filters` CustomReportFilters, required
    - `models` string[], required: AI models the report covers; empty means every enabled model
    - `collection_ids` integer[], required: Tags the report is limited to; empty means every prompt
    - `brand_kind` string, nullable
    - `competitor_ids` integer[], required: Competitors compared, the report's own choice or else the Overview selection
  - `compare_previous` boolean
  - `attach_excel` boolean
  - `manual_send_available_at` string, date-time, nullable: When the 10-minute cooldown after the last manual send ends; null when none is running
  - `generated_at` string, date-time, required
  - `blocks` CustomReportBlock[], required: The report layout in order
    - `type` 'widget' | 'heading' | 'text' | 'separator' | 'image', required
    - `key` string, nullable: The widget key, for a widget block
    - `text` string, nullable: The text of a heading or text block
  - `widgets` CustomReportWidget[], required
    - `key` string, required
    - `label` string, required
    - `kind` 'kpi_grid' | 'timeseries' | 'donut' | 'bar' | 'table', required
    - `width` 'half' | 'full', required
    - `available` boolean, required: false when the widget's data source (web analytics, agent analytics, owned media) is not connected
    - `data` object, nullable: Shaped by kind. timeseries: series [{ name, color, points [{ date, value }] }]. donut: slices [{ name, value, color }]. bar: bars [{ label, value, color }]. kpi_grid: values and changes (null unless the report compares with the previous period). table: rows, one object per row. Null when the widget is not available.
  - `request_id` string, required

## Other responses

- `403`: Endpoint requires a higher plan tier
- `404`: Resource not found

## Changes

- **2026-10-16** `dd090b1e1154`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/llmpulse/apis/llm-pulse-api/changes/custom_reports/:id/get.md)

---

[API](https://skmtc.dev/llmpulse/apis/llm-pulse-api.md) - [All operations](https://skmtc.dev/llmpulse/apis/llm-pulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/llmpulse/apis/llm-pulse-api/revisions/38a31f123641?raw)
