---
title: "Approve (provider with Dispense permission + the primary-provider flag). For Rx
this authors the Prescription, routes it, and creates the request's own quote
estimate with its Pending line (one estimate per request)."
method: POST
path: "/medication-requests/{id}/approve"
tags: ["MedicationRequests"]
---

# Approve (provider with Dispense permission + the primary-provider flag). For Rx
this authors the Prescription, routes it, and creates the request's own quote
estimate with its Pending line (one estimate per request).

`POST /medication-requests/{id}/approve`

## Path parameters

- `id` string, required

## Request body

- ApproveMedicationRequestDto — Provider approval. For Rx this is where the Prescription is authored, so it carries the prescribing fields the compound DTO carries at creation today.
  - `useRefill` boolean, nullable — Renewal approval mode (design §7). True = "use a refill": increments RefillsUsed on the prior Rx and reuses it — no new legal record, no SIG. False/absent on a renewal = "new prescription" (the normal create path, keeping the renewal link). 409 when the prior Rx is inactive, expired, exhausted, or DEA Schedule II.
  - `providerId` string, nullable — Prescribing DVM. Defaults to the approving caller.
  - `inventoryItemId` string, nullable — Resolves a free-text capture to a real item (required if capture had none).
  - `quantity` union — Overrides the captured quantity when the doctor adjusts it.
    - number, double
    - string, double
  - `fulfillmentMethod` string, nullable
  - `pharmacyId` string, nullable
  - `dosage` string, nullable
  - `frequency` string, nullable
  - `duration` string, nullable
  - `instructions` string, nullable — SIG — required for Rx approval.
  - `refillsAllowed` union
    - integer
    - string, int32
  - `medicationCategory` string, nullable
  - `notes` string, nullable
  - `estimateId` string, nullable — Escape hatch from one-estimate-per-request: put the billable line on this existing live estimate instead of a fresh standalone draft (e.g. adding a med to an estimate about to be presented, or the visit's estimate).
  - `isCascade` boolean, nullable
  - `cascadeReason` string, nullable
  - `antimicrobialUseType` string, nullable
  - `antimicrobialJustification` string, nullable
  - `clinicalAssessmentPerformed` boolean, nullable
  - `physicalExamPerformed` boolean, nullable
  - `physicalExamJustification` string, nullable
  - `repeatCount` union
    - integer
    - string, int32
  - `withdrawalPeriod` string, nullable

## Response `200`

OK

- MedicationRequestDto — A medication request with its links and DERIVED billing state (design §5.4 — never stored, always computed from the link chain).
  - `id` string
  - `patientId` string
  - `patientName` string, nullable
  - `clientId` string, nullable
  - `inventoryItemId` string, nullable
  - `medicationName` string, nullable
  - `freeTextMedication` string, nullable
  - `requestedQuantity` union
    - number, double
    - string, double
  - `notes` string, nullable
  - `source` string
  - `isOtc` boolean
  - `fulfillmentMethod` string, nullable
  - `status` string
  - `billingState` string — Derived: none | quoted | quote_removed | unbilled | invoiced | paid. "unbilled" is the "Ready to bill" worklist predicate.
  - `requestedById` string, nullable
  - `requestedByName` string, nullable
  - `requestedAt` string, date-time
  - `approvedById` string, nullable
  - `approvedByName` string, nullable
  - `approvedAt` string, date-time, nullable
  - `deniedById` string, nullable
  - `deniedAt` string, date-time, nullable
  - `denialReason` string, nullable
  - `cancelledById` string, nullable
  - `cancelledAt` string, date-time, nullable
  - `cancelReason` string, nullable
  - `dispensedAt` string, date-time, nullable
  - `prescriptionId` string, nullable
  - `prescriptionItemId` string, nullable
  - `estimateId` string, nullable
  - `estimateLineItemId` string, nullable
  - `invoiceId` string, nullable
  - `renewalOfPrescriptionId` string, nullable
  - `renewalContext` MedicationRequestRenewalContextDto — Prior-prescription context for a renewal request (design §7): what the doctor sees on the approve screen, with server-evaluated refill eligibility.
    - `medicationName` string, nullable
    - `prescriptionStatus` string
    - `refillsAllowed` union
      - integer
      - string, int32
    - `refillsUsed` union
      - integer
      - string, int32
    - `refillsRemaining` union
      - integer
      - string, int32
    - `lastDispensedAt` string, date-time, nullable
    - `validUntil` string, date, nullable
    - `refillEligible` boolean — True when "use a refill" may be chosen at approval.
    - `refillBlockedReason` string, nullable — rx_not_active | schedule_ii | refills_exhausted | rx_expired.
  - `suggestedProviderId` string, nullable
  - `suggestedDosage` string, nullable
  - `suggestedFrequency` string, nullable
  - `suggestedDuration` string, nullable
  - `suggestedInstructions` string, nullable
  - `suggestedRefillsAllowed` union
    - integer
    - string, int32
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Other responses

- `400` — Bad Request
- `403` — Forbidden
- `409` — Conflict

---

[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/e7d381a5453b/schema)
