Metrc
Metrc reporting for Oklahoma dispensaries, step by step
Metrc is the state track-and-trace system your sales are reported to. This guide explains how reporting works day to day, how to set it up, and how to clear the errors that stop sales from getting through.
Not legal advice. This is a practical operating guide. Rules change: check the current Oklahoma Medical Marijuana Authority (OMMA) rules, and your own counsel, before relying on any of it.
How sales reporting works
Every regulated item you sell comes out of a package that carries a Metrc tag. When the sale is complete, your point of sale sends a sales receipt to Metrc listing each package and the quantity sold, in that package's unit of measure. Metrc then lowers the package's quantity. If the receipt never arrives, your shelf count goes down but Metrc's does not, and the two start to disagree.
Three things have to be right for a receipt to be accepted:
- The key: the Metrc user API key used to send it must be active and have permission for sales at your license.
- The package: it must exist at your facility, be active, and not be in transit or finished.
- The line: quantity and unit of measure must match how Metrc tracks that package; a package Metrc counts by the each cannot be reported in grams.
Setting up the connection
- License number. Your facility's license number tells Metrc which facility you are.
- User API key. Generated in Metrc by a user who has the right facility permissions. If that user is deactivated, loses the facility assignment or regenerates the key, reporting stops.
- Check each permission area. Metrc grants access per area: packages, incoming transfers, sales receipts, items and lab results. A key can be valid and still be locked out of one area.
- Personal keys, if you use them. Some stores give staff their own Metrc keys so sales report under the person who rang them. Then every one of those keys has to stay valid too.
- Make a first real sale and confirm it in Metrc. A permissions check is read-only; only a real receipt proves writes work.
A daily reporting routine
- Open the list of failed or pending Metrc sales. The target is zero sales older than a day.
- For each failure, read Metrc's reason. Sort them into "fix the data, then retry" and "fix the key, then retry".
- Look for any sign that Metrc is refusing your store's key (authentication errors, 401 or 403). That stops all reporting and needs fixing first.
- Check that yesterday's voids reached Metrc. A sale voided in your POS but still recorded in Metrc means Metrc still counts the goods as sold.
- Glance at the sync history for anything Metrc refused overnight: adjustments, package moves, finishes.
Common errors and fixes
| Error or symptom | Likely cause | Fix |
|---|---|---|
| 401 or 403 on every call | The key is invalid, or the Metrc user lost permissions or facility access. | In Metrc, confirm the user is active and has the permissions; re-enter the key; retry. |
| 401 only on one area | The key is valid but not authorized for that area at this license. | Ask your Metrc account administrator to grant that permission. |
| Package "does not exist in the current Facility" | The package was transferred out, or the tag on the sale is wrong. | Correct the package or sale data, then retry. Resending unchanged will not help. |
| Package "in Transit" or "has been Finished" | The package has not been received yet, or was finished early. | Receive or unfinish the package in Metrc, then retry. |
| "The Unit of Measure … is invalid for Package" | The sale line's unit does not match the package's unit in Metrc. | Set the package's unit to Metrc's (Each or Grams), then retry. |
| Medical sale held back | The patient on the sale has no license number on file. | Add the license number to the customer record, then retry. |
| Regulated item sold from an untagged package | A package was created without its Metrc tag. | Add the tag to the package, then retry. |
Voids and returns
A void in your POS should also remove the receipt from Metrc. If Metrc refuses the void, for example because the receipt was already finalized, or the void never reached Metrc, you now have a sale your store considers cancelled that the state still counts. Void the receipt in Metrc directly, then check the package quantity. Returns put back on the shelf need their own Metrc adjustment so the package quantity comes back up.
How GreenPOS does it
- Setup: the Metrc User API Key and OMMA verification URL are on Settings → Compliance, and the facility License Number on the Store Info tab. The Metrc vendor key is set once by GreenPOS for every store.
- Check Permissions on the Metrc page tests authentication, inventory, incoming transfers, sales receipts, item catalog and lab results separately, read-only.
- Personal keys: staff can save their own Metrc key; sales they ring up are sent with it, while reads use the store's key. Test My Key checks it against your license.
- Compliance → Failed Transactions lists sales whose Metrc report failed or stayed pending over 24 hours, with Metrc's message and a Retry button. Sales from the last 90 days are resent automatically at the nightly sync (3 AM store time) and at the daytime compliance checks (10 AM, 2 PM, 6 PM and 10 PM). Sales Metrc refused for a data problem are retried about once a day; sales refused because of the key are retried at every check.
- Held back with a reason: a sale with an untagged package, a medical customer with no license number, or a package with no unit is held whole and listed with what to fix, so Metrc never gets a partial receipt.
- Metrc Sync History (a tab on the Compliance page) records every change sent to Metrc and Metrc's answer, including refusals and changes that never reached Metrc.
- Voids Metrc refused appear as a warning with the receipt number and a Retry void in Metrc button.
Questions owners ask
How quickly should a sale reach Metrc?
Check current OMMA and Metrc requirements for the exact deadline. Operationally, aim for every sale to reach Metrc the same day, and treat anything still unreported after 24 hours as urgent: the GreenPOS compliance score counts those as critical.
Why does Metrc refuse a sale that rang up fine?
The most common reasons are a key without the right Metrc permissions, a package that is no longer at your facility, in transit or finished, a unit of measure that does not match the package in Metrc, or a missing patient license number.
Does a passing permissions check guarantee sales will report?
No. Metrc grants read and write access separately, and a read-only check cannot rehearse a write. The next sale reaching Metrc is the final proof.
What happens to sales that failed while Metrc was down?
In GreenPOS they stay on Compliance, Failed Transactions and are resent automatically at the nightly sync and the four daytime compliance checks, for sales from the last 90 days.
See how GreenPOS handles this
We will walk through it on a real register with your own questions. Book a demo and bring your hardest compliance case.
Book a demo