{"title":"METRC lab results in Rhode Island follow a package that was created before the results came back","url":"https://www.seedlink.net/guides/metrc/lab-results-follow-the-package","json":"https://www.seedlink.net/guides/metrc/lab-results-follow-the-package/data.json","question":"Do METRC lab results follow a package that was created before the results came back?","answer":"Yes: when a lab records a result, METRC promotes every package that shares the sample’s item at that facility and writes the results down the lot’s lineage, so a package created before the result carries it the moment the lab posts it, and nothing in the cultivator’s integration receives anything.","environment":"Rhode Island production and sandbox","observed":"2026-07-26","revised":"2026-09-20","published":"2026-09-20","facts":[{"id":"item_level_propagation","value":"Results recorded on 24 samples resident at the sandbox lab facility moved all 160 cultivator-side packages sharing their item to TestPassed in one pass","observed":"2026-07-01","source":"Rhode Island sandbox, POST /labtests/v2/record from the lab facility credential. The record gives July 2026 without a day; the first of that month stands in here and is not an observation."},{"id":"propagation_key","value":"Promotion to TestPassed reaches every package sharing ItemFromFacilityLicenseNumber and Item.Id with the IsTestingSample package, across facilities","observed":"2026-07-01","source":"Rhode Island sandbox, the same lab-side run; month-only in the record (July 2026), first of the month standing in."},{"id":"results_after_packaging","value":"196 active packages carried a LabTestingStateDate later than their PackagedDate: 42, 92 and 62 at the three cultivators","observed":"2026-07-24","source":"Read-only probe of active packages at the three Rhode Island production cultivator facilities connected to SeedLink."},{"id":"children_from_unpassed_parent","value":"138 child packages at one cultivator were built from a parent that had not reached TestPassed","observed":"2026-07-24","source":"Read-only probe of package lineage at one Rhode Island production cultivator facility."},{"id":"children_on_different_item","value":"59 of those 138 children carried a different Item.Id than any parent and still received a result","observed":"2026-07-24","source":"The same lineage probe, Rhode Island production."},{"id":"infused_preroll_example","value":"An infused pre-roll child packaged 2026-07-16 off a parent still NotSubmitted received its own result on 2026-07-24","observed":"2026-07-24","source":"One package at one Rhode Island production cultivator facility, read in the same probe; label withheld."},{"id":"preroll_material_seven_days","value":"Pre-roll material packages at a second cultivator received results 7 days after packaging","observed":"2026-07-24","source":"Packages at a second Rhode Island production cultivator facility, read in the same probe; labels withheld."},{"id":"untested_dispatched","value":"27 packages shipped on outgoing transfers before their result landed: 4, 22 and 1 at the three cultivators, every one bound for a processor or a lab and none for a dispensary","observed":"2026-07-24","source":"Read-only probe of outgoing transfers against lab-state dates at the three facilities."},{"id":"dispensary_manifests_tested_first","value":"Every wholesale manifest to a dispensary at the three cultivators had its results in before dispatch","observed":"2026-07-24","source":"The same ship-time probe, Rhode Island production."},{"id":"dispensary_transfer_refused","value":"HTTP 400 from POST /transfers/v2/templates/outgoing for a NotSubmitted package: \"Package <label> is marked as NotSubmitted and cannot be transferred to <license> (<facility>). The destination Facility cannot receive Packages with the NotSubmitted Lab Testing State.\"","observed":"2026-07-25","source":"Rhode Island sandbox, a transfer template bound for the sandbox dispensary facility, with SeedLink’s own manifest gate forced open by hand."},{"id":"lineage_inheritance","value":"A package cut on 2026-07-25 off a harvest dated 2026-03-05 was born TestPassed carrying all 280 results the lab recorded on the source lot on 2026-04-25","observed":"2026-07-25","source":"Rhode Island sandbox, GET /labtests/v2/results?packageId= on the package minutes after POST /packages/v2/ created it."},{"id":"production_batch_breaks_inheritance","value":"POST /packages/v2/ with a new Concentrate item, IsProductionBatch true and a TestPassed flower ingredient produced LabTestingState NotSubmitted with 0 lab results; PUT /packages/v2/item back to the flower item did not recompute the state in either direction","observed":"2026-07-25","source":"Rhode Island sandbox. The record does not date this write separately from the lineage read of 2026-07-25 it sits beside."},{"id":"lab_records_at_own_facility_only","value":"POST /labtests/v2/record from the lab license against a cultivator-held package answered \"Package … does not exist in the current Facility\"; from a cultivator license it answered HTTP 401 regardless of body, since sandbox cultivator licenses lack the Manage Lab Tests permission","observed":"2026-07-26","source":"Rhode Island sandbox, lab facility and cultivator credentials. Recorded beside the 2026-07-26 transfer-verb probe, whose date is used here; the cultivator-side 401 was first seen in the July 2026 lab-side run."},{"id":"api_cannot_dispatch","value":"POST /transfers/v2/outgoing answered HTTP 405 (the endpoint exists and is read-only); /transfers/v2/, /external/outgoing and /deliveries answered 404; POST /transfers/v2/external/incoming from the lab answered 401; a template has no dispatch verb, with /templates/{id}/dispatch, /templates/{id}/transfer and /templates/outgoing/{id}/create all answering 404","observed":"2026-07-26","source":"Rhode Island sandbox, transfer-verb probe from the cultivator and lab credentials."},{"id":"testing_sample_requires_batch","value":"POST /packages/v2/testing requires RequiredLabTestBatches: [\"Raw Plant Material\"]; without it HTTP 400 \"At least one Lab Test Batch is required for Item\"; with it the source lot moved from NotSubmitted to SubmittedForTesting in place, with no step in the UI","observed":"2026-07-26","source":"Rhode Island sandbox end-to-end run."},{"id":"end_to_end_results_written","value":"The lab posted the batch’s 35 test types, each Passed true, with OverallPassed true; METRC wrote the same 35 results onto every package in the lineage (the source lot, both samples and a child cut before any result existed) and moved them all to TestingInProgress together","observed":"2026-07-26","source":"Rhode Island sandbox end-to-end run, with a person dispatching the one Lab Transfer in METRC Connect and the lab receiving it there."},{"id":"pass_within_min_max","value":"Under LabTestResultMode PassWithinMinMax, a flat half-of-maximum quantity answered HTTP 400 on test types that carry a minimum","observed":"2026-07-26","source":"Rhode Island sandbox end-to-end run, the lab’s record call."},{"id":"sandbox_terminal_state","value":"With the required batch shown as Passed, 35 of 35 performed, every result passed and released, and the sample adjusted to 0 and finished, the family still read TestingInProgress; PUT /labtests/v2/results/release answered 401; PUT /packages/v2/labtests/required answered \"cannot be changed because it has already been Transferred\"; there is no /labtests/v2/stages","observed":"2026-07-26","source":"Rhode Island sandbox, after the end-to-end run; the record gives no later date and says that waiting changed nothing."},{"id":"finish_verb","value":"Finishing a package is PUT /packages/v2/finish (POST answered 405), and only an empty package can be finished, so it is adjusted to 0 first with reason Consumed during Testing","observed":"2026-07-26","source":"Rhode Island sandbox, sample close-out after the end-to-end run; not dated separately in the record."},{"id":"location_required","value":"POST /packages/v2 and POST /harvests/v2/packages both answered HTTP 400 \"Location was not specified.\" without a Location; with /locations/v2/active empty, an existing package’s LocationName was accepted","observed":"2026-07-26","source":"Rhode Island sandbox packaging calls; not dated separately in the record, placed with the 2026-07-26 run they sit beside."},{"id":"sandbox_lab_recipe","value":"From the sandbox lab facility, a body of [{ Label, ResultDate: YYYY-MM-DD, Results: [about 35 Raw Plant Material types, each { LabTestTypeName, Quantity, Passed: true, Notes: \"\" }], OverallPassed: true }] answered 200 and the package read TestPassed immediately, with no release call; test types filtered to Raw Plant Material, excluding Retest, R&D, Sub-Contract and Final Form variants","observed":"2026-07-01","source":"Rhode Island sandbox, lab facility credential. Month-only in the record (July 2026); the first of the month stands in."}],"constants":[{"value":64,"why":"base64, the name of the encoding in the Authorization header example"}],"faq":[{"question":"Do I have to fetch lab results from METRC and write them onto my packages?","answer":"No. When the lab records a result, METRC promotes every package sharing the sample’s ItemFromFacilityLicenseNumber and Item.Id to TestPassed, across facilities, and writes the results down the lineage. On the sandbox in July 2026, results on 24 lab-resident samples moved 160 cultivator-side packages in one pass. A sync sees the new state on its next read."},{"question":"Can I cut a child package from a parent that has not passed testing?","answer":"Yes. POST /packages/v2 accepts a not-TestPassed ingredient. One Rhode Island cultivator had 138 children built that way on 2026-07-24, and one infused pre-roll item packaged on 2026-07-16 off a NotSubmitted parent received its own result on 2026-07-24. A block on it is the integration’s rule, not METRC’s."},{"question":"Can an untested package go on a manifest?","answer":"To a processor or a lab, yes: 27 such packages had shipped across three cultivators by 2026-07-24. To a dispensary, no: on the sandbox on 2026-07-25 the template call answered HTTP 400 with The destination Facility cannot receive Packages with the NotSubmitted Lab Testing State."},{"question":"Does a child package inherit its parent’s results?","answer":"Yes, while it stays in the lineage. A package cut on 2026-07-25 off a harvest from 2026-03-05 was born TestPassed with all 280 results recorded on the lot on 2026-04-25. A production batch into a different product category does not inherit: it starts at NotSubmitted with 0 results, and changing the item back does not recompute the state."},{"question":"Why did the sandbox lot stay at TestingInProgress with every result passed?","answer":"The record does not say. PUT /labtests/v2/results/release answers 401, PUT /packages/v2/labtests/required refuses after the transfer, there is no /labtests/v2/stages, and waiting changed nothing. Treat TestingInProgress as the sandbox terminal state and start from a TestPassed lot for anything downstream of a pass."},{"question":"Can the API send the sample to the lab?","answer":"No. Probed on 2026-07-26: POST /transfers/v2/outgoing answers 405, the other transfer paths 404 or 401, and a template has no dispatch verb. The API creates the sample and moves the source lot to SubmittedForTesting; a person dispatches the Lab Transfer in METRC Connect."},{"question":"Which package can the lab record against?","answer":"Only one resident at its own facility. Against a cultivator-held package the lab license gets Package … does not exist in the current Facility, and a cultivator license gets 401 on POST /labtests/v2/record regardless of body, since sandbox cultivator licenses lack the Manage Lab Tests permission."},{"question":"Where is the COA for a tested package?","answer":"On the results row: GET /labtests/v2/results carries the lab’s document id, and fetching the PDF from it is its own guide, free COAs."}],"sources":["Read-only probes across the three Rhode Island production cultivator facilities connected to SeedLink, 2026-07-24: lab results read by package, propagation identity, and lab state at ship time.","Rhode Island sandbox, 2026-07-25: a transfer template to the sandbox dispensary facility with the manifest gate forced open, the lineage read on a package minutes old, and the production-batch write.","Rhode Island sandbox, 2026-07-26: the end-to-end run with a person dispatching the Lab Transfer, and the transfer-verb probe of the same day.","Rhode Island sandbox, July 2026 (the record gives the month only): lab-side results recorded on 24 resident samples through the sandbox lab pipeline.","SeedLink METRC field guide (docs/METRC.md), section Lab Testing, read 2026-09-20."],"citation":"SeedLink, \"METRC lab results in Rhode Island follow a package that was created before the results came back\", observed 2026-07-26, revised 2026-09-20, https://www.seedlink.net/guides/metrc/lab-results-follow-the-package","methodology":"https://www.seedlink.net/methodology","publisher":"SeedLink"}