The feedback form was revamped in v2.2. The submission body now collects five 1–5 ratings, three yes/maybe/no answers, and five optional free-text fields. The response item on this endpoint reflects all of those. The analytics block returns five averages (one per rating) instead of a single
average_rating. See the legacy doc for the older shapes if you’re maintaining a transitional integration.POST /v1/feedbacks for the submission contract. This endpoint powers the admin Student Feedback dashboard: it returns a paginated feedback list joined to the student and case study, alongside aggregate analytics over the same filtered set.
Each feedback record is automatically tied to:
- The case study (resolved from the session, validated against the live
CaseStudydocument). - The student (taken from the session’s auth context at submission time).
- The session (one feedback per session — enforced by a unique index).
List Feedbacks
Authentication
RequiresFEEDBACK.can_view permission. Admins and faculty members granted this permission on their RBAC role can access the endpoint.
Query parameters
Filter analytics and feedback to a single case study.
Case-insensitive substring match against student first / middle / last name (and the legacy
name field), student email, and case study title.1-based page number.
Page size (1–100).
Optional extras
Filter to a specific student.
Minimum session rating (1–5). Filters on
rating.Maximum session rating (1–5). Filters on
rating.ISO 8601 lower bound on submission time.
ISO 8601 upper bound on submission time.
One of
created_at, rating, difficulty_level, clarity_level, overall_experience_rating, interface_rating.asc or desc.Example request
Success response
Empty-state response
When no feedback matches the active filters, the endpoint still returns200 OK with zeroed analytics and an empty list:
Field reference
data.analytics
Aggregates over the filtered, unpaginated set. Each rating average is rounded to one decimal; 0 when no feedback matches.
| Field | Description |
|---|---|
average_session_rating | Mean of rating (session rating). |
average_difficulty | Mean of difficulty_level. |
average_clarity | Mean of clarity_level. |
average_overall_experience | Mean of overall_experience_rating. |
average_interface | Mean of interface_rating. |
feedback_received | Total feedback count after all filters (equal to data.pagination.total). |
case_studies | Distinct case studies represented in the filtered set. Always 1 when case_study_id is supplied. |
data.feedback[]
| Field | Description |
|---|---|
feedback_id | Feedback record id. |
session_id | Underlying completed session id. |
student.student_id | User id of the student who submitted. |
student.name | Display name (first + middle + last, falling back to legacy name). May be null. |
student.email | Student email. May be null. |
case_study.case_study_id | Case study id. |
case_study.title | Case study title. May be null if hard-deleted. |
rating | Session rating, 1–5. |
difficulty_level | Difficulty rating, 1–5. |
clarity_level | Agent-clarity rating, 1–5. |
overall_experience_rating | Overall MIND v2 experience, 1–5. |
interface_rating | Interface design, 1–5. |
helpful_for_learning | yes / maybe / no. |
avatar_relatable | yes / maybe / no. |
would_recommend | yes / maybe / no. |
most_valuable | Free text, null if not provided. |
confusing_or_difficult | Free text, null if not provided. |
improvements | Free text, null if not provided. |
avatar_feedback | Free text, null if not provided. |
additional_info | Free text, null if not provided. |
completed_at | When the student submitted (the feedback row’s created_at). |
null on this endpoint. The five rating averages still compute over whichever rows have the corresponding fields; rows missing a rating are excluded from that average specifically.