Skip to content
SupportLogin

Datasets

Create a dataset from file upload, HuggingFace, Kaggle, or Google Sheets
datasets.create(DatasetCreateParams**kwargs) -> DatasetCreateResponse
POST/api/v1/datasets
Get a dataset by ID
datasets.get(strdataset_id) -> Dataset
GET/api/v1/datasets/{dataset_id}
List datasets
datasets.list(DatasetListParams**kwargs) -> SyncCursor[DatasetListResponse]
GET/api/v1/datasets
Get the processing status of a dataset
datasets.get_status(strdataset_id) -> DatasetGetStatusResponse
GET/api/v1/datasets/{dataset_id}/status
Download the processed dataset
datasets.download(strdataset_id, DatasetDownloadParams**kwargs) -> BinaryResponseContent
GET/api/v1/datasets/{dataset_id}/download
Publish a dataset to an external platform
datasets.publish(strdataset_id, DatasetPublishParams**kwargs) -> DatasetPublishResponse
POST/api/v1/datasets/{dataset_id}/publish
Start an adaptation run (or estimate cost)
datasets.run(strdataset_id, DatasetRunParams**kwargs) -> DatasetRunResponse
POST/api/v1/datasets/{dataset_id}/run
Add rows to a dataset from the curated pool
datasets.augment(strdataset_id, DatasetAugmentParams**kwargs) -> DatasetAugmentResponse
POST/api/v1/datasets/{dataset_id}/augment
Add translated rows to a dataset
datasets.translate(strdataset_id, DatasetTranslateParams**kwargs) -> DatasetTranslateResponse
POST/api/v1/datasets/{dataset_id}/translate
Add localized rows to a dataset
datasets.localize(strdataset_id, DatasetLocalizeParams**kwargs) -> DatasetLocalizeResponse
POST/api/v1/datasets/{dataset_id}/localize
Get evaluation results for a dataset
datasets.get_evaluation(strdataset_id) -> DatasetGetEvaluationResponse
GET/api/v1/datasets/{dataset_id}/evaluation
Generate a dataset from scratch
datasets.invent(DatasetInventParams**kwargs) -> DatasetInventResponse
POST/api/v1/datasets/invent
List the domains and subdomains available for generation
datasets.invent_domains() -> DatasetInventDomainsResponse
GET/api/v1/datasets/invent/domains
Delete a dataset
datasets.delete(strdataset_id) -> DatasetDeleteResponse
DELETE/api/v1/datasets/{dataset_id}
Poll saved URLs for successful dataset exports (Hugging Face, Kaggle, Google Sheets)
datasets.get_export_links(strdataset_id) -> DatasetGetExportLinksResponse
GET/api/v1/datasets/{dataset_id}/export-links
Best fine-tune launch config for re-launch parity
datasets.get_best_launch_config(strdataset_id) -> DatasetGetBestLaunchConfigResponse
GET/api/v1/datasets/{dataset_id}/finetune/best-launch-config
ModelsExpand Collapse
class Dataset:
dataset_id: str

Unique dataset identifier

kind: Optional[Literal["uploaded", "combined", "invented", 3 more]]

How this dataset came about. uploaded was supplied by you, combined merges several datasets, invented was generated from a prompt, augmented adds rows retrieved from the curated pool to another dataset, and translated / localized add translated copies of another dataset’s rows.

One of the following:
"uploaded"
"combined"
"invented"
"augmented"
"translated"
"localized"
source_dataset_id: Optional[str]

The dataset this one was derived from. Set when kind is augmented, translated or localized. Null for uploaded and invented, and for combined, which has several sources rather than one.

name: Optional[str]

Human-readable name for the dataset

status: Literal["pending", "running", "succeeded", "failed"]

Lifecycle status: pending, running, succeeded, or failed

One of the following:
"pending"
"running"
"succeeded"
"failed"
created_at: datetime

Timestamp when the dataset was created

formatdate-time
created_by_user_id: Optional[str]

User who created the dataset

formatuuid
updated_at: datetime

Timestamp of the last update

formatdate-time
row_count: Optional[int]

Total number of rows in the dataset

configured_column_mapping: Optional[ConfiguredColumnMapping]

