Skip to main content
Projects in CVAT help you organize related annotation tasks with shared labels, settings, and quality control configurations. A project serves as a container for multiple tasks that share the same annotation schema.

Overview

A project contains:
  • Shared label schema: Labels and attributes used across all tasks
  • Quality settings: Validation and quality control configuration
  • Tasks: Individual annotation jobs with uploaded data
  • Organization: Optional workspace for team collaboration

Creating a Project

Using the Web UI

  1. Navigate to the Projects page
  2. Click Create new project
  3. Enter project details:
    • Name: Descriptive project name
    • Labels: Define your annotation schema (see Labels & Attributes)
    • Bug tracker: Optional issue tracking URL
  4. Configure advanced settings (optional):
    • Source storage: Cloud storage for importing datasets
    • Target storage: Cloud storage for exporting annotations
  5. Click Submit to create the project

Using the REST API

Create a project with the POST /api/projects endpoint:
curl -X POST "https://app.cvat.ai/api/projects" \
  -H "Authorization: Token <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vehicle Detection Project",
    "labels": [
      {
        "name": "car",
        "color": "#ff0000",
        "type": "rectangle",
        "attributes": [
          {
            "name": "occluded",
            "input_type": "checkbox",
            "mutable": true,
            "values": ["false"]
          }
        ]
      },
      {
        "name": "pedestrian",
        "color": "#00ff00",
        "type": "rectangle"
      }
    ]
  }'
Response (201 Created):
{
  "id": 1,
  "name": "Vehicle Detection Project",
  "owner": {
    "id": 1,
    "username": "admin",
    "first_name": "John",
    "last_name": "Doe"
  },
  "assignee": null,
  "bug_tracker": "",
  "created_date": "2026-03-04T10:00:00.000Z",
  "updated_date": "2026-03-04T10:00:00.000Z",
  "status": "annotation",
  "dimension": null,
  "organization_id": null,
  "tasks": {
    "count": 0,
    "url": "https://app.cvat.ai/api/tasks?project_id=1"
  },
  "labels": {
    "url": "https://app.cvat.ai/api/labels?project_id=1"
  }
}

Using the Python SDK

Install the SDK:
pip install cvat-sdk
Create a project:
from cvat_sdk import Client, models

# Initialize client
client = Client(url="https://app.cvat.ai")
client.login(("username", "password"))

# Define labels
labels = [
    models.PatchedLabelRequest(
        name="car",
        color="#ff0000",
        type="rectangle",
        attributes=[
            models.AttributeRequest(
                name="vehicle_type",
                input_type="select",
                mutable=False,
                values=["sedan", "suv", "truck"],
                default_value="sedan"
            )
        ]
    ),
    models.PatchedLabelRequest(
        name="traffic_light",
        color="#ffff00",
        type="rectangle"
    )
]

# Create project
project = client.projects.create(
    spec=models.ProjectWriteRequest(
        name="Traffic Scene Analysis",
        labels=labels
    )
)

print(f"Created project ID: {project.id}")
print(f"Project name: {project.name}")

Using the CLI

Install the CLI:
pip install cvat-cli
Create a project:
# Basic project creation
cvat-cli --auth user:password project create \
  --labels '[{"name": "person"}, {"name": "vehicle"}]' \
  "Pedestrian Detection"

# Create project with label attributes
cvat-cli --auth user:password project create \
  --labels '[
    {
      "name": "car",
      "color": "#ff0000",
      "attributes": [
        {
          "name": "color",
          "input_type": "select",
          "values": ["red", "blue", "white", "black"]
        }
      ]
    }
  ]' \
  "Vehicle Analysis"

# Create project from existing dataset
cvat-cli --auth user:password project create \
  --labels labels.json \
  --dataset_path ./coco_dataset.zip \
  --dataset_format "COCO 1.0" \
  "COCO Import Project"

Project Configuration

Organization Assignment

Projects can belong to an organization for team collaboration:
# Create project in an organization
project = client.projects.create(
    spec=models.ProjectWriteRequest(
        name="Team Project",
        labels=labels,
        organization_id=5  # Organization ID
    )
)
Only organization members can access projects within that organization. Projects without an organization are personal projects.

Storage Configuration

Configure cloud storage for importing and exporting data:
from cvat_sdk import models

project = client.projects.create(
    spec=models.ProjectWriteRequest(
        name="Cloud Storage Project",
        labels=labels,
        source_storage=models.StorageWrite(
            location="cloud_storage",
            cloud_storage_id=10
        ),
        target_storage=models.StorageWrite(
            location="cloud_storage",
            cloud_storage_id=11
        )
    )
)
Storage options:
  • local: CVAT server storage (default)
  • cloud_storage: AWS S3, Azure Blob, or Google Cloud Storage

Bug Tracker Integration

Link an external issue tracker:
curl -X POST "https://app.cvat.ai/api/projects" \
  -H "Authorization: Token <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Quality Control Project",
    "bug_tracker": "https://github.com/org/repo/issues",
    "labels": [...]
  }'

Project Properties

Key project attributes returned by the API:
FieldTypeDescription
idintegerUnique project identifier
namestringProject name
ownerobjectUser who created the project
assigneeobjectUser assigned to the project
statusstringProject status: annotation, validation, completed
created_datedatetimeCreation timestamp
updated_datedatetimeLast modification timestamp
dimensionstringTask dimension: 2d or 3d
organization_idintegerOrganization ID (null for personal projects)
tasksobjectSummary of project tasks
labelsobjectProject label schema

Best Practices

  • Define all labels upfront before creating tasks
  • Use consistent naming conventions
  • Add attributes for important object properties
  • Consider label hierarchies for complex scenarios
  • Review Labels & Attributes guide
  • Use descriptive project names: “Traffic Scene Detection Q1 2026”
  • Include version numbers for iterative datasets
  • Add date ranges or data source information
  • Set up validation parameters at project creation
  • Define quality thresholds before annotation begins
  • Enable consensus annotation for critical tasks
  • See Quality Control for details
  • Create projects within organizations for collaboration
  • Assign roles and permissions appropriately
  • Configure shared cloud storage for large datasets

Next Steps

Managing Tasks

Create and manage annotation tasks within your project

Labels & Attributes

Configure labels, attributes, and annotation schemas

Quality Control

Set up validation workflows and quality metrics

API Reference

View complete API documentation

Build docs developers (and LLMs) love