---
title: "Create experiment"
method: POST
path: "/v1/experiment"
tags: ["Experiments"]
---

# Create experiment

`POST /v1/experiment`

Create a new experiment. If there is an existing experiment in the project with the same name as the one specified in the request, will return the existing experiment unmodified

## Request body

- CreateExperiment
  - `project_id` string, uuid, required — Unique identifier for the project that the experiment belongs under
  - `name` string, nullable — Name of the experiment. Within a project, experiment names are unique
  - `description` string, nullable — Textual description of the experiment
  - `repo_info` RepoInfo, nullable — Metadata about the state of the repo when the experiment was created
    - `commit` string, nullable — SHA of most recent commit
    - `branch` string, nullable — Name of the branch the most recent commit belongs to
    - `tag` string, nullable — Name of the tag on the most recent commit
    - `dirty` boolean, nullable — Whether or not the repo had uncommitted changes when snapshotted
    - `author_name` string, nullable — Name of the author of the most recent commit
    - `author_email` string, nullable — Email of the author of the most recent commit
    - `commit_message` string, nullable — Most recent commit message
    - `commit_time` string, nullable — Time of the most recent commit
    - `git_diff` string, nullable — If the repo was dirty when run, this includes the diff between the current state of the repo and the most recent commit.
  - `base_exp_id` string, uuid, nullable — Id of default base experiment to compare against when viewing this experiment
  - `dataset_id` string, uuid, nullable — Identifier of the linked dataset, or null if the experiment is not linked to a dataset
  - `dataset_version` string, nullable — Version number of the linked dataset the experiment was run against. This can be used to reproduce the experiment after the dataset has been modified.
  - `public` boolean, nullable — Whether or not the experiment is public. Public experiments can be viewed by anybody inside or outside the organization
  - `metadata` object, nullable — User-controlled metadata about the experiment
  - `ensure_new` boolean, nullable — Normally, creating an experiment with the same name as an existing experiment will return the existing one un-modified. But if `ensure_new` is true, registration will generate a new experiment with a unique name in case of a conflict.

## Response `200`

Returns the new experiment object

- Experiment
  - `id` string, uuid, required — Unique identifier for the experiment
  - `project_id` string, uuid, required — Unique identifier for the project that the experiment belongs under
  - `name` string, required — Name of the experiment. Within a project, experiment names are unique
  - `description` string, nullable — Textual description of the experiment
  - `created` string, date-time, nullable — Date of experiment creation
  - `repo_info` RepoInfo, nullable — Metadata about the state of the repo when the experiment was created
    - `commit` string, nullable — SHA of most recent commit
    - `branch` string, nullable — Name of the branch the most recent commit belongs to
    - `tag` string, nullable — Name of the tag on the most recent commit
    - `dirty` boolean, nullable — Whether or not the repo had uncommitted changes when snapshotted
    - `author_name` string, nullable — Name of the author of the most recent commit
    - `author_email` string, nullable — Email of the author of the most recent commit
    - `commit_message` string, nullable — Most recent commit message
    - `commit_time` string, nullable — Time of the most recent commit
    - `git_diff` string, nullable — If the repo was dirty when run, this includes the diff between the current state of the repo and the most recent commit.
  - `commit` string, nullable — Commit, taken directly from `repo_info.commit`
  - `base_exp_id` string, uuid, nullable — Id of default base experiment to compare against when viewing this experiment
  - `deleted_at` string, date-time, nullable — Date of experiment deletion, or null if the experiment is still active
  - `dataset_id` string, uuid, nullable — Identifier of the linked dataset, or null if the experiment is not linked to a dataset
  - `dataset_version` string, nullable — Version number of the linked dataset the experiment was run against. This can be used to reproduce the experiment after the dataset has been modified.
  - `public` boolean, required — Whether or not the experiment is public. Public experiments can be viewed by anybody inside or outside the organization
  - `user_id` string, uuid, nullable — Identifies the user who created the experiment
  - `metadata` object, nullable — User-controlled metadata about the experiment

## Other responses

- `400` — The request was unacceptable, often due to missing a required parameter
- `401` — No valid API key provided
- `403` — The API key doesn’t have permissions to perform the request
- `429` — Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
- `500` — Something went wrong on Braintrust's end. (These are rare.)

---

[API](https://skmtc.net/braintrustdata/apis/braintrust-api.md) · [All operations](https://skmtc.net/braintrustdata/apis/braintrust-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/braintrustdata/braintrust-api/revisions/9d216c8243fe/schema)
