Submit an end-user rating for an assistant message. A rating is two values, not a score: an answer was useful or it was not.
Auth: client key.

Request body

Returns 2xx with no meaningful body.
The numeric 5 and 1 from older SDK versions are still accepted and mapped to up and down. Any other number is rejected — a 3 used to be stored, counted in neither the positive nor the negative rollup, and read back as no vote at all.

Replacing and withdrawing a vote

A message holds at most one vote. Posting a second replaces the first, so switching from 👍 to 👎 leaves one opinion on record rather than two, and analytics can’t count the same answer on both sides. DELETE /public/feedback/:messageId withdraws it.
Feedback can only be recorded against a stored message. A workspace with zero-data-retention persists none, so its chat streams carry no message_id and the rating controls should be hidden.

Where feedback goes

  • Analytics — positive/negative ratios per knowledge base, per day.
  • Knowledge gaps — negatively-rated and unanswered questions feed the gap report (GET /api/v1/knowledge-bases/:id/analytics/gaps), telling your team what to document next.
  • Retrieval boosting — feedback signals improve future ranking.
  • Evals — sampled answers are additionally scored by LLM judges for groundedness and faithfulness; see Analytics & Evals.

SDK equivalents

The widget renders thumbs up/down on every answer automatically, as do the Slack, Discord, and Teams bots — every vote lands in the same store, tagged with where it came from.