User-configured column mapping. Null if not yet configured.

prompt: Optional[str]
completion: Optional[str]
chat: Optional[str]
context: List[str]
image: Optional[str]
evaluation_summary: Optional[EvaluationSummary]

Compact evaluation summary. Null if evaluation has not completed.

grade_before: Optional[str]

Letter grade (A-E) before adaptation

grade_after: Optional[str]

Letter grade (A-E) after adaptation

score_before: Optional[float]

Quality score before adaptation

score_after: Optional[float]

Quality score after adaptation

improvement_percent: Optional[float]

Relative improvement percentage

run_id: Optional[str]

ID of the currently active run

progress: Optional[Progress]

Processing progress. Null when no run is active.

percent: Optional[int]

Progress percentage (0-100)

processed_rows: Optional[int]

Number of rows processed so far

total_rows: Optional[int]

Total rows to process (samples_to_process or row_count)

error_data: Optional[ErrorData]

Error details if the dataset failed. Null otherwise.

message: Optional[str]

Error message

code: Optional[str]

Stable error code when the failure was structured (e.g. E0100)

level: Optional[Literal["error", "warning"]]

Severity when known

One of the following:
"error"
"warning"
image_column_formats: Optional[Dict[str, Literal["embedded_bytes", "url", "file_reference"]]]

Per-column export encoding for detected image columns (column name → format). Use with GET /datasets/{dataset_id}/download: look up the active image column (mapped image column that is also in configured_column_mapping.context) to determine how each row’s original_image is encoded. Null or empty when no image columns were detected.

One of the following:
"embedded_bytes"
"url"
"file_reference"
class DatasetCreateResponse:
dataset_id: str

ID of the newly created dataset

status: str

Current dataset status

upload_instructions: Optional[UploadInstructions]

Upload instructions for file sources. PUT your file to the provided URL.

url: str

Pre-signed URL for uploading the file

method: str

HTTP method to use

s3_key: str

S3 object key — pass this back in the complete request if needed for verification

class DatasetListResponse:
dataset_id: str

Dataset ID

name: Optional[str]

Dataset name

status: Literal["pending", "running", "awaiting_input", 2 more]

Dataset status

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
updated_at: datetime

Last updated timestamp

formatdate-time
created_at: datetime

Timestamp when the dataset was created

formatdate-time
row_count: Optional[int]

Total number of rows

description: Optional[str]

Auto-generated description of the dataset contents

class DatasetGetStatusResponse:
dataset_id: str

Dataset ID

status: Literal["pending", "running", "awaiting_input", 2 more]

Current processing status. awaiting_input means the dataset is uploaded but waiting for you to start adaptation via datasets.run(column_mapping=…) — it will not progress on its own.

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
row_count: Optional[int]

Number of rows in the dataset

progress: Optional[Progress]

Processing progress. Null when no run is active.

percent: Optional[int]

Progress percentage (0-100)

processed_rows: Optional[int]

Number of rows processed so far

total_rows: Optional[int]

Total rows to process (samples_to_process or row_count)

error_data: Optional[ErrorData]

Error details if the dataset failed. Null otherwise.

message: Optional[str]

Error message

code: Optional[str]

Stable error code when the failure was structured (e.g. E0100)

level: Optional[Literal["error", "warning"]]

Severity when known

One of the following:
"error"
"warning"
class DatasetPublishResponse:
publish_id: str

Unique identifier for the publish job

status: str

Status of the publish job

message: Optional[str]

Additional information about the publish request

class DatasetRunResponse:
run_id: Optional[str]

Unique identifier for this pipeline run. Null for estimate-only requests.

estimated_minutes: float

Estimated processing time in minutes

estimated_credits_consumed: float

Estimated number of credits that will be consumed by this run

estimate: bool

Whether this was an estimate-only request (no run started)

multimodal_pricing_applied: bool

True when an image column is mapped and also listed in context_columns; each output row is billed at a higher rate.

credit_multiplier: Optional[float]

10 credits per 100 output rows when multimodalPricingApplied is true. Omitted for text-only pricing.

class DatasetAugmentResponse:
dataset_id: Optional[str]

