> ## 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.accept()

> Accept a task.

Only teams with customer review enabled: other teams get `403 The "customerReview" feature is not enabled for this team`. Accept the task under review. The decision is final at once: the expert is paid, the task is billed, and the item moves on to the next node.

## Signature

Method signature on `client.reviews`:

```ts theme={null}
accept(args: {
  reviewId: string;
}): Promise<Review>;
```

## Parameters

**reviewId** `string` *required*

Review ID with prefix `trr.`.

## 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/accept-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/accept-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}/accept`](https://docs.platform.toloka.ai/docs/api-reference/reviews/accept-review).

```ts accept() 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.accept({
  reviewId: "trr.019a0000-0000-7000-8000-000000000001"
});
console.log(review);
```

```json accept() 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.