> ## 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.

# 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.



## OpenAPI

````yaml /api-reference/openapi.json post /reviews/{reviewId}/accept
openapi: 3.1.0
info:
  description: >-
    Manage projects, datasets, labeling pipelines, and model training. **Beta:**
    endpoints, request and response shapes, and error contracts can change
    without notice or a backward-compatibility promise.
  title: Toloka Platform API
  version: 2.0.0
servers:
  - url: https://platform.toloka.ai/api/v2-beta
security:
  - apiKeyAuth: []
  - scopedTokenAuth: []
tags:
  - description: The authenticated API key owner.
    name: Account
  - description: A project is the container for pipelines, datasets, and files.
    name: Projects
  - description: Rows and typed fields. Field schemas are immutable once created.
    name: Datasets
  - description: Append rows to a dataset from a file.
    name: Dataset uploads
  - description: Read a dataset out as a file.
    name: Dataset exports
  - description: A pipeline is a graph of nodes that processes each dataset item.
    name: Pipelines
  - description: The nodes, connections, fields, and version of a pipeline graph.
    name: Pipeline graph
  - description: Execute a pipeline over a dataset and inspect each item.
    name: Runs
  - description: >-
      Only for teams with customer review enabled. Customer review of generation
      tasks: the team accepts or rejects every task of a node that uses customer
      review.
    name: Reviews
  - description: Per-node checks that a pipeline must pass before deployment.
    name: Checks
  - description: Named credentials available to pipeline code.
    name: Secrets
  - description: Project files available to pipeline code and labeling interfaces.
    name: Files
  - description: >-
      Global, read-only catalog of the models a synthetic generation node can
      use, with their budget bounds.
    name: Generation models
  - description: >-
      Global, read-only catalog of the expert audience: the values a node
      `audience` filter can use.
    name: Audience
  - description: Project lists of experts a node can take its workforce from.
    name: Expert lists
  - description: >-
      Experts banned in a project: they cannot be invited and are removed from
      the work they are in. Available only to teams with expert lists enabled.
    name: Expert ban list
  - description: Global, read-only base model catalog.
    name: Base models
  - description: Project-owned mutable model-training drafts.
    name: Trainings
  - description: Project-owned Models and immutable Model Versions.
    name: Models
  - name: Batch inference
paths:
  /reviews/{reviewId}/accept:
    post:
      tags:
        - Reviews
      summary: Accept a task
      description: >-
        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.
      operationId: acceptReview
      parameters:
        - in: path
          name: reviewId
          required: true
          schema:
            $ref: '#/components/schemas/ReviewId'
      requestBody:
        content:
          application/json:
            example: {}
            schema:
              additionalProperties: false
              example: {}
              properties: {}
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Review'
          description: The review after the decision
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '400':
          description: The evidence of a reject is invalid
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '403':
          description: >-
            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.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '404':
          description: Review not found
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '409':
          description: >-
            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.
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          description: Rate limit exceeded
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
      x-codeSamples:
        - label: TypeScript SDK
          lang: typescript
          source: |
            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);
