> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.benchling.com/in-vivo/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.benchling.com/in-vivo/_mcp/server.

# Retrieve a study group treatment

GET https://acme-api.invivo.benchling.com/api/public/v1/studies/{studyId}/groups/{studyGroupId}/treatments/{treatmentId}

Retrieves the details of an existing study group treatment.

Reference: https://docs.benchling.com/in-vivo/study-group-treatments/study-group-treatment-get

## Authentication

- OAuth2 — send the obtained token as `Authorization: Bearer <token>`

## Request

### Path parameters

- `studyId` (string, required) — The unique identifier of the study.
- `studyGroupId` (string, required) — The unique identifier of the study group.
- `treatmentId` (string, required) — The unique identifier of the treatment.

## Response

### 200

The requested study-group treatment.

- `id` (string, required) — Unique identifier for a treatment.
- `type` (enum, required, nullable) — How the amount to administer is derived.
  - Allowed values: `concentration`, `concentration_mlkg`, `concentration_vgkg`, `custom`, `dose_volume`, `volume`
- `name` (string, required, nullable) — The name of the treatment.
- `label` (string, required) — The label of the treatment.
- `external_entity_id` (string, required, nullable) — The external identifier of the treatment.
- `dose` (DoseV1, required, nullable) — The dose concentration associated with the treatment.
- `dose_volume` (DoseVolumeV1, required, nullable) — The dose volume associated with the treatment.
- `stock` (StockV1, required, nullable) — The stock concentration associated with the treatment.
- `volume` (VolumeV1, required, nullable) — The volume of the treatment.
- `metadata` (map from string to any, required, nullable) — The metadata associated to the treatment.
- `study` (StudyNestedV1, required, nullable) — The study associated with the treatment.
- `study_group` (StudyGroupNestedV1, required, nullable) — The study group associated with the treatment.
- `created_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.
- `updated_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.

## Errors

### 400 Bad Request Error

The request was rejected. Validation failures return a `ValidationErrorResponse`; an unrecognised `X-Studies-Api-Version` header returns an `AuthErrorResponse` with the code `invalid_header`.

- `BadRequestErrorResponse`

### 401 Unauthorized Error

Authentication failed. The body is normally empty; when an otherwise valid access token is missing required claims the body is an `AuthErrorResponse` with the code `invalid_token`.

- `any`

### 403 Forbidden Error

The access token does not grant the scopes this operation requires. The body is normally empty; when the token's team is missing or deleted the body is an `AuthErrorResponse` with the code `invalid_data`.

- `any`

### 404 Not Found Error

No resource matching the given identifier exists on your team. The body is empty.

- `any`

### 429 Too Many Requests Error

A rate limit was exceeded. Retry once the window resets; no `Retry-After` header is sent, so use `X-RateLimit-Reset`.

- `error` ("rate_limit_exceeded", required) — A machine-readable error code.
- `message` (string, required) — A human-readable explanation of the failure.

## Types

### DoseV1

The amount of the compound administered, relative to the animal's body weight. Quantities are strings rather than numbers so that the precision recorded is preserved exactly. The `display_` pair carries the same quantity converted into the unit your team has chosen to work in, which may differ from the unit it was recorded in.

- `unit` (string, required, nullable) — The unit the dose was recorded in.
- `value` (string, required, nullable) — The dose, in `unit`.
- `display_unit` (string, required, nullable) — The unit the dose is displayed in.
- `display_value` (string, required, nullable) — The dose, in `display_unit`.

### DoseVolumeV1

The volume administered, relative to the animal's body weight. Quantities are strings rather than numbers so that the precision recorded is preserved exactly. The `display_` pair carries the same quantity converted into the unit your team has chosen to work in, which may differ from the unit it was recorded in.

- `unit` (string, required, nullable) — The unit the dose volume was recorded in.
- `value` (string, required, nullable) — The dose volume, in `unit`.
- `display_unit` (string, required, nullable) — The unit the dose volume is displayed in.
- `display_value` (string, required, nullable) — The dose volume, in `display_unit`.

### StockV1

The concentration of the stock solution the dose was drawn from. Quantities are strings rather than numbers so that the precision recorded is preserved exactly. The `display_` pair carries the same quantity converted into the unit your team has chosen to work in, which may differ from the unit it was recorded in.

- `unit` (string, required, nullable) — The unit the stock concentration was recorded in.
- `value` (string, required, nullable) — The stock concentration, in `unit`.
- `display_unit` (string, required, nullable) — The unit the stock concentration is displayed in.
- `display_value` (string, required, nullable) — The stock concentration, in `display_unit`.

### VolumeV1

The absolute volume administered. Quantities are strings rather than numbers so that the precision recorded is preserved exactly. The `display_` pair carries the same quantity converted into the unit your team has chosen to work in, which may differ from the unit it was recorded in.

