---
title: "Rate an AI job's response"
method: POST
path: "/v1/ai/jobs/{jobId}/feedback"
tags: ["AI"]
---

# Rate an AI job's response

`POST /v1/ai/jobs/{jobId}/feedback`

## Request

- Base URL: `https://blobsrus.omniapp.co/api`
- URL: `https://blobsrus.omniapp.co/api/v1/ai/jobs/{jobId}/feedback`
- Auth: HTTP bearer

Rate an AI job's response using the same thumbs up/thumbs down and optional comment a user can give a response in the Omni UI or in Slack. 

The job must have finished or the API returns a `409`. Poll the [Get AI job status](/api/ai/get-ai-job-status) endpoint to retrieve a job's current status. Submit feedback once per job.

<Note>
  Personal Access Tokens can only rate their own jobs. If using an Organization API key, pass `userId` to attribute the feedback to a specific user. This must be the same `userId` the job was submitted with.
</Note>

## Path parameters

- `jobId` string, uuid, required: The unique identifier of the AI job

## Query parameters

- `userId` string, uuid

## Request body

- object
  - `comment` string: Free-text feedback about the response, such as what was wrong or what an automated evaluation found. Whitespace is trimmed; null is treated as no comment.
  - `rating` 'good' | 'bad', required: The verdict on the response. `good` is a thumbs up, `bad` a thumbs down.

## Response `200`

Feedback recorded.

- object
  - `comment` string, required: The comment as recorded, or null when none was sent.
  - `conversationId` string, uuid, required: The conversation the rated job belongs to. Analytics keys feedback by job id and conversation id.
  - `jobId` string, uuid, required: The job whose response was rated.
  - `rating` 'good' | 'bad', required: The verdict on the response. `good` is a thumbs up, `bad` a thumbs down.
  - `submittedAt` string, date-time, required: When the feedback was recorded.

## Other responses

- `400`: Invalid job ID (must be a UUID) or request body — unknown rating, unrecognized field, or a comment that is empty or over 5000 characters.
- `401`: Missing or invalid API key.
- `403`: Permission denied. AI query generation is disabled for the organization, the caller lacks AI access on the job's model, or a user-scoped key passed a different user's `userId`.
- `404`: Job not found. The job may not exist, may belong to a different organization, or — for user-scoped keys — may belong to a different user. `userId` not found in the organization also returns 404.
- `409`: The job is not `COMPLETE` or `FAILED`. For a `QUEUED`, `EXECUTING`, or `DELIVERING` job, poll the [Get AI job status](/api/ai/get-ai-job-status) endpoint and retry once it finishes. A `CANCELLED` job can never be rated.
- `429`: Too Many Requests - Rate limit exceeded (60 requests/minute)
- `500`: Internal Server Error

## Changes

- **2026-11-03** `43290040f88f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/omni/apis/omni-api/changes/v1/ai/jobs/:jobId/feedback/post.md)

---

[API](https://skmtc.dev/omni/apis/omni-api.md) - [All operations](https://skmtc.dev/omni/apis/omni-api/llms.txt) - [OpenAPI document](https://skmtc.dev/omni/apis/omni-api/revisions/43290040f88f?raw)
