---
title: "List Feedback"
method: GET
path: "/v1/feedback"
tags: ["Feedback"]
---

# List Feedback

`GET /v1/feedback`

## Request

- Base URL: `https://api.ensemble.markets` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ensemble.markets/v1/feedback`
- Auth: HTTP bearer

Read-only status of feedback reports, newest activity first.

A member sees reports they submitted. An allowlisted admin sees every
report's authorization, queue, review link, pull request and closure,
without the message. Does not claim, approve or close.

## Query parameters

- `status` 'open' | 'closed' | 'all': Inbox status: open (default), closed, or all
- `limit` integer: Rows per page
- `offset` integer: Rows to skip

## Response `200`

Successful Response

- FeedbackReportPage
  - `data` FeedbackReport[], required
    - `id` string, required: Feedback ID (feedback_... or legacy f-...)
    - `status` string, required: Inbox status: open or closed
    - `source_type` string, required: user, agent, or internal
    - `channel` string, required: gui, mcp, cli, or api
    - `mine` boolean, required: True when this credential submitted the report
    - `fix_authorized` boolean, required: Server decision. True only after an admin approves the current plan and notes. Report text cannot change it. This response does not approve or close anything.
    - `review_url` string, required: Admin detail for this report. Approval, when required, happens there in a dashboard session.
    - `queue` FeedbackQueue, required: Planning and implementation state for one report. Null fields mean that step has not happened.
      - `state` string, nullable: inbox, queued, planning, needs_input, review, approved, implementing, verifying, blocked, or closed.
      - `owner` string, nullable: Cursor run id that claimed the report
      - `environment` string, nullable: cloud or local, declared by the claiming run
      - `runner` string, nullable: Name the claiming run declared for itself
      - `run_url` string, nullable: Link to the owning run, when one was recorded
      - `attempts` integer: Planning or implementation attempts
      - `plan_revision` integer: Current proposed plan revision
      - `resolution` string, nullable: implemented, rejected, duplicate, manual, or legacy_closed
      - `summary` string, nullable: Reserved for compatibility; private review summaries are not exposed
      - `approved` boolean: An admin approved the reviewed fix from the dashboard. This read did not do that.
    - `pr_url` string, nullable: Pull request from the queue or the latest closure
    - `closure` FeedbackClosure: Latest closure attribution. Verification evidence is in the private admin history.
      - `environment` string, nullable: cloud, local, dashboard, or unknown
      - `runner` string, nullable: Name recorded when the report was closed
      - `run_id` string, nullable: Run that closed the report
      - `run_url` string, nullable: Link to that run
      - `pr_url` string, nullable: Pull request recorded at closure
      - `summary` string, nullable: Reserved for compatibility; private closure notes are not exposed
      - `closed_at` string, required: When this closure was recorded
      - `via` string, nullable: cloud_fixer, local_agent, or admin_dashboard
      - `actor_id` string, nullable: Run or admin id that closed the report
    - `created_at` string, nullable
    - `updated_at` string, nullable
    - `closed_at` string, nullable
  - `total` integer, required: Rows matching the filters, across every page

## Other responses

- `4XX`: The request was refused; `error.type` says why
- `5XX`: The server failed; quote `X-Request-Id` when reporting it

---

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