For the complete documentation index, see llms.txt. This page is also available as Markdown.

Upload a Dataset Zip

Upload a dataset as a single zip archive (up to 2 GB, 10,000 files) using an async task. Unlike the standard image upload endpoint, you do not hold an HTTP connection open while the zip is processed. The API returns a signed URL that you PUT the zip to, and a taskId you poll for status.

This endpoint accepts zips containing images and annotations in any of the formats supported by the Roboflow dataset upload tools (COCO, YOLO, Pascal VOC, etc.). Folder names are used as class labels for classification datasets.

Flow

  1. POST /:workspace/:project/upload/zip returns a signed URL and a taskId.

  2. PUT the zip directly to the signed URL.

  3. GET /:workspace/upload/zip/:taskId to poll until the task completes.

Initiate the Upload

Send a POST to /:workspace/:project/upload/zip. The response includes a GCS signed URL and a taskId.

curl -X POST "https://api.roboflow.com/my-workspace/my-project/upload/zip?api_key=$ROBOFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"split": "train", "batchName": "my-batch"}'

Body Parameters

- split (string, optional) - One of train, valid, or test. Defaults to train.
- batchName (string, optional) - Group uploaded images under a batch with this name.

Response

Upload the Zip

PUT the zip file to the returned signedUrl. The Content-Type must be application/zip.

Processing starts automatically once the upload completes.

Poll Task Status

Send a GET to /:workspace/upload/zip/:taskId.

The response follows the standard Async Tasks shape. When the task completes, result includes a per-image summary plus any warnings or errors encountered during parsing.

Up to 100 per-image errors and 100 warnings are reported. Videos and PDFs inside the zip are surfaced as unsupported-format warnings and skipped.

Limits

  • Maximum zip size: 2 GB

  • Maximum files per zip: 10,000

Errors

Last updated

Was this helpful?