---
title: "Get Feedbacks"
method: GET
path: "/admin/feedbacks"
tags: ["Feedback"]
---

# Get Feedbacks

`GET /admin/feedbacks`

Paginated list of feedbacks, newest first. `total` counts the feedbacks
matching the filters, not the page.

## Query parameters

- `status` 'new' | 'in-progress' | 'done', nullable
- `search` string, nullable — Free text on the author: name or email
- `role` 'student' | 'teacher' | 'admin', nullable
- `school_id` string, nullable — B2B school: its teachers and their students
- `source` string — Channel the feedback came in through. Defaults to what users wrote themselves; pass an empty value (or "all") for every source.
- `nature` 'misunderstanding' | 'bug' | 'suggestion' — What kind of feedback it is, which is also how it gets triaged. A dysfunction of what exists is a bug and goes down the fast lane; everything that changes or adds behaviour waits for the weekly review.
- `theme` 'DEVOIR' | 'EVAL' | 'COURS' | 'COR_COPIES' | 'CONTENU' | 'UX' | 'CHAT' | 'CLASSES' | 'SETTINGS' — The part of the product a feedback is about.
- `skip` integer
- `limit` integer

## Response `200`

Successful Response

- FeedbackListResponse
  - `feedbacks` FeedbackListItem[], required
    - `id` string, required
    - `user_id` string, required
    - `user_email` string, required
    - `user_name` string, required
    - `user_role` string, nullable
    - `source` 'user' | 'attio' | 'store' | 'admin' — Where the feedback came in through.
    - `origin` 'widget' | 'chat_answer_report' — Which door of the app a `user` feedback came through. Both are written by the person they belong to, so they share the `user` source and the inbox; what differs is what the team has to read. A widget message is the user's own words. A chat answer report is one click under a chat answer (EXC-796): the text is ours, the question and the answer are what to look at.
    - `nature` 'misunderstanding' | 'bug' | 'suggestion' — What kind of feedback it is, which is also how it gets triaged. A dysfunction of what exists is a bug and goes down the fast lane; everything that changes or adds behaviour waits for the weekly review.
    - `themes` FeedbackTheme[]
    - `school_name` string, nullable
    - `feedback_preview` string, required
    - `status` 'new' | 'in-progress' | 'done', required
    - `timestamp` string, date-time, required
    - `image_count` integer, required
    - `owner` string, nullable
    - `owner_name` string, nullable
  - `total` integer, required

## Other responses

- `422` — Validation Error

## Changes

> 22 revisions in range; 1 not diffed.

- **2026-09-24** `957b18a69df8` — 1 info
  - added the optional property `feedbacks/items/origin` to the response with the `200` status
- **2026-09-16** `9f813eb42d6f` — 7 info
  - added the new optional `query` request parameter `nature`
  - added the new optional `query` request parameter `source`
  - added the new optional `query` request parameter `theme`
  - added the optional property `feedbacks/items/nature` to the response with the `200` status
  - …3 more
- **2026-09-05** `437cd8414e9e` — 2 info
  - added the optional property `feedbacks/items/owner` to the response with the `200` status
  - added the optional property `feedbacks/items/owner_name` to the response with the `200` status
- **2026-09-03** `ef67479ed898` — 1 breaking, 4 info
  - for the `query` request parameter `limit`, default value was changed from `50` to `20`
  - added the new optional `query` request parameter `role`
  - added the new optional `query` request parameter `school_id`
  - added the new optional `query` request parameter `search`
  - …1 more

[Change history](https://skmtc.dev/excellence-ai/apis/excellence-learning/changes/admin/feedbacks/get.md)

---

[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.dev/excellence-ai/apis/excellence-learning/revisions/d367d251945b?raw)
