CVAT Labels API
List, retrieve, update, and delete labels and their attributes and sublabels, defining the annotation taxonomy shared by projects, tasks, and jobs.
List, retrieve, update, and delete labels and their attributes and sublabels, defining the annotation taxonomy shared by projects, tasks, and jobs.
openapi: 3.0.1
info:
title: CVAT REST API
description: >-
REST API for CVAT (Computer Vision Annotation Tool), an open-source platform
for annotating images, video, and 3D point clouds. The same API is served by
self-hosted CVAT (MIT-licensed) and by the hosted CVAT Online service at
app.cvat.ai. Endpoints cover projects, tasks, jobs, annotations, labels,
organizations, memberships, and cloud storage. The full machine-readable
schema is published by each server at /api/schema/ and the interactive docs
at /api/docs/. This document captures a representative subset of the
documented surface.
termsOfService: https://www.cvat.ai/terms-of-use
contact:
name: CVAT Support
url: https://www.cvat.ai
license:
name: MIT License
url: https://en.wikipedia.org/wiki/MIT_License
version: '2.0'
servers:
- url: https://app.cvat.ai/api
description: CVAT Online (hosted)
- url: http://localhost:8080/api
description: Self-hosted CVAT (default)
security:
- tokenAuth: []
- basicAuth: []
tags:
- name: projects
description: Annotation projects that group tasks and share a label set.
- name: tasks
description: Annotation tasks holding media data and annotations.
- name: jobs
description: Assignable annotation units that subdivide a task.
- name: annotations
description: Shapes, tracks, and tags attached to tasks and jobs.
- name: labels
description: Label taxonomy shared across projects, tasks, and jobs.
- name: organizations
description: Organizations scoping resources for teams.
- name: memberships
description: Membership of users within organizations.
- name: cloudstorages
description: External object-storage connections used as data sources.
paths:
/projects:
get:
operationId: projects_list
tags: [projects]
summary: List projects
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- name: org
in: query
description: Organization slug used to filter the request.
schema:
type: string
responses:
'200':
description: A paginated list of projects.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedProjectList'
post:
operationId: projects_create
tags: [projects]
summary: Create a project
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectWriteRequest'
responses:
'201':
description: The created project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
/projects/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: projects_retrieve
tags: [projects]
summary: Retrieve a project
responses:
'200':
description: The requested project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
patch:
operationId: projects_partial_update
tags: [projects]
summary: Update a project
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectWriteRequest'
responses:
'200':
description: The updated project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
delete:
operationId: projects_destroy
tags: [projects]
summary: Delete a project
responses:
'204':
description: The project has been deleted.
/tasks:
get:
operationId: tasks_list
tags: [tasks]
summary: List tasks
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- name: project_id
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of tasks.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedTaskList'
post:
operationId: tasks_create
tags: [tasks]
summary: Create a task
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskWriteRequest'
responses:
'201':
description: The created task.
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
/tasks/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: tasks_retrieve
tags: [tasks]
summary: Retrieve a task
responses:
'200':
description: The requested task.
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
patch:
operationId: tasks_partial_update
tags: [tasks]
summary: Update a task
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskWriteRequest'
responses:
'200':
description: The updated task.
content:
application/json:
schema:
$ref: '#/components/schemas/Task'
delete:
operationId: tasks_destroy
tags: [tasks]
summary: Delete a task
responses:
'204':
description: The task has been deleted.
/tasks/{id}/data:
parameters:
- $ref: '#/components/parameters/PathId'
post:
operationId: tasks_create_data
tags: [tasks]
summary: Attach data to a task
description: >-
Upload images, video, or references to cloud-storage objects and start
the background process that prepares the task data.
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/DataRequest'
responses:
'202':
description: Data upload accepted and queued for processing.
/tasks/{id}/annotations:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: tasks_retrieve_annotations
tags: [annotations]
summary: Get task annotations
responses:
'200':
description: The task annotations.
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
put:
operationId: tasks_update_annotations
tags: [annotations]
summary: Replace task annotations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
responses:
'200':
description: The updated annotations.
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
post:
operationId: tasks_create_annotations
tags: [annotations]
summary: Import task annotations
description: >-
Initiates a background process to import annotations into a task. Poll
GET /requests/{rq_id} to check status; rq_id is returned in the response.
parameters:
- name: format
in: query
description: Dataset format name to import (e.g. COCO 1.0, CVAT 1.1).
schema:
type: string
responses:
'202':
description: Import accepted and queued.
delete:
operationId: tasks_destroy_annotations
tags: [annotations]
summary: Delete task annotations
responses:
'204':
description: The annotations have been deleted.
/tasks/{id}/dataset/export:
parameters:
- $ref: '#/components/parameters/PathId'
post:
operationId: tasks_create_dataset_export
tags: [tasks]
summary: Export a task dataset
parameters:
- name: format
in: query
required: true
schema:
type: string
- name: save_images
in: query
schema:
type: boolean
responses:
'202':
description: Export accepted; poll the returned request for the result link.
/jobs:
get:
operationId: jobs_list
tags: [jobs]
summary: List jobs
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- name: task_id
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of jobs.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedJobList'
/jobs/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: jobs_retrieve
tags: [jobs]
summary: Retrieve a job
responses:
'200':
description: The requested job.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
patch:
operationId: jobs_partial_update
tags: [jobs]
summary: Update a job
description: Update job stage, state, or assignee.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/JobWriteRequest'
responses:
'200':
description: The updated job.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
/jobs/{id}/annotations:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: jobs_retrieve_annotations
tags: [annotations]
summary: Get job annotations
responses:
'200':
description: The job annotations.
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
put:
operationId: jobs_update_annotations
tags: [annotations]
summary: Replace job annotations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
responses:
'200':
description: The updated annotations.
content:
application/json:
schema:
$ref: '#/components/schemas/LabeledData'
/labels:
get:
operationId: labels_list
tags: [labels]
summary: List labels
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- name: task_id
in: query
schema:
type: integer
- name: project_id
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of labels.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedLabelList'
/labels/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: labels_retrieve
tags: [labels]
summary: Retrieve a label
responses:
'200':
description: The requested label.
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
patch:
operationId: labels_partial_update
tags: [labels]
summary: Update a label
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
responses:
'200':
description: The updated label.
content:
application/json:
schema:
$ref: '#/components/schemas/Label'
delete:
operationId: labels_destroy
tags: [labels]
summary: Delete a label
responses:
'204':
description: The label has been deleted.
/organizations:
get:
operationId: organizations_list
tags: [organizations]
summary: List organizations
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A paginated list of organizations.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedOrganizationList'
post:
operationId: organizations_create
tags: [organizations]
summary: Create an organization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationWriteRequest'
responses:
'201':
description: The created organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Organization'
/organizations/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: organizations_retrieve
tags: [organizations]
summary: Retrieve an organization
responses:
'200':
description: The requested organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Organization'
delete:
operationId: organizations_destroy
tags: [organizations]
summary: Delete an organization
responses:
'204':
description: The organization has been deleted.
/memberships:
get:
operationId: memberships_list
tags: [memberships]
summary: List memberships
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
- name: org
in: query
schema:
type: string
responses:
'200':
description: A paginated list of memberships.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMembershipList'
/memberships/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: memberships_retrieve
tags: [memberships]
summary: Retrieve a membership
responses:
'200':
description: The requested membership.
content:
application/json:
schema:
$ref: '#/components/schemas/Membership'
delete:
operationId: memberships_destroy
tags: [memberships]
summary: Delete a membership
responses:
'204':
description: The membership has been deleted.
/cloudstorages:
get:
operationId: cloudstorages_list
tags: [cloudstorages]
summary: List cloud storages
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PageSize'
responses:
'200':
description: A paginated list of cloud storages.
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedCloudStorageList'
post:
operationId: cloudstorages_create
tags: [cloudstorages]
summary: Create a cloud storage connection
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CloudStorageWriteRequest'
responses:
'201':
description: The created cloud storage.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudStorage'
/cloudstorages/{id}:
parameters:
- $ref: '#/components/parameters/PathId'
get:
operationId: cloudstorages_retrieve
tags: [cloudstorages]
summary: Retrieve a cloud storage
responses:
'200':
description: The requested cloud storage.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudStorage'
delete:
operationId: cloudstorages_destroy
tags: [cloudstorages]
summary: Delete a cloud storage
responses:
'204':
description: The cloud storage has been deleted.
components:
securitySchemes:
tokenAuth:
type: apiKey
in: header
name: Authorization
description: >-
Token authentication. Send the header `Authorization: Token <key>`
where the key is obtained from POST /auth/login.
basicAuth:
type: http
scheme: basic
description: HTTP Basic authentication with CVAT username and password.
parameters:
PathId:
name: id
in: path
required: true
schema:
type: integer
description: A unique integer value identifying this resource.
Page:
name: page
in: query
schema:
type: integer
description: A page number within the paginated result set.
PageSize:
name: page_size
in: query
schema:
type: integer
description: Number of results to return per page.
schemas:
Project:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
labels:
type: array
items:
$ref: '#/components/schemas/Label'
owner:
$ref: '#/components/schemas/BasicUser'
assignee:
$ref: '#/components/schemas/BasicUser'
status:
type: string
enum: [annotation, validation, completed]
tasks_count:
type: integer
readOnly: true
organization:
type: integer
nullable: true
created_date:
type: string
format: date-time
readOnly: true
updated_date:
type: string
format: date-time
readOnly: true
ProjectWriteRequest:
type: object
required: [name]
properties:
name:
type: string
labels:
type: array
items:
$ref: '#/components/schemas/Label'
owner_id:
type: integer
nullable: true
assignee_id:
type: integer
nullable: true
Task:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
project_id:
type: integer
nullable: true
mode:
type: string
description: annotation or interpolation
status:
type: string
enum: [annotation, validation, completed]
size:
type: integer
readOnly: true
description: Number of frames in the task.
segment_size:
type: integer
owner:
$ref: '#/components/schemas/BasicUser'
assignee:
$ref: '#/components/schemas/BasicUser'
labels:
type: array
items:
$ref: '#/components/schemas/Label'
organization:
type: integer
nullable: true
created_date:
type: string
format: date-time
readOnly: true
updated_date:
type: string
format: date-time
readOnly: true
TaskWriteRequest:
type: object
required: [name]
properties:
name:
type: string
project_id:
type: integer
nullable: true
labels:
type: array
items:
$ref: '#/components/schemas/Label'
segment_size:
type: integer
overlap:
type: integer
owner_id:
type: integer
nullable: true
assignee_id:
type: integer
nullable: true
Job:
type: object
properties:
id:
type: integer
readOnly: true
task_id:
type: integer
readOnly: true
project_id:
type: integer
nullable: true
readOnly: true
assignee:
$ref: '#/components/schemas/BasicUser'
stage:
type: string
enum: [annotation, validation, acceptance]
state:
type: string
enum: [new, in progress, completed, rejected]
start_frame:
type: integer
readOnly: true
stop_frame:
type: integer
readOnly: true
type:
type: string
enum: [annotation, ground_truth]
JobWriteRequest:
type: object
properties:
assignee:
type: integer
nullable: true
stage:
type: string
enum: [annotation, validation, acceptance]
state:
type: string
enum: [new, in progress, completed, rejected]
Label:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
color:
type: string
description: Hex color used to render the label.
type:
type: string
enum: [any, rectangle, polygon, polyline, points, ellipse, cuboid, mask, tag, skeleton]
attributes:
type: array
items:
$ref: '#/components/schemas/Attribute'
parent_id:
type: integer
nullable: true
Attribute:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
mutable:
type: boolean
input_type:
type: string
enum: [checkbox, radio, number, text, select]
default_value:
type: string
values:
type: array
items:
type: string
LabeledData:
type: object
description: Container of annotations for a task or job.
properties:
version:
type: integer
tags:
type: array
items:
$ref: '#/components/schemas/LabeledImage'
shapes:
type: array
items:
$ref: '#/components/schemas/LabeledShape'
tracks:
type: array
items:
type: object
LabeledImage:
type: object
properties:
id:
type: integer
frame:
type: integer
label_id:
type: integer
source:
type: string
attributes:
type: array
items:
type: object
LabeledShape:
type: object
properties:
id:
type: integer
type:
type: string
enum: [rectangle, polygon, polyline, points, ellipse, cuboid, mask, skeleton]
frame:
type: integer
label_id:
type: integer
occluded:
type: boolean
outside:
type: boolean
points:
type: array
items:
type: number
format: double
rotation:
type: number
format: double
z_order:
type: integer
source:
type: string
Organization:
type: object
properties:
id:
type: integer
readOnly: true
slug:
type: string
name:
type: string
description:
type: string
owner:
$ref: '#/components/schemas/BasicUser'
created_date:
type: string
format: date-time
readOnly: true
OrganizationWriteRequest:
type: object
required: [slug]
properties:
slug:
type: string
name:
type: string
description:
type: string
Membership:
type: object
properties:
id:
type: integer
readOnly: true
user:
$ref: '#/components/schemas/BasicUser'
organization:
type: integer
role:
type: string
enum: [worker, supervisor, maintainer, owner]
is_active:
type: boolean
CloudStorage:
type: object
properties:
id:
type: integer
readOnly: true
provider_type:
type: string
enum: [AWS_S3_BUCKET, AZURE_CONTAINER, GOOGLE_CLOUD_STORAGE]
resource:
type: string
description: Bucket or container name.
display_name:
type: string
credentials_type:
type: string
enum: [KEY_SECRET_KEY_PAIR, ACCOUNT_NAME_TOKEN_PAIR, KEY_FILE_PATH, ANONYMOUS_ACCESS]
owner:
$ref: '#/components/schemas/BasicUser'
organization:
type: integer
nullable: true
created_date:
type: string
format: date-time
readOnly: true
CloudStorageWriteRequest:
type: object
required: [provider_type, resource, credentials_type]
properties:
provider_type:
type: string
enum: [AWS_S3_BUCKET, AZURE_CONTAINER, GOOGLE_CLOUD_STORAGE]
resource:
type: string
display_name:
type: string
credentials_type:
type: string
enum: [KEY_SECRET_KEY_PAIR, ACCOUNT_NAME_TOKEN_PAIR, KEY_FILE_PATH, ANONYMOUS_ACCESS]
key:
type: string
secret_key:
type: string
specific_attributes:
type: string
DataRequest:
type: object
properties:
client_files:
type: array
items:
type: string
format: binary
server_files:
type: array
items:
type: string
remote_files:
type: array
items:
type: string
image_quality:
type: integer
use_cache:
type: boolean
cloud_storage_id:
type: integer
BasicUser:
type: object
nullable: true
properties:
id:
type: integer
readOnly: true
username:
type: string
first_name:
type: string
last_name:
type: string
PaginatedProjectList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedTaskList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedJobList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedLabelList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedOrganizationList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedMembershipList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedCloudStorageList:
$ref: '#/components/schemas/PaginatedBase'
PaginatedBase:
type: object
properties:
count:
type: integer
next:
type: string
format: uri
nullable: true
previous:
type: string
format: uri
nullable: true
results:
type: array
items:
type: object