Projects

Project management endpoints

List Projects

get
/listProjects

Retrieves a paginated list of projects accessible to the current user. Returns only essential fields: _id, name, description, organization, createdAt.

Authorizations
Query parameters
pageinteger · min: 1Optional

Page number (1-indexed)

Default: 1
limitinteger · min: 1 · max: 100Optional

Items per page (max 100)

Default: 10
sortstringOptional

Sort field (prefix with - for descending)

Default: -createdAt
Responses
200

Projects retrieved successfully

application/json
get
/listProjects
curl -X GET "https://imeritapi.ango.ai/v2/listProjects?page=1&limit=10&sort=-createdAt" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "projects": [
      {
        "_id": "507f1f77bcf86cd799439011",
        "name": "My Annotation Project",
        "description": "Project description",
        "organization": "507f1f77bcf86cd799439012",
        "createdAt": "2025-01-15T10:30:00.000Z"
      }
    ],
    "total": 1
  }
}

Create Project

post
/project

Creates a new annotation project with specified configuration

Authorizations
Body
namestring · min: 1Required

Project name

Example: My Annotation Project
descriptionstringOptional

Project description

Example: Image annotation project
typestring · enumOptional

Project type

Default: angoExample: angoPossible values:
Responses
201

Project created successfully

application/json
post
/project
curl -X POST "https://imeritapi.ango.ai/v2/project" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Annotation Project",
    "description": "Image annotation project",
    "type": "ango"
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "507f1f77bcf86cd799439011",
      "name": "Vehicle Detection Project",
      "description": "Detect and classify vehicles in images",
      "type": "ango",
      "owner": "[email protected]",
      "organization": "507f1f77bcf86cd799439012",
      "categorySchema": {
        "tools": [],
        "classifications": [],
        "relations": []
      },
      "stages": [
        {
          "id": "Start",
          "name": "Start",
          "type": "Start",
          "next": [
            "Label"
          ]
        },
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Complete"
          ]
        },
        {
          "id": "Complete",
          "name": "Complete",
          "type": "Complete",
          "next": []
        }
      ],
      "batches": [],
      "queueVersion": 2,
      "assetCount": 0,
      "benchmarkEnabled": false,
      "benchmarkRatio": 10,
      "ocrLanguage": "eng",
      "idleTimeout": 300,
      "taskSkipEnabled": true,
      "unassignSkippedTask": false,
      "gcSyncEnabled": false,
      "deleted": false,
      "createdAt": "2025-01-15T10:30:00.000Z"
    }
  }
}

Get Project Details

get
/project/{projectId}

Retrieves complete details for a specific project

Authorizations
Path parameters
projectIdstringRequired

Project ID

Responses
200

Project details retrieved successfully

application/json
get
/project/{projectId}
curl -X GET "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Update Project

post
/project/{projectId}

Updates project configuration and settings

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body
namestring · min: 1Optional
descriptionstringOptional
benchmarkEnabledbooleanOptional
benchmarkRationumberOptional
instructionsstringOptional
ocrLanguagestringOptional
idleTimeoutnumberOptional
projectPluginsobjectOptional
pluginPresetsobject[]Optional
errorCodesEnabledbooleanOptional
errorSchemaobjectOptional
exportStorageIdstringOptional
exportStorageBucketstringOptional
exportStoragePathstringOptional
exportStorageEnabledbooleanOptional
taskSkipEnabledbooleanOptional
unassignSkippedTaskbooleanOptional
gcSyncEnabledbooleanOptional
deletedbooleanOptional
Responses
200

Project updated successfully

application/json
post
/project/{projectId}
curl -X POST "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Project Name",
    "description": "Updated description"
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Delete Project

delete
/project/{projectId}

Soft deletes a project by marking it as deleted without permanently removing it from the database

Authorizations
Path parameters
projectIdstringRequired

Project ID

Responses
200

Project deleted successfully

application/json
delete
/project/{projectId}
curl -X DELETE "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "message": "text"
  }
}

Update Project Assignees

post
/project/{projectId}/assigned

Assign or update users assigned to a project with specific roles

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body
rolestring · enumRequiredPossible values:
assigneesstring[]Required

Array of user emails

Responses
200

Assignees updated successfully

application/json
post
/project/{projectId}/assigned
curl -X POST "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011/assigned" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "Labeler",
    "assignees": ["[email protected]", "[email protected]"]
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Update Project Workflow

post
/project/{projectId}/workflow

Updates the workflow configuration for a project independently from other project settings.

Important:

  • Validates workflow for circular dependencies

  • Creates workflow history entry for auditing

  • Does NOT trigger PCT service notification

  • Requires complete stages array (Start, Complete, and at least one working stage)

