METRC v2 integration
25 endpoint groups, 270 endpoints, environment-aware sandbox ⇄ production with facility-scoped credentials.
Batchy is the single-file platform that runs your cannabis distribution & manufacturing day — package tracking, fail-closed METRC writes, manifests, invoices, and a buyer portal — all audited, all in one place.
From the first METRC call to the last invoice, every part of the distro & manufacturing workflow lives in Batchy — nothing bolted on, nothing to integrate.
25 endpoint groups, 270 endpoints, environment-aware sandbox ⇄ production with facility-scoped credentials.
No live METRC write happens without a signer / date / document-hash authorization. High-risk, irreversible categories require a second-person approval.
Every write logs its authorization category, request/response hashes, a redacted response body, approval metadata, and operator notes.
Package and inventory tracking that imports the official METRC “Condensed Inventory” XLSX and reconciles METRC qty vs. physical on-hand.
A package is only sellable once its test status is passed. Untested packages are blocked from invoices, pickers, the buyer menu, and the cart.
A Transfers hub mirroring METRC licensed transfers, plus a receiving board: count / weigh-to-verify against the manifest with discrepancy flags.
Turn bulk into retail children with finish-source and full lineage — the manufacturing side of the warehouse, tracked end to end.
Build transport manifests with free OSRM routing on Manifest Assist — origin-to-stop directions without a paid maps key.
Invoices plus a dedicated finance role with Accounts-Receivable reconciliation and a morning Order Queue.
Strains are first-class, with a merge-duplicates tool. The canonical name (Brand | Strain | Type | Weight) previews live and snaps back in one click.
A self-service B2B portal with its own session and login throttling — fully isolated from the staff app.
A brand-aware importer that preserves your live Weedmaps external_id as the source of truth, minting a standardized SKU only as a fallback.
Public, tokenized, no-index menu pages — a shareable storefront menu without exposing the rest of your operation.
A loyalty program with hardened image / receipt uploads — validated and re-encoded on the way in.
Platform → organization → brand. Every read is brand/org-scoped and every by-id write authorizes its tenant. The IDOR class is closed, proven 107/107.
Staff management, sensitive-action re-authentication, gzip SQLite backups with restore tests, and a Launch Status page.
Batchy was shaped on a real warehouse floor. The whole receive-to-cash loop is implemented end to end — each phase letter maps to a shipped capability.
Log an expected delivery, then count / weigh-to-verify against the manifest with discrepancy flags before it touches inventory.
Submit for testing — Batchy computes the lab sample weight and an expected-pass date. Only passed packages become sellable.
Split bulk into retail children with finish-source and lineage, so every child traces back to its parent package.
Strains and items as first-class entities with guided creation, plus canonical-name drift repair that snaps names back to spec.
List to the buyer portal, the Weedmaps catalog, and tokenized MenuMaker pages — then cut invoices against on-hand stock.
A finance role closes the loop with Accounts-Receivable reconciliation and a morning Order Queue.
Drop one file on shared hosting and load the page — the database creates itself. That's the entire install.
Batchy treats compliance as the default state, not a checkbox. Where it matters, it refuses to act rather than guess.
.htaccess denies dotfiles, database/log/backup extensions, directory listing, and code execution inside uploads/.busy_timeout kills concurrent-write 500s; staff UI output is DOM-XSS escaped.Tell us about your facility and what you're running today. We'll show you the receive-to-cash loop on real METRC data — sandbox first, no commitment.