| Property | Value |
|---|---|
| Auth | Required |
| Idempotent | Yes (replaces caller’s prior feedback on the same target) |
Body
| Field | Type | Required | Notes |
|---|---|---|---|
targetType | recommendation | score | chat_response | briefing | yes | What’s being rated. |
targetId | string | yes | The id of the artifact. |
rating | up | down | yes | Thumbs. |
reaction | string | no | One of: helpful, already_doing, wrong_diagnosis, wrong_priority, not_actionable, implemented_differently. |
comment | string | no | Free text. |
traceId | string | no | The trace ID returned with the original artifact. Wires the outcome chain. |
Errors
| Status | Code | When |
|---|---|---|
| 400 | INVALID_PAYLOAD | Missing required fields. |
| 401 | AUTH_REQUIRED | No session. |
| 404 | Target not found | targetId doesn’t exist. |
| 500 | INTERNAL_ERROR | Write failed. |
traceId is provided, the row joins to llm_traces for the outcome chain. See .claude/rules/observability.md for the contract.