The augmented dataset. It carries this dataset’s rows plus the retrieved ones, and is ready to download once its status reaches succeeded. Null for an estimate, which creates nothing.

status: Optional[Literal["pending", "running", "awaiting_input", 2 more]]

Status of the augmented dataset at the moment this response was sent, in the same vocabulary GET /datasets/{dataset_id}/status reports. Poll that endpoint until it reaches succeeded or failed. An idempotent replay of a finished run returns its terminal status here.

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
estimated_credits_consumed: float

Credits this run consumes, charged against the requested rows.

estimate: bool

Whether this was an estimate-only request (no run started).

class DatasetTranslateResponse:
dataset_id: Optional[str]

The expanded dataset. It carries this dataset’s rows plus the new ones, and is ready to download once its status reaches succeeded. Null for an estimate, which creates nothing.

status: Optional[Literal["pending", "running", "awaiting_input", 2 more]]

Status of the expanded dataset at the moment this response was sent, in the same vocabulary GET /datasets/{dataset_id}/status reports. Poll that endpoint until it reaches succeeded or failed. An idempotent replay of a finished run returns its terminal status here.

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
estimated_credits_consumed: float

Credits this run consumes, charged against the rows it adds. Zero on an idempotent replay: the earlier run reserved the credits, and this call charges nothing.

estimate: bool

Whether this was an estimate-only request (no run started).

estimated_new_rows: float

Rows this run adds, which is what the credit cost is charged against. Zero on an idempotent replay, which adds none.

class DatasetLocalizeResponse:
dataset_id: Optional[str]

The expanded dataset. It carries this dataset’s rows plus the new ones, and is ready to download once its status reaches succeeded. Null for an estimate, which creates nothing.

status: Optional[Literal["pending", "running", "awaiting_input", 2 more]]

Status of the expanded dataset at the moment this response was sent, in the same vocabulary GET /datasets/{dataset_id}/status reports. Poll that endpoint until it reaches succeeded or failed. An idempotent replay of a finished run returns its terminal status here.

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
estimated_credits_consumed: float

Credits this run consumes, charged against the rows it adds. Zero on an idempotent replay: the earlier run reserved the credits, and this call charges nothing.

estimate: bool

Whether this was an estimate-only request (no run started).

estimated_new_rows: float

Rows this run adds, which is what the credit cost is charged against. Zero on an idempotent replay, which adds none.

class DatasetGetEvaluationResponse:
dataset_id: str

Dataset ID

status: Optional[str]

Evaluation pipeline status: pending | running | succeeded | failed | skipped

quality: Optional[Quality]

Structured quality metrics. Null until evaluation completes.

grade_before: Optional[str]

Letter grade (A-E) before adaptation

grade_after: Optional[str]

Letter grade (A-E) after adaptation

score_before: Optional[float]

Quality score (0-10) before adaptation

score_after: Optional[float]

Quality score (0-10) after adaptation

percentile_after: Optional[float]

Percentile rank (0-100) after adaptation

improvement_percent: Optional[float]

Relative quality improvement as a percentage

raw_results: Optional[Dict[str, object]]

Raw evaluation results payload for advanced use. Null until evaluation completes.

class DatasetInventResponse:
estimate: bool

True when this response priced the request without running it.

id: Optional[str]

Dataset id, or null on an estimate. Pass it straight to finetune_jobs.create or autoscientist.create once the status is succeeded.

name: str

Display name, echoed from the request or the default applied for you.

training_type: Literal["instruction_dataset", "preference_pairs"]

Shape of the generated data, echoed from the request.

One of the following:
"instruction_dataset"
"preference_pairs"
domains: List[str]

Domain codes the generation covers, echoed from the request — including any inferred from subdomains.

subdomains: List[str]

Subdomain codes the generation is narrowed to, if any.

rows: Optional[int]

Number of rows requested.

status: Optional[Literal["pending", "running", "awaiting_input", 2 more]]

Lifecycle status, or null on an estimate. A fresh generation is always running; poll GET /datasets/{dataset_id} until it reports succeeded or failed.

One of the following:
"pending"
"running"
"awaiting_input"
"succeeded"
"failed"
created_at: Optional[datetime]

