> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corti.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit feedback on tasks

> Learn how to submit, list, and delete feedback for tasks and messages using the feedback API.

This guide shows you how to submit, list, and delete feedback for tasks and messages. Feedback is useful for building thumbs-up/down UIs, case review workflows, and automated evaluation pipelines.

## Prerequisites

* An existing task (see [Send a message](/agentic/guides/send-message))
* An access token or client credentials
* A context ID and task ID

## Submit feedback

```bash theme={null}
# Replace these with your values
CONTEXT_ID="<your-context-id>"
TASK_ID="<your-task-id>"
ENVIRONMENT="<eu-or-us>"
TENANT="<your-tenant-name>"
TOKEN="<your-access-token>"

curl -X POST "https://api.${ENVIRONMENT}.corti.app/v2/agentic/contexts/${CONTEXT_ID}/tasks/${TASK_ID}/feedback" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Tenant-Name: ${TENANT}" \
  -H "Content-Type: application/json" \
  -d '{
    "rating": {
      "scale": "binary",
      "value": 1
    },
    "labels": ["correct", "helpful"],
    "reason": "The response accurately identified the ICD-10 code."
  }'
```

## Rating scales

| Scale          | Values                       | Description                 |
| -------------- | ---------------------------- | --------------------------- |
| `binary`       | 0 (negative) or 1 (positive) | Available now               |
| `likert5`      | 1-5                          | Planned (not yet available) |
| `continuous01` | 0.0-1.0                      | Planned (not yet available) |

## Labels

Labels provide structured observations about the result. Positive and negative labels can be combined to represent mixed feedback:

**Positive labels**: `correct`, `complete`, `helpful`, `wellPresented`, `efficient`

**Negative labels**: `incorrect`, `missingInformation`, `irrelevant`, `misunderstoodRequest`, `unsupportedClaim`, `unsafeOrInappropriate`, `poorlyPresented`, `tooVerbose`

**Neutral**: `other` (requires a `reason`)

<Note>A maximum of five labels may be submitted per feedback entry. Duplicate labels are rejected. The `other` label requires a `reason` field.</Note>

## Targeting a specific message

By default, feedback applies to the task as a whole. To target a specific message in the task's history, include the `target` field with the message ID:

```bash theme={null}
curl -X POST "https://api.${ENVIRONMENT}.corti.app/v2/agentic/contexts/${CONTEXT_ID}/tasks/${TASK_ID}/feedback" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Tenant-Name: ${TENANT}" \
  -H "Content-Type: application/json" \
  -d '{
    "rating": {"scale": "binary", "value": 0},
    "labels": ["incorrect"],
    "reason": "The ICD-10 code was wrong for this specific response.",
    "target": {"messageId": "msg.0192f4c8-5f8d-7e61-924d-6fb09b5ead73"}
  }'
```

## Metadata

Include provenance and correlation information using the `metadata` field:

```json theme={null}
{
  "metadata": {
    "collectionMethod": "thumbs",
    "clientReference": "session-abc-123",
    "actor": {"externalId": "user-pseudonymous-id"}
  }
}
```

| Field              | Description                                              |
| ------------------ | -------------------------------------------------------- |
| `collectionMethod` | How the feedback was collected (e.g. `thumbs`, `survey`) |
| `clientReference`  | Customer-defined reference for correlation               |
| `actor.externalId` | Pseudonymous identifier for the submitter                |

<Warning>The `actor.externalId` must not contain names, emails, national identifiers, or medical record numbers. Use a pseudonymous identifier.</Warning>

## List feedback

```bash theme={null}
curl "https://api.${ENVIRONMENT}.corti.app/v2/agentic/contexts/${CONTEXT_ID}/tasks/${TASK_ID}/feedback" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Tenant-Name: ${TENANT}"
```

The response includes all feedback entries for the task, scoped to the authenticated user via row-level security, newest first. The response is wrapped in a `feedbacks` array:

```json theme={null}
{
  "feedbacks": [
    {
      "id": "fb.0192f4c8-...",
      "taskId": "task.0192f4c8-...",
      "rating": {"scale": "binary", "value": 1},
      "normalizedScore": 1.0,
      "labels": ["correct", "helpful"],
      "reason": "The response accurately identified the ICD-10 code.",
      "createdAt": "2026-05-19T12:00:00Z"
    }
  ]
}
```

<Note>Feedback is scoped to the authenticated user. The response contains only the caller's feedback, not all feedback for the task.</Note>

## Delete feedback

Delete all feedback you submitted for a task. The DELETE endpoint targets the task as a whole — there is no per-entry feedback ID in the path:

```bash theme={null}
curl -X DELETE "https://api.${ENVIRONMENT}.corti.app/v2/agentic/contexts/${CONTEXT_ID}/tasks/${TASK_ID}/feedback" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Tenant-Name: ${TENANT}"
```

<Warning>DELETE removes **all** feedback you submitted for the task, not a single entry. The operation is idempotent: deleting when there is no feedback returns `204`.</Warning>

## Use cases

* **Thumbs UI**: Collect binary feedback after each task response
* **Case review**: Use labels like `correct`, `incorrect`, `missingInformation` for structured review
* **Automated evaluation**: Submit feedback programmatically with metadata for tracking

## Next steps

* Learn how to [work with contexts](/agentic/guides/work-with-contexts) to find task IDs
* Read about the [task lifecycle](/agentic/task-lifecycle) for task states
* Learn how to [export traces](/agentic/guides/export-traces) for debugging
