---
title: "Get Feedback"
method: GET
path: "/v1/feedback/{feedback_id}"
tags: ["Feedback"]
---

# Get Feedback

`GET /v1/feedback/{feedback_id}`

## 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/{feedback_id}`
- Auth: HTTP bearer

Read-only status of one report: `fix_authorized`, `review_url`, queue,
pull request and closure. A missing id and a report you cannot see are
both not found. Does not claim, approve or close.

## Path parameters

- `feedback_id` string, required: Feedback ID (feedback_... or legacy f-...)

## Response `200`

Successful Response

- FeedbackReport: Read-only status of one report. No message body, context, or attachments.
  - `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

## 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)