When the dataset was created, or null on an estimate.

formatdate-time
estimated_credits: float

Credits this generation consumes. Billed on the post-expansion row count, so a translated request quotes above its rows. Invent pricing is still provisional, so treat the figure as indicative.

available_credits: float

Credits currently available to your team.

class DatasetInventDomainsResponse:
domains: List[Domain]
code: str

Code to send in domains.

title: str

Human-readable name.

subdomains: List[DomainSubdomain]

Subdomains available within this domain. Empty when the domain has no subdivision — send the domain code alone.

code: str

Qualified code to send in subdomains — copy it as-is rather than assembling it.

title: str

Human-readable name.

class DatasetDeleteResponse:
message: str
class DatasetGetBestLaunchConfigResponse:
best_job_config: Optional[BestJobConfig]

Launch-parity snapshot for the experiment best job (terminal experiment with best_finetune_job_id) or, when no experiment exists, the newest succeeded standalone job (training_experiment_id null). Null while an experiment is non-terminal, when no best job was chosen yet, or when no qualifying job exists.

finetune_job_id: str

Fine-tune job whose config is shown (experiment best or standalone).

formatuuid
training_experiment_id: Optional[object]

Training experiment when this snapshot is the AutoScientist best job; null for a standalone job.

formatuuid
original_model_name: Optional[str]

Base model id the job was launched with.

trained_model_name: Optional[str]

Output label / suffix for the trained model. Taken from the value recorded at launch when present; otherwise derived from the current dataset name, in which case it can differ from the label the job was submitted with if the dataset was renamed. Null only when no label was recorded and the dataset is unavailable.

training_method: Optional[Literal["sft", "dpo"]]
One of the following:
"sft"
"dpo"
training_type: Optional[Literal["lora", "full"]]
One of the following:
"lora"
"full"
data_format: Optional[Literal["chat", "instruction", "preference"]]
One of the following:
"chat"
"instruction"
"preference"
hyperparams: Optional[Dict[str, object]]

Hyperparameters the job was launched with.

DatasetsUpload

Initiate a dataset upload
datasets.upload.initiate(UploadInitiateParams**kwargs) -> UploadInitiateResponse
POST/api/v1/datasets/upload/initiate
Complete a dataset upload and trigger processing
datasets.upload.complete(UploadCompleteParams**kwargs) -> UploadCompleteResponse
POST/api/v1/datasets/upload/complete
Complete a file upload and trigger processing
datasets.upload.complete_by_id(strdataset_id, UploadCompleteByIDParams**kwargs) -> UploadCompleteByIDResponse
POST/api/v1/datasets/{dataset_id}/upload/complete
Initiate a batch upload
datasets.upload.initiate_batch(UploadInitiateBatchParams**kwargs) -> UploadInitiateBatchResponse
POST/api/v1/datasets/upload/initiate-batch
Complete a batch upload and trigger processing
datasets.upload.complete_batch(UploadCompleteBatchParams**kwargs) -> UploadCompleteBatchResponse
POST/api/v1/datasets/upload/complete-batch
ModelsExpand Collapse
class UploadInitiateResponse:
upload_url: str

Pre-signed S3 URL — upload the file directly to this URL via HTTP PUT

class UploadCompleteResponse:
dataset_id: str

ID of the newly created dataset

class UploadCompleteByIDResponse:
dataset_id: str

ID of the dataset

status: str

Current status of the dataset after completing upload

class UploadInitiateBatchResponse:
dataset_id: str

Dataset ID

uploads: List[Upload]
file_name: str

Original file name

upload_url: str

Presigned S3 upload URL

s3_key: str

S3 key for the uploaded file

class UploadCompleteBatchResponse:
dataset_id: str

Dataset ID

status: str

Current dataset status

DatasetsCombine

Combine multiple Datasets into a single new merged Dataset
datasets.combine.create(CombineCreateParams**kwargs) -> CombineCreateResponse
POST/api/v1/datasets/combine
Validate that a set of Datasets can be combined
datasets.combine.validate(CombineValidateParams**kwargs)
POST/api/v1/datasets/combine/validate
ModelsExpand Collapse
One of the following:
class CombineResponseDto:
dataset_id: str

