> This page is for Developer Documentation.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.benchling.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.benchling.com/_mcp/server.

# Create 1 or more runs.

POST https://{tenant_name}.benchling.com/api/v2/assay-runs
Content-Type: application/json

Create 1 or more runs.

Reference: https://docs.benchling.com/docs/api/v2/benchling-api/assay-runs/create-assay-runs

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects an AssayRunsBulkCreateRequest.

- `assayRuns` (list of AssayRunCreate, required)

## Response

### 200

OK

- `assayRuns` (list of string, optional)
- `errors` (AssayRunsBulkCreateResponseErrors, optional, nullable)

## Errors

### 400 Bad Request Error

Bad Request

- `assayRuns` (list of AssayRunsBulkCreateErrorResponseAssayRunsItems, optional, nullable)
- `errors` (list of AssayRunsBulkCreateErrorResponseErrorsItems, optional)

## Types

### AssayRunCreate

- `fields` (AssayRunCreateFields, required) — Object of assay run fields
- `schemaId` (string, required) — ID of assay schema that assay run conforms to
- `id` (string, optional) — ID of assay run
- `projectId` (string, optional) — The project that the assay run should be uploaded to. Only users with read access to the project will be able to read the assay run. Leaving this empty will result in only the creator having read access.
- `validationComment` (string, optional) — Additional information about the validation status
- `validationStatus` (enum, optional) — Must be either VALID or INVALID
  - Allowed values: `VALID`, `INVALID`

### AssayRunsBulkCreateResponseErrors

### AssayRunsBulkCreateErrorResponseAssayRunsItems

### AssayRunsBulkCreateErrorResponseErrorsItems

- `fields` (AssayRunsBulkCreateErrorResponseErrorsItemsFields, optional)
- `global` (list of string, optional)

### AssayRunCreateFields

Object of assay run fields

### AssayRunsBulkCreateErrorResponseErrorsItemsFields

## Examples

**Request**

```json
{
  "assayRuns": [
    {
      "fields": {},
      "schemaId": "string"
    }
  ]
}
```

**Response**

```json
{
  "assayRuns": [
    "string"
  ],
  "errors": {}
}
```

**SDK Code**

```python
import requests

url = "https://{tenant_name}.benchling.com/api/v2/assay-runs"

payload = { "assayRuns": [
        {
            "fields": {},
            "schemaId": "string"
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://{tenant_name}.benchling.com/api/v2/assay-runs';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"assayRuns":[{"fields":{},"schemaId":"string"}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```