> 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.

# Batch create FeatureLibrary

POST https://{tenant_name}.benchling.com/api/v3/feature-library:batch-create
Content-Type: application/json

Batch create FeatureLibrary synchronously in one transaction. Maximum 25 items per request.

Reference: https://docs.benchling.com/docs/api/benchling-api/feature-library/batchcreate

## 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 object.

- `items` (list of CreateFeatureLibraryInput, required)

## Response

### 201

Created

- `items` (list of FeatureLibrary, required)

## Errors

### 400 Feature Library Batch Create Request Bad Request Error

Bad Request

- `detail` (GeneralErrorDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `invalidId` (string, optional)

### 403 Feature Library Batch Create Request Forbidden Error

Forbidden

- `detail` (GeneralErrorDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `invalidId` (string, optional)

### 404 Feature Library Batch Create Request Not Found Error

Not Found

- `detail` (GeneralErrorDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `invalidId` (string, optional)

### 409 Feature Library Batch Create Request Conflict Error

Conflict

- `detail` (GeneralErrorDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `invalidId` (string, optional)

### 429 Feature Library Batch Create Request Too Many Requests Error

Too Many Requests

- `detail` (TooManyRequestsErrorBodyDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `invalidId` (string, optional)
- `violated-policies` (list of enum, optional) — The budget policies that rejected the request, in canonical order: `user`, `integration`, then `tenant`.
  - Allowed values: `user`, `integration`, `tenant`

### 500 Feature Library Batch Create Request Internal Server Error

Internal Server Error

- `detail` (InternalServerErrorBodyDetail, required, nullable)
- `instance` (string, required)
- `status` (integer, required)
- `title` (string, required, nullable)
- `type` (string, required)
- `errorId` (string, optional)

## Types

### CreateFeatureLibraryInput

- `name` (string, required) — Library names must be non-empty after trimming whitespace, at most 128 characters, and unique within the owner (case-insensitive).
- `ownerId` (string, required) — The API ID of the user or organization that owns the feature library.
- `description` (string, optional) — Description of the Feature Library

### FeatureLibrary

Represents a reusable collection of biological features for auto-annotating nucleotide and AA sequences. FeatureLibraries enable users to define common sequence motifs (such as genes, promoters, terminators, or protein domains) with associated patterns, then automatically detect and annotate those features across many sequences. Each library contains `FeatureLibraryItem`s that specify the pattern to match and the annotation details to apply. Libraries can be shared with collaborators through ownership and permission controls, making them useful for standardizing annotation practices across a team. When running auto-annotate on a sequence, users select which libraries to search against.

- `__typename` (string, optional)
- `createdAt` (string, optional) — DateTime the Feature Library was created
- `description` (string, optional, nullable) — Description of the Feature Library
- `features` (string, optional) — List of Feature Library Items in this library
- `id` (string, optional)
- `modifiedAt` (string, optional) — DateTime the Feature Library was last modified
- `name` (string, optional) — Name of the Feature Library
- `owner` (OwnerRef, optional)

### GeneralErrorDetail

### TooManyRequestsErrorBodyDetail

### InternalServerErrorBodyDetail

### OwnerRef

- `__typename` (string, optional)
- `id` (string, optional)

## Examples

**Request**

```json
{
  "items": [
    {
      "name": "Common promoters",
      "ownerId": "ent_o2thOLlq",
      "description": "Promoter motifs used for auto-annotation across plasmids."
    }
  ]
}
```

**Response**

```json
{
  "items": [
    {
      "__typename": "__typename",
      "createdAt": "createdAt",
      "description": "description",
      "features": "features",
      "id": "id",
      "modifiedAt": "modifiedAt",
      "name": "name"
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://{tenant_name}.benchling.com/api/v3/feature-library:batch-create"

payload = { "items": [
        {
            "name": "Common promoters",
            "ownerId": "ent_o2thOLlq",
            "description": "Promoter motifs used for auto-annotation across plasmids."
        }
    ] }
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/v3/feature-library:batch-create';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"items":[{"name":"Common promoters","ownerId":"ent_o2thOLlq","description":"Promoter motifs used for auto-annotation across plasmids."}]}'
};

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