---
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 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
  - `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?

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

---

[API](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1.md) · [All operations](https://skmtc.net/clinicos/apis/pawthosx-business-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/clinicos/pawthosx-business-api-v1/revisions/a905bde4e796/schema)