components:
  schemas:
    ReviewId:
      description: Review ID with prefix `trr.`.
      pattern: >-
        ^trr\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      type: string
    Review:
      description: >-
        A customer review of one task, with its content, quality criteria and
        decisions.
      properties:
        checkedRejectsLeft:
          description: >-
            How many more rejects the LLM QA check will check, out of 10. At 0,
            accept the task or send a forced reject.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        closedAt:
          anyOf:
            - format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
            - type: 'null'
          description: >-
            Time the review closed, as an ISO 8601 timestamp, or null while it
            is open.
        deadlineAt:
          description: >-
            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.
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          type: string
        id:
          $ref: '#/components/schemas/ReviewId'
        itemId:
          $ref: '#/components/schemas/RunItemId'
        nodeId:
          description: ID of the generation node whose task is under review.
          type: string
        nodeName:
          description: Name of that generation node.
          type: string
        performer:
          description: Who did the task.
          properties:
            expertId:
              description: ID of the expert who did the task, or null for a synthetic task.
              type:
                - string
                - 'null'
            type:
              description: >-
                `expert` for a human expert, `synthetic` for synthetic
                generation.
              enum:
                - expert
                - synthetic
              type: string
          required:
            - type
            - expertId
          type: object
        qualityCriteria:
          description: >-
            The quality criteria a reject can name, as they were when the task
            reached review.
          items:
            $ref: '#/components/schemas/ReviewQualityCriterion'
          type: array
        runId:
          $ref: '#/components/schemas/RunId'
        status:
          $ref: '#/components/schemas/ReviewStatus'
        submittedAt:
          description: Time the task was submitted, as an ISO 8601 timestamp.
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          type: string
        taskContent:
          description: >-
            What the task showed and what was submitted. Project files appear as
            file proxy URLs.
          properties:
            input:
              additionalProperties: {}
              description: The input values of the task, by field name.
              propertyNames:
                type: string
              type: object
            output:
              additionalProperties: {}
              description: The submitted answer, by field name.
              propertyNames:
                type: string
              type: object
          required:
            - input
            - output
          type: object
        verdicts:
          description: Decisions on this review, oldest first.
          items:
            $ref: '#/components/schemas/ReviewVerdict'
          type: array
      required:
        - id
        - runId
        - itemId
        - nodeId
        - nodeName
        - status
        - submittedAt
        - deadlineAt
        - closedAt
        - performer
        - taskContent
        - qualityCriteria
        - verdicts
        - checkedRejectsLeft
      type: object
    RunItemId:
      description: Run item ID with prefix `plri.`.
      pattern: >-
        ^plri\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      type: string
    ReviewQualityCriterion:
      description: >-
        A quality criterion of the reviewed node, as it was when the task
        reached review.
      properties:
        fail:
          description: What a task that fails this criterion looks like.
          type: string
        id:
          description: Criterion ID to name in a reject.
          type: string
        pass:
          description: What a task that passes this criterion looks like.
          type: string
        qualityElement:
          description: What the criterion checks.
          type: string
      required:
        - id
        - qualityElement
        - pass
        - fail
      type: object
    RunId:
      description: Pipeline run ID with prefix `plr.`.
      pattern: >-
        ^plr\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      type: string
    ReviewStatus:
      description: >-
        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.
      enum:
        - needs_review
        - returned
        - checking
        - accepted
        - rejected
        - expired
      type: string
    ReviewVerdict:
      description: One decision on a review.
      properties:
        comment:
          description: The comment of a reject; empty for an accept.
          type: string
        createdAt:
          description: Time the verdict was sent, as an ISO 8601 timestamp.
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          type: string
        criteria:
          description: IDs of the quality criteria a reject named; empty for an accept.
          items:
            type: string
          type: array
        decision:
          description: '`accept` or `reject`.'
          enum:
            - accept
            - reject
          type: string
        forced:
          description: True for a forced reject, which skipped the LLM QA check.
          type: boolean
        id:
          description: Verdict ID with prefix `trv.`.
          pattern: >-
            ^trv\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
          type: string
        llmQaCheck:
          anyOf:
            - properties:
                checkedAt:
                  description: Time the check answered, as an ISO 8601 timestamp.
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                  type: string
                reason:
                  description: Why the LLM QA check answered this way.
                  type: string
                verdict:
                  description: >-
                    `agree`: the evidence holds, so the reject became final.
                    `disagree`: the evidence does not hold, so the review
                    returned for a new decision, or expired if its deadline had
                    passed. `inconclusive`: the check could not decide; the
                    review returned or expired the same way.
                  enum:
                    - agree
                    - disagree
                    - inconclusive
                  type: string
              required:
                - verdict
                - reason
                - checkedAt
              type: object
            - type: 'null'
          description: >-
            Answer of the LLM QA check to a reject, or null for an accept, a
            forced reject, or a check still running.
        scopedTokenId:
          anyOf:
            - pattern: >-
                ^pst\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
              type: string
            - type: 'null'
          description: >-
            ID of the scoped token the verdict was sent with, with prefix
            `pst.`, or null.
        source:
          description: '`ui` for the platform UI, `api` for the API, the CLI or the SDK.'
          enum:
            - ui
            - api
          type: string
        userId:
          description: Platform user ID of the author.
          type: string
      required:
        - id
        - decision
        - forced
        - criteria
        - comment
        - source
        - userId
        - scopedTokenId
        - llmQaCheck
        - createdAt
      type: object
  headers:
    RateLimit-Limit:
      description: The maximum number of requests allowed in the current window.
      schema:
        type: integer
    RateLimit-Policy:
      description: The rate limit policy (e.g., "60;w=60").
      schema:
        type: string
    RateLimit-Remaining:
      description: The number of requests remaining in the current window.
      schema:
        type: integer
    RateLimit-Reset:
      description: The number of seconds until the current window resets.
      schema:
        type: integer
    X-Request-Id:
      description: >-
        The request id: the X-Request-Id you sent when it is 1-128 characters of
        letters, digits, ".", "_" or "-", otherwise a generated UUID. Present on
        every response, including errors; quote it when reporting a problem.
      schema:
        type: string
  securitySchemes:
    apiKeyAuth:
      description: >-
        Enter `ApiKey <your-api-key>` in Authorization, including the `ApiKey `
        prefix. In cURL and Python samples, `<api-key>` means this full value.
        The TypeScript SDK adds the prefix for you.
      in: header
      name: Authorization
      type: apiKey
    scopedTokenAuth:
      description: >-
        Enter the project-scoped token as `pst_...` in X-Scoped-Token, without
        an `ApiKey ` prefix. Create a token with POST
        /projects/{projectId}/tokens.
      in: header
      name: X-Scoped-Token
      type: apiKey

````

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