V7 Darwin Workflows & Stages API
Create, list, and manage multi-stage annotation workflows, link datasets, set the workflow stage of items, and assign items to annotators for human-in-the-loop review.
Create, list, and manage multi-stage annotation workflows, link datasets, set the workflow stage of items, and assign items to annotators for human-in-the-loop review.
openapi: 3.0.1
info:
title: V7 Darwin API
description: >-
REST API for the V7 Darwin training-data platform. Manage datasets, register
and upload items (images, video, documents), read and import annotations,
orchestrate human-in-the-loop workflows and stages, manage annotation
classes, and request dataset exports (releases). All requests are
authenticated with an `Authorization: ApiKey {key}` header. Paths use the
team slug as a path parameter; API keys are scoped to a team and their
permissions determine which operations are allowed.
termsOfService: https://www.v7labs.com/terms
contact:
name: V7 Support
url: https://docs.v7labs.com
version: '2.0'
servers:
- url: https://darwin.v7labs.com/api
description: V7 Darwin production API
security:
- ApiKeyAuth: []
tags:
- name: Datasets
description: Create and manage datasets.
- name: Items
description: Register, upload, list, and manage dataset items.
- name: Annotations
description: Read and import item annotations.
- name: Workflows
description: Manage multi-stage annotation workflows and stages.
- name: Classes
description: Manage annotation classes (labeling taxonomy).
- name: Exports
description: Request and manage dataset exports (releases).
paths:
/datasets:
get:
operationId: listDatasets
tags:
- Datasets
summary: List datasets
description: Returns the datasets accessible to the authenticated team.
responses:
'200':
description: A list of datasets.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Dataset'
post:
operationId: createDataset
tags:
- Datasets
summary: Create a dataset
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDatasetRequest'
responses:
'200':
description: The created dataset.
content:
application/json:
schema:
$ref: '#/components/schemas/Dataset'
/datasets/{id}:
get:
operationId: getDataset
tags:
- Datasets
summary: Get a dataset
parameters:
- $ref: '#/components/parameters/DatasetId'
responses:
'200':
description: The requested dataset.
content:
application/json:
schema:
$ref: '#/components/schemas/Dataset'
'404':
$ref: '#/components/responses/NotFound'
/v2/teams/{team_slug}/items:
get:
operationId: listItems
tags:
- Items
summary: List items
description: Returns a paginated list of items for the given filters.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- name: dataset_ids[]
in: query
description: Filter items by one or more dataset IDs.
required: true
schema:
type: array
items:
type: integer
- name: page[size]
in: query
schema:
type: integer
default: 50
- name: page[offset]
in: query
schema:
type: integer
default: 0
responses:
'200':
description: A paginated list of items.
content:
application/json:
schema:
$ref: '#/components/schemas/ItemList'
delete:
operationId: deleteItems
tags:
- Items
summary: Delete items
description: Deletes the items selected by the provided filters.
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ItemFilterRequest'
responses:
'204':
description: Items deleted.
/v2/teams/{team_slug}/items/{item_id}:
get:
operationId: getItem
tags:
- Items
summary: Get an item
description: Returns the item with the provided ID.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/ItemId'
responses:
'200':
description: The requested item.
content:
application/json:
schema:
$ref: '#/components/schemas/Item'
'404':
$ref: '#/components/responses/NotFound'
/v2/teams/{team_slug}/items/register_upload:
post:
operationId: registerUpload
tags:
- Items
summary: Register locally stored data
description: >-
Registers locally stored files for upload to a dataset, returning upload
IDs to be signed and confirmed.
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterUploadRequest'
responses:
'200':
description: Registered items with upload IDs.
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterUploadResponse'
/v2/teams/{team_slug}/items/uploads/{upload_id}/sign:
get:
operationId: signUpload
tags:
- Items
summary: Sign upload of locally stored files
description: Returns a pre-signed URL for uploading the registered file.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- name: upload_id
in: path
required: true
schema:
type: string
responses:
'200':
description: A signed upload URL.
content:
application/json:
schema:
type: object
properties:
upload_url:
type: string
format: uri
/v2/teams/{team_slug}/items/uploads/{upload_id}/confirm:
post:
operationId: confirmUpload
tags:
- Items
summary: Confirm locally registered files
description: Confirms that the upload has completed to finalize registration.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- name: upload_id
in: path
required: true
schema:
type: string
responses:
'200':
description: Upload confirmed.
/v2/teams/{team_slug}/items/register_existing:
post:
operationId: registerExisting
tags:
- Items
summary: Register externally stored data (read-write)
description: Registers files in external storage with read-write access.
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterExistingRequest'
responses:
'200':
description: Registered external items.
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterUploadResponse'
/v2/teams/{team_slug}/items/register_existing_readonly:
post:
operationId: registerExistingReadonly
tags:
- Items
summary: Register externally stored data (read-only)
description: Registers files in external storage with read-only access.
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterExistingRequest'
responses:
'200':
description: Registered external read-only items.
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterUploadResponse'
/v2/teams/{team_slug}/items/archive:
post:
operationId: archiveItems
tags:
- Items
summary: Archive items
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ItemFilterRequest'
responses:
'200':
description: Items archived.
/v2/teams/{team_slug}/items/restore:
post:
operationId: restoreItems
tags:
- Items
summary: Restore items
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ItemFilterRequest'
responses:
'200':
description: Items restored.
/v2/teams/{team_slug}/items/{item_id}/annotations:
get:
operationId: listItemAnnotations
tags:
- Annotations
summary: List item annotations
description: Returns the annotations attached to the given item.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/ItemId'
responses:
'200':
description: The item's annotations.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Annotation'
/v2/teams/{team_slug}/items/{item_id}/import:
post:
operationId: importAnnotations
tags:
- Annotations
summary: Import annotations
description: >-
Imports annotations (in Darwin JSON v2.0 format) created outside of V7
onto the given item.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/ItemId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportAnnotationsRequest'
responses:
'200':
description: Annotations imported.
/v2/teams/{team_slug}/annotation_classes:
get:
operationId: listAnnotationClasses
tags:
- Classes
summary: List annotation classes
description: Lists the annotation classes for the team.
parameters:
- $ref: '#/components/parameters/TeamSlug'
responses:
'200':
description: A list of annotation classes.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AnnotationClass'
/v2/teams/{team_slug}/annotation_classes/{class_id}:
put:
operationId: updateAnnotationClass
tags:
- Classes
summary: Update annotation class
parameters:
- $ref: '#/components/parameters/TeamSlug'
- name: class_id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AnnotationClass'
responses:
'200':
description: The updated annotation class.
content:
application/json:
schema:
$ref: '#/components/schemas/AnnotationClass'
/v2/teams/{team_slug}/workflows:
get:
operationId: listWorkflows
tags:
- Workflows
summary: List workflows
parameters:
- $ref: '#/components/parameters/TeamSlug'
responses:
'200':
description: A list of workflows.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Workflow'
post:
operationId: createWorkflow
tags:
- Workflows
summary: Create workflow
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
responses:
'200':
description: The created workflow.
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
/v2/teams/{team_slug}/workflows/{id}:
get:
operationId: getWorkflow
tags:
- Workflows
summary: Get workflow
parameters:
- $ref: '#/components/parameters/TeamSlug'
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: The requested workflow.
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
'404':
$ref: '#/components/responses/NotFound'
/v2/teams/{team_slug}/items/stage:
post:
operationId: setStage
tags:
- Workflows
summary: Set stage
description: Sets the workflow stage of the items matched by the filters.
parameters:
- $ref: '#/components/parameters/TeamSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SetStageRequest'
responses:
'200':
description: Stage updated.
/v2/teams/{team_slug}/datasets/{dataset_slug}/exports:
get:
operationId: listExports
tags:
- Exports
summary: List exports
description: Lists all available exports (releases) for a dataset.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/DatasetSlug'
responses:
'200':
description: A list of exports.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Export'
post:
operationId: createExport
tags:
- Exports
summary: Create an export
description: Requests a new export, processed asynchronously.
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/DatasetSlug'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateExportRequest'
responses:
'200':
description: The created export.
content:
application/json:
schema:
$ref: '#/components/schemas/Export'
/v2/teams/{team_slug}/datasets/{dataset_slug}/exports/{name}:
get:
operationId: showExport
tags:
- Exports
summary: Show export
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/DatasetSlug'
- name: name
in: path
required: true
schema:
type: string
responses:
'200':
description: The requested export.
content:
application/json:
schema:
$ref: '#/components/schemas/Export'
delete:
operationId: deleteExport
tags:
- Exports
summary: Delete export
parameters:
- $ref: '#/components/parameters/TeamSlug'
- $ref: '#/components/parameters/DatasetSlug'
- name: name
in: path
required: true
schema:
type: string
responses:
'204':
description: Export removed.
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: Authorization
description: >-
Team-scoped API key sent as `Authorization: ApiKey {key}`. Generate keys
at https://darwin.v7labs.com/?settings=api-keys. Key permissions
determine which operations are allowed.
parameters:
TeamSlug:
name: team_slug
in: path
required: true
description: The slug of the team that owns the resource.
schema:
type: string
DatasetSlug:
name: dataset_slug
in: path
required: true
description: The slug of the dataset.
schema:
type: string
DatasetId:
name: id
in: path
required: true
description: The numeric dataset ID.
schema:
type: integer
ItemId:
name: item_id
in: path
required: true
description: The UUID of the item.
schema:
type: string
format: uuid
responses:
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Dataset:
type: object
properties:
id:
type: integer
name:
type: string
slug:
type: string
num_images:
type: integer
num_videos:
type: integer
progress:
type: number
format: float
CreateDatasetRequest:
type: object
required:
- name
properties:
name:
type: string
Item:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
path:
type: string
status:
type: string
enum:
- new
- annotate
- review
- complete
- archived
dataset_id:
type: integer
priority:
type: integer
slots:
type: array
items:
$ref: '#/components/schemas/Slot'
Slot:
type: object
properties:
slot_name:
type: string
file_name:
type: string
type:
type: string
enum:
- image
- video
- pdf
- dicom
ItemList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Item'
page:
$ref: '#/components/schemas/Page'
Page:
type: object
properties:
count:
type: integer
next_id:
type: string
previous_id:
type: string
ItemFilterRequest:
type: object
required:
- filters
properties:
filters:
$ref: '#/components/schemas/ItemFilters'
ItemFilters:
type: object
properties:
dataset_ids:
type: array
items:
type: integer
item_ids:
type: array
items:
type: string
format: uuid
statuses:
type: array
items:
type: string
RegisterUploadRequest:
type: object
required:
- items
- dataset_slug
properties:
dataset_slug:
type: string
items:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
slots:
type: array
items:
type: object
properties:
slot_name:
type: string
file_name:
type: string
RegisterExistingRequest:
type: object
required:
- items
- dataset_slug
- storage_name
properties:
dataset_slug:
type: string
storage_name:
type: string
description: Name of the configured external storage.
items:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
storage_key:
type: string
RegisterUploadResponse:
type: object
properties:
items:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
slots:
type: array
items:
type: object
properties:
upload_id:
type: string
blocked_items:
type: array
items:
type: object
Annotation:
type: object
properties:
id:
type: string
format: uuid
annotation_class_id:
type: integer
name:
type: string
data:
type: object
description: Geometry/value payload (bounding_box, polygon, keypoint, tag, etc.).
ImportAnnotationsRequest:
type: object
required:
- annotations
properties:
annotations:
type: array
items:
$ref: '#/components/schemas/Annotation'
overwrite:
type: boolean
default: false
AnnotationClass:
type: object
properties:
id:
type: integer
name:
type: string
annotation_types:
type: array
items:
type: string
enum:
- bounding_box
- polygon
- keypoint
- line
- tag
- ellipse
- cuboid
- mask
description:
type: string
metadata:
type: object
Workflow:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
dataset:
type: object
properties:
id:
type: integer
name:
type: string
stages:
type: array
items:
$ref: '#/components/schemas/Stage'
Stage:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
type:
type: string
enum:
- dataset
- annotate
- review
- complete
- model
- consensus
- discard
edges:
type: array
items:
type: object
SetStageRequest:
type: object
required:
- filters
- stage_id
- workflow_id
properties:
filters:
$ref: '#/components/schemas/ItemFilters'
stage_id:
type: string
format: uuid
workflow_id:
type: string
format: uuid
CreateExportRequest:
type: object
required:
- name
properties:
name:
type: string
format:
type: string
enum:
- json
- darwin_json_2
- coco
- cvat
- pascal_voc
- yolo
default: darwin_json_2
include_authorship:
type: boolean
include_export_token:
type: boolean
filters:
$ref: '#/components/schemas/ItemFilters'
Export:
type: object
properties:
name:
type: string
status:
type: string
enum:
- pending
- running
- complete
- failed
format:
type: string
download_url:
type: string
format: uri
inserted_at:
type: string
format: date-time
version:
type: string
Error:
type: object
properties:
errors:
type: object
message:
type: string