invent

Generate a dataset from scratch

Changed on

Creates a dataset and starts generating it. Describe the data either by taxonomy — domains and/or subdomains — or in your own words with dataset_prompt: when neither taxonomy field is given, the domains and subdomains are inferred from the prompt. Explicit taxonomy is authoritative and disables that inference. If the prompt cannot be mapped onto the catalog (or inference is unavailable), the request is rejected with 400 asking for explicit domains/subdomains — it is never widened to every domain. Returns immediately — poll GET /datasets/{id} for the status and GET /datasets/{id}/download once it reports succeeded. Set estimate: true to price a request without generating anything.

post/api/v1/datasets/invent

Request

Request body

namestring

Display name for the invented dataset.

training_type'instruction_dataset' | 'preference_pairs'

Shape of the generated data — the same field and values as datasets.adapt. instruction_dataset produces prompt/completion rows; preference_pairs produces ranked completion pairs. Note this is the shape of the DATA, not the training method (elsewhere training_type means LoRA vs full fine-tuning). Defaults to instruction_dataset. The download carries the generated text in enhanced_prompt / enhanced_completion; original_* are null, since invented data has no source rows it was derived from.

domainsstring[]

Domain codes to generate from, e.g. medical. Optional: omit it and the domains come from the parents of your subdomains, or — when subdomains is omitted too — are inferred from dataset_prompt. When you do supply it, it is authoritative: inference is skipped, and a subdomain naming a domain that is not listed here is rejected rather than silently added. Retrieve the valid codes from GET /datasets/invent/domains.

subdomainsstring[]

Narrow generation to specific subdomains, as domain.subdomain codes e.g. medical.symptoms_diagnosis. Qualified by their domain because a bare code can belong to more than one (wildlife sits under both agriculture and animal nature). Requested domains with no subdomain listed here are generated across all of theirs. Optional: with neither this nor domains, the taxonomy is inferred from dataset_prompt. Supplying it disables that inference. Retrieve the valid codes from GET /datasets/invent/domains.

rowsinteger required

Number of rows to generate, subject to your plan’s per-launch row cap. Treat it as a target: the delivered count can land slightly either side of it, so read row_count on the finished dataset for what was actually produced.

dataset_promptstring

Free-text description of the data you want, in your own words — the wizard shows this as "Dataset Details". Drives the semantic search that selects rows, so a specific prompt yields more relevant data, and it is woven into the generation instructions. Written for you from your domain selections when omitted. When domains and subdomains are both omitted this is required, and the domains and subdomains are inferred from it; if none can be inferred the request is rejected with 400 asking for explicit domains/subdomains rather than generating across every domain.

promptstring

Deprecated alias for dataset_prompt, kept for existing clients. Use dataset_prompt in new code. prompt will be removed in a future release.

estimateboolean

Price the request without creating or charging anything. Mirrors datasets.adapt — the response carries the same fields either way, with the dataset fields null when this is set.

idempotency_keystring

Client-supplied key making retries safe. Repeating a request with the same key returns the original dataset instead of generating again.

Example request

{
  "name": "Medical Q&A dataset",
  "domains": [
    "medical",
    "personal_finance"
  ],
  "subdomains": [
    "medical.symptoms_diagnosis",
    "medical.preventive_care"
  ],
  "rows": 1000,
  "translate": {
    "languages": [
      "es",
      "fr"
    ],
    "sample_rate": 0.25
  },
  "localize": {
    "pairs": [
      {
        "country": "ES",
        "language": "ca"
      }
    ],
    "sample_rate": 0.25
  },
  "language_expansion": {
    "type": "translate",
    "languages": [
      "es",
      "fr"
    ],
    "pairs": [
      {
        "country": "ES",
        "language": "ca"
      }
    ],
    "sample_rate": 0.25
  },
  "dataset_prompt": "Patient-facing answers to cardiology questions, plain language, no jargon"
}

Response

Generation has started, or — with estimate: true — the price of running it.

estimateboolean required

True when this response priced the request without running it.

idstring nullable required

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

namestring required

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

training_type'instruction_dataset' | 'preference_pairs' required

Shape of the generated data, echoed from the request.

domainsstring[] required

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

subdomainsstring[] required

Subdomain codes the generation is narrowed to, if any.

rowsinteger nullable required

Number of rows requested.

status'pending' | 'running' | 'awaiting_input' | 'succeeded' | 'failed' nullable required

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

created_atstring date-time nullable required

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

estimated_creditsnumber required

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_creditsnumber required

Credits currently available to your team.

Example response

{
  "id": "3f1b9c62-6f3e-4a1e-9a5c-0b7d2f8e4a10",
  "name": "Clinical Q&A",
  "training_type": "instruction_dataset",
  "domains": [
    "medical"
  ],
  "subdomains": [
    "medical.symptoms_diagnosis"
  ],
  "rows": 1000,
  "status": "running",
  "created_at": "2026-08-03T16:12:04.000Z",
  "estimated_credits": 800,
  "available_credits": 5000
}

Changes

    • info

      added the new optional request property ////

    • info

      added the new optional request property ////

    • info

      request property //// deprecated

    • info

      added the new optional request property ////

    • info

      added subschema #3 subschema #4 to the request body anyOf list

    • info

      request property //// deprecated