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

# client.reviews.reject()

> Reject a task.

Only teams with customer review enabled: other teams get `403 The "customerReview" feature is not enabled for this team`. Reject the task under review, naming the quality criteria it fails and explaining what is wrong. The LLM QA check then checks this evidence: if it agrees, the reject is final, the item fails at this node, and nothing is billed for the task; otherwise the review returns with the check's reason for a new decision, or expires if its deadline has passed. With `force`, the check is skipped and the reject is final at once; a forced reject is accepted only after the LLM QA check has returned a reject of this review, so reject without force first.

## Signature

Method signature on `client.reviews`:

```ts theme={null}
reject(args: {
  reviewId: string;
  criteria: string[];
  comment: string;
  force?: false | true;
}): Promise<Review>;
```

## Parameters

**reviewId** `string` *required*

Review ID with prefix `trr.`.

**criteria** `string[]` *required*

IDs of the quality criteria the task fails: at least one, each named once.

**comment** `string` *required*

What is wrong with the task, at most 10000 characters.

**force** `false | true`

Skip the LLM QA check and reject at once. The reject is final and does not count toward the checked rejects. Allowed only after the LLM QA check has returned a reject of this review; otherwise the response is 409. Defaults to false.

## Returns

`Promise<Review>`

A customer review of one task, with its content, quality criteria and decisions.

**id** `ReviewId` *required*

Review ID with prefix `trr.`.

**runId** `RunId` *required*

Pipeline run ID with prefix `plr.`.

**itemId** `RunItemId` *required*

Run item ID with prefix `plri.`.

**nodeId** `string` *required*

ID of the generation node whose task is under review.

**nodeName** `string` *required*

Name of that generation node.

**status** `ReviewStatus` *required*

Review status. `needs_review`: waiting for the first decision. `returned`: the LLM QA check did not confirm the last reject, so the review waits for a new decision. `checking`: the LLM QA check is checking a reject, and decisions are refused until it answers. `accepted`: the team accepted the task. `rejected`: the reject is final, either forced or confirmed by the LLM QA check. `expired`: the deadline passed while the review was open, whether it waited for a decision or was checking a reject the check then did not confirm, so the task was accepted automatically.

**submittedAt** `string` *required*

Time the task was submitted, as an ISO 8601 timestamp.

**deadlineAt** `string` *required*

Deadline for a decision, as an ISO 8601 timestamp. From then on the review takes no decisions, but it closes a little later: a review waiting for a decision expires shortly after the deadline, and its task is accepted automatically (the expert is paid and the task is billed); a review checking a reject closes when the LLM QA check answers.

**closedAt** `string | null` *required*

Time the review closed, as an ISO 8601 timestamp, or null while it is open.

**performer** `object` *required*

Who did the task.

**Fields**

**type** `"expert" | "synthetic"` *required*

`expert` for a human expert, `synthetic` for synthetic generation.

**expertId** `string | null` *required*

ID of the expert who did the task, or null for a synthetic task.

**taskContent** `object` *required*

What the task showed and what was submitted. Project files appear as file proxy URLs.

**Fields**

**input** `object` *required*

The input values of the task, by field name.

**Fields**

**\[key: string]** `unknown`

**output** `object` *required*

The submitted answer, by field name.

**Fields**

**\[key: string]** `unknown`

**qualityCriteria** `ReviewQualityCriterion[]` *required*

The quality criteria a reject can name, as they were when the task reached review.

**Fields**

**id** `string` *required*

Criterion ID to name in a reject.

**qualityElement** `string` *required*

What the criterion checks.

**pass** `string` *required*

What a task that passes this criterion looks like.

**fail** `string` *required*

What a task that fails this criterion looks like.

**verdicts** `ReviewVerdict[]` *required*

Decisions on this review, oldest first.

**Fields**

**id** `string` *required*

Verdict ID with prefix `trv.`.

**decision** `"accept" | "reject"` *required*

`accept` or `reject`.

**forced** `boolean` *required*

True for a forced reject, which skipped the LLM QA check.

**criteria** `string[]` *required*

IDs of the quality criteria a reject named; empty for an accept.

See the [HTTP endpoint](https://docs.platform.toloka.ai/docs/api-reference/reviews/reject-review.md) for the complete schema.

**comment** `string` *required*

The comment of a reject; empty for an accept.

**source** `"ui" | "api"` *required*

`ui` for the platform UI, `api` for the API, the CLI or the SDK.

**userId** `string` *required*

Platform user ID of the author.

**scopedTokenId** `string | null` *required*

ID of the scoped token the verdict was sent with, with prefix `pst.`, or null.

**llmQaCheck** `object | null` *required*

Answer of the LLM QA check to a reject, or null for an accept, a forced reject, or a check still running.

See the [HTTP endpoint](https://docs.platform.toloka.ai/docs/api-reference/reviews/reject-review.md) for the complete schema.

**createdAt** `string` *required*

Time the verdict was sent, as an ISO 8601 timestamp.

**checkedRejectsLeft** `number` *required*

How many more rejects the LLM QA check will check, out of 10. At 0, accept the task or send a forced reject.

## Errors

HTTP errors throw [`PotatoApiError`](https://docs.platform.toloka.ai/docs/sdk/errors). The endpoint documents these error responses:

| Status | Description |
| - | - |
| 400 | The evidence of a reject is invalid |
| 403 | Customer review is not enabled for the team of the run, or the scoped token lacks the needed `review` permission. Deciding needs `review:write`, which every preset except `read` and `labeling-read` includes. |
| 404 | Review not found |
| 409 | The review cannot take this decision now: the LLM QA check is still checking a reject (retry after it answers), the checked rejects are used up (accept or force the reject), a forced reject was sent before the LLM QA check returned any reject of this review (reject without force first), or the review is closed or past its deadline. Read the review to see which. |
| 429 | Rate limit exceeded |

HTTP endpoint: [`POST /reviews/{reviewId}/reject`](https://docs.platform.toloka.ai/docs/api-reference/reviews/reject-review).

```ts reject() theme={null}
import { createClient } from "@toloka-platform/sdk";

const client = createClient({
  baseUrl: "https://platform.toloka.ai",
  apiKey: process.env.TOLOKA_API_KEY!,
});

const review = await client.reviews.reject({
  reviewId: "trr.019a0000-0000-7000-8000-000000000001",
  criteria: [
    "example"
  ],
  comment: "example"
});
console.log(review);
```

```json reject() theme={null}
{
  "id": "trr.019a0000-0000-7000-8000-000000000001",
  "runId": "plr.019a0000-0000-7000-8000-000000000001",
  "itemId": "plri.019a0000-0000-7000-8000-000000000001",
  "nodeId": "<string>",
  "nodeName": "<string>",
  "status": "needs_review",
  "submittedAt": "2026-01-01T00:00:00Z",
  "deadlineAt": "2026-01-01T00:00:00Z",
  "closedAt": null,
  "performer": {
    "type": "expert",
    "expertId": null
  },
  "taskContent": {
    "input": {},
    "output": {}
  },
  "qualityCriteria": [
    {
      "id": "<string>",
      "qualityElement": "<string>",
      "pass": "<string>",
      "fail": "<string>"
    }
  ],
  "verdicts": [
    {
      "id": "trv.019a0000-0000-7000-8000-000000000001",
      "decision": "accept",
      "forced": false,
      "criteria": [
        "<string>"
      ],
      "comment": "<string>",
      "source": "ui",
      "userId": "<string>",
      "scopedTokenId": null,
      "llmQaCheck": null,
      "createdAt": "2026-01-01T00:00:00Z"
    }
  ],
  "checkedRejectsLeft": 0
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.