Use Cases:

  • Modify stage connections and routing

  • Add/remove workflow stages

  • Update stage properties (assignees, logic, webhooks)

  • Configure consensus workflows

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body

Request body for updating project workflow stages

Responses
200

Workflow updated successfully

application/json
post
/project/{projectId}/workflow
curl -X POST "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011/workflow" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "stages": [
      {
        "id": "Start",
        "name": "Start",
        "type": "Start",
        "next": ["Label"],
        "position": {"x": 0, "y": 50},
        "autoForward": true
      },
      {
        "id": "Label",
        "name": "Annotation",
        "type": "Label",
        "next": ["Complete"],
        "position": {"x": 300, "y": 50},
        "autoForward": false
      },
      {
        "id": "Complete",
        "name": "Complete",
        "type": "Complete",
        "next": [],
        "position": {"x": 600, "y": 50}
      }
    ]
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Update Category Schema

post
/project/{projectId}/categorySchema

Updates the annotation tools and classification schema for a project independently from other settings.

Important:

  • Creates category schema history entry for auditing

  • For PCT projects: Automatically notifies PCT service to sync schema

  • Does NOT affect workflow or other project settings

  • Schema defines available annotation tools, classifications, and relations

Use Cases:

  • Add/remove annotation tools (bounding box, polygon, segmentation, etc.)

  • Modify classification questions and options

  • Update tool properties (colors, shortcuts, requirements)

  • Configure PCT-specific tools and attributes

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body

Request body for updating project category schema (annotation tools and classifications)

Responses
200

Category schema updated successfully

application/json
post
/project/{projectId}/categorySchema
curl -X POST "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011/categorySchema" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "categorySchema": {
      "tools": [
        {
          "schemaId": "6ba6e28f617671ac90d5136",
          "tool": "bounding-box",
          "title": "Object Detection",
          "required": false,
          "multiple": true,
          "color": "#f44336",
          "shortcutKey": "1"
        },
        {
          "schemaId": "3ca44a32cf9d593395c5669",
          "tool": "polygon",
          "title": "Segmentation",
          "required": false,
          "multiple": true,
          "color": "#9c27b0",
          "shortcutKey": "2"
        }
      ],
      "classifications": [
        {
          "schemaId": "6d57e1d5baf47f285662085",
          "tool": "single-dropdown",
          "title": "Object Type",
          "required": true,
          "options": [
            {"value": "car", "schemaId": "fcd9ca013715dd8c9216816"},
            {"value": "pedestrian", "schemaId": "8cadbaf0988fe4b71a03133"}
          ]
        }
      ],
      "relations": []
    }
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Update Label Validation

post
/project/{projectId}/labelValidation

Updates the label validation configuration for a project independently from other settings.

Important:

  • Allows custom JavaScript/Python validation functions to check annotation quality

  • For PCT projects: Automatically sends validation function to PCT service

  • Supports both custom validation functions and external validation APIs

  • Validation can optionally prevent task submission

Custom Validation Function:

  • JavaScript for Ango projects

  • Python for PCT projects

  • Function receives answers object containing annotation data

  • Must return array of error objects with: objectId, message, preventSubmission

External Validation:

  • Call external API to validate annotations

  • Useful for ML-based quality checks or custom business logic

  • Configure frame-specific validation for video projects

Use Cases:

  • Enforce minimum bounding box sizes

  • Validate annotation completeness

  • Check for required attributes

  • Integrate with external quality systems

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body

Request body for updating project label validation configuration. Supports custom validation functions (JavaScript for Ango, Python for PCT) and external API validation.

validationFunctionstringOptional

Custom validation function as a string.

  • For Ango projects: JavaScript function that receives answers object
  • For PCT projects: Python function that receives answers dict
  • Must return array/list of error objects with: objectId, message, preventSubmission
customValidationEnabledbooleanOptional

Enable/disable custom validation function execution

submissionPreventbooleanOptional

Globally prevent task submission when validation fails (optional)

Responses
200

Label validation updated successfully

