---
title: "List custom reports"
method: GET
path: "/custom_reports"
tags: ["Custom Reports"]
---

# List custom reports

`GET /custom_reports`

## Request

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

The custom reports of the project, newest first, as the Reports > Custom Reports list shows them. Recipient addresses, the shared-link token and the password are never returned. Requires the Scale plan or above.

## Query parameters

- `project_id` integer, required
- `page` integer
- `per_page` integer
- `output` 'flat' | 'csv'

## Response `200`

Paginated custom reports

- CustomReportsResponse: Envelope shared by the paginated listings; each listing adds its own data rows
  - `project_id` integer, required
  - `page` integer, required
  - `per_page` integer, required
  - `total` integer, required: Rows matching the filters across every page
  - `request_id` string, required
  - `data` CustomReportSummary[], 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, required
    - `published` boolean, required: Whether the shared link is published
    - `public_link_active` boolean, required: Whether the shared link opens (published, not made inside a client portal, and the account is active on the Scale tier or higher)
    - `password_protected` boolean, required
    - `portal_only` boolean, required: Made inside a client portal, so it cannot be shared or emailed
    - `widget_count` integer, required
    - `widgets` CustomReportWidgetRef[], required
      - `key` string, required
      - `label` string, required
      - `kind` 'kpi_grid' | 'timeseries' | 'donut' | 'bar' | 'table', required
    - `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, required
    - `updated_at` string, date-time, required

## Other responses

- `403`: Endpoint requires a higher plan tier

## Changes

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

[Operation history](https://skmtc.dev/llmpulse/apis/llm-pulse-api/changes/custom_reports/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)
