---
title: "Submit feedback"
method: POST
path: "/v1/feedback"
tags: ["Feedback"]
---

# Submit feedback

`POST /v1/feedback`

Record feedback from an AI agent or integration. Accepts a write-only feedback token (Authorization: Bearer nfb_...) or an API key with the feedback.write scope.

## Request body

- SubmitFeedbackRequest
  - `message` string, required — The feedback itself.
  - `title` string — Short summary. When omitted, Notra writes one.
  - `kind` 'bug' | 'feature' | 'praise' | 'question' | 'other' — What kind of feedback this is. When omitted, Notra classifies it.
  - `sentiment` 'negative' | 'neutral' | 'positive' — Overall sentiment. When omitted, Notra classifies it from the message.
  - `source` 'mcp' | 'api' | 'sdk' — Channel the feedback arrived through.
  - `projectId` string — Project to file the feedback under. Ignored for project-scoped feedback tokens.
  - `agentClient` string — The agent or client that submitted the feedback.
  - `agentModel` string
  - `toolVersion` string
  - `userAgent` string
  - `contextUrl` string, uri — Page or resource the feedback is about.
  - `externalId` string — Your own identifier for the user or session.
  - `idempotencyKey` string — Submitting the same key twice returns the original feedback instead of creating a duplicate.
  - `metadata` object — Arbitrary JSON attached to the feedback, up to 8 KB.

## Response `202`

Feedback accepted

- SubmitFeedbackResponse
  - `feedback` Feedback, required
    - `id` string, required
    - `projectId` string, nullable, required
    - `source` 'mcp' | 'api' | 'sdk', required — Channel the feedback arrived through.
    - `kind` 'bug' | 'feature' | 'praise' | 'question' | 'other', required — What kind of feedback this is.
    - `sentiment` 'negative' | 'neutral' | 'positive' | 'null', nullable, required — Overall sentiment of the feedback.
    - `status` 'new' | 'triaged' | 'resolved' | 'archived', required — Triage status.
    - `title` string, nullable, required
    - `message` string, required
    - `agentClient` string, nullable, required
    - `agentModel` string, nullable, required
    - `toolVersion` string, nullable, required
    - `userAgent` string, nullable, required
    - `contextUrl` string, nullable, required
    - `externalId` string, nullable, required
    - `idempotencyKey` string, nullable, required
    - `metadata` object, nullable, required
    - `resolvedAt` string, nullable, required
    - `createdAt` string, required
    - `updatedAt` string, required
  - `deduplicated` boolean, required — True when an existing feedback with the same idempotencyKey was returned.

## Other responses

- `400` — Invalid request body
- `401` — Missing or invalid credentials
- `403` — Forbidden
- `404` — Project not found
- `429` — Rate limit exceeded. This endpoint allows 120 requests per 1 minute per organization.
- `503` — Authentication service unavailable

---

[API](https://skmtc.dev/usenotra/apis/notra-api.md) · [All operations](https://skmtc.dev/usenotra/apis/notra-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usenotra/notra-api/revisions/232381a5ecea/schema)
