{"title":"METRC item UnitWeight in Rhode Island: it persists only when the category has RequiresUnitWeight true, and the PUT returns 200 either way","url":"https://www.seedlink.net/guides/metrc/unit-weight-requires-unit-weight","json":"https://www.seedlink.net/guides/metrc/unit-weight-requires-unit-weight/data.json","question":"Why does METRC accept my item UnitWeight and then drop it?","answer":"Because `PUT /items/v2/` answers HTTP 200 whether or not the item’s category carries `RequiresUnitWeight: true`, and only a category with that flag keeps the value: read the flag from `GET /items/v2/categories`, and store a per-unit weight on your own side for every other category.","environment":"Rhode Island production and sandbox","observed":"2026-08-23","revised":"2026-09-20","published":"2026-09-20","facts":[{"id":"requires_unit_weight_flag","value":"RequiresUnitWeight is a per-category boolean on every row of GET /items/v2/categories, and it alone decides whether an item UnitWeight is kept","observed":"2026-07-09","source":"GET /items/v2/categories read beside a PUT and POST matrix, Rhode Island sandbox, one cultivator facility"},{"id":"matrix_scope","value":"7 categories live-tested: 3 with RequiresUnitWeight true and 4 with it false","observed":"2026-07-09","source":"PUT /items/v2/ and POST /items/v2 with UnitWeight, each followed by a read-back, Rhode Island sandbox, one cultivator facility"},{"id":"flag_true_put_persists","value":"On Shake/Trim, Infused Pre-Rolls and Pre-Packaged Bud, the 3 tested categories with RequiresUnitWeight true, a UnitWeight sent on PUT /items/v2/ persisted on read-back","observed":"2026-07-09","source":"PUT /items/v2/ followed by GET, Rhode Island sandbox, one cultivator facility"},{"id":"flag_true_post_400","value":"On a RequiresUnitWeight true category, POST /items/v2 without UnitWeight returned HTTP 400","observed":"2026-07-09","source":"POST /items/v2, Rhode Island sandbox, one cultivator facility"},{"id":"flag_false_put_drops","value":"On the four RequiresUnitWeight false categories Bud/Flower, Kief, Concentrate and Concentrate (each), PUT /items/v2/ and POST /items/v2 returned HTTP 200 and UnitWeight was silently dropped","observed":"2026-07-09","source":"PUT /items/v2/ and POST /items/v2 followed by GET, Rhode Island sandbox, one cultivator facility"},{"id":"put_200_body","value":"The PUT /items/v2/ response was HTTP 200 with the body {\"Ids\":[N],\"Warnings\":null}, with no warning when UnitWeight was dropped","observed":"2026-07-09","source":"PUT /items/v2/, Rhode Island sandbox, one cultivator facility"},{"id":"put_is_live","value":"A Name change persisted on the same PUT /items/v2/ call that dropped UnitWeight","observed":"2026-07-09","source":"PUT /items/v2/ followed by GET on an item in a RequiresUnitWeight false category, Rhode Island sandbox"},{"id":"wrong_facility_refusals","value":"A facility that does not own an item answers PUT /items/v2/ with HTTP 401, HTTP 404, or HTTP 400 with the body \"Item N does not exist at the current Facility.\"; the call requires licenseNumber and only the owning facility accepts it","observed":"2026-07-09","source":"PUT /items/v2/ during a facility walk, Rhode Island sandbox; the 400 shape was live-observed on this date, the 401 and 404 shapes were already handled and are undated in the field guide"},{"id":"production_unit_weight_category","value":"The only weight-based production packages carrying a unit weight belonged to Terpenes/Non Psychoactive Derivatives, the one concentrate category with RequiresUnitWeight true, and the weight was set at item creation","observed":"2026-07-31","source":"Read-only read of active packages at Rhode Island production cultivator facilities. The sources date this to July 2026 only, so the last day of that month stands as the ISO day"},{"id":"ri_item_categories","value":21,"observed":"2026-07-28","source":"GET /items/v2/categories at one Rhode Island production cultivator facility, read live; the whole table is pinned by a mapper test in the SeedLink repository"},{"id":"preflight_writes_nothing","value":"Since 2026-08-23 the SeedLink packaging pre-flight writes nothing to METRC. Measured before the change on a replica of one production catalog, its UnitWeight write logged \"updated\" and then \"did not persist\" on every run","observed":"2026-08-23","source":"SeedLink packaging pre-flight (check_uom) code change; the replica measurement is recorded with the change and carries no separate date in the field guide"},{"id":"cascade_verified","value":"A 7 g quarter of a strain that had only 3.5 g items created a \"<strain> - 7g\" item as Each, Pre-Packaged Bud, UnitWeight 7 Grams, and a re-run reused it rather than minting a second","observed":"2026-07-31","source":"SeedLink item-creation cascade, live-verified on the Rhode Island sandbox at one cultivator facility. The sources date this to July 2026 only, so the last day of that month stands as the ISO day"},{"id":"kilogram_mismatch","value":"A Kilograms-for-Grams mismatch on UnitWeightUnitOfMeasure multiplied a unit weight by 1,000 in one live packaging test","observed":"2026-06-30","source":"Live packaging test, June 2026; the sources record the month only, and the guard it produced, so the last day of that month stands as the ISO day"}],"constants":[{"value":2,"why":"the floor on the learned-template step: at least this many of the brand’s own items must share a name skeleton before it is reused at a new size; a SeedLink rule, not an observation"},{"value":24,"why":"hours after packaging that METRC locks the item name printed on the package sticker, as stated in the SeedLink field guide beside its category mapper; a stated rule, not a dated probe"},{"value":3,"why":"the pack count in the worked multi-pack example"},{"value":1.2,"why":"grams per unit in the worked multi-pack example"},{"value":3.6,"why":"the multi-pack UnitWeight in the worked example: 3 units times 1.2 grams"},{"value":64,"why":"base64, the name of the encoding in the Authorization header example"}],"faq":[{"question":"Is the dropped UnitWeight a Rhode Island sandbox bug?","answer":"No. The matrix was run on the sandbox on 2026-07-09, and a read-only pass over production packages in July 2026 agreed: the only weight-based production packages carrying a unit weight sat in Terpenes/Non Psychoactive Derivatives, the one concentrate category with RequiresUnitWeight true, and the weight was set at item creation."},{"question":"Why does PUT /items/v2/ return 200 if it ignored my UnitWeight?","answer":"Because the call as a whole succeeded. The endpoint applies the fields the category allows and discards UnitWeight on a flag-false category; a Name change on the same call persisted. The body is {\"Ids\":[N],\"Warnings\":null} either way, so only a read-back shows the difference."},{"question":"Which categories keep UnitWeight?","answer":"The ones whose row on GET /items/v2/categories carries RequiresUnitWeight: true. Of the 7 categories tested on 2026-07-09, 3 keep it (Shake/Trim, Infused Pre-Rolls, Pre-Packaged Bud) and 4 drop it (Bud/Flower, Kief, Concentrate, Concentrate (each)). Rhode Island served 21 categories on 2026-07-28; read the flag for the rest rather than inferring it from the name."},{"question":"Can I make a bulk flower package sellable as fixed units by writing UnitWeight to METRC?","answer":"No. A package with a null unit weight is in a flag-false category by construction, and that is exactly where the write is dropped. Keep the per-unit weight on your own side and re-apply it after every sync, which is what SeedLink does; its packaging pre-flight has written nothing to METRC since 2026-08-23."},{"question":"Why does my PUT fail with \"Item N does not exist at the current Facility.\"?","answer":"Because the license on the call is not the facility that created the item. Items are facility-scoped: only the owner accepts PUT /items/v2/, and a non-owner answers HTTP 401, 404, or that 400. Read with GET /items/v2/{id}, which works across facilities, and write from the owning license."},{"question":"What happens if UnitWeightUnitOfMeasure is not Grams?","answer":"A unit-of-measure mismatch on that field multiplied a unit weight by 1,000 in one live test in June 2026. SeedLink hardcodes the field to Grams on every create path rather than passing a unit through."},{"question":"How do I create an item for a size I have never sold without guessing the category?","answer":"Copy it from a real item: reuse an existing Each item for the strain and size, else copy a same-size sibling’s exact name and ProductCategoryName, else render the brand’s own dominant name skeleton (at least 2 items must share it) at the new size with the most common flower Each category. On the sandbox in July 2026 this created a \"<strain> - 7g\" item at 7 Grams for a strain that had only 3.5 g items, and a re-run reused it."},{"question":"Does the parent item’s UnitWeight matter when packaging?","answer":"Not in SeedLink’s packaging flow: nothing reads it, and every per-unit weight comes from SeedLink’s own row. What does matter is the source package’s unit of measure, read live from UnitOfMeasureName, because a draw in grams from an Each source is rejected by METRC."}],"sources":["Live-tested matrix of PUT /items/v2/ and POST /items/v2 against the RequiresUnitWeight flag on GET /items/v2/categories, Rhode Island sandbox, one cultivator facility, 2026-07-09; the wrong-facility 400 body observed the same day.","Read-only read of weight-based active packages carrying a unit weight at Rhode Island production cultivator facilities, July 2026.","GET /items/v2/categories at one Rhode Island production cultivator facility, read live, 2026-07-28; the table is pinned by a test in the SeedLink repository, so the page cannot drift from the code.","SeedLink item-creation cascade and multi-pack item flow, live-verified on the Rhode Island sandbox, July 2026; the packaging pre-flight change of 2026-08-23; the unit-of-measure guard from a live test in June 2026.","SeedLink METRC field guide (docs/METRC.md), sections UnitWeight persists ONLY for RequiresUnitWeight=true categories, Items Are Facility-Scoped, Tier A Category-Aware UoM, and Categories."],"citation":"SeedLink, \"METRC item UnitWeight in Rhode Island: it persists only when the category has RequiresUnitWeight true, and the PUT returns 200 either way\", observed 2026-08-23, revised 2026-09-20, https://www.seedlink.net/guides/metrc/unit-weight-requires-unit-weight","methodology":"https://www.seedlink.net/methodology","publisher":"SeedLink"}