SeedLink
CustomersSign inRequest access

Guides/METRC field guides for Rhode Island

METRC remediation transfers in Rhode Island: the outgoing delivery’s ShipmentTypeName is the only sign a package is out, and the incoming transfer is the proof it came back

On 2026-07-25 a read-only sweep of 49 endpoints at one Rhode Island production cultivator found that 43 of 43 packages shipped on an outgoing Remediated Transfer reappeared by label on a later incoming transfer, and that the one package a list-based check had missed for 6 days sat in GET /packages/v2/inactive with quantity 0, IsFinished true and FinishedDate 2026-07-16. While a package is away, the only field that says why is ShipmentTypeName on the outgoing transfer’s deliveries: the package flags ProductRequiresRemediation, ContainsRemediatedProduct and IsOnHold, the on-hold list and the two transfer-level booleans all read false for the whole trip.

Observed
July 25, 2026
Revised
September 20, 2026
Environment
Rhode Island production

What this page is

This page records what SeedLink’s production integration observed on the Rhode Island METRC API while a cultivator’s flower went out for remediation and came back, dated, with the read-only call behind each observation. It is not METRC documentation and it is not regulatory guidance: it describes how the API behaved for licensed Rhode Island cultivators on the dates given.

The observations were made for one reason. SeedLink keeps a cultivator’s active METRC packages on a live wholesale menu, and a sync that cannot tell a remediation departure from a sale deactivates flower that, on the observed routine, is back about a day later. Telling the two apart, and noticing the return, is what every question below was asked to settle. The answers are about METRC; the menu is only why they were asked.

Counts belong to one or two facilities on one day and move with every transfer. The field names, the endpoints, and the order in which things become visible are what this page is about. Other states run their own METRC instances and can differ on every point below.

How every number on this site is observed, dated and bounded is on the methodology page, which also lists what SeedLink does not publish.

What a remediation round trip looks like in METRC

When flower needs treatment, for example after a failed or at-risk microbial result, the cultivator transfers it out to a treatment partner. The partner treats it and transfers it back about a day later, usually under a new package tag. SeedLink watched this happen live at one Rhode Island production cultivator in July 2026, and at that facility the round trip is routine rather than an exception.

In METRC the trip is two transfers, an outgoing one from the cultivator and an incoming one back to it, and the outgoing transfer’s deliveries carry a type. That type is what separates a remediation trip from the two other reasons a package leaves a cultivator facility: a sale and a lab sample.

Why a package leaves a Rhode Island cultivator facility, and the ShipmentTypeName that says so
Why the package left`ShipmentTypeName` on the outgoing deliveryDoes it come back?
Wholesale sale to a dispensaryUnaffiliated Transfer (no common ownership) or Affiliated Transfer (same ownership)No; the package is sold
Lab sampleLab TransferNot covered on this page
RemediationRemediated TransferYes, about a day later, usually under a new tag

The type is enough on its own. A rule that says "hold the flower while it is on a Remediated Transfer" needs no list of partner facilities to compare the destination against, and no rule about which recipients are dispensaries. Nothing about the destination has to be known.

The only signal that says a package is out

Every flag whose name suggests it marks remediation was read while the package sat on the outgoing transfer, at the cultivator above in July 2026. All of them read false. The one field that carried the information was ShipmentTypeName on the outgoing transfer’s deliveries, reached in two calls: GET /transfers/v2/outgoing for the transfer list, then GET /transfers/v2/{id}/deliveries for each transfer on it.

Every signal checked while a package sat on a remediation transfer, one Rhode Island production cultivator, July 2026
Where it was readWhat it read while the package was outUsable?
ShipmentTypeName on GET /transfers/v2/{id}/deliveriesRemediated TransferYes. The only reliable signal.
ProductRequiresRemediation on the packagefalseNo
ContainsRemediatedProduct on the packagefalseNo
IsOnHold on the packagefalseNo
GET /packages/v2/onholdAn empty listNo
ContainsRemediatedProductPackage on the transferfalseNo
ContainsProductRequiresRemediation on the transferfalseNo
GET /packages/v2/transferredThe package is absent until the recipient accepts the manifestNot for the departure; it lags
GET /transfers/v2/outgoingLists the transfer as soon as it existsYes, for the fact of departure; the reason comes from its deliveries
GET /packages/v2/{label} on the departed tagHTTP 401Says the package is not at the facility, not why