The newly created merged Dataset’s ID. Returns existing ID on idempotent replay.

class CombineJobResponseDto:
combine_job_id: str

Background combine job ID. Poll the combine job status endpoint until it succeeds or fails.

status: Literal["queued", "running", "succeeded", "failed"]

Current background combine job status.

One of the following:
"queued"
"running"
"succeeded"
"failed"
dataset_id: Optional[object]

The merged Dataset ID. Null until the background combine succeeds.

error_message: Optional[object]

Customer-safe failure message when the background combine fails.

DatasetsCombineJobs

Get the status of a background dataset combine job
datasets.combine.jobs.get(strcombine_job_id) -> JobGetResponse
GET/api/v1/datasets/combine/jobs/{combine_job_id}
ModelsExpand Collapse
class JobGetResponse:
combine_job_id: str

Background combine job ID. Poll the combine job status endpoint until it succeeds or fails.

status: Literal["queued", "running", "succeeded", "failed"]

Current background combine job status.

One of the following:
"queued"
"running"
"succeeded"
"failed"
dataset_id: Optional[object]

The merged Dataset ID. Null until the background combine succeeds.

error_message: Optional[object]

Customer-safe failure message when the background combine fails.

DatasetsCustom Evals

Start a custom-rubric evaluation for an adapted dataset
datasets.custom_evals.create(strdataset_id, CustomEvalCreateParams**kwargs) -> CustomEval
POST/api/v1/datasets/{dataset_id}/custom-evals
List custom-rubric evaluations for a dataset, newest first
datasets.custom_evals.list(strdataset_id) -> CustomEvalListResponse
GET/api/v1/datasets/{dataset_id}/custom-evals
Get a single custom-rubric evaluation
datasets.custom_evals.get(strcustom_eval_id, CustomEvalGetParams**kwargs) -> CustomEval
GET/api/v1/datasets/{dataset_id}/custom-evals/{custom_eval_id}
Draft a judge rubric tailored to an adapted dataset
datasets.custom_evals.prepare(strdataset_id) -> CustomEvalPrepareResponse
POST/api/v1/datasets/{dataset_id}/custom-evals/prepare
ModelsExpand Collapse
class CustomEval:
custom_eval_id: str
dataset_id: str
status: str

pending | running | succeeded | failed

judge_prompt: str
name: Optional[str]
score_before: Optional[float]

Mean rubric score on the original pairs. Null until the eval succeeds.

score_after: Optional[float]

Mean rubric score on the adapted pairs. Null until the eval succeeds.

improvement_percent: Optional[float]

Percentage change from score_before to score_after. Null until the eval succeeds.

scored_rows: Optional[int]

Rows the judge scored. A rubric score is an average over this sample, not the whole dataset.

error_message: Optional[str]
created_at: datetime
formatdate-time
completed_at: Optional[datetime]
formatdate-time
class CustomEvalListResponse:
items: List[CustomEval]
custom_eval_id: str
dataset_id: str
status: str

pending | running | succeeded | failed

judge_prompt: str
name: Optional[str]
score_before: Optional[float]

Mean rubric score on the original pairs. Null until the eval succeeds.

score_after: Optional[float]

Mean rubric score on the adapted pairs. Null until the eval succeeds.

improvement_percent: Optional[float]

Percentage change from score_before to score_after. Null until the eval succeeds.

scored_rows: Optional[int]

Rows the judge scored. A rubric score is an average over this sample, not the whole dataset.

error_message: Optional[str]
created_at: datetime
formatdate-time
completed_at: Optional[datetime]
formatdate-time
class CustomEvalPrepareResponse:
judge_prompt: str

A ready-to-edit rubric, accepted as-is by judge_prompt on POST /datasets/{dataset_id}/custom-evals.

adapted: bool

False when the stock rubric came back untouched — the sampled values did not fill both halves of the before/after contrast, or the adaptation model was unreachable. The prompt is still valid, just not tailored to this dataset.

sampled_rows: int

How many of the dataset’s own examples the rubric was written against — half original, half adapted. Lower than the usual target on a thin dataset; a dataset too thin to write from at all is rejected with a 400.