Skip to content

Report Endpoints

Every collection with a report has a path ending in /report, and most also have a super form that attaches related records, see Super Reports for what that adds.

The ones reached for most often:

Data Report Super report
Active Packages /v2/packages/active/report /v2/packages/active/super/report
Inactive Packages /v2/packages/inactive/report /v2/packages/inactive/super/report
Items /v2/items/report /v2/items/super/report
Active Harvests /v2/harvests/active/report /v2/harvests/active/super/report
Flowering Plants /v2/plants/flowering/report /v2/plants/flowering/super/report
Active Sales /v2/sales/active/report /v2/sales/active/super/report
Incoming Transfer Manifests /v2/transfers/incoming/manifest/report (none)
All 40 report endpoints
Data Report Super report
Active Packages /v2/packages/active/report /v2/packages/active/super/report
Inactive Packages /v2/packages/inactive/report /v2/packages/inactive/super/report
In Transit Packages /v2/packages/intransit/report /v2/packages/intransit/super/report
On Hold Packages /v2/packages/onhold/report /v2/packages/onhold/super/report
Transferred Packages /v2/packages/transferred/report (none)
Items /v2/items/report /v2/items/super/report
Active Harvests /v2/harvests/active/report /v2/harvests/active/super/report
Inactive Harvests /v2/harvests/inactive/report /v2/harvests/inactive/super/report
On Hold Harvests /v2/harvests/onhold/report /v2/harvests/onhold/super/report
Vegetative Plants /v2/plants/vegetative/report /v2/plants/vegetative/super/report
Flowering Plants /v2/plants/flowering/report /v2/plants/flowering/super/report
On Hold Plants /v2/plants/onhold/report /v2/plants/onhold/super/report
Inactive Plants /v2/plants/inactive/report /v2/plants/inactive/super/report
Active Mother Plants /v2/plants/mother/active/report /v2/plants/mother/active/super/report
On Hold Mother Plants /v2/plants/mother/onhold/report /v2/plants/mother/onhold/super/report
Inactive Mother Plants /v2/plants/mother/inactive/report /v2/plants/mother/inactive/super/report
Active Plant Batches /v2/plantbatches/active/report /v2/plantbatches/active/super/report
On Hold Plant Batches /v2/plantbatches/onhold/report /v2/plantbatches/onhold/super/report
Inactive Plant Batches /v2/plantbatches/inactive/report /v2/plantbatches/inactive/super/report
Active Sales /v2/sales/active/report /v2/sales/active/super/report
Inactive Sales /v2/sales/inactive/report /v2/sales/inactive/super/report
Available Tags /v2/tags/available/report /v2/tags/available/super/report
Used Tags /v2/tags/used/report /v2/tags/used/super/report
Voided Tags /v2/tags/voided/report /v2/tags/voided/super/report
Current Tag Orders /v2/tagorders/current/report /v2/tagorders/current/super/report
Historical Tag Orders /v2/tagorders/history/report /v2/tagorders/history/super/report
Active Processing Jobs /v2/processingjobs/active/report /v2/processingjobs/active/super/report
Inactive Processing Jobs /v2/processingjobs/inactive/report /v2/processingjobs/inactive/super/report
Strains /v2/strains/report /v2/strains/super/report
Active Locations /v2/locations/active/report /v2/locations/active/super/report
Incoming Active Transfers /v2/transfers/incoming/active/report (none)
Incoming Inactive Transfers /v2/transfers/incoming/inactive/report (none)
Outgoing Active Transfers /v2/transfers/outgoing/active/report (none)
Outgoing Inactive Transfers /v2/transfers/outgoing/inactive/report (none)
Rejected Transfers /v2/transfers/rejected/report (none)
Hub Transfers /v2/transfers/hub/report (none)
Incoming Transfer Manifests /v2/transfers/incoming/manifest/report (none)
Outgoing Transfer Manifests /v2/transfers/outgoing/manifest/report (none)
Rejected Transfer Manifests /v2/transfers/rejected/manifest/report (none)
Hub Transfer Manifests /v2/transfers/hub/manifest/report (none)

Notes on particular reports

Six groups do not behave like the rest. Read the one that covers the path you picked.

On hold and inactive plant reports exclude mother plants

The pooled and mother-specific reports partition your plants rather than overlap, so there is no double-counting, but if you want every on hold plant, request both /v2/plants/onhold/report and /v2/plants/mother/onhold/report and combine them.

Transfer reports have no super form

They return one row per transfer, with no include support. If you need the packages or transporters on each transfer, use a transfer manifest report (below) or page through a supercollection such as /v2/transfers/outgoing/active/super.

Transfer manifest reports work differently from every other report

They load packages and transporters for each transfer automatically; there is no include to add and no way to switch it off, then cross-join the result, so you get one row per package per transporter rather than one row per transfer. That is why their columns are prefixed by the object they came from (transfer., package., transporter., plus delivery. and transporterDetails. on outgoing, and transporterDetails. only on hub). Because that loading is automatic, there is no super form to graduate to. A super variant of each briefly existed and has been removed: it returned the same columns while making the loading opt-in, so a request without an include came back empty. If you were calling one, drop /super from the path, the report in the table is a superset of what it did.

Two things follow that surprise people:

  • rowLimit counts transfers, not rows. It is applied before the join, so &rowLimit=100 can return several hundred rows.
  • They cost budget even though they are plain reports. Loading related data for every transfer means these reports run out of the Metrc request budget at roughly 5,000 transfers, well before the 50,000 row cap their documentation shows. Filter to a date range or add &rowLimit=5000.

Hub transfer reports cover the transfers you transport

These are the rows on Metrc's "Transfers Hub" page, where your license is neither the shipper nor the recipient, so they appear in no other transfer report. Two things make them unusual:

  • There is no active/inactive split. Metrc serves the whole collection from one path with no state parameter, so there is a single /v2/transfers/hub/report rather than the active/inactive pair every other transfer collection has.
  • The manifest form is the cheapest of the three: at one Metrc request per transfer instead of two or four. Metrc returns the delivery and the transporter already flattened onto the record and embeds the driver legs, so packages are the only thing left to fetch. Those flattened fields appear under transfer.; there is no delivery. or transporter. group. transporterDetails. shows the first driver leg only; when transfer.multiVehicle or transfer.isLayover is true, the remaining legs are in the JSON response but cannot be represented in a flat grid. Both flags are in the default columns so you can tell when that is happening.

Tag orders use current and history rather than active/inactive

Those are Metrc's own names for the two tabs on its tag orders page, and the paths mirror them. Note that history here is a state of the collection, unlike /v2/packages/history, which is one package's audit trail. Each tag order carries its line items in a details array, returned with the order itself rather than through an include.

Processing jobs are currently Oregon-only

Metrc exposes the Processing module in Oregon; licenses in other states will get an empty report rather than an error. Unlike the other new collections these do have includes (createdPackages, sourcePackages and history) so the super report is a real one, and rowMode applies. Note that a job record also carries a packages array inline: that is Metrc's own partial projection, with processingJobId zeroed out on every entry, so use include=sourcePackages when you need those packages joined.

Some super reports add nothing

The tag, tag order, strain and location super reports return the same columns as their plain form. Metrc exposes no related data for those objects, so there is nothing extra for a super report to attach; they exist so every path follows the same pattern.

Next Steps