application/json
post
/project/{projectId}/labelValidation
curl -X POST "https://imeritapi.ango.ai/v2/project/507f1f77bcf86cd799439011/labelValidation" \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "validationFunction": "function (answers) {\n  let errors = [];\n\n  const bbs = answers.objects.filter((obj) => obj.tool === \"bounding-box\" && obj[\"bounding-box\"][\"width\"] < 100);\n\n  bbs.map((b) => {\n    errors.push(\n      {\n        objectId: b.objectId,\n        message: \"Bounding box is narrower than 100px.\",\n        preventSubmission: false\n      }\n    );\n  })\n\n  return errors;\n}",
    "customValidationEnabled": true,
    "externalValidation": {
      "enabled": false,
      "apiUrl": "",
      "singleFrame": false,
      "specificFrame": false,
      "frameNumbers": ""
    }
  }'
{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Create Asset Builder Template

post
/project/{projectId}/assetBuilderTemplates

Creates a template for asset builder functionality

Authorizations
Path parameters
projectIdstringRequired

Project ID

Body
namestringRequired
configobjectRequired
Responses
200

Template created successfully

application/json
post
/project/{projectId}/assetBuilderTemplates
POST /v2/project/{projectId}/assetBuilderTemplates HTTP/1.1
Host: imeritapi.ango.ai
apikey: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 27

{
  "name": "text",
  "config": {}
}
200

Template created successfully

{
  "status": "success",
  "data": {
    "template": {
      "_id": "text",
      "name": "text",
      "config": {}
    }
  }
}

Upload Project Instructions

post
/project/{projectId}/instructions

Uploads instruction file for a project (PDF format only)

Authorizations
Path parameters
projectIdstringRequired

Project ID

Query parameters
storageIdstringOptional

Custom storage ID

bucketstringOptional

Custom bucket name

Body
filestring · binaryRequired

Instruction file to upload

Responses
200

Instructions uploaded successfully

application/json
post
/project/{projectId}/instructions
POST /v2/project/{projectId}/instructions HTTP/1.1
Host: imeritapi.ango.ai
apikey: YOUR_API_KEY
Content-Type: multipart/form-data
Accept: */*
Content-Length: 17

{
  "file": "binary"
}
200

Instructions uploaded successfully

{
  "status": "success",
  "data": {
    "project": {
      "_id": "text",
      "name": "text",
      "description": "text",
      "type": "ango",
      "owner": "text",
      "organization": "text",
      "categorySchema": {
        "tools": [
          {
            "schemaId": "car-bbox-001",
            "title": "Car",
            "tool": "bounding-box",
            "required": false,
            "color": "#FF5733",
            "shortcutKey": "c",
            "classifications": []
          },
          {
            "schemaId": "person-polygon-002",
            "title": "Person",
            "tool": "polygon",
            "required": false,
            "color": "#33FF57",
            "shortcutKey": "p",
            "classifications": []
          }
        ],
        "classifications": [
          {
            "schemaId": "e4dd1c6f65a04d51b3ea66d23c92a321",
            "title": "Choice",
            "tool": "single-dropdown",
            "color": "#20549F",
            "required": false,
            "shortcutKey": "",
            "columnField": false,
            "frameSpecific": false,
            "showDropdown": false,
            "richText": false,
            "regex": null,
            "parentOptionId": null,
            "classifications": [],
            "treeOptions": [],
            "options": [
              {
                "schemaId": "793a5f9474b64bf5919d943b4cef9b65",
                "value": "First"
              },
              {
                "schemaId": "47e022c1cc9b41aa9a3d000c7bbc6524",
                "value": "Second"
              }
            ]
          }
        ],
        "relations": [
          {
            "schemaId": "e7b0db15cfa3bad2a824839",
            "tool": "one-to-one",
            "title": "Connected To",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#f44336",
            "shortcutKey": "1"
          },
          {
            "schemaId": "0e66cb4c8859ccc90103186",
            "tool": "group",
            "title": "Grouped With",
            "required": false,
            "classifications": [],
            "multiple": false,
            "color": "#03a9f4",
            "shortcutKey": "2"
          }
        ]
      },
      "stages": [
        {
          "id": "Label",
          "name": "Labeling",
          "type": "Label",
          "next": [
            "Review"
          ],
          "position": {
            "x": 300,
            "y": 50
          },
          "assignedTo": [
            "[email protected]"
          ],
          "autoForward": false,
          "rememberAssignee": true
        }
      ],
      "assignedTo": [
        {
          "assignee": "text",
          "role": "Manager"
        }
      ],
      "batches": [
        {
          "_id": "507f1f77bcf86cd799439011",
          "name": "Batch 1"
        }
      ],
      "queueVersion": 2,
      "assetCount": 1,
      "benchmarkEnabled": true,
      "benchmarkRatio": 1,
      "instructions": "text",
      "ocrLanguage": "text",
      "idleTimeout": 1,
      "projectPlugins": {},
      "pluginPresets": [
        {}
      ],
      "errorCodesEnabled": true,
      "errorSchema": {},
      "exportStorageId": "text",
      "exportStorageBucket": "text",
      "exportStoragePath": "text",
      "exportStorageEnabled": true,
      "taskSkipEnabled": true,
      "unassignSkippedTask": true,
      "gcSyncEnabled": true,
      "deleted": true,
      "createdAt": "2025-10-27T16:47:36.878Z",
      "updatedAt": "2025-10-27T16:47:36.878Z"
    }
  }
}

Last updated