Crowdee
API Reference

Datasets API

Create and manage versioned media file collections, apply cleaning pipelines, and export processed files.

Datasets are organization-scoped versioned file collections. Files are uploaded to an immutable raw version; cleaning and enrichment jobs create new derived versions without modifying the source.

Endpoint Overview

MethodPathDescription
GET/v2/datasetsList all datasets in the active organization
POST/v2/datasetsCreate a dataset
GET/v2/datasets/{datasetId}Get dataset with all versions
PATCH/v2/datasets/{datasetId}Update name or description
DELETE/v2/datasets/{datasetId}Delete dataset and all versions
POST/v2/datasets/{datasetId}/filesUpload files to the raw version
DELETE/v2/datasets/{datasetId}/files/{fileId}Remove a file from the raw version
GET/v2/datasets/{datasetId}/versionsList all versions
GET/v2/datasets/{datasetId}/versions/{versionId}Get version with paginated file listing
POST/v2/datasets/{datasetId}/versions/{versionId}/cleanTrigger a cleaning pipeline
POST/v2/datasets/{datasetId}/versions/{versionId}/enrichTrigger enrichment on all files
GET/v2/datasets/{datasetId}/versions/{versionId}/exportGet presigned download URLs
GET/v2/datasets/catalog/cleaning-pipelinesList available cleaning pipelines

Create a Dataset

POST /v2/datasets

Request body

FieldTypeRequiredDescription
namestringYesHuman-readable display name
internalIdstringYesSlug used in S3 paths; letters, numbers, hyphens, and underscores only; unique within the organization
modalitystringYesOne of image, audio, video, text, document, multimodal
descriptionstringNoOptional description
curl -X POST https://api.crowdee.ai/v2/datasets \
  -H "X-API-Key: crw_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Interview Audio 2024-Q4",
    "internalId": "interview-audio-q4-2024",
    "modality": "audio",
    "description": "Raw interview recordings for speaker verification"
  }'

Response (201):

{
  "id": "ds_abc123",
  "name": "Interview Audio 2024-Q4",
  "internalId": "interview-audio-q4-2024",
  "modality": "audio",
  "description": "Raw interview recordings for speaker verification",
  "organizationId": "org_xyz789",
  "createdAt": "2024-11-15T10:00:00Z"
}

A raw version is created automatically alongside the dataset. Retrieve it via GET /v2/datasets/{datasetId} (returns the dataset with a versions array).


Upload Files

POST /v2/datasets/{datasetId}/files

Adds files to the dataset's raw version. Submit a multipart/form-data request with one or more files under the key file[].

curl -X POST https://api.crowdee.ai/v2/datasets/ds_abc123/files \
  -H "X-API-Key: crw_YOUR_API_KEY" \
  -F "file[]=@recording1.mp3" \
  -F "file[]=@recording2.wav"

Returns an array of created file objects. Enrichment is not started automatically — call the enrich endpoint separately when ready.

Files are stored in S3 at datasets/{organizationId}/{internalId}/raw/. The internalId you set at creation time is permanent and becomes part of every file path in this dataset.


List Versions

GET /v2/datasets/{datasetId}/versions

Returns all versions in creation order. Use the state field to determine which versions are ready for further processing.

curl https://api.crowdee.ai/v2/datasets/ds_abc123/versions \
  -H "X-API-Key: crw_YOUR_API_KEY"

Response:

[
  {
    "id": "ver_raw001",
    "state": "raw",
    "label": null,
    "parentVersionId": null,
    "cleaningPipelineSlug": null,
    "fileCount": 12,
    "error": null,
    "createdAt": "2024-11-15T10:00:00Z"
  },
  {
    "id": "ver_clean001",
    "state": "cleaned",
    "label": "Silence trimmed",
    "parentVersionId": "ver_raw001",
    "cleaningPipelineSlug": "clean-audio-silence",
    "fileCount": 12,
    "error": null,
    "createdAt": "2024-11-15T10:05:00Z"
  }
]

Get Version with Files

GET /v2/datasets/{datasetId}/versions/{versionId}

Query parameters

ParameterTypeDefaultMaxDescription
pageinteger1Page number (1-based)
limitinteger50200Files per page
curl "https://api.crowdee.ai/v2/datasets/ds_abc123/versions/ver_clean001?page=1&limit=50" \
  -H "X-API-Key: crw_YOUR_API_KEY"

Response:

{
  "id": "ver_clean001",
  "state": "cleaned",
  "label": "Silence trimmed",
  "fileCount": 12,
  "files": [
    {
      "id": "dvf_001",
      "fileId": "file_cleaned_001",
      "sourceFileId": "file_raw_001",
      "file": {
        "id": "file_cleaned_001",
        "name": "recording1_cleaned.mp3",
        "size": 1843200,
        "type": "audio/mpeg",
        "createdAt": "2024-11-15T10:05:30Z"
      }
    },
    {
      "id": "dvf_002",
      "fileId": "file_raw_002",
      "sourceFileId": null,
      "file": {
        "id": "file_raw_002",
        "name": "recording2.wav",
        "size": 4096000,
        "type": "audio/wav",
        "createdAt": "2024-11-15T10:01:00Z"
      }
    }
  ],
  "total": 12,
  "page": 1,
  "limit": 50
}

sourceFileId is non-null only for files that were modified by a cleaning pipeline — it points back to the original raw file. Files that passed through the cleaning pipeline unchanged have sourceFileId: null.


Clean a Version

POST /v2/datasets/{datasetId}/versions/{versionId}/clean

Starts a cleaning pipeline job on the given version. The source version must be in raw or cleaned state. A new version is created with state cleaning; it transitions to cleaned on success or failed on error.

Request body

FieldTypeRequiredDescription
pipelineSlugstringYesCleaning pipeline to apply (e.g. clean-audio-silence)
labelstringNoHuman-readable label for the new version
curl -X POST https://api.crowdee.ai/v2/datasets/ds_abc123/versions/ver_raw001/clean \
  -H "X-API-Key: crw_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pipelineSlug": "clean-audio-silence",
    "label": "Silence trimmed Nov 2024"
  }'

Response (200) — the new derived version (state cleaning):

{
  "id": "ver_clean001",
  "state": "cleaning",
  "label": "Silence trimmed Nov 2024",
  "parentVersionId": "ver_raw001",
  "cleaningPipelineSlug": "clean-audio-silence",
  "fileCount": 0,
  "error": null,
  "createdAt": "2024-11-15T10:05:00Z"
}

Poll GET /v2/datasets/{datasetId}/versions/{versionId} until state becomes cleaned or failed.

Only one cleaning job can run at a time per dataset. If another version is already in cleaning state, the request returns 400.


Enrich a Version

POST /v2/datasets/{datasetId}/versions/{versionId}/enrich

Queues a per-file enrichment job for every file in the given version. The version must be in raw or cleaned state. A new derived version with state enriching is created and transitions to cleaned_and_enriched once all files have been processed.

curl -X POST https://api.crowdee.ai/v2/datasets/ds_abc123/versions/ver_clean001/enrich \
  -H "X-API-Key: crw_YOUR_API_KEY"

Response (200): the newly created version object in enriching state.

Enrichment uses the same per-MIME-type workers as project files (enrich-audio, enrich-video, enrich-image, enrich-text). Poll the new version until its state is cleaned_and_enriched or failed.


Export a Version

GET /v2/datasets/{datasetId}/versions/{versionId}/export

Returns presigned S3 download URLs (24-hour expiry) for every file in the version.

curl https://api.crowdee.ai/v2/datasets/ds_abc123/versions/ver_clean001/export \
  -H "X-API-Key: crw_YOUR_API_KEY"

Response:

{
  "files": [
    {
      "fileId": "file_cleaned_001",
      "name": "recording1_cleaned.mp3",
      "url": "https://s3.example.com/datasets/.../recording1_cleaned.mp3?X-Amz-Expires=86400&..."
    },
    {
      "fileId": "file_raw_002",
      "name": "recording2.wav",
      "url": "https://s3.example.com/datasets/.../recording2.wav?X-Amz-Expires=86400&..."
    }
  ],
  "expiresInSeconds": 86400
}

Cleaning Pipeline Catalog

GET /v2/datasets/catalog/cleaning-pipelines

Lists all available cleaning pipelines with their supported modalities.

curl https://api.crowdee.ai/v2/datasets/catalog/cleaning-pipelines \
  -H "X-API-Key: crw_YOUR_API_KEY"

Response:

[
  {
    "slug": "clean-audio-silence",
    "name": "Silence Trimmer",
    "description": "Removes leading and trailing silence from audio files",
    "supportedModalities": ["audio"]
  }
]

Use the supportedModalities array to filter cleaning options based on your dataset's modality before presenting them to users.

How is this guide?

© 2026 Crowdee GmbH. All rights reserved.

On this page