The lag on GET /packages/v2/transferred deserves its own sentence, because it is the endpoint an integration reaches for first when a package disappears from the active list. A package dispatched a minute ago is not in it. It appears there only after the recipient accepts the manifest. GET /transfers/v2/outgoing shows the transfer immediately, so departures are read there, and /transferred is at most a later confirmation.

The flags are not subtly wrong; they are simply false, and the on-hold list is simply empty, for the whole time the package is away. An integration that waits for any of them to change never sees the trip at all.

Three ways a package comes home

The package comes back on an incoming transfer, and how it surfaces afterwards depends on whether it kept its tag. Three shapes were observed at the cultivator above in July 2026, and each one is matched to the package that left by a different field.

The three return shapes and how each is recognised, Rhode Island production, July 2026
Return shapeWhat METRC showsHow it is matched to the package that left
Same tagThe same label is back in GET /packages/v2/active with its quantity refreshedBy label; there is nothing to repoint
New tag, received from the partnerA new label in GET /packages/v2/active with ReceivedFromFacilityName naming the facility the package was shipped to and ReceivedFromManifestNumber setBy ReceivedFromFacilityName equal to the outgoing destination, plus the same strain
Re-tagged at home after the returnA new label whose SourcePackageLabels names the tag that left; one package went from …754 to …757 this wayBy lineage: SourcePackageLabels containing the old tag, the same strain, and the flower category

The second shape is the usual one. What comes back is a new package under a new tag, received from the partner’s facility. ReceivedFromFacilityName is the field that ties it to the trip, because it names the facility the original package was shipped to, and ReceivedFromManifestNumber names the return manifest. Matching on that facility and the strain is what lets a record built around the old tag carry over to the new one, with its orders, prices and images.

The third shape happens when the cultivator re-tags the returned package at home. The returned package then survives only as an ancestor, and the new package’s SourcePackageLabels is the sole link back to the tag that left. Strain and category are checked as well as lineage, because a child that is no longer flower is not the same product coming home, which is the case the next section is about.

The return that no list shows

On 2026-07-16 one package at the cultivator above came home under the same tag at 11:28 UTC. By 11:40 UTC it had been ground in full into a different product in a different category, and the package was finished at 0 g. SeedLink reads the facility every hour, and both events fell between 2 hourly reads, so the package never reappeared in GET /packages/v2/active. Because the new product was in a different category, no child package of the same strain in the flower category ever existed either. Every list-based check in the previous section returned nothing, and the record waiting for the package to come back sat for 6 days while METRC showed it home and consumed.

A direct read of the departed tag answers this case, and its meaning changes at each stage of the trip.

What GET /packages/v2/{label} on the departed tag proves at each stage of the trip
ResponseWhat it proves
HTTP 401The package has been transferred out of the facility. This is the routine answer for the whole time it is away.
HTTP 200 with quantity 0 or IsFinished trueThe package came back and was consumed. The trip is over, and the record built around it can be retired.
HTTP 200 with a live quantityOnly that the package came back at some point. A receive stamp records a past return, and the package could be out again on a second trip.

The third row is the trap inside the fix. A live package with a receive stamp looks like a return, and acting on it as one re-lists flower that may not be at the facility. The active list, read on every sync, is the right place to notice a live same-tag return; the direct read exists for the case where nothing in any list can see the package, and it acts only on a definitive answer. A read that fails, or a 401, changes nothing.

The incoming side closes the loop

