openapi: 3.0.1 info: title: Toloka API description: >- The Toloka API lets you build scalable, fully automated human-in-the-loop data-labeling and human-data pipelines on the Toloka crowdsourcing platform. You manage projects, pools, training pools, tasks, task suites, and assignments; collect and review Toloker responses; issue bonuses; manage skills and attachments; track asynchronous operations; and subscribe to event webhooks. Most write operations that touch large batches of tasks or suites run asynchronously and return an Operation you poll to completion. termsOfService: https://toloka.ai/legal/terms_of_service/ contact: name: Toloka Support email: support@toloka.ai version: '1.0' servers: - url: https://api.toloka.ai/api description: Toloka production API (api.toloka.ai) - url: https://toloka.dev/api description: Toloka production API (toloka.dev) security: - OAuthToken: [] tags: - name: Projects description: Create and manage projects that define task interface and instructions. - name: Pools description: Create, configure, open, and close pools of tasks for Tolokers. - name: Training description: Create and manage training pools used to qualify Tolokers. - name: Tasks description: Upload and retrieve individual tasks. - name: Task Suites description: Upload and retrieve task suites (groups of tasks shown together). - name: Assignments description: Retrieve Toloker responses and accept or reject completed assignments. - name: User Bonuses description: Issue bonus payments to Tolokers. - name: User Restrictions description: Restrict Tolokers from a pool, project, or all projects. - name: Skills description: Create and manage skills assigned to Tolokers. - name: Attachments description: Retrieve files Tolokers attached to their assignments. - name: Operations description: Track the status of asynchronous operations. - name: Webhook Subscriptions description: Subscribe to platform events delivered to your endpoint. paths: /v1/projects: get: operationId: getProjects tags: - Projects summary: Get the list of projects parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/SortField' - name: status in: query schema: type: string enum: [ACTIVE, ARCHIVED] description: Filter projects by status. responses: '200': description: A page of projects. content: application/json: schema: $ref: '#/components/schemas/ProjectSearchResult' post: operationId: createProject tags: - Projects summary: Create a project requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Project' responses: '201': description: The created project. content: application/json: schema: $ref: '#/components/schemas/Project' /v1/projects/{id}: get: operationId: getProject tags: - Projects summary: Get a project parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested project. content: application/json: schema: $ref: '#/components/schemas/Project' put: operationId: updateProject tags: - Projects summary: Edit a project parameters: - $ref: '#/components/parameters/PathId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Project' responses: '200': description: The updated project. content: application/json: schema: $ref: '#/components/schemas/Project' /v1/projects/{id}/archive: post: operationId: archiveProject tags: - Projects summary: Archive a project parameters: - $ref: '#/components/parameters/PathId' responses: '202': description: An asynchronous archive operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/pools: get: operationId: getPools tags: - Pools summary: Get the list of pools parameters: - name: project_id in: query schema: type: string description: Return pools belonging to this project. - name: status in: query schema: type: string enum: [OPEN, CLOSED, ARCHIVED, LOCKED] - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/SortField' responses: '200': description: A page of pools. content: application/json: schema: $ref: '#/components/schemas/PoolSearchResult' post: operationId: createPool tags: - Pools summary: Create a pool requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Pool' responses: '201': description: The created pool. content: application/json: schema: $ref: '#/components/schemas/Pool' /v1/pools/{id}: get: operationId: getPool tags: - Pools summary: Get a pool parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested pool. content: application/json: schema: $ref: '#/components/schemas/Pool' put: operationId: updatePool tags: - Pools summary: Edit a pool parameters: - $ref: '#/components/parameters/PathId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Pool' responses: '200': description: The updated pool. content: application/json: schema: $ref: '#/components/schemas/Pool' /v1/pools/{id}/open: post: operationId: openPool tags: - Pools summary: Open a pool description: Start showing the pool's tasks to Tolokers. parameters: - $ref: '#/components/parameters/PathId' responses: '202': description: An asynchronous open operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/pools/{id}/close: post: operationId: closePool tags: - Pools summary: Close a pool parameters: - $ref: '#/components/parameters/PathId' responses: '202': description: An asynchronous close operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/pools/{id}/archive: post: operationId: archivePool tags: - Pools summary: Archive a pool parameters: - $ref: '#/components/parameters/PathId' responses: '202': description: An asynchronous archive operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/trainings: get: operationId: getTrainings tags: - Training summary: Get the list of training pools parameters: - name: project_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of training pools. content: application/json: schema: $ref: '#/components/schemas/TrainingSearchResult' post: operationId: createTraining tags: - Training summary: Create a training pool requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Training' responses: '201': description: The created training pool. content: application/json: schema: $ref: '#/components/schemas/Training' /v1/trainings/{id}/open: post: operationId: openTraining tags: - Training summary: Open a training pool parameters: - $ref: '#/components/parameters/PathId' responses: '202': description: An asynchronous open operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/tasks: get: operationId: getTasks tags: - Tasks summary: Get the list of tasks parameters: - name: pool_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of tasks. content: application/json: schema: $ref: '#/components/schemas/TaskSearchResult' post: operationId: createTasks tags: - Tasks summary: Create tasks description: >- Create one task or a batch of tasks. Up to 100,000 tasks per minute and 2,000,000 tasks per day. With async_mode=true an Operation is returned. parameters: - $ref: '#/components/parameters/AsyncMode' - name: allow_defaults in: query schema: type: boolean description: Use pool defaults for overlap when not set on a task. - name: skip_invalid_items in: query schema: type: boolean requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/Task' - type: array items: $ref: '#/components/schemas/Task' responses: '201': description: The created task(s). content: application/json: schema: $ref: '#/components/schemas/TaskBatchResult' '202': description: An asynchronous task-creation operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/tasks/{id}: get: operationId: getTask tags: - Tasks summary: Get a task parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested task. content: application/json: schema: $ref: '#/components/schemas/Task' patch: operationId: patchTask tags: - Tasks summary: Edit a task description: Change a task's overlap or infinite_overlap. parameters: - $ref: '#/components/parameters/PathId' requestBody: required: true content: application/json: schema: type: object properties: overlap: type: integer infinite_overlap: type: boolean responses: '200': description: The updated task. content: application/json: schema: $ref: '#/components/schemas/Task' /v1/task-suites: get: operationId: getTaskSuites tags: - Task Suites summary: Get the list of task suites parameters: - name: pool_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of task suites. content: application/json: schema: $ref: '#/components/schemas/TaskSuiteSearchResult' post: operationId: createTaskSuites tags: - Task Suites summary: Create task suites description: Create one or many task suites. Supports async_mode for batches. parameters: - $ref: '#/components/parameters/AsyncMode' - name: skip_invalid_items in: query schema: type: boolean requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/TaskSuite' - type: array items: $ref: '#/components/schemas/TaskSuite' responses: '201': description: The created task suite(s). content: application/json: schema: $ref: '#/components/schemas/TaskSuiteBatchResult' '202': description: An asynchronous task-suite-creation operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/task-suites/{id}: get: operationId: getTaskSuite tags: - Task Suites summary: Get a task suite parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested task suite. content: application/json: schema: $ref: '#/components/schemas/TaskSuite' /v1/assignments: get: operationId: getAssignments tags: - Assignments summary: Get the list of assignments description: Retrieve Toloker responses, optionally filtered by pool and status. parameters: - name: pool_id in: query schema: type: string - name: status in: query schema: type: string enum: [ACTIVE, SUBMITTED, ACCEPTED, REJECTED, SKIPPED, EXPIRED] - name: user_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of assignments. content: application/json: schema: $ref: '#/components/schemas/AssignmentSearchResult' /v1/assignments/{id}: get: operationId: getAssignment tags: - Assignments summary: Get an assignment parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested assignment. content: application/json: schema: $ref: '#/components/schemas/Assignment' patch: operationId: patchAssignment tags: - Assignments summary: Accept or reject an assignment description: Set status to ACCEPTED or REJECTED, with a public comment for the Toloker. parameters: - $ref: '#/components/parameters/PathId' requestBody: required: true content: application/json: schema: type: object required: - status - public_comment properties: status: type: string enum: [ACCEPTED, REJECTED] public_comment: type: string responses: '200': description: The updated assignment. content: application/json: schema: $ref: '#/components/schemas/Assignment' /v1/user-bonuses: post: operationId: createUserBonuses tags: - User Bonuses summary: Issue bonuses to Tolokers parameters: - $ref: '#/components/parameters/AsyncMode' - name: skip_invalid_items in: query schema: type: boolean requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/UserBonus' - type: array items: $ref: '#/components/schemas/UserBonus' responses: '201': description: The issued bonus(es). content: application/json: schema: $ref: '#/components/schemas/UserBonus' '202': description: An asynchronous bonus operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/user-restrictions: post: operationId: createUserRestriction tags: - User Restrictions summary: Restrict a Toloker requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserRestriction' responses: '201': description: The created restriction. content: application/json: schema: $ref: '#/components/schemas/UserRestriction' /v1/skills: get: operationId: getSkills tags: - Skills summary: Get the list of skills parameters: - $ref: '#/components/parameters/Limit' responses: '200': description: A page of skills. content: application/json: schema: $ref: '#/components/schemas/SkillSearchResult' post: operationId: createSkill tags: - Skills summary: Create a skill requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Skill' responses: '201': description: The created skill. content: application/json: schema: $ref: '#/components/schemas/Skill' /v1/user-skills: post: operationId: setUserSkill tags: - Skills summary: Assign a skill value to a Toloker requestBody: required: true content: application/json: schema: type: object required: - user_id - skill_id - value properties: user_id: type: string skill_id: type: string value: type: number responses: '201': description: The assigned user skill. content: application/json: schema: $ref: '#/components/schemas/UserSkill' /v1/attachments: get: operationId: getAttachments tags: - Attachments summary: Get the list of attachments parameters: - name: pool_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of attachment metadata. content: application/json: schema: $ref: '#/components/schemas/AttachmentSearchResult' /v1/attachments/{id}: get: operationId: getAttachment tags: - Attachments summary: Get attachment metadata parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested attachment metadata. content: application/json: schema: $ref: '#/components/schemas/Attachment' /v1/attachments/{id}/download: get: operationId: downloadAttachment tags: - Attachments summary: Download an attachment parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The attachment file. content: application/octet-stream: schema: type: string format: binary /v1/operations: get: operationId: getOperations tags: - Operations summary: Get the list of operations parameters: - name: type in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of operations. content: application/json: schema: $ref: '#/components/schemas/OperationSearchResult' /v1/operations/{id}: get: operationId: getOperation tags: - Operations summary: Get an operation description: Poll the status of an asynchronous operation. parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested operation. content: application/json: schema: $ref: '#/components/schemas/Operation' /v1/webhook-subscriptions: get: operationId: getWebhookSubscriptions tags: - Webhook Subscriptions summary: Get the list of webhook subscriptions parameters: - name: pool_id in: query schema: type: string - $ref: '#/components/parameters/Limit' responses: '200': description: A page of webhook subscriptions. content: application/json: schema: $ref: '#/components/schemas/WebhookSubscriptionSearchResult' put: operationId: upsertWebhookSubscriptions tags: - Webhook Subscriptions summary: Create webhook subscriptions description: >- Subscribe to platform events (e.g. POOL_CLOSED, ASSIGNMENT_CREATED, ASSIGNMENT_SUBMITTED, ASSIGNMENT_APPROVED, ASSIGNMENT_REJECTED). Add a secret_key to receive a signed Toloka-Signature header (HMAC SHA256). requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/WebhookSubscription' - type: array items: $ref: '#/components/schemas/WebhookSubscription' responses: '201': description: The created subscription(s). content: application/json: schema: $ref: '#/components/schemas/WebhookSubscriptionBatchResult' /v1/webhook-subscriptions/{id}: get: operationId: getWebhookSubscription tags: - Webhook Subscriptions summary: Get a webhook subscription parameters: - $ref: '#/components/parameters/PathId' responses: '200': description: The requested subscription. content: application/json: schema: $ref: '#/components/schemas/WebhookSubscription' delete: operationId: deleteWebhookSubscription tags: - Webhook Subscriptions summary: Delete a webhook subscription parameters: - $ref: '#/components/parameters/PathId' responses: '204': description: The subscription was deleted. components: securitySchemes: OAuthToken: type: apiKey in: header name: Authorization description: >- Pass your Toloka OAuth token (or API key) in the Authorization header as `Authorization: OAuth ` (legacy) or `Authorization: ApiKey `. parameters: PathId: name: id in: path required: true schema: type: string description: Object identifier. Limit: name: limit in: query schema: type: integer default: 50 maximum: 100000 description: Maximum number of results per page. SortField: name: sort in: query schema: type: string description: Comma-separated sort fields; prefix with `-` for descending. AsyncMode: name: async_mode in: query schema: type: boolean default: false description: When true, the request runs asynchronously and returns an Operation. schemas: Project: type: object properties: id: type: string readOnly: true public_name: type: string public_description: type: string private_comment: type: string task_spec: $ref: '#/components/schemas/TaskSpec' assignments_issuing_type: type: string enum: [AUTOMATED, MAP_SELECTOR] status: type: string enum: [ACTIVE, ARCHIVED] readOnly: true created: type: string format: date-time readOnly: true required: - public_name - public_description - task_spec TaskSpec: type: object description: Defines the task input/output schema and the Toloker view. properties: input_spec: type: object additionalProperties: true output_spec: type: object additionalProperties: true view_spec: type: object additionalProperties: true Pool: type: object properties: id: type: string readOnly: true project_id: type: string private_name: type: string may_contain_adult_content: type: boolean reward_per_assignment: type: number description: Payment in US dollars for one completed task suite. assignment_max_duration_seconds: type: integer defaults: type: object properties: default_overlap_for_new_task_suites: type: integer default_overlap_for_new_tasks: type: integer will_expire: type: string format: date-time auto_close_after_complete_delay_seconds: type: integer filter: type: object additionalProperties: true description: Conditions controlling which Tolokers can access the pool. quality_control: type: object additionalProperties: true status: type: string enum: [OPEN, CLOSED, ARCHIVED, LOCKED] readOnly: true created: type: string format: date-time readOnly: true required: - project_id - private_name - reward_per_assignment - assignment_max_duration_seconds - defaults - will_expire Training: type: object properties: id: type: string readOnly: true project_id: type: string private_name: type: string may_contain_adult_content: type: boolean assignment_max_duration_seconds: type: integer mix_tasks_in_creation_order: type: boolean shuffle_tasks_in_task_suite: type: boolean training_tasks_in_task_suite_count: type: integer task_suites_required_to_pass: type: integer retry_training_after_days: type: integer status: type: string enum: [OPEN, CLOSED, ARCHIVED, LOCKED] readOnly: true required: - project_id - private_name Task: type: object properties: id: type: string readOnly: true pool_id: type: string input_values: type: object additionalProperties: true description: Input data matching the project's input_spec. known_solutions: type: array items: type: object properties: output_values: type: object additionalProperties: true correctness_weight: type: number overlap: type: integer infinite_overlap: type: boolean created: type: string format: date-time readOnly: true required: - pool_id - input_values TaskSuite: type: object properties: id: type: string readOnly: true pool_id: type: string tasks: type: array items: $ref: '#/components/schemas/Task' overlap: type: integer infinite_overlap: type: boolean created: type: string format: date-time readOnly: true required: - pool_id - tasks Assignment: type: object properties: id: type: string readOnly: true task_suite_id: type: string pool_id: type: string user_id: type: string status: type: string enum: [ACTIVE, SUBMITTED, ACCEPTED, REJECTED, SKIPPED, EXPIRED] tasks: type: array items: $ref: '#/components/schemas/Task' solutions: type: array items: type: object properties: output_values: type: object additionalProperties: true reward: type: number public_comment: type: string created: type: string format: date-time submitted: type: string format: date-time accepted: type: string format: date-time UserBonus: type: object properties: id: type: string readOnly: true user_id: type: string amount: type: number description: Bonus amount in US dollars. assignment_id: type: string private_comment: type: string public_title: type: object additionalProperties: type: string public_message: type: object additionalProperties: type: string without_message: type: boolean required: - user_id - amount UserRestriction: type: object properties: id: type: string readOnly: true user_id: type: string scope: type: string enum: [ALL_PROJECTS, PROJECT, POOL, SYSTEM] project_id: type: string pool_id: type: string private_comment: type: string will_expire: type: string format: date-time required: - user_id - scope Skill: type: object properties: id: type: string readOnly: true name: type: string private_comment: type: string hidden: type: boolean skill_ttl_hours: type: integer training: type: boolean public_requester_description: type: object additionalProperties: type: string created: type: string format: date-time readOnly: true required: - name UserSkill: type: object properties: id: type: string readOnly: true user_id: type: string skill_id: type: string value: type: number created: type: string format: date-time readOnly: true Attachment: type: object properties: id: type: string readOnly: true attachment_type: type: string enum: [ASSIGNMENT_ATTACHMENT] name: type: string details: type: object properties: user_id: type: string assignment_id: type: string pool_id: type: string media_type: type: string created: type: string format: date-time readOnly: true WebhookSubscription: type: object properties: id: type: string readOnly: true webhook_url: type: string format: uri event_type: type: string enum: - POOL_CLOSED - DYNAMIC_OVERLAP_COMPLETED - ASSIGNMENT_CREATED - ASSIGNMENT_SUBMITTED - ASSIGNMENT_SKIPPED - ASSIGNMENT_EXPIRED - ASSIGNMENT_APPROVED - ASSIGNMENT_REJECTED pool_id: type: string secret_key: type: string description: Used to sign notifications with an HMAC SHA256 Toloka-Signature header. created: type: string format: date-time readOnly: true required: - webhook_url - event_type - pool_id Operation: type: object properties: id: type: string readOnly: true type: type: string description: Operation type, e.g. POOL.OPEN, TASK.BATCH_CREATE. status: type: string enum: [PENDING, RUNNING, SUCCESS, FAIL] submitted: type: string format: date-time started: type: string format: date-time finished: type: string format: date-time progress: type: integer parameters: type: object additionalProperties: true details: type: object additionalProperties: true TaskBatchResult: type: object properties: items: type: object additionalProperties: $ref: '#/components/schemas/Task' validation_errors: type: object additionalProperties: true TaskSuiteBatchResult: type: object properties: items: type: object additionalProperties: $ref: '#/components/schemas/TaskSuite' validation_errors: type: object additionalProperties: true WebhookSubscriptionBatchResult: type: object properties: items: type: object additionalProperties: $ref: '#/components/schemas/WebhookSubscription' validation_errors: type: object additionalProperties: true ProjectSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Project' has_more: type: boolean PoolSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Pool' has_more: type: boolean TrainingSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Training' has_more: type: boolean TaskSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Task' has_more: type: boolean TaskSuiteSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/TaskSuite' has_more: type: boolean AssignmentSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Assignment' has_more: type: boolean SkillSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Skill' has_more: type: boolean AttachmentSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Attachment' has_more: type: boolean OperationSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/Operation' has_more: type: boolean WebhookSubscriptionSearchResult: type: object properties: items: type: array items: $ref: '#/components/schemas/WebhookSubscription' has_more: type: boolean