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

# List WellPlatePosition items

GET https://{tenant_name}.benchling.com/api/v3/well-plate-position/items

List WellPlatePosition items.

Reference: https://docs.benchling.com/docs/api/benchling-api/wellplateposition/list

## Authentication

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

## Request

### Query parameters

- `createdAt.gt` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created after the specified time. e.g. > 2017-04-30.
- `createdAt.gte` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created at or after the specified time. e.g. >= 2017-04-30.
- `createdAt.lt` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created before the specified time. e.g. \< 2017-04-30.
- `createdAt.lte` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those created at or before the specified time. e.g. \<= 2017-04-30.
- `id.anyOf` (string, optional) — Restricts results to those matching any of the specified IDs. Comma-separated list.
- `modifiedAt.gt` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified after the specified time. e.g. > 2017-04-30.
- `modifiedAt.gte` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified at or after the specified time. e.g. >= 2017-04-30.
- `modifiedAt.lt` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified before the specified time. e.g. \< 2017-04-30.
- `modifiedAt.lte` (string, optional) — Datetime, in RFC 3339 format. Time zone defaults to UTC. Restricts results to those modified at or before the specified time. e.g. \<= 2017-04-30.
- `name.anyOf` (string, optional) — Restricts results to those that match any of the specified names. Case insensitive. Warning - this filter can be non-performant due to case insensitivity. Ensure only one name filter is used at a time. Comma-separated list.
- `name.anyOf.caseSensitive` (string, optional) — Restricts results to those that match any of the specified names. Case sensitive. Ensure only one name filter is used at a time. Comma-separated list.
- `nextToken` (string, optional) — Token for pagination
- `omit` (string, optional) — Comma-separated list of top-level fields to omit from each returned item. Cannot overlap with returning.
- `pageSize` (integer, optional) — Number of results to return. Defaults to 50, maximum of 100.
- `returning` (string, optional) — Comma-separated list of top-level fields to include in each returned item. Cannot overlap with omit.
- `sort` (enum, optional, default: modifiedAt:desc) — Method by which to order results. Valid sorts are: createdAt (created time, oldest first) and modifiedAt (modified time, oldest first). Use :asc or :desc to specify ascending or descending order. Default is modifiedAt:desc.
  - Allowed values: `createdAt:asc`, `createdAt:desc`, `modifiedAt:asc`, `modifiedAt:desc`

### Headers

- `EARLY-ACCESS` (string, optional) — Set to true to access beta operations via /api/v3.

## Response

### 200

OK

- `items` (list of WellPlatePosition, optional)
- `nextToken` (string, optional, nullable)

## Errors

### 400 Well Plate Position List 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 Well Plate Position List 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 Well Plate Position List 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)

### 429 Well Plate Position List 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 Well Plate Position List 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

### WellPlatePosition

Represents a single well within a WellPlate, functioning as a fixed container at a specific grid position. Each WellPlatePosition has coordinates identifying its row and column, can hold sample contents (see ContainerContent), and tracks quantity as a Measurement. Wells can be assigned an ExperimentalRole for assay organization and support freeze/thaw tracking (see FreezeThawInfo) and expiration tracking (see ExpirationInfo) when enabled on the well's ContainerSchema. Unlike containers in a MatrixPlate, WellPlatePositions are permanent parts of the plate structure and cannot be removed or repositioned. Wells are accessed through the parent WellPlate's positions field.

- `__typename` (string, optional)
- `contents` (list of ContainerContent, optional) — Well contents of the well plate.
- `coordinates` (GridCoordinates, optional) — Coordinates of the current position within the well plate.
- `createdAt` (string, optional) — When the well plate was created.
- `expirationInfo` (ExpirationInfo, optional) — Expiration info for the container.
- `id` (string, optional) — The ID of the container representing the well at this plate position.
- `modifiedAt` (string, optional) — When the well plate was last modified.
- `name` (string, optional) — The name of the container representing the well at this position.
- `quantity` (Measurement, optional, nullable) — Quantity of a well. Supports mass, volume, and other quantities.
- `role` (ExperimentalRole, optional, nullable) — Represents the complete experimental designation of a well or container within an assay, combining a primary role (see PrimaryExperimentalRole), replicate group number, and optional subrole. The group field identifies replicate sets: wells with the same primary role and group number are treated as technical replicates for statistical analysis. The subrole field provides additional categorization for controls (e.g., POSITIVE, NEGATIVE, MAXIMUM, MINIMUM); only CONTROL primary roles may have subroles. ExperimentalRole is used in plate-based workflows to define experimental layouts (see PlateMapPosition) and annotate wells in FixedPlate and Container objects.
- `schema` (ContainerSchemaRef, optional) — The container schema used by wells in the well plate.

