---
title: "Preview report"
method: POST
path: "/api/reports/preview"
tags: ["Reports"]
---

# Preview report

`POST /api/reports/preview`

## Request

- Base URL: `https://demo.hitkeep.com`
- URL: `https://demo.hitkeep.com/api/reports/preview`
- Auth: API key in cookie `hk_token`

Validates a draft report and returns its resolved schedule, reporting period, sender, and the exact email the current user would receive, rendered in their language for the selected audience. Rendered content is never persisted.

## Request body

- object
  - `audience` 'member' | 'external'
  - `definition` ReportDefinitionInput, required
    - `external_recipient_emails` string[], required
    - `name` string, required
    - `preset` 'site_summary' | 'portfolio_digest' | 'opportunity_brief', required
    - `recipient_user_ids` string[], required
    - `schedule` ReportSchedule, required
      - `frequency` 'daily' | 'weekly' | 'monthly', required
      - `local_time` string, required
      - `monthly_day` integer
      - `timezone` string, required: IANA timezone name.
      - `weekly_day` integer
    - `scope` 'personal' | 'team', required
    - `site_ids` string[], required
    - `site_mode` 'selected' | 'all_accessible', required
    - `status` 'draft' | 'active' | 'paused', required
    - `tenant_id` string, uuid
  - `report_id` string, uuid

## Response `200`

Report preview

- ReportPreview
  - `audience` 'member' | 'external'
  - `from_address` string
  - `from_name` string
  - `html` string: Exact rendered HTML email; empty when suppressed.
  - `pending_recipient_count` integer
  - `period_end` string, date-time
  - `period_start` string, date-time
  - `preheader` string
  - `preset` string
  - `recipient_count` integer
  - `schedule` ReportSchedule
    - `frequency` 'daily' | 'weekly' | 'monthly', required
    - `local_time` string, required
    - `monthly_day` integer
    - `timezone` string, required: IANA timezone name.
    - `weekly_day` integer
  - `scheduled_for` string, date-time
  - `site_count` integer
  - `subject` string
  - `suppressed` boolean
  - `text` string: Exact rendered plain-text email; empty when suppressed.

## Other responses

- `400`: Invalid report

---

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