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

# Put PlateRecords in inventory

POST https://{tenant_name}.benchling.com/api/v3/plate-record:bulk-put-in-inventory
Content-Type: application/json

Create a WellPlate object from each PlateRecord, populating wells from the plate record's label and content layers and any column mappings. Each item targets a plate schema (explicit or inherited from the plate record), an inventory location, and an optional project. The new plates are added to inventory and the original plate records are left unchanged.

The scratch file must be a JSONL file where each line is a JSON object with the following structure:

\{"request\_id": "unique-id-per-row", "input\_object": \{}}

The input\_object fields (all camelCase) are:

* plateRecordId (required): ID of the plate record to convert.
* plateSchemaId: ID of the plate schema for the new inventory plate. If omitted, resolved from the plate record's own plateSchemaId; fails if neither is set.
* name: Name for the new inventory plate. Defaults to the plate record's name.
* barcode: Barcode assignment. Either \{"barcodeMode": "USE\_NAME", "useNameAsBarcode": true} or \{"barcodeMode": "SPECIFY\_BARCODE", "barcode": "barcode-value"}.
* sourceId: API ID of the source entity to associate with the new plate.
* parentStorableId: API ID of the storage location to place the new plate into.
* columnMappings: List of \{layerName, columnName, schemaFieldName} objects mapping plate record layer columns onto container-schema fields.
* studyIds: List of study IDs to associate with the new plate.

Reference: https://docs.benchling.com/docs/api/benchling-api/plate-record/bulkputininventory

## 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 a BulkImport.

- `fileId` (string, required) — The API ID of the scratch file (`scrfile_XXXXXXXX`) containing the items to import. The referenced file must be a scratch file whose upload has completed successfully.

## Response

### 202

Task started

- `pollingUri` (string, optional)
- `taskId` (string, optional)

## Errors

### 400 Plate Record Bulk Put IN Inventory 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 Plate Record Bulk Put IN Inventory 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 Plate Record Bulk Put IN Inventory 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 Plate Record Bulk Put IN Inventory 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 Plate Record Bulk Put IN Inventory 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)

### 500 Plate Record Bulk Put IN Inventory 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

### GeneralErrorDetail

### TooManyRequestsErrorBodyDetail

### InternalServerErrorBodyDetail

## Examples

**Request**

```json
{
  "fileId": "scrfile_jdf8BV24kLmN"
}
```

**Response**

```json
{
  "pollingUri": "pollingUri",
  "taskId": "taskId"
}
```

**SDK Code**

```python
import requests

url = "https://{tenant_name}.benchling.com/api/v3/plate-record:bulk-put-in-inventory"

payload = { "fileId": "scrfile_jdf8BV24kLmN" }
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/plate-record:bulk-put-in-inventory';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"fileId":"scrfile_jdf8BV24kLmN"}'
};

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