> 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 update FeatureLibrary

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

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

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

## 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 UpdateFeatureLibraryInputWithPathParams, required)

## Response

### 200

OK

- `items` (list of FeatureLibrary, required)

## Errors

### 400 Feature Library Batch Update 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 Update 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 Update 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 Update 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 Update 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 Update 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

### UpdateFeatureLibraryInputWithPathParams

- `id` (string, required)
- `description` (string, optional, nullable) — Description of the Feature Library
- `name` (string, optional) — Library names must be non-empty after trimming whitespace, at most 128 characters, and unique within the owner (case-insensitive).

### 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": [
    {
      "id": "featlib_cWYhFmxq",
      "description": "Updated promoter motifs for auto-annotation.",
      "name": "Common promoters (v2)"
    }
  ]
}
```

**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-update"

payload = { "items": [
        {
            "id": "featlib_cWYhFmxq",
            "description": "Updated promoter motifs for auto-annotation.",
            "name": "Common promoters (v2)"
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript
const url = 'https://{tenant_name}.benchling.com/api/v3/feature-library:batch-update';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"items":[{"id":"featlib_cWYhFmxq","description":"Updated promoter motifs for auto-annotation.","name":"Common promoters (v2)"}]}'
};

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