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

# Dosage created

POST 

Sent once per dosage recorded against an animal. The payload is the dosage.

Reference: https://docs.benchling.com/in-vivo/webhooks/webhook-animal-dosage-created

## Request

### Headers

- `Signature` (string, required) — Lowercase hex-encoded HMAC-SHA256 of the raw request body, keyed with your webhook's signing secret. Compute it over the bytes exactly as received, before parsing, and compare in constant time.

### Payload

- `id` (string, required) — Unique identifier for a webhook event. A retried delivery carries the same identifier, so use it to discard duplicates.
- `event` (enum, required) — The event that occurred.
  - Allowed values: `animal.dosage.created`, `animal.dosage.deleted`
- `version` (enum, required) — A released version of the public API. Each OAuth client is registered against one version, which determines the response shape it receives.
  - Allowed values: `2022-12-14`
- `created_at` (datetime, required) — UTC timestamp with microsecond precision, always suffixed with `Z`, in the form `yyyy-MM-ddTHH:mm:ss.SSSSSSZ`.
- `payload` (DosageV2, required) — A single administration of a treatment to an animal. The four quantities record what was actually given, which may differ from the treatment's prescribed amounts — typically because the amount was scaled to the weight recorded in `measurement`.
- `client_id` (string, optional) — The OAuth client whose API request caused the event. Omitted when the event did not originate from an API request, and on events that never carry it.

## Types

### DosageV2

A single administration of a treatment to an animal. The four quantities record what was actually given, which may differ from the treatment's prescribed amounts — typically because the amount was scaled to the weight recorded in `measurement`.

- `id` (string, required) — Unique identifier for a dosage.
- `name` (string, required, nullable) — The name of the dosage.
- `dosed_at` (datetime, required, nullable) — The time the dose was administered, which may be earlier than `created_at` when it was recorded retrospectively.
- `comments` (string, required, nullable) — Any note recorded alongside the dosage.
- `weight_at_dosing` (string, required, nullable) — The animal's weight used to scale the dose, as a string so that the precision recorded is preserved exactly. Null when the dose was not scaled to weight.
- `dose` (DoseV1, required, nullable) — The dose administered, relative to body weight.
- `dose_volume` (DoseVolumeV1, required, nullable) — The volume administered, relative to body weight.
- `stock` (StockV1, required, nullable) — The concentration of the stock solution the dose was drawn from.
- `volume` (VolumeV1, required, nullable) — The absolute volume administered.
- `study` (StudyNestedV1, required, nullable) — The study the dosage was given under, taken from its treatment.
- `animal` (AnimalNestedV1, required) — The animal a record belongs to, as embedded in dosages, measurements, observations and samples. Carries the same attributes as an animal retrieved directly, except that the cage, study and treatment group are given as identifiers rather than embedded objects.
- `measurement` (MeasurementNestedV2, required, nullable) — The measurement the dose was scaled from. Null when the dose was not scaled to a recorded weight.
- `user` (UserV1, required, nullable) — The user who administered the dose.
- `treatment` (TreatmentNestedV1, required) — The treatment a dosage was given under, as embedded in dosages. A treatment belongs to a study and defines what is administered and how much; the quantities here are the treatment's prescribed amounts, which may differ from the amounts actually recorded on an individual dosage.
- `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`.

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

### AnimalNestedV1

The animal a record belongs to, as embedded in dosages, measurements, observations and samples. Carries the same attributes as an animal retrieved directly, except that the cage, study and treatment group are given as identifiers rather than embedded objects.

- `id` (string, required) — Unique identifier for an animal.
- `name` (string, required) — The name of the animal.
- `number` (integer, required) — The position of the animal within its cage.
- `catalog` (string, required, nullable) — The catalog number of the animal.
- `species` (string, required, nullable) — The species of the animal, derived from its strain. Null when the animal has no strain assigned.
- `strain` (string, required, nullable) — The strain of the animal.
- `sex` (enum, required, nullable) — The sex of the animal.
  - Allowed values: `m`, `f`, `u`
- `dob` (date, required, nullable) — The date of birth of the animal.
- `donor` (string, required, nullable) — The donor identifier of the animal.
- `ear` (string, required, nullable) — The ear marking identifying the animal.
- `tag` (string, required, nullable) — The tag identifying the animal.
- `tail` (string, required, nullable) — The tail marking identifying the animal.
- `cage_id` (string, required, nullable) — The cage the animal is housed in.
- `study_id` (string, required, nullable) — The study the animal is enrolled on. Null when it is not on a study.
- `study_group_id` (string, required, nullable) — The treatment group the animal is assigned to. Null when it is not on a study, or is on one but not yet grouped.
- `tracking_date` (date, required, nullable) — The date from which the animal's tracking days are counted.
- `disease_induction_date` (date, required, nullable) — The date the animal had a disease induced.
- `disease_survivor` (boolean, required, nullable) — Whether the animal survived the induced disease.
- `terminated_at` (date, required, nullable) — The date the animal was terminated. Null while the animal is alive.
- `terminated_by` (StudyAuthorUserV1, required, nullable) — The user who recorded the termination.
- `terminated_reason` (AnimalTerminatedReasonV1, required, nullable) — Why the animal was terminated.
- `metadata` (map from string to any, required, nullable) — The metadata associated to the animal.
- `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`.

