---
title: "Rate one message the agent wrote"
method: POST
path: "/outbound-agents/{agent_id}/feedback/"
tags: ["outbound-agents"]
---

# Rate one message the agent wrote

`POST /outbound-agents/{agent_id}/feedback/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/outbound-agents/{agent_id}/feedback/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Record a thumb, a note, or both. What says something needs work teaches: a thumbs down, a note or a rewrite rides into later messages as an example, and proposing prompts rewrites the prompts from it. A Looks good with no rewrite is kept as the person's record and never trains the agent.

## Path parameters

- `agent_id` string, uuid, required

## Request body

- OutboundFeedbackCreateSchema: A thumb, a note, or both, on one message the agent wrote.
  - `body` string: The words rated, when the message they were on is gone.
  - `comment` string, nullable: What the person wants changed.
  - `create_only` boolean: Refuse to replace an existing verdict that was not reviewed.
  - `edited_body` string, nullable
  - `edited_subject` string, nullable
  - `kind` 'email' | 'linkedin_connection_note' | 'linkedin_message' | 'linkedin_inmail' | 'reply_email' | 'reply_linkedin': What one written message is, which decides its rules, its length and its channel.
  - `message_id` string, uuid, nullable: The message being rated; null when it is already gone.
  - `rating` 'good' | 'bad': The human verdict on one message: a thumb, not a scale.
  - `source` 'agent_tab' | 'approval_card': Where the verdict was given: a sequence's AI writing tab and training (`agent_tab`), or a task waiting for approval (`approval_card`). Only a verdict given on the AI writing tab counts as a check of that step's writing.

## Response `201`

Successful Response

- OutboundFeedbackReadSchema: One person's verdict on one message the agent wrote.
  - `comment` string, nullable, required
  - `consumed_in_version` integer, nullable, required
  - `created_at` string, date-time, required
  - `edited_body` string, nullable, required
  - `edited_subject` string, nullable, required
  - `id` string, uuid, required
  - `kind` 'email' | 'linkedin_connection_note' | 'linkedin_message' | 'linkedin_inmail' | 'reply_email' | 'reply_linkedin', required: What one written message is, which decides its rules, its length and its channel.
  - `message_id` string, uuid, nullable, required
  - `original_body` string, required
  - `original_subject` string, nullable, required
  - `rating` 'good' | 'bad', required: The human verdict on one message: a thumb, not a scale.
  - `slot_key` string, nullable, required
  - `source` 'approval_card' | 'inbox_draft' | 'agent_tab' | 'approved_unchanged' | 'positive_reply', required: Where a piece of feedback came from, which says how much it means.
  - `teaches` boolean, required: Whether the writer and a prompt rewrite learn from it: a Needs work, a note given without a Looks good, or a rewrite. A Looks good with no rewrite, a note on it and an approval kept as approved as written included, is a record and never teaches.
  - `updated_at` string, date-time, required
  - `user_id` string, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Outbound agent not found.
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/dc5ac3c84444?raw)
