> 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 Review by ID

GET https://{tenant_name}.benchling.com/api/v3/review/{review_id}

Get a single Review by ID.

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

## Authentication

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

## Request

### Path parameters

- `review_id` (string, required) — ID of the Review.

### 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)
- `createdAt` (string, optional) — Timestamp when this review was created
- `id` (string, optional) — ID of the review
- `reviewHistory` (string, optional) — Ordered list of ReviewChange records representing the full audit history of this review. Each ReviewChange captures a single action taken (e.g. send-for-review, approve, reject, retract), the timestamp it occurred, any associated comment, and an optional point-in-time snapshot. To query review history by the reviewable item's ID (e.g. an entry ID like etr\_...) instead of the review ID, use GET /benchling/review-change/items?reviewableId.anyOf=\<id>.
- `reviewProcess` (ReviewProcessRef, optional, nullable) — The review process that governs this review
- `reviewSender` (PrincipalRef, optional, nullable) — The user who last sent this reviewable for review, or self-approved in a self-review process.
- `reviewableId` (string, optional) — API identifier of the reviewable item (e.g. an Entry) that this review belongs to.
- `reviewers` (list of Reviewer, optional, nullable) — Reviewers associated with this review
- `status` (enum, optional, nullable) — The status of this review
  - Allowed values: `REVIEW_SNAPSHOT_IN_PROGRESS`, `NEEDS_REVIEW`, `REJECTED`, `RETRACTED`, `ACCEPTANCE_SNAPSHOT_IN_PROGRESS`, `ACCEPTED`, `CYCLE_COMPLETED`, `ACTION_REQUIRED`

## Errors

### 400 Review 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 Review 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 Review 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 Review 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)
- `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 Review 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

### ReviewProcessRef

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

### PrincipalRef

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

### Reviewer

Represents a user assigned to review a specific stage of an Entry's review process. Each Reviewer is associated with a Review and tracks whether they have completed their assigned action. The reviewer status progresses from BLOCKED (if sequential and waiting) to PENDING (can act) to FINISHED or REJECTED. Reviewers are assigned based on the `ReviewProcessStage` configuration and its `ReviewerType` requirements.

- `__typename` (string, optional)
- `reviewProcessStageName` (string, optional, nullable) — Name of review process stage reviewer is meant to review
- `reviewerStatus` (enum, optional, nullable) — The current status of this reviewer (FINISHED, PENDING, etc.)
  - Allowed values: `BLOCKED`, `PENDING`, `FINISHED`, `REJECTED`
- `user` (PrincipalRef, optional, nullable) — User this reviewer represents

### GeneralErrorDetail

### TooManyRequestsErrorBodyDetail

### InternalServerErrorBodyDetail

## Examples

**Response**

```json
{
  "__typename": "__typename",
  "createdAt": "createdAt",
  "id": "id",
  "reviewHistory": "reviewHistory",
  "reviewProcess": {
    "__typename": "__typename",
    "id": "id"
  },
  "reviewSender": {
    "__typename": "__typename",
    "id": "id"
  },
  "reviewableId": "reviewableId",
  "reviewers": [
    {
      "__typename": "__typename",
      "reviewProcessStageName": "reviewProcessStageName",
      "reviewerStatus": "BLOCKED"
    }
  ],
  "status": "REVIEW_SNAPSHOT_IN_PROGRESS"
}
```

**SDK Code**

```python
import requests

url = "https://{tenant_name}.benchling.com/api/v3/review/review_id"

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

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

print(response.json())
```

```javascript
const url = 'https://{tenant_name}.benchling.com/api/v3/review/review_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);
}
```