GLP-1 fulfilment: recurring, cold-chain, by API, at volume
Semaglutide and tirzepatide programmes combine four hard things at once. Pharmacy Flow handles each with a specific mechanism, and this page names them.
A compounded GLP-1 programme is a fulfilment operation with a pharmacy licence. Orders arrive from telehealth platforms by API, most are recurring, every one ships cold, and the volume moves in surges that outrun any manual process. Pharmacy Flow was shaped around this pattern. Below, each pressure is paired with what the platform actually does about it, and where something is still manual we say so.
Intake by API, gated by licence
A telehealth partner submits an order with a variant SKU, a quantity, a ship-to state and its own order id. Before the order is accepted, the platform checks the tenant's nonresident-pharmacy licence for that state: no licence, an expired one, or a controlled product into a state that forbids it, and the order is created On Hold with the reason and an order.held webhook goes back to the partner. The check fails closed. A retried call with the same client order id returns the existing order instead of creating a second one. Routing then picks a facility that compounds the family, preferring a pinned site, then a site in the ship-to state, then the least loaded. The full request and response shapes are on the telehealth API page.
API orders land in the same workbench as everything else, with eligibility and routing reason on each.
Recurring orders and next-fill dates
An order submitted with recurring: true and a cadence (30 days by default) is stored with a subscription id, refill number 1, a next-fill date and an active status. The Subscriptions module lists every recurring order with its cadence, refill number and next fill, flags overdue ones, and lets staff pause, reactivate or cancel a subscription. Partners see the same in their portal. When a prescription backs the order, the refill action checks the DEA rules for the schedule (no Schedule II refills; at most five within six months for III–V) and the state licence again before the refill order is created.
What is manual today: the next fill is created by a staff action, not by a scheduled job. Overdue subscriptions are visible and the churn-risk figure in Insights counts them, but an automated refill scheduler is on the roadmap. We would rather you plan a daily refill run than discover this after go-live.
Cold chain from pack to delivery
Packout by family, readings against 2–8 °C, holds on excursion
At the pack station the product family decides the packout: GLP-1 families get an insulated packout with gel packs and an expedited healthcare service, and the parcel is flagged cold-chain. On the floor, the wave planner sends GLP-1 picks to the Cold zone with a scan-plus-cold-pack acceptance step.
A temperature reading recorded on a cold-chain parcel is checked against 2–8 °C. Out of range marks an excursion, opens a QA hold and moves the parcel to Exception. Neither a staff action nor the carrier's delivery scan can move that parcel to Delivered while the hold is open; a user with the QA release permission records a disposition to lift it, and the excursion stays on the record.
Carrier scans arrive by webhook and are stored once each, keyed on the carrier's event id, so a retry never duplicates the journey. Delivery cascades to the order and to the partner's order.delivered webhook. The cold-chain shipping guide covers packout and excursion practice in detail.
Strengths as variants, units as serials
A GLP-1 formulation has one bill of materials and many variants: each strength and fill volume is a variant with its own SKU, and the partner API accepts a variant, never a free-text product. A batch is made for one variant; its finished lot is tagged with that variant; and the fill station will only dispense a unit for an order from a lot of the order's own variant, earliest BUD first. Each unit gets a serial and an SGTIN at fill, is bound to its parcel at pack, and is checked at verify (belongs to the order, packed, not recalled, not past BUD) before the ship station will release the order. A recall on a lot traces every dispensed unit to its brand, patient reference and parcel. See the compounding software page for the batch record and the serialisation guide for the identifiers.
Every unit, its lot and batch, its order and brand, and its current status: the population a recall is scoped from.
Run one GLP-1 order end to end
Bring a semaglutide variant and a partner's ship-to state. We will submit it by API, watch the licence gate, plan the wave, pack it cold, record a reading, fail the verify on purpose and ship it, on a tenant you keep.
Running out of active ingredient mid-surge is the GLP-1 failure mode that hurts most. The Demand & Planning module reads each variant's actual fills over the trailing thirty days, scales them to the horizon, explodes the demand through every variant's bill of materials into material requirements, compares them to available stock and produces a shortfall, weeks of cover and a suggested order (shortfall plus about two weeks of safety) per material. One action drafts purchase orders grouped by preferred supplier. Weekly buckets are projected with Holt-Winters once there are two weeks of history. The anomaly scan flags materials short against the forecast and below reorder point, and offers the draft-PO action inline. Detail is on the inventory page.
From a surge to a batch
When demand jumps, the batch planner shows what a run of a given size will draw, from which lots and at what cost per fill, before it is committed. Lots are drawn first-expiry-first, and a batch's BUD is floored by the soonest expiry among the lots consumed, so a short-dated API lot never yields a long-dated finished lot.
The floor at volume
At thousands of shipments a day the pharmacist is not the constraint; the floor is. The execution layer plans open orders into waves, emits pick, pack and sort tasks per order with cold-chain flags, dispatches them to people (and, through the task API, to machines) and tracks each to done. Pack-verify and the ship interlock are scan-gated stations; the database refuses to mark an order shipped without a recorded verification. Parcels aggregate into SSCC cartons and pallets for carrier handoff. What is shipped and what is on the roadmap is set out plainly on the fulfilment automation page, and the board itself on the Control Tower page. The GLP-1 operations playbook is the practitioner's version of this page.
What the partner and the pharmacy see
◳
Partner portal
The brand's orders, shipments, subscriptions with next-fill dates, contracted catalogue, billing from the rate card, performance and webhook health. Row-level security limits each partner to its brand.
⇆
Webhooks
order.received, order.held, order.shipped (with carrier, tracking, ETA and SSCC), order.delivered and recall.initiated, HMAC-signed and retried from an outbox.
✦
Insights
On-hold orders by state, subscriptions at churn risk, on-time delivery, materials short against forecast, and a written briefing when configured.
$
Finance
Revenue from rate cards, cost per fill from lots and labour, margin per variant, receivables by partner.
☎
Cases
Support cases opened from the portal or by staff, with category, priority and SLA hours.
◎
Control Tower
Waves, tasks and resources live, with cold-chain and controlled flags on every task.
The partner's view: their orders, shipments and subscriptions, nothing else.
Compliance notes for GLP-1
Compounded GLP-1 products sit in a regulatory position that has changed repeatedly. Pharmacy Flow does not decide whether you may compound a given product; it records what you did, gates shipments on the licences you hold, and traces every unit. The state-licence table, the controlled-allowed flag per state and the eligibility notes on held orders are the operational half of compliance. The regulatory half is yours and your counsel's.
By POST /api/orders with a per-brand key, a variant SKU, quantity, ship-to state and their own order id, or through the partner portal's submit form. Both run the same fail-closed licence gate and routing.
Does the platform refill subscriptions automatically?+
Not yet. Recurring orders carry cadence, refill number and next-fill date, overdue ones are flagged, and staff generate the next fill. An automated scheduler is on the roadmap.
What happens on a temperature excursion?+
The reading is stored, the parcel is marked excursion and Exception, and a QA hold opens. Delivery is blocked, by staff or by the carrier feed, until a QA-release user records a disposition. The reading remains on the record.
How does the system choose cold-chain packout?+
By product family at the pack station: GLP-1 families get insulated packout with gel packs and an expedited healthcare service, and the parcel is flagged cold-chain. The wave planner sends the pick to the Cold zone.
Can a unit of the wrong strength be dispensed?+
No. A unit is only commissioned from a finished lot tagged with the order's exact variant, earliest BUD first, and the verify station checks that the scanned serial belongs to the scanned order.
How do we avoid running out of API?+
Demand & Planning turns trailing-30-day fills into material requirements through each variant's bill of materials, shows shortfall and weeks of cover, and drafts purchase orders by supplier in one action. The anomaly scan raises shortfalls and below-reorder materials.
Where do recalls start for a GLP-1 lot?+
From the finished lot. Every dispensed unit is traced to its brand, patient reference, state and parcel; units are flagged recalled so they fail verify; partners get an email and a recall.initiated webhook; dispositions are tracked per unit.
A working platform, not a slide deck. Book a walkthrough and we'll run a real order from intake to carrier lane — or explore the public directory first, no account needed.