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

# Get WellPlatePosition by ID

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

Get a single WellPlatePosition by ID.

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

## Authentication

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

## Request

### Path parameters

- `well_plate_position_id` (string, required) — ID of the WellPlatePosition.

### Query parameters

- `returning` (string, optional) — Comma-separated list of top-level fields to include in each returned item. Cannot overlap with omit.
- `omit` (string, optional) — Comma-separated list of top-level fields to omit from each returned item. Cannot overlap with returning.

### Headers

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

## Response

### 200

OK

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

## Errors

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

### 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)

### GeneralErrorDetail

- string
- map from string to any

### TooManyRequestsErrorBodyDetail

- string
- map from string to any

### InternalServerErrorBodyDetail

- string
- map from string to any

### EntityRef

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

### UnitRef

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

## Examples

**Response**

```json
{
  "__typename": "__typename",
  "contents": [
    {
      "__typename": "__typename",
      "createdAt": "createdAt",
      "modifiedAt": "modifiedAt"
    }
  ],
  "coordinates": {
    "__typename": "__typename",
    "column": 1,
    "index": 1,
    "position": "position",
    "row": 1
  },
  "createdAt": "createdAt",
  "expirationInfo": {
    "__typename": "__typename",
    "expirationDate": "expirationDate",
    "isExpired": true
  },
  "id": "id",
  "modifiedAt": "modifiedAt",
  "name": "name",
  "quantity": {
    "__typename": "__typename",
    "unit": {
      "__typename": "__typename",
      "id": "id"
    },
    "value": 1.1
  },
  "role": {
    "__typename": "__typename",
    "group": 1,
    "primaryRole": "CONTROL",
    "subrole": "subrole"
  },
  "schema": {
    "__typename": "__typename",
    "id": "id"
  }
}
```

**SDK Code**

```python
import requests

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

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/well_plate_position_id';
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);
}
```