Cannabis Dispensary POS: Metrc Track-and-Trace That Reconciles, ID Checks That Hold the Line, Flower-to-Edible Inventory That Stays Exact, and Close That Survives an Audit
Run a cannabis dispensary where every gram scans against Metrc without end-of-day mismatches, every sale clears a 21+ ID check with purchase limits enforced at the register, flower, pre-rolls, edibles, vapes, and topicals stay exact to the package tag, and cash-heavy close reconciles to the penny so a state audit is a non-event.
The NoPOS developer relations team writes practical guides for building on the NoPOS REST API — from first smoke test to production POS.
Friday at five: that is the whole reality of the category. The lobby holds twelve budtenders calling names off a queue while the express-pickup window runs forty online pre-orders that need ID verification plus package-tag assignment plus loyalty points, a delivery driver waits on six manifests that need route, vehicle, and departure-time logging plus per-stop package tags, the vault holds flower in eighths plus pre-roll multipacks plus a wall of edibles in 5mg and 10mg tiers plus vape carts plus tinctures plus topicals plus a medical-patient shelf with tax-exempt SKUs — while wholesale manifests, retail sales, and Metrc transfers land in three different piles. A generic register treats every sale like a T-shirt, so the 1oz purchase limit gets enforced on paper instead of at the till, package tags assigned at intake never match what the budtender scanned at sale, the cash drawer drifts five percent from the reported total by Sunday, and the monthly Metrc reconciliation becomes a weekend of spreadsheet archaeology. Build the flow around the single truth of dispensaries — every gram belongs to a state-tracked package tag, every sale belongs to a verified adult under a daily limit — and the store sells at full margin instead of writing off its way through every audit.
Sell compliant, not just fast
Dispensary inventory is state-tracked packages, and it dies on manual tag entry. Hold every sale as a compliance event — Metrc or BioTrack package tags assigned at intake and scanned at sale so the gram leaves the exact package the state thinks it left, per-transaction and per-day purchase limits enforced at the register by product equivalence instead of budtender math, 21+ ID scan at check-in and at tender so the underage sale never reaches the till, medical-versus-recreational tax rules applied from the patient credential instead of cashier memory — with intake that reconciles the wholesale manifest against what arrived before anything hits the shelf, and transfer logging that records every vendor delivery and inter-store move the moment it happens instead of at close. Handle the sales-floor reality: queue management with check-in, budtender assignment, and ready-for-pickup paging that keeps the lobby from stacking twenty deep, online pre-orders with package pre-allocation so the express window hands over a sealed bag instead of picking from the case, delivery manifests with per-stop tags, driver credentials, and vehicle logs that satisfy the transport rules, and cash discounts and penny-rounding handled per tender type instead of per guess. Every gram belongs to a package tag on a dated sale, and when the register sells compliance by default, the line moves instead of stalls.
Run the ID and limit line, don't argue it at the register
Age gates and purchase limits are the license, and they die on visual checks. Verify every customer — government ID scan at the door that flags expired, underage, and out-of-state IDs before they reach a budtender, purchase-limit ledgers that accumulate flower-equivalent ounces across flower, pre-rolls, concentrates, and edibles in the same visit instead of per SKU, medical patient verification with recommendation expiry and elevated limits that apply automatically from the credential instead of a manager override — so no illegal sale goes through and no legal sale gets refused. Handle the door reality: first-visit intake with consent, contact, and preference capture that routes the customer to the right budtender instead of a clipboard line, loyalty and visit-history lookup by phone or ID scan that applies points and birthday deals without slowing the queue, daily-limit resets that track the rolling 24-hour window the way the regulation reads instead of the calendar day, and refused-sale logging with reason codes so the attempted underage or over-limit sale is documented instead of invisible. When every customer belongs to a verified identity on a dated visit with accumulated limits, the license holds instead of wobbles. Door, register, and delivery all reconcile from the same identity.
Count the package, don't shrug the vault
Cannabis inventory is packages with birthdays, and it dies in the bulk bin. Track every unit — flower by strain, weight tier, and harvest batch with package tags that decrement by exact grams instead of rounded eighths, pre-rolls by count and infused-versus-non-infused with per-unit tags that flag the case-count drift before it becomes a variance report, edibles by milligram tier and serving count with child-resistant-packaging flags that block the sale of non-compliant stock, concentrates, vapes, and tinctures by batch with lab-result linkage so a failed test quarantines the whole lot in one action — so nothing leaves the vault unlogged. Handle the vault reality: weight-based receiving with scale integration that records actual grams against the manifest instead of label weight, waste, damage, and sample logging with state reason codes that write the loss off compliantly instead of vanishing it, cycle counts by package tag that reconcile the shelf against Metrc weekly instead of discovering a 200-gram gap at month-end, and quarantine holds that freeze suspect lots across every register and the online menu simultaneously. When every gram has a package, a weight, and a state, the vault stays exact instead of approximate.
Ring the accessories, the merch, and the deals
Non-cannabis revenue is the margin layer, and it dies in the case clutter. Ring every add-on — glass, grinders, papers, and lighters with normal retail inventory that doesn't need a package tag but still needs a par level, branded merch with size runs that flag the refill before the 4/20 run instead of during it, consumption accessories and storage with bundle pricing that attaches to the flower sale instead of a second transaction — so the average ticket climbs instead of flatlines. Handle the counter reality: mix-and-match edible deals, ounce specials, and vendor-sponsored discounts that apply automatically from the cart instead of budtender memory, happy-hour and first-time-patient pricing with time windows that start and stop themselves instead of lingering a week, loyalty points that accrue per dollar and redeem per tier without manual adjustment, and ATM and cashless-ATM fees with per-tender reconciliation so the cash drawer, the kiosk, and the reported total agree. When every accessory, deal, and point belongs to a verified sale, the upsell compounds instead of confuses.
Close the day across registers, vault, and Metrc
Dispensary close spans three truths: the drawers, the vault, and the state. Count cash against each register by tender type including ATM withdrawals and delivery cash drops, reconcile card and cashless-ATM batches including online pre-order captures taken days ago, and split the period by stream — flower revenue with grams-per-ticket and per-budtender yield so the dead Tuesday earning a third of the Friday rush shows up plainly, edibles and vape revenue with units-per-customer and deal-discount rates tied to the day's foot traffic, and accessory revenue with attach rates tied to flower transactions. Then add the compliance layer: package-tag sales versus Metrc reported sales with zero unexplained variance, purchase-limit exceptions and refused sales logged with reason codes, waste and sample write-offs with state codes still outstanding, delivery manifests with per-stop signatures closed, and tomorrow's ops sheet with vault par levels, staffing counts by queue window, delivery routes, and wholesale deliveries expected ready before doors open. When registers, vault, and Metrc all reconcile from the same system, close takes minutes, the audit is a printout, and tomorrow's opening starts from facts.
Build from the current contract
Open the gateway for OpenAPI, Swagger, AGENTS.md, llms.txt, and the first X-API-Key smoke test.
More from NoPOS Blog
Comic Book & Trading Card Shop POS: Singles Cases That Price Themselves, Sealed Product That Never Goes Phantom, Buylists That Settle on the Spot, and Tournament Nights That Ring Without the Line
Run a comics and TCG shop where every graded slab and raw single carries a live price instead of a faded sticker, every booster box and sealed case tracks from distributor allocation to shelf instead of a back-room guess, every buylist card pays out in cash or trade credit on the spot instead of a handshake IOU, and prerelease and Friday-night events sell seats, packs, and singles from the same numbers.
Industry GuideFuneral Home & Memorial Services POS: Arrangements That Itemize to the GPL, Merchandise That Tracks to the Vault, Chapels That Schedule Without Doubles, and Trusts That Reconcile
Run a funeral home where every at-need arrangement itemizes to the General Price List instead of a bundled guess, every casket and urn tracks from selection room to committal instead of a memory, chapel and visitation rooms never double-book, and pre-need contracts, insurance assignments, and trust deposits reconcile from the same numbers.