---
title: "Get Upload Url"
method: POST
path: "/felix/datasets/upload/url"
tags: ["felix", "datasets"]
---

# Get Upload Url

`POST /felix/datasets/upload/url`

Creates a reserved dataset row and presigned upload URL.

## Request body

- DatasetUploadUrlRequest — Request to get presigned URL for dataset upload (bypasses API Gateway limits).
  - `dataset_name` string, required — Name for the dataset
  - `dataset_type` 'classification' | 'ner' | 'custom' | 'decoder' — Type of dataset
  - `format` 'jsonl' | 'csv' | 'tsv' | 'parquet' | 'json', nullable — File format (auto-detected from filename if not provided)
  - `filename` string, nullable — Original filename (used for format detection if format not provided)
  - `schema` string, nullable — Expected schema as JSON object (e.g., {"age": "Int64", "name": "Utf8"}). Enforces column types during parsing. Valid types: Int8, Int16, Int32, Int64, UInt8-64, Float32, Float64, Utf8, Boolean, Date, Datetime, Time, Duration, Categorical, Binary
  - `project_id` string, nullable — Optional project ID (UUID) to assign this dataset to
  - `type` 'training' | 'evaluation' | 'benchmark', nullable — Dataset purpose: 'training' (trainable), 'evaluation' (not trainable), 'benchmark' (system-managed, evaluation-only; cannot be trained on or directly accessed).
  - `visibility` string, nullable — Dataset visibility: 'private' (owner only) or 'public' (anyone can see)
  - `generation_type` 'synthesize' | 'upload' | 'auto_relabel' | 'manual_relabel' | 'grow' | 'external', nullable — How the dataset was created: synthesize, upload, auto_relabel, manual_relabel, grow, external
  - `split_ratio` object, nullable — Split ratio when type is 'split', e.g. {'training': 0.8, 'evaluation': 0.2}
  - `column_mapping` object, nullable — Column mapping from source to standard names (e.g., {"sentence": "text", "category": "label"}). Valid standard targets: text, label, labels, entities.

## Response `200`

Successful Response

- DatasetUploadUrlResponse — Response with presigned S3 URL for direct upload.
  - `presigned_url` string, required — S3 presigned URL for PUT upload
  - `dataset_id` string, required — Dataset ID for subsequent processing
  - `dataset_name` string, required — Dataset name (for polling status via GET /{name}/{version})
  - `version_number` string, required — Version number for this dataset
  - `expires_in` integer, required — URL expiration time in seconds
  - `upload_instructions` string — Instructions for completing the upload

## 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/revisions/b92f75fd3b61/schema)