### MeasurementNestedV2

The measurement a dosage was calculated from, as embedded in dosages. Carries the same attributes as a measurement retrieved directly, except that the animal and study are given as identifiers rather than embedded objects, and the recording user is omitted. Only calculations that still have a stored value are included.

- `id` (string, required) — Unique identifier for a measurement.
- `study_id` (string, required, nullable) — The study the animal was on when the readings were taken. Null when the animal is not on a study.
- `animal_id` (string, required) — Unique identifier for an animal.
- `measured_at` (date, required, nullable) — The date the readings were taken, which may be earlier than `created_at` when they were recorded retrospectively.
- `calculations` (list of CalculationV2, required) — The values recorded and derived, one entry per configured calculation.
- `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`.

### UserV1

A member of your team, as referenced by the records they created. This is the fuller user representation; studies reference a narrower one that omits `status`, `metadata` and the timestamps.

- `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, nullable) — The timezone of the user, as an IANA timezone identifier.
- `status` (enum, required) — The standing of a user within your team. `pending` means the invitation has not yet been accepted, and `revoked` means access was withdrawn.
  - Allowed values: `active`, `pending`, `inactive`, `revoked`
- `metadata` (map from string to any, required, nullable) — The metadata associated to the user.
- `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`.

### TreatmentNestedV1

The treatment a dosage was given under, as embedded in dosages. A treatment belongs to a study and defines what is administered and how much; the quantities here are the treatment's prescribed amounts, which may differ from the amounts actually recorded on an individual dosage.

- `id` (string, required) — Unique identifier for a treatment.
- `study_id` (string, required) — Unique identifier for a study.
- `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 compound or article administered.
- `label` (string, required) — The label identifying the treatment within its study.
- `dose` (DoseV1, required, nullable) — The prescribed dose, relative to body weight.
- `dose_volume` (DoseVolumeV1, required, nullable) — The prescribed volume, relative to body weight.
- `stock` (StockV1, required, nullable) — The concentration of the stock solution the dose is drawn from.
- `volume` (VolumeV1, required, nullable) — The prescribed absolute volume.
- `metadata` (map from string to any, required, nullable) — The metadata associated to the treatment.
- `external_entity_id` (string, required, nullable) — The identifier of the Benchling entity the treatment is linked to. Null when the treatment is not linked to one.
- `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`.

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

### AnimalTerminatedReasonV1

Why an animal was terminated. The reason is chosen from the shared glossary, or recorded free-form when no glossary entry fits.

- `glossary_id` (string, required, nullable) — The glossary entry the reason was chosen from. Null when the reason was recorded free-form.
- `title` (string, required, nullable) — The reason for the termination.
- `comment` (string, required, nullable) — Any further detail recorded alongside the reason.

### CalculationV2

One value on a measurement, together with the readings it was derived from. A calculation is either a reading taken directly — in which case `formula` is just its own key and `variables` holds the single reading — or a value computed from several readings, in which case `variables` holds one entry per term in `formula`. Which calculations a measurement carries is determined by your team's measurement settings, not by the API.

- `id` (string, required, nullable) — The recorded value this calculation came from. Null for a derived calculation that has no stored value of its own.
- `key` (string, required, nullable) — The slug identifying the calculation in your team's measurement settings.
- `name` (string, required, nullable) — The display name of the calculation.
- `unit` (string, required, nullable) — The unit the calculation is expressed in.
- `excluded` (boolean, required) — Whether the value has been excluded from analysis. An excluded value is still returned; it is left out of aggregates and charts.
- `value` (string, required, nullable) — The calculated value, as a string so that the precision recorded is preserved exactly.
- `formula` (string, required, nullable) — The expression the value was computed from, written in terms of the `key` of each variable. A directly recorded reading has its own key as the formula.
- `variables` (list of VariableV2, required) — The readings the value was computed from.

### VariableV2

One input to a calculation. A calculation that is a single recorded reading has one variable holding that reading; a derived calculation has one variable per reading its formula combines.

- `id` (string, required, nullable) — The reading the value was recorded against. Null when the reading is no longer configured for your team.
- `key` (string, required, nullable) — The slug identifying the reading in your team's measurement settings.
- `value` (string, required, nullable) — The recorded value, as a string so that the precision recorded is preserved exactly.
- `unit` (string, required, nullable) — The unit the value was recorded in.