GuidesMETRC field guides for Rhode Island
METRC’s StrainName is an ingredient, not the product name: Rhode Island requires a strain on infused items, so the two fields diverge by design
On 2026-07-24, on Rhode Island production, one cultivator (Micro class) had an infused pre-roll item whose Name was of the form <flavour> Infused Preroll 1.2g and whose StrainName named a different strain: the material the pre-roll had been infused from. All 5 of that cultivator’s items for the product carried the same StrainId, and GET /strains/v2/active at the facility returned 63 strains, none matching the product’s name. The same day, GET /items/v2/categories reported RequiresStrain: true on 4 categories, Infused Pre-Rolls among them, out of the 21 item categories Rhode Island served when the full table was read on 2026-07-28. METRC forces a strain onto those products, so an infused product sold under a flavour name carries a strain that is not its name, by construction.
- Observed
- Revised
- Environment
- Rhode Island production and sandbox
What this page is
This page records what SeedLink’s production integration observed about the Name and StrainName fields of a METRC item in Rhode Island, with the date and the read-only call behind each observation, and the display rule SeedLink adopted once the two were understood as different facts. It is not METRC documentation and it is not regulatory guidance: it describes how the API answered for licensed Rhode Island cultivators on the dates given.
It is not a naming convention either. What a facility types into an item’s Name is that facility’s choice; this page is about what the API returns for the item afterwards, which field means what, and why an integration that prints one of them as the other reads as having packaged the wrong product. Other states run their own METRC instances, and their category flags were not read.
How every number on this site is observed, dated and bounded is on the methodology page, which also lists what SeedLink does not publish.
Name is the product, StrainName is what it was made from
Every METRC item carries both fields. Name is what the facility called the product when it created the item. StrainName, with its numeric StrainId, is the strain the product was made from: an ingredient. For plain flower the two say the same thing, because the strain is the product. For anything infused or blended they are different fields carrying different information, and an integration that treats one as the other prints a name the buyer never ordered.
| Field | What it is | On the item read |
|---|---|---|
Name | The product, as the facility named it when the item was created | Of the form <flavour> Infused Preroll 1.2g |
StrainName | The strain the product was made from: the genetics, not the product | A different strain: the material the pre-roll was infused from |
StrainId | The numeric id of that strain; every item made from the same material carries the same one | One id, shared by all 5 of the cultivator’s items for the product |
ProductCategoryName | METRC’s category for the item | Infused Pre-Rolls |
RequiresStrain | A flag on the category, from GET /items/v2/categories: whether an item in it must carry a strain | true for Infused Pre-Rolls |
The item that first surfaced this was read through GET /items/v2/{id} on 2026-07-24 at one Rhode Island production cultivator facility (Micro class), with no writes. Rendering its StrainName as the product name printed the infusion material everywhere the row appeared, and the cultivator reported that the integration was showing the wrong product name. METRC was right and the display was wrong.
What ruled out the easy explanations
A single mis-keyed item would be a data-entry story. Three further observations, all made the same day and all read-only, showed it was not one.
- All 5 of the cultivator’s items for that product carried the same
StrainId. Every size and pack of the product pointed at the same strain, which is what a facility does when the strain really is the material the product is made from. GET /strains/v2/activeat the facility returned 63 strains, and none matched the product’s name. METRC had no better strain to point at: the product is a flavour, not a strain on the facility’s list.- The item’s
ProductCategoryNamewasInfused Pre-Rolls, a category on which Rhode Island setsRequiresStraintotrue. The strain was on the item because the category demanded one, not because anyone chose to display it.
So the strain that looked wrong was the correct answer to the question the field asks: what was this made from. The error was in the integration, which had resolved the display name as StrainName, falling back to Name only when the strain was empty, into a single name column that every surface read. On a flower catalog that rule is invisible, because the strain is the product; the first infused product exposed it.
Rhode Island requires a strain on four categories
GET /items/v2/categories returns one row per item category, and each row carries a RequiresStrain flag. Read on 2026-07-24 on Rhode Island production, the flag was true on 4 categories.
| Category | RequiresStrain | What it means for Name and StrainName |
|---|---|---|
Infused Pre-Rolls | true | An infused pre-roll must carry a strain. Its selling name is a flavour, so the two fields differ by construction |
Infused Bud/Flower | true | Infused flower must carry a strain. Sold under a flavour name, it diverges the same way |
Pre-Packaged Bud | true | A strain is required, and a name of the form <strain> <size> agrees with it: the strain is the product |
Raw Pre-rolls | true | A strain is required. A name that is the strain plus packaging noise agrees with it; any other name is a distinct identity |
Rhode Island served 21 item categories when the full table was read live on 2026-07-28 at one production cultivator facility. Among the categories it surfaces are Bud/Flower, Shake/Trim, Shake/Trim (by strain), Pre-Packaged Bud, Concentrate, Raw Pre-rolls and Seeds. The flag sits on the category, not on the item.
The consequence is structural, not a quirk of one cultivator. METRC forces a strain onto infused products, so any infused product whose selling name is not a strain name diverges by construction, at every facility that makes one. The divergence is not a data problem to clean up; it is the two fields doing their jobs.
Only Rhode Island was read. Whether other states set the flag on the same categories is not something this page can say.
The rule SeedLink adopted on 2026-07-28
Once the two fields are understood as two facts, the row has to carry both, and one place has to choose which one a reader sees. SeedLink’s catalog row now holds the item name beside the strain name, and a single function decides which of them is the display name. The rule it applies has three parts.
- The strain wins when the item name is the strain plus packaging noise, which is ordinary flower:
Strain A 3.5grenders asStrain A. - Otherwise the item name is a distinct identity and wins, with size and pack tokens trimmed, because every surface prints size in its own column:
Flavour X Infused Preroll 1.2grenders asFlavour X Infused Preroll. - A buyer-required branded name of the form
<brand>-Preroll-1.2g-<product>-Recis a label-printer convention, not a human name, and is unwrapped to its product segment.
| Item Name | StrainName | What renders | Why |
|---|---|---|---|
Strain A 3.5g | Strain A | Strain A | The name is the strain plus a size token; the strain is the product |
Strain A | Strain A | Strain A | Aligned with no noise at all; either field gives the same answer |
Flavour X Infused Preroll 1.2g | Strain B | Flavour X Infused Preroll | The name is a distinct identity; the size token comes off because the size column prints it |
Flavour X Infused Preroll 1.2g - 3 pack | Strain B | Flavour X Infused Preroll | Same identity; the pack token comes off for the same reason, and the pack is a separate item (see below) |
Brand-Preroll-1.2g-Flavour X-Rec | Strain B | Flavour X | A branded label-printer name, unwrapped to its product segment |
The tempting simplification is to prefer Name always. It fails in the other direction: it renames every flower product, where the strain genuinely is the product, and trades one class of wrong name for another. So one function reads the name and decides, and it is the only place allowed to: a rule re-implemented in a component or a query drifts, and the same row then renders one way in the catalog, another on the invoice and a third on the buyer menu.
Live proof in both directions, with no writes
The rule was proven against a real sync rather than a fixture. On 2026-07-28 a live regression test drove a sync of 216 packages on the Rhode Island sandbox, writing nothing to METRC, and asserted both directions at once: a divergent item renders the product, and aligned flower still renders the strain.
Both directions matter because the two mistakes are symmetric: preferring the strain misnames every infused product, preferring the name misnames every flower product, and a test that checks only the reported case passes on a fix that breaks the other half of the catalog. The aligned-flower assertion is the one that guards against the tempting simplification above.
Where each endpoint carries the two values
The same two facts arrive under different field names depending on the endpoint, and one of the shapes has no nested item at all.
| Endpoint | Shape | Product name field | Strain field |
|---|---|---|---|
GET /items/v2/{id} | The item itself | Name | StrainName, with StrainId |
GET /packages/v2/active | Item nested inline on each package; no top-level ItemId | Item.Name | Item.StrainName |
GET /packages/v2/transferred | Flat: no nested Item | ProductName | ItemStrainName |
There is no top-level ItemId on an active package, so an integration that reads the package and then looks the item up by id has nothing to look up; the item is already there, inline, with its .Name, .StrainName and .ProductCategoryName. The transferred shape is the opposite: flat, with the same two values under ProductName and ItemStrainName and no nested Item.
In SeedLink the item name is a field METRC owns, overwritten on every sync, and it rides in on the package sync, which reads only /packages/v2/active. A package METRC no longer reports as active, because it shipped or was swept as stale, is never revisited, so a row synced before the field existed keeps a blank there for good, and historical orders on such rows keep rendering the strain on their invoices and exports. New orders are covered from the other end: when a manifest is attached, the name is written from the delivery payload’s ProductName. /packages/v2/transferred returns the item name for shipped packages if a backfill is ever wanted; SeedLink has left that backfill out of scope.
A multi-pack is a separate item with the same strain
The strain field also cannot tell a single from its multi-pack. On one Rhode Island production facility a multi-pack was a distinct METRC item from its single: the same category and the same strain, still counted Each, with UnitWeight equal to the pack count times the per-unit grams, and a name of the form <single> - N pack. A 3-pack of a 1.2 g single is a 3.6 g item (the field guide records that check without a date).
Two items, one StrainName, one ProductCategoryName. The name is the only field of the three that separates them: a second reason to read the name rather than the strain, and the reason the pack token is trimmed rather than the whole name discarded. <single> - N pack still says which product it is; the size column says how many.
Check it yourself with two read-only calls
Both questions on this page are answerable with GETs and no writes: what the item says, and whether its category demanded a strain.
GET https://api-ri.metrc.com/items/v2/{id}?licenseNumber=<your license>
Authorization: Basic <base64 of VENDOR_KEY:USER_KEY>
read Name, StrainName, StrainId and ProductCategoryName
GET https://api-ri.metrc.com/items/v2/categories
Authorization: Basic <base64 of VENDOR_KEY:USER_KEY>
find the row for the item’s ProductCategoryName and read RequiresStrain
(one Rhode Island production facility returned 21 rows on 2026-07-28)If that row says RequiresStrain: true and the item’s Name is not a strain, the divergence is by construction and there is nothing in METRC to correct. To see whether the facility even holds a strain with the product’s name, GET /strains/v2/active lists the active strains; at the facility above it listed 63, and the product’s name was not among them.
Questions
- Is METRC wrong when StrainName is not my product’s name?
- No.
StrainNamerecords the strain the item was made from andNamerecords the product. On the item read on 2026-07-24 the strain was the material the pre-roll had been infused from, which is exactly what the field is for. The integration that printed it as the product name was what was wrong. - Which categories force a strain onto an item in Rhode Island?
- On 2026-07-24
GET /items/v2/categoriesreportedRequiresStrain: trueon 4 categories:Infused Pre-Rolls,Infused Bud/Flower,Pre-Packaged BudandRaw Pre-rolls. Rhode Island served 21 categories in total when the table was read on 2026-07-28. - Why did the facility not point the item at a strain with the product’s name?
- It had none.
GET /strains/v2/activeat the facility returned 63 strains and none matched the product, because the product is a flavour, not a strain. All 5 of the cultivator’s items for it carried the sameStrainId: the material they were infused from. - Should an integration just show Item.Name everywhere?
- No. That renames every flower product, where the strain genuinely is the product, and trades one class of wrong name for another. Read the name: the strain wins when the name is the strain plus packaging noise, and the name wins otherwise, with size and pack tokens trimmed.
- Where is the item name on the transferred-packages endpoint?
GET /packages/v2/transferredis flat, withProductNameandItemStrainNameat the top level and no nestedItem.GET /packages/v2/activeis the other shape:Itemnested inline on the package, with.Nameand.StrainName, and no top-levelItemId.- Why do my older, shipped packages still show the strain?
- The item name arrives through the package sync, which reads only
/packages/v2/active, and a package METRC no longer reports as active is never revisited. Rows synced before the field existed keep a blank there./packages/v2/transferredreturns the item name for shipped packages if a backfill is ever wanted; SeedLink has not done one. - Is a 3-pack the same METRC item as the single?
- No. On one Rhode Island production facility the multi-pack was a distinct item with the same category and strain, still
Each, aUnitWeightof the pack count times the per-unit grams, and a name of the form<single> - N pack. A 3-pack of a 1.2 g single is a 3.6 g item. ItsStrainNamecannot tell it from the single; itsNamecan. - Was the display rule tested against real data?
- Yes, without writing to METRC. On 2026-07-28 a live regression test drove a sync of 216 packages on the Rhode Island sandbox and asserted both directions: a divergent item renders the product, and aligned flower still renders the strain.
Sources and how to cite this page
- GET /items/v2/{id} and GET /strains/v2/active at one Rhode Island Micro-class production cultivator facility, read-only, 2026-07-24.
- GET /items/v2/categories on Rhode Island production: the RequiresStrain flags read 2026-07-24, the full table of 21 categories read live at one facility 2026-07-28.
- A live regression test in the SeedLink repository driving a real 216-package sync on the Rhode Island sandbox, no METRC writes, 2026-07-28.
- SeedLink METRC field guide (docs/METRC.md), sections Item.StrainName is an ingredient, Categories, Sync, Transferred-package pricing, and Tier A (multi-pack items).
SeedLink, "METRC’s StrainName is an ingredient, not the product name: Rhode Island requires a strain on infused items, so the two fields diverge by design", observed 2026-09-07, revised 2026-09-20, https://www.seedlink.net/guides/metrc/strainname-is-an-ingredient
Every figure above carries the date it was observed and the environment it was observed in. A count belongs to one facility on one day; the field names, orderings and error messages are the durable part.
Machine-readable copy of this page, with the same facts, dates and sources: /guides/metrc/strainname-is-an-ingredient/data.json
Related
- METRC item UnitWeight in Rhode Island: it persists only when the category has RequiresUnitWeight true, and the PUT returns 200 either way
- METRC lab results in Rhode Island follow a package that was created before the results came back
- METRC serves the lab COA PDF for free in Rhode Island: one GET returns the raw PDF, and whether a document exists is a per-lab fact
- The Rhode Island METRC API returns an empty HTTP 200 when the required date filters are missing, and several other traps produce the same empty answer
- All metrc field guides for rhode island
- Methodology: what SeedLink publishes and what it does not