The July observations were made from the outgoing side and from the package lists, which is why the same-tag return above was invisible to them. On 2026-07-25 a read-only sweep of 49 endpoints at two Rhode Island production cultivators read the incoming side, and it turns the round trip from a chain of inferences into positive list evidence.

Incoming-transfer and inactive-package evidence for the remediation round trip, read-only sweep of 2026-07-25
ReadFacilityWhat it showed
GET /transfers/v2/incoming, paired with GET /transfers/v2/outgoing by labelFirst cultivator43 of 43 packages shipped on an outgoing Remediated Transfer reappeared by label on a later incoming transfer
The same pairingA second cultivatorAn incoming manifest carried exactly the 3 labels its outgoing leg had shipped
GET /transfers/v2/incoming, the manifest received on 2026-07-16 at 11:28:31 UTCFirst cultivatorNamed the same-tag package of the previous section directly
GET /packages/v2/inactiveFirst cultivatorThat package is listed with quantity 0, IsFinished true and FinishedDate 2026-07-16
GET /packages/v2/inactiveFirst cultivator153 of the facility’s 169 inactive packages carry IsFinished
GET /packages/v2/intransitBothThe endpoint exists; it is the authoritative signal that a package is out again on a second trip

So "did it come back?" has a list answer after all: the incoming transfer that names the label, and, for a package consumed on arrival, the inactive list that carries its finished date. Neither depends on the package ever being seen in the active list. The pairing is by label.

The sweep paired by label and counted 43 of 43. It did not record how many of those returns kept their tag and how many came back under a new one, so the count says that the incoming side names the shipped label; it does not say which return shape each trip took.

SeedLink does not yet read GET /packages/v2/intransit. It is listed because the sweep found it, and because it is the endpoint that answers the one question the direct read cannot: whether a package that came back has since left again.

Why these observations were made

SeedLink syncs a cultivator’s active METRC packages into a live wholesale menu, and a package that drops out of the active list is normally deactivated on the menu, because the usual reason it dropped out is that it was sold. Flower on a remediation trip drops out of the active list too, for about a day, and the cultivator keeps selling it: the routine is that it comes back. So the sync had to tell a remediation departure from a sale, keep the row sellable with its count frozen while the package was away, and reconnect the row to the new tag on return so the history tied to the old tag carries over. Each rule on this page is the answer to one of those needs, and the same-tag return that no list showed is the case that added the direct read.

Check it yourself with read-only calls

The whole question is answerable with GETs and no writes. The first two calls say whether a package is out for remediation; the rest say whether it came back, and whether it has left again.

GET https://api-ri.metrc.com/transfers/v2/outgoing?licenseNumber=<your license>
Authorization: Basic <base64 of VENDOR_KEY:USER_KEY>

for each transfer in the response:
  GET https://api-ri.metrc.com/transfers/v2/<transfer Id>/deliveries?licenseNumber=<your license>
  for each delivery:
    out_for_remediation = (delivery.ShipmentTypeName == "Remediated Transfer")
    GET https://api-ri.metrc.com/transfers/v2/deliveries/<delivery Id>/packages?licenseNumber=<your license>
    note every package label on a delivery where out_for_remediation is true

then, for each label noted:
  GET https://api-ri.metrc.com/transfers/v2/incoming?licenseNumber=<your license>
    a later incoming transfer that names the label is the return
  GET https://api-ri.metrc.com/packages/v2/inactive?licenseNumber=<your license>
    a row for the label with quantity 0 and IsFinished true is a return that was consumed
  GET https://api-ri.metrc.com/packages/v2/<label>?licenseNumber=<your license>
    HTTP 401 while it is away; HTTP 200 with quantity 0 or IsFinished true once it is back and used up
  GET https://api-ri.metrc.com/packages/v2/intransit?licenseNumber=<your license>
    a row for the label means it has left the facility again

If a label is on a Remediated Transfer delivery and absent from GET /packages/v2/transferred, that is the lag, not a contradiction. If it is absent from GET /packages/v2/active after an incoming transfer named it, read the inactive list before concluding that it never came back.

