---
title: "Queue the current agent's approval (👍) or disapproval (👎) of one AI suggestion. `rating` is `up` | `down` | `none` (none withdraws). One vote per agent per suggestion — re-voting overwrites. Returns the raw object, NOT wrapped in `ApiResponse`, mirroring the sibling suggestion endpoints."
method: POST
path: "/v1/chat/rooms/{roomId}/suggestions/{suggestionId}/feedback"
tags: ["Chat"]
---

# Queue the current agent's approval (👍) or disapproval (👎) of one AI suggestion. \`rating\` is \`up\` | \`down\` | \`none\` (none withdraws). One vote per agent per suggestion — re-voting overwrites. Returns the raw object, NOT wrapped in \`ApiResponse\`, mirroring the sibling suggestion endpoints.

`POST /v1/chat/rooms/{roomId}/suggestions/{suggestionId}/feedback`

## Request

- Base URL: `https://api.infoset.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.infoset.app/v1/chat/rooms/{roomId}/suggestions/{suggestionId}/feedback`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

ASYNCHRONOUS: the vote is produced to `chat.copilot-feedback` and applied by
copilot-service, so `202` means "accepted for delivery", not "stored". The
suggestion-ownership check runs in the consumer and therefore cannot answer here —
that case becomes a DLQ record plus a counter, not a `404`. The trade is
deliberate: a queued vote survives an AI-side outage, which a synchronous write would
not. `503` is reserved for the broker refusing the produce, the only failure
detectable here.

## Path parameters

- `roomId` integer, required
- `suggestionId` integer, required

## Request body

- SuggestionFeedbackRequestDto: An agent's verdict on one AI suggestion. `Rating` is `up`, `down`, or `none` to withdraw an earlier vote — a withdrawal is the same operation from the client's side, which keeps the card to a single call site. The voter is NOT in the body: it is the authenticated session's user. That matters more than usual here, because the consumer trusts the event's agentId and a topic carries no per-message authentication to check it against.
  - `rating` string, nullable

## Response `200`

OK

---

[API](https://skmtc.dev/infoset/apis/infoset-rest-api.md) - [All operations](https://skmtc.dev/infoset/apis/infoset-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/infoset/apis/infoset-rest-api/revisions/709c8123f593?raw)
