---
title: "Update Dataset Metadata"
method: PUT
path: "/felix/datasets/{name}/{version}"
tags: ["felix", "datasets"]
---

# Update Dataset Metadata

`PUT /felix/datasets/{name}/{version}`

Update dataset metadata without creating a new version.

Name changes propagate to all versions.

Args:
    name: Dataset name.
    version: Version number to update (use "latest" for most recent).

## Path parameters

- `name` string, required
- `version` string, required

## Request body

- DatasetMetadataUpdate — Request model for the legacy ``PUT /felix/datasets/{name}/{version}`` endpoint. Convention divergence: this legacy endpoint accepts ``project_id=""`` (empty string) to mean "unassign". The newer canonical endpoint ``PATCH /felix/datasets/{dataset_id}`` (see :class:`DatasetUpdate`) uses ``project_id=null`` for the same intent. Both schemas coexist because ``frontend/src/app/utils/assign-project-handler.ts`` still drives the legacy PUT path with ``projectId || ''``. New callers should prefer the PATCH endpoint and the ``null`` convention.
  - `dataset_name` string, nullable — New name for the dataset
  - `dataset_type` 'ner' | 'classification' | 'custom' | 'decoder', nullable — New type for the dataset
  - `project_id` string, nullable — Project ID to assign this dataset to (use empty string to unassign).

## Response `200`

Successful Response

- DatasetResponse — Response model for a single dataset.
  - `id` string, required
  - `user_id` string, required
  - `dataset_name` string, required
  - `dataset_path` string, required
  - `dataset_type` string, required
  - `size` integer, nullable
  - `sample_size` integer, nullable
  - `train_ratio` number, nullable — Train split ratio for this dataset version. Left-to-right split with no shuffle; validation is the tail.
  - `created_at` string, required
  - `updated_at` string, required
  - `version_number` string
  - `root_dataset_id` string, nullable
  - `project_id` string, nullable
  - `schema` object, nullable
  - `schema_warnings` string[], nullable
  - `validation` object, nullable
  - `annotation_status` 'none' | 'in_progress' | 'completed', nullable
  - `annotation_config` object, nullable
  - `annotation_progress` object, nullable
  - `status` 'initialized' | 'uploading' | 'converting' | 'validating' | 'ready' | 'failed' | 'generating' | 'queued', nullable — Dataset status: initialized/uploading/converting/validating/ready/failed/generating/queued
  - `processing_error` string, nullable — Error message if status is failed
  - `type` string — Dataset purpose tag: 'training', 'evaluation', or 'benchmark'
  - `visibility` string — Dataset visibility: 'private' or 'public'
  - `is_competition` boolean — Whether this dataset is a competition benchmark
  - `labels` string[], nullable — Label names (entity types for NER, class labels for classification)
  - `generation_type` string, nullable — How the dataset was created: synthesize, upload, auto_relabel, manual_relabel, grow, external
  - `is_seed` boolean, nullable — Whether this dataset is a seed dataset (small set for review before full expansion)
  - `synthesis_session_id` string, nullable — UUID of the synthesis log session for this dataset, used to restore creation workflow on resume
  - `column_mapping` object, nullable — Column mapping from original to standard names

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/pioneer/apis/brain-api.md) · [All operations](https://skmtc.net/pioneer/apis/brain-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/pioneer/brain-api/versions/31dfe831e079/schema)
