---
title: "Get medication history for a patient including prescriptions and OTC dispenses"
method: GET
path: "/Patients/{id}/medications"
tags: ["Patients"]
---

# Get medication history for a patient including prescriptions and OTC dispenses

`GET /Patients/{id}/medications`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/Patients/{id}/medications`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/Patients/:id/medications/get.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Response `200`

OK

- PatientMedicationsResponseDto
  - `prescriptions` PatientMedicationDto[]
    - `id` string
    - `type` string: Where the medication came from, NOT its legal drug class: `"prescription"` for a take-home script, `"otc"` for a dose administered in-house outside a script (`DispenseType.InHouse` with no `PrescriptionItemId`). A controlled or Rx-required drug given during a visit lands in the `"otc"` bucket and that is correct — read bool PatientMedicationDto.RxRequired and int? PatientMedicationDto.ControlledSubstanceSchedule for drug class (ITE-627).
    - `inventoryItemId` string, nullable: The dispensable inventory item — lets the "request refill" affordance capture without a search.
    - `medicationName` string
    - `strength` string, nullable
    - `dosage` string, nullable
    - `frequency` string, nullable
    - `duration` string, nullable
    - `instructions` string, nullable: The prescriber's written directions (the SIG). When populated it is the whole instruction and supersedes the structured Dosage/Frequency/Duration fields — the same precedence the printed label uses (`RxLabelVariableBuilder.BuildSig`), so the chart and the label can't disagree about how the drug was prescribed.
    - `quantity` union
      - number, double
      - string, double
    - `refillsRemaining` union
      - integer
      - string, int32
    - `refillsPrn` boolean: PRN refills: unlimited until the Rx expires, so RefillsRemaining is null.
    - `status` string
    - `prescribedDate` string, date-time
    - `prescribedBy` string
    - `lastFilledDate` string, date-time, nullable
    - `fulfillmentMethod` string, nullable
    - `estimateId` string, nullable: The estimate (treatment plan) this request's billable line sits on, if any. Null for external-pharmacy scripts and other non-billable requests.
    - `estimateNumber` string, nullable: Human-facing number of the linked estimate (e.g. "EST-1042").
    - `estimateStatus` string, nullable: Status of the linked estimate (Draft/Presented/Accepted/Declined).
    - `invoiceId` string, nullable: The invoice the linked estimate was converted into, if any. Non-null = already invoiced.
    - `rxRequired` boolean: Drug class from the inventory item: does dispensing it require a prescription? Orthogonal to string PatientMedicationDto.Type — an Rx-required drug is routinely administered in-house. False when the medication has no linked inventory item (external scripts).
    - `controlledSubstanceSchedule` union: Unified numeric controlled-substance schedule (1–5), null when not controlled. This is the region-agnostic field — populated for both US and UK — unlike the legacy Roman-numeral `DeaSchedule`, which is null on UK items.
      - integer
      - string, int32
    - `distributionCategory` string, nullable: UK Veterinary Medicines Regulations distribution category ("POM_V", "POM_VPS", "NFA_VPS", "AVM_GSL"); null on US medications. Carried for en-GB, where it — not bool PatientMedicationDto.RxRequired — is the meaningful Rx/OTC distinction.
    - `category` string, nullable: The inventory item's `InventoryItemCategory` name ("Medication", "Food", …); null when there is no linked inventory item (external scripts). The patient chart reads "Food" to list diets in their own section instead of among the drugs.
  - `otcDispenses` PatientMedicationDto[]
    - `id` string
    - `type` string: Where the medication came from, NOT its legal drug class: `"prescription"` for a take-home script, `"otc"` for a dose administered in-house outside a script (`DispenseType.InHouse` with no `PrescriptionItemId`). A controlled or Rx-required drug given during a visit lands in the `"otc"` bucket and that is correct — read bool PatientMedicationDto.RxRequired and int? PatientMedicationDto.ControlledSubstanceSchedule for drug class (ITE-627).
    - `inventoryItemId` string, nullable: The dispensable inventory item — lets the "request refill" affordance capture without a search.
    - `medicationName` string
    - `strength` string, nullable
    - `dosage` string, nullable
    - `frequency` string, nullable
    - `duration` string, nullable
    - `instructions` string, nullable: The prescriber's written directions (the SIG). When populated it is the whole instruction and supersedes the structured Dosage/Frequency/Duration fields — the same precedence the printed label uses (`RxLabelVariableBuilder.BuildSig`), so the chart and the label can't disagree about how the drug was prescribed.
    - `quantity` union
      - number, double
      - string, double
    - `refillsRemaining` union
      - integer
      - string, int32
    - `refillsPrn` boolean: PRN refills: unlimited until the Rx expires, so RefillsRemaining is null.
    - `status` string
    - `prescribedDate` string, date-time
    - `prescribedBy` string
    - `lastFilledDate` string, date-time, nullable
    - `fulfillmentMethod` string, nullable
    - `estimateId` string, nullable: The estimate (treatment plan) this request's billable line sits on, if any. Null for external-pharmacy scripts and other non-billable requests.
    - `estimateNumber` string, nullable: Human-facing number of the linked estimate (e.g. "EST-1042").
    - `estimateStatus` string, nullable: Status of the linked estimate (Draft/Presented/Accepted/Declined).
    - `invoiceId` string, nullable: The invoice the linked estimate was converted into, if any. Non-null = already invoiced.
    - `rxRequired` boolean: Drug class from the inventory item: does dispensing it require a prescription? Orthogonal to string PatientMedicationDto.Type — an Rx-required drug is routinely administered in-house. False when the medication has no linked inventory item (external scripts).
    - `controlledSubstanceSchedule` union: Unified numeric controlled-substance schedule (1–5), null when not controlled. This is the region-agnostic field — populated for both US and UK — unlike the legacy Roman-numeral `DeaSchedule`, which is null on UK items.
      - integer
      - string, int32
    - `distributionCategory` string, nullable: UK Veterinary Medicines Regulations distribution category ("POM_V", "POM_VPS", "NFA_VPS", "AVM_GSL"); null on US medications. Carried for en-GB, where it — not bool PatientMedicationDto.RxRequired — is the meaningful Rx/OTC distinction.
    - `category` string, nullable: The inventory item's `InventoryItemCategory` name ("Medication", "Food", …); null when there is no linked inventory item (external scripts). The patient chart reads "Food" to list diets in their own section instead of among the drugs.
  - `totalCount` union
    - integer
    - string, int32

## Other responses

- `404`: Not Found

## Changes

- **2026-10-28** `099cf36186e0`: 6 info
  - added the optional property `otcDispenses/items/refillsPrn` to the response with the `200` status (media type: text/plain)
  - added the optional property `otcDispenses/items/refillsPrn` to the response with the `200` status (media type: application/json)
  - added the optional property `otcDispenses/items/refillsPrn` to the response with the `200` status (media type: text/json)
  - added the optional property `prescriptions/items/refillsPrn` to the response with the `200` status (media type: text/plain)
  - …2 more
- **2026-10-07** `021fabd866ff`: 6 info
  - added the optional property `otcDispenses/items/category` to the response with the `200` status (media type: text/plain)
  - added the optional property `otcDispenses/items/category` to the response with the `200` status (media type: application/json)
  - added the optional property `otcDispenses/items/category` to the response with the `200` status (media type: text/json)
  - added the optional property `prescriptions/items/category` to the response with the `200` status (media type: text/plain)
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/Patients/:id/medications/get.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