Questions

Is there a package flag that says a package is out for remediation?
Not one that reads true. ProductRequiresRemediation, ContainsRemediatedProduct and IsOnHold all read false while the package sat on the transfer in July 2026, GET /packages/v2/onhold was empty, and the transfer-level ContainsRemediatedProductPackage and ContainsProductRequiresRemediation read false too. The outgoing delivery’s ShipmentTypeName of Remediated Transfer was the only signal.
Can I use GET /packages/v2/transferred to see that a package has left?
Not for the departure. A just-dispatched package is absent from it until the recipient accepts the manifest. GET /transfers/v2/outgoing lists the transfer immediately; read departures there and treat /transferred as a later confirmation.
Does a remediated package come back under the same tag?
Usually not. The routine observed in July 2026 is a return about a day later under a new tag, surfacing in GET /packages/v2/active with ReceivedFromFacilityName naming the facility it was shipped to and ReceivedFromManifestNumber set. A same-tag return keeps its label, and a package re-tagged at home names the old tag in SourcePackageLabels.
How do I tell a remediation transfer from a sale without a list of partner facilities?
By the transfer type alone. A wholesale sale ships as Unaffiliated Transfer or Affiliated Transfer, a lab sample as Lab Transfer, and remediation as Remediated Transfer. Nothing about the destination needs to be known.
What if the package came back and was used up before I looked?
Then it never reappears in GET /packages/v2/active. On 2026-07-16 one package came home at 11:28 UTC and was finished at 0 g by 11:40 UTC. Two reads answer it: GET /transfers/v2/incoming names the label on the return manifest, and GET /packages/v2/inactive lists the package with quantity 0, IsFinished true and its FinishedDate. A GET /packages/v2/{label} that answers HTTP 200 with a finished or zero-quantity package proves the same thing.
What does HTTP 401 on GET /packages/v2/{label} mean during the trip?
A package that has been transferred out answers 401 on the single-package read, so 401 is the routine answer while it is away. It does not say why the package left; the outgoing delivery’s ShipmentTypeName does. A 200 with a live quantity proves only that the package came back at some point, not that it is home now.
Is there an endpoint for a package that is out again on a second trip?
GET /packages/v2/intransit exists on Rhode Island production; the read-only sweep of 2026-07-25 found it. It is the authoritative signal that a package has left the facility again. SeedLink does not read it yet.

Sources and how to cite this page

  • Live remediation round trip at one Rhode Island production cultivator, July 2026: GET /transfers/v2/outgoing and its deliveries, the package flags, GET /packages/v2/onhold and GET /packages/v2/transferred, read-only.
  • Same-tag return of 2026-07-16 at the same facility, reconstructed from hourly sync records and GET /packages/v2/{label}, Rhode Island production.
  • Read-only sweep of 49 endpoints at two Rhode Island production cultivators, 2026-07-25: GET /transfers/v2/incoming, GET /transfers/v2/outgoing, GET /packages/v2/inactive, GET /packages/v2/intransit.
  • SeedLink METRC field guide (docs/METRC.md), sections Remediation transfers and the Menu Hold, and Transfer types.

SeedLink, "METRC remediation transfers in Rhode Island: the outgoing delivery’s ShipmentTypeName is the only sign a package is out, and the incoming transfer is the proof it came back", observed 2026-07-25, revised 2026-09-20, https://www.seedlink.net/guides/metrc/remediation-transfers

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/remediation-transfers/data.json

Related

  • A METRC transfer template becomes a manifest only when a person dispatches it in METRC Connect: Rhode Island exposes no dispatch endpoint
  • METRC lab results in Rhode Island follow a package that was created before the results came back
  • Combining two METRC packages of one item in Rhode Island is one POST with two ingredients, and the drained sources stay active until you finish them
  • 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
SeedLink
GuidesMethodologyContactPrivacyTermsFor Rhode Island buyers
© 2026 SeedLink