---
title: "Get Rollout Report"
method: GET
path: "/admin/holiday-rollout/report"
tags: ["Admin - Holiday Rollout"]
---

# Get Rollout Report

`GET /admin/holiday-rollout/report`

Full rollout report: eligible population, popup/banner funnel, and
per-student detail of progress in the seasonal cahiers (since the campaign
start only — the Terminale→Prépa cahier has pre-existing users from 2025).

## Query parameters

- `since` string — Campaign start (YYYY-MM-DD). Progress created before this date is ignored, so last year's cahier users don't pollute the funnel.

## Response `200`

Successful Response

- RolloutReportResponse
  - `generated_at` string, required
  - `since` string, required — Campaign start date: only progress created on/after this date counts
  - `classes` object — group -> seasonal classe name
  - `total` RolloutFunnelStats, required
    - `group` string, required
    - `targeted` integer
    - `eligible` integer
    - `popup_seen` integer
    - `popup_clicked` integer
    - `popup_dismissed` integer
    - `banner_clicked` integer
    - `cahier_opened` integer
    - `started` integer
    - `completed_one_sub_chapitre` integer
    - `active_last_7_days` integer
    - `total_time_spent_seconds` integer
  - `groups` RolloutFunnelStats[], required
    - `group` string, required
    - `targeted` integer
    - `eligible` integer
    - `popup_seen` integer
    - `popup_clicked` integer
    - `popup_dismissed` integer
    - `banner_clicked` integer
    - `cahier_opened` integer
    - `started` integer
    - `completed_one_sub_chapitre` integer
    - `active_last_7_days` integer
    - `total_time_spent_seconds` integer
  - `students` RolloutStudentRow[], required
    - `student_id` string, required
    - `name` string, required
    - `email` string, nullable
    - `grade` string, nullable
    - `role` string, nullable
    - `group` string, nullable
    - `targeted` boolean, required
    - `has_class` boolean, required
    - `eligible` boolean, required
    - `popup_seen_at` string, nullable
    - `popup_clicked_at` string, nullable
    - `popup_dismissed_at` string, nullable
    - `banner_clicked_at` string, nullable
    - `cahier_opened_at` string, nullable
    - `pre_campaign` boolean
    - `started_at` string, nullable
    - `last_activity_at` string, nullable
    - `sub_chapitres_started` integer
    - `sub_chapitres_completed` integer
    - `exercises_completed` integer
    - `exercise_attempts` integer
    - `time_spent_seconds` integer
    - `funnel_stage` string, required
  - `non_eligible_with_activity` integer — Students active on the seasonal cahiers but outside the rollout target (buyers, admins...)

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/excellence-ai/apis/excellence-learning.md) · [All operations](https://skmtc.dev/excellence-ai/apis/excellence-learning/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/excellence-ai/excellence-learning/revisions/ef67479ed898/schema)