### GeneralErrorDetail

- string
- map from string to any

### TooManyRequestsErrorBodyDetail

- string
- map from string to any

### InternalServerErrorBodyDetail

- string
- map from string to any

### ContainerContent

Represents a biological or chemical entity stored within a Container or well. Each ContainerContent links an Entity (such as a DNA sequence, protein, or custom entity) to its storage location, along with an optional concentration measurement. The timestamps track when the entity was first placed in the container and when the concentration was last modified. A container can hold multiple ContainerContent items representing different entities or samples stored together.

- `__typename` (string, optional)
- `concentration` (Measurement, optional, nullable) — Concentration of the entity in the container.
- `createdAt` (string, optional) — When the container was first filled with this entity.
- `entity` (EntityRef, optional, nullable) — The entity in the container.
- `modifiedAt` (string, optional) — When the entity was last added to this container or the concentration was last changed.

### GridCoordinates

Read model representing a fillable position in a box or plate.

- `__typename` (string, optional)
- `column` (integer, optional) — The 0-indexed column index of the position
- `index` (integer, optional) — The 1-indexed position determined by counting across rows. For example, for a six-well plate: +---+---+---+ | 1 | 2 | 3 | +---+---+---+ | 4 | 5 | 6 | +---+---+---+
- `position` (string, optional) — The alphanumeric position, where rows are indexed alphabetically and columns are indexed numerically, starting from "A1"
- `row` (integer, optional) — The 0-indexed row index of the position

### ExpirationInfo

Provides expiration tracking for inventory items such as containers and their contents. The expirationDate may be explicitly set on the container or inherited from the stored entity's properties. The isExpired flag is a computed convenience field that returns true if the current date is past the expiration date. Items without an expiration date are considered non-expiring (isExpired returns false).

- `__typename` (string, optional)
- `expirationDate` (string, optional, nullable) — Expiration date of the item, potentially inherited from the contents or overridden.
- `isExpired` (boolean, optional) — Whether the item is past its expiration date. Items without an expiration date return False.

### Measurement

Represents a quantity with an associated unit of measurement within Benchling's inventory system. Measurements are used throughout inventory to track container volumes, sample masses, concentrations, and other quantitative values. Each Measurement pairs a numeric value with a Unit (see Unit) to provide context-aware quantity handling. For example, a container might have a Measurement of 500 uL for its volume. Unlike ContainerQuantity which provides a simpler representation, Measurement supports the full Unit system with dimensional conversions.

- `__typename` (string, optional)
- `unit` (UnitRef, optional, nullable)
- `value` (double, optional, nullable)

### ExperimentalRole

Represents the complete experimental designation of a well or container within an assay, combining a primary role (see PrimaryExperimentalRole), replicate group number, and optional subrole. The group field identifies replicate sets: wells with the same primary role and group number are treated as technical replicates for statistical analysis. The subrole field provides additional categorization for controls (e.g., POSITIVE, NEGATIVE, MAXIMUM, MINIMUM); only CONTROL primary roles may have subroles. ExperimentalRole is used in plate-based workflows to define experimental layouts (see PlateMapPosition) and annotate wells in FixedPlate and Container objects.

- `__typename` (string, optional)
- `group` (integer, optional) — Role group (aka replicate id)
- `primaryRole` (enum, optional) — Primary role
  - Allowed values: `CONTROL`, `SAMPLE`, `BLANK`, `STANDARD`
- `subrole` (string, optional, nullable) — Subrole, used to differentiate different sub types of a role (e.g. positive control)

### ContainerSchemaRef

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

### EntityRef

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

### UnitRef

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

## Examples

**Response**

```json
{
  "items": [
    {
      "__typename": "__typename",
      "contents": [
        {}
      ],
      "createdAt": "createdAt",
      "id": "id",
      "modifiedAt": "modifiedAt",
      "name": "name"
    }
  ],
  "nextToken": "nextToken"
}
```

**SDK Code**

```python
import requests

url = "https://{tenant_name}.benchling.com/api/v3/well-plate-position/items"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://{tenant_name}.benchling.com/api/v3/well-plate-position/items';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

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