---
title: "Create a new medication request (prescription or OTC). This is the compound walk-up operation: capture, approve, and dispense are applied in one call, each step gated by the caller's permissions (design §4). A front-desk caller with only the Inventory permission stops at Requested; a provider's submit collapses to today's one-step flow."
method: POST
path: "/rx/governance/request"
tags: ["RxGovernance"]
---

# Create a new medication request (prescription or OTC). This is the compound walk-up operation: capture, approve, and dispense are applied in one call, each step gated by the caller's permissions (design §4). A front-desk caller with only the Inventory permission stops at Requested; a provider's submit collapses to today's one-step flow.

`POST /rx/governance/request`

## Request

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

## Request body

- CreateMedicationRequestDto
  - `patientId` string
  - `inventoryItemId` string
  - `medicationCategory` string, nullable
  - `providerId` string, nullable
  - `quantity` union
    - number, double
    - string, double
  - `dosage` string, nullable
  - `frequency` string, nullable
  - `duration` string, nullable
  - `instructions` string, nullable
  - `refillsAllowed` union
    - integer
    - string, int32
  - `refillsPrn` boolean, nullable: PRN ("as needed") refills: unlimited fills until the Rx expires (ITE-1596).
  - `validUntil` string, date, nullable: Rx expiration override. Null = the regional default validity window.
  - `medicationExpirationDate` string, date, nullable: Medication expiration printed on the label when no dispensed lot supplies one.
  - `isOtc` boolean
  - `fulfillmentMethod` string
  - `pharmacyId` string, nullable
  - `notes` string, nullable
  - `invoiceId` string, nullable: When supplied, the created dispense transaction is also attached to this estimate as an InvoiceLineItem in the same request. Used by the inline payments flow so dispense + bill land together.
  - `estimateId` string, nullable: Billing target for a clinic-dispensed (in-house / same-day) request. When set, the request's billable line is added to this existing estimate. Mutually exclusive with bool CreateMedicationRequestDto.CreateNewEstimate. Ignored for external (online-pharmacy / print-retail) requests, which are non-billable.
  - `createNewEstimate` boolean: When true (and no string? CreateMedicationRequestDto.EstimateId), the request's billable line goes onto a new standalone draft estimate for the patient instead of the patient's current open draft.
  - `isCascade` boolean, nullable
  - `cascadeReason` string, nullable
  - `antimicrobialUseType` string, nullable: "Therapeutic" | "Prophylactic" | "Metaphylactic". Required when the medication is antimicrobial.
  - `antimicrobialJustification` string, nullable
  - `clinicalAssessmentPerformed` boolean, nullable
  - `physicalExamPerformed` boolean, nullable
  - `physicalExamJustification` string, nullable
  - `repeatCount` union
    - integer
    - string, int32
  - `withdrawalPeriod` string, nullable: Required for food-producing species. Free-form label text (e.g., "Meat: 28 days; Milk: 7 days").
  - `collectorName` string, nullable: UK CDR collector name (Schedule 2–5 controlled drugs).
  - `collectorIdChecked` boolean, nullable: UK CDR: was the collector's photo ID verified?
  - `overrideValidation` boolean: The user confirmed dispensing past stock (ITE-1410, Warn mode) with string? CreateMedicationRequestDto.OverrideReason. This door already waives VCPR / quantity on the user's behalf; this only covers a stock shortfall going on the overdraft lot.
  - `overrideReason` string, nullable

## Response `201`

Created

- MedicationRequestResultDto
  - `success` boolean
  - `prescriptionId` string, nullable
  - `transactionId` string, nullable
  - `patientId` string
  - `message` string
  - `invoiceLineItemId` string, nullable: Populated when the request supplied string? CreateMedicationRequestDto.InvoiceId and an estimate line item was created in the same call.
  - `invoiceId` string, nullable: The estimate the dispense was attached to — either the one the caller supplied or one auto-created/resolved server-side. Lets a client that had no estimate of its own adopt the server's estimate instead of failing to reconcile the line.
  - `estimateId` string, nullable: The estimate the request's billable line was placed on at creation (in-house / same-day requests). Null for external (non-billable) requests.
  - `estimateLineItemId` string, nullable: The Pending estimate line created for this request at creation, if any.
  - `medicationRequestId` string, nullable: The lifecycle MedicationRequest recorded for this operation. The compound endpoint applies capture → approve → dispense as far as the caller's permissions allow; string? MedicationRequestResultDto.RequestStatus says where it stopped.
  - `requestStatus` string, nullable: Lifecycle status after this call: requested | approved | dispensed.

## Other responses

- `400`: Bad Request

## Changes

- **2026-10-28** `099cf36186e0`: 9 info
  - added the new optional request property `medicationExpirationDate` (media type: application/json)
  - added the new optional request property `medicationExpirationDate` (media type: text/json)
  - added the new optional request property `medicationExpirationDate` (media type: application/*+json)
  - added the new optional request property `refillsPrn` (media type: application/json)
  - …5 more
- **2026-10-21** `85ee96c0bb96`: 6 info
  - added the new optional request property `overrideReason` (media type: application/json)
  - added the new optional request property `overrideReason` (media type: text/json)
  - added the new optional request property `overrideReason` (media type: application/*+json)
  - added the new optional request property `overrideValidation` (media type: application/json)
  - …2 more

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/rx/governance/request/post.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)
