# Curate a dataset item from a generation

> Promotes a real, completed generation into a test case: its input messages become the item's `input`, and its own answer becomes `expected_output` unless you supply one. Use it to build an evaluation set out of production traffic rather than hand-authoring fixtures.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Curate a dataset item from a generation"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/api/v1/datasets/{dataset_id}/items/from-generation"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Promotes a real, completed generation into a test case: its input messages become the item's `input`, and its own answer becomes `expected_output` unless you supply one. Use it to build an evaluation set out of production traffic rather than hand-authoring fixtures.

The item is a **copy**, not a view. It keeps working after the source generation's content is purged, and `source_generation_id` goes null if that generation is deleted — a purge can never quietly stop a suite from being runnable.

Requires both `evaluations:CreateDataset` and `generations:GetGeneration`: the call copies content out of a generation, so a principal that may not read that generation may not curate it either.

Only a **completed** generation can be promoted (`409 GENERATION_NOT_COMPLETED`), and only while its content is still available: an agent or project running with `trace_content_mode: none` never stored the input, and a purged or expired generation no longer has it (`409 GENERATION_CONTENT_UNAVAILABLE`). Generations that predate input recording answer the same way.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./create-dataset-item-from-generation.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./create-dataset-item-from-generation.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./create-dataset-item-from-generation.StatusCodes.json")}
>
  
</StatusCodes>