- `unit` (string, required, nullable) — The unit the volume was recorded in.
- `value` (string, required, nullable) — The volume, in `unit`.
- `display_unit` (string, required, nullable) — The unit the volume is displayed in.
- `display_value` (string, required, nullable) — The volume, in `display_unit`.

### StudyNestedV1

The study a record belongs to, as embedded in animals, dosages, measurements, observations and samples. Carries the same attributes as a study retrieved directly, except that the project is given as an identifier rather than an embedded object.

- `id` (string, required) — Unique identifier for a study.
- `project_id` (string, required, nullable) — The project of the study. Null when the study is not in a project.
- `name` (string, required) — The name of the study.
- `code` (string, required, nullable) — The code of the study.
- `study_code_id` (string, required, nullable) — The unique identifier of the study code template.
- `type` (enum, required) — Whether the study is run in-house or by an external partner. The `all` value accepted by some filters is not a valid study type and is never returned.
  - Allowed values: `internal`, `external`
- `status` (enum, required) — Review status of a study.
  - Allowed values: `awaiting_approval`, `in_progress`, `rejected`
- `description` (string, required, nullable) — The description of the study.
- `timezone` (string, required, nullable) — The timezone of the study, as an IANA timezone identifier.
- `metadata` (map from string to any, required, nullable) — The metadata associated to the study.
- `author` (StudyAuthorUserV1, required, nullable) — The author of the study.
- `owner` (StudyAuthorUserV1, required, nullable) — The owner of the study.
- `started_on` (date, required) — Calendar date with no time or offset component, in ISO-8601 form.
- `tracking_day_base` (integer, required, nullable) — The day number assigned to the study's start date, from which all subsequent tracking days are counted.
- `completed_at` (datetime, required, nullable) — The completed timestamp of the study.
- `canceled_at` (datetime, required, nullable) — The canceled timestamp of the study.
- `created_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.
- `updated_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.

### StudyGroupNestedV1

The treatment group an animal is assigned to within a study, as embedded in the animal. The study is given as an identifier rather than an object to keep the animal response from nesting the same study twice.

- `id` (string, required) — Unique identifier for a study group.
- `study_id` (string, required) — Unique identifier for a study.
- `name` (string, required) — The name of the study group.
- `no` (integer, required, nullable) — The position of the group in the study's group ordering.
- `color` (string, required, nullable) — The colour used to represent the group in the interface.
- `max_animals` (integer, required, nullable) — The number of animals the group can hold. Assigning an animal to a group already at this capacity is rejected. Null when the group is uncapped.
- `control` (boolean, required) — Whether the group is the study's control group.
- `metadata` (map from string to any, required, nullable) — The metadata associated to the study group.
- `created_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.
- `updated_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.

### ValidationErrorResponse

Returned when a request body or parameter fails validation.

- `message` (string, required) — A summary of the failure.
- `errors` (map from string to list of string, required) — Failure messages keyed by the offending field, using the field's name as it appears on the wire. Nested fields are dotted, e.g. `schedule.duration`.

### AuthErrorResponse

Returned when a request is rejected during authentication, before it is processed.

- `error` (enum, required) — A machine-readable error code.
  - Allowed values: `invalid_header`, `invalid_token`, `invalid_data`
- `error_description` (string, required) — A human-readable explanation of the failure.

### ProblemDetail

An RFC 9457 problem detail, returned when a request is rejected before it reaches a controller method — most commonly an unparseable or absent JSON body. Unlike the rest of this API, null members are omitted rather than serialised as `null`.

- `title` (string, required) — A short, human-readable summary of the problem type.
- `status` (integer, required) — The HTTP status code, repeated in the body.
- `detail` (string, required) — A human-readable explanation specific to this occurrence.
- `instance` (string, required) — The path of the request that produced the problem.

### StudyAuthorUserV1

A user referenced as the author or owner of a study.

- `id` (string, required) — Unique identifier for a user.
- `name` (string, required) — The name of the user.
- `email` (string, required) — The email address of the user.
- `timezone` (string, required) — The timezone of the user. Defaults to `UTC` when the user has none set.

## Examples

**Response**

```json
{
  "error": "string",
  "message": "Too many requests"
}
```

**SDK Code**

```python
import requests

url = "https://acme-api.invivo.benchling.com/api/public/v1/studies/sdy_3vQ8kZpLmN2xRt7YwBcDfG/groups/grp_9nT4kZpMvR2xQw8YbCdFgJ/treatments/tmt_3zQ9mKpNvR5xTw6YbCdFgR"

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

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

print(response.json())
```

```javascript
const url = 'https://acme-api.invivo.benchling.com/api/public/v1/studies/sdy_3vQ8kZpLmN2xRt7YwBcDfG/groups/grp_9nT4kZpMvR2xQw8YbCdFgJ/treatments/tmt_3zQ9mKpNvR5xTw6YbCdFgR';
const options = {method: 'GET', headers: {Authorization: '<token>.'}};

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