---
title: "Get Metrc transfers"
method: GET
path: "/public/v1/metrc/transfers"
tags: ["Metrc"]
---

# Get Metrc transfers

`GET /public/v1/metrc/transfers`

## Request

- Base URL: `https://app.distru.com`
- URL: `https://app.distru.com/public/v1/metrc/transfers`
- Auth: HTTP bearer

Get the Metrc transfers Distru caches from Metrc across your licenses, filtered by various attributes. Results are ordered by Metrc's transfer id ascending and scoped to the company that owns the API key. Only the current version of each transfer is returned. An internal transfer between two of your licenses appears twice — an `OUTGOING` row on the shipping license and an `INCOMING` row on the receiving one.

Each row mirrors a transfer's manifest-level facts as they exist in Metrc — shipper, transporter, shipment type — and its `deliveries` with their packages in manifest order, plus what Distru knows around it: `is_importable` (with `importable_details` explaining why not), and the Distru `order` or `purchase` created when the transfer was imported (null when it hasn't been).

This is a read-only cache: it does not create or accept transfers in Metrc. Data is eventually consistent — changes synced from Metrc can take up to ~1 second to appear here.

## Query parameters

- `license_id` string
- `license_number` string
- `direction` 'INCOMING' | 'OUTGOING'
- `is_importable` boolean
- `import_status` 'IGNORED' | 'IMPORTED' | 'UNIMPORTED'
- `manifest_number` string
- `ids` integer[]
- `metrc_package_id` integer
- `package_label` string
- `search` string
- `search_license_number` string
- `fetched_datetime` string
- `page` string

## Response `200`

A list of Metrc transfers

- MetrcTransfers: A collection of Metrc transfers. Note: This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.
  - `data` MetrcTransfer[]: Metrc Transfers
    - `deliveries` MetrcTransferDelivery[], required: The transfer's deliveries with their packages, in manifest order
      - `actual_arrival_datetime` string: ISO 8601 datetime the delivery actually arrived, or null while it hasn't arrived
      - `actual_departure_datetime` string: ISO 8601 datetime the delivery actually departed, or null while it hasn't departed
      - `id` integer, required: The delivery's identifier in Metrc — Metrc's own integer id, not a Distru ID.
      - `packages` MetrcTransferPackage[], required: The packages on this delivery, in manifest order
        - `id` integer, required: The package's identifier in Metrc — Metrc's own integer id, the same `id` returned by [GET /public/v1/metrc/packages](#get-metrc-packages), the same value as the nested `package.metrc_id`, and accepted by the transfers `metrc_package_id` filter.
        - `is_testing_sample` boolean, required: True when the package is a lab test sample
        - `item_category_name` string, required: The Metrc item category name
        - `item_name` string, required: The name of the Metrc item the package holds
        - `label` string, required: The package's full 24-character Metrc tag label
        - `package` PackageCompact: A compact reference to a Distru package — the id plus the fields needed to recognize it. The full package (costs, product, custom fields, ...) is available from [GET /public/v1/packages](#get-packages), filtered by `ids`.
          - `batch_number` string: The batch number of the package's batch, or null when it has none
          - `compliance_label` string: The compliance tag on the package (its Metrc label), or null when not compliance-tracked
          - `distru_status` string, required: The package's status in Distru (e.g. `ACTIVE`, `SELLING`, `SOLD`, `FINISHED`) — the same values as the packages endpoint's `distru_statuses` filter
          - `id` string, required: The package ID, usable with the packages endpoints
          - `license_id` string: The ID of the license the package belongs to, or null when it has none
          - `location_id` string: The ID of the location holding the package, or null when it has none
          - `metrc_id` integer: The Metrc package id this Distru package mirrors — Metrc's own integer id. Null when not Metrc-tracked.
          - `quantity` string, required: The package's total quantity in Distru
          - `quantity_active` string, required: The portion of `quantity` not reserved by sales orders or assemblies
        - `quantity` string, required: The package's quantity, rendered as a decimal string (e.g. "10.5"): the shipped quantity on an outgoing transfer, the received quantity on an incoming one
        - `status` 'ACCEPTED' | 'REJECTED' | 'RETURNED' | 'SHIPPED', required: The package's state on this delivery: `SHIPPED` (in transit or not yet processed by the recipient), `ACCEPTED`, `REJECTED`, or `RETURNED`.
        - `unit_type` UnitType, required: A unit of measure used for quantities and pricing (e.g. Gram, Each, Pound). This is the compact reference carrying just id and name; the full unit type (its measurement category and conversion factor) is available from the unit types endpoint.
          - `id` string, required: ID for this unit type
          - `name` string, required: Human readable name for this unit type
        - `wholesale_price` string: The package's wholesale price on the manifest, rendered as a decimal string, or null when the transfer carries no wholesale pricing
      - `received_datetime` string: ISO 8601 datetime the delivery was received, or null while it hasn't been received
      - `recipient_license_number` string, required: The license number of the facility receiving this delivery
      - `recipient_name` string, required: The name of the facility receiving this delivery
    - `direction` 'INCOMING' | 'OUTGOING', required: The transfer's direction relative to the owning license: `INCOMING` (shipped to it) or `OUTGOING` (shipped from it). The `direction` filter accepts the same values.
    - `fetched_datetime` string, required: The datetime Distru last fetched this transfer from Metrc
    - `id` integer, required: The transfer's identifier in Metrc — Metrc's own integer id, not a Distru ID. An internal transfer between two of your licenses appears as two rows sharing this id, one per direction.
    - `import_status` 'IGNORED' | 'IMPORTED' | 'UNIMPORTED', required: `IMPORTED` when the transfer was imported into Distru as a sales order (outgoing), a purchase (incoming), or a stock transfer; `IGNORED` when it wasn't and is marked ignore-for-import; `UNIMPORTED` otherwise. The `import_status` filter accepts the same values.
    - `importable_details` string: A human-readable explanation of why the transfer is not importable, or null when it is importable or the reason is evident from its package states
    - `inserted_datetime` string, required: ISO 8601 datetime the transfer was created in Metrc
    - `is_importable` boolean, required: True when the transfer's package states allow importing it into Distru — at least one package shipped or accepted for an outgoing transfer, at least one accepted for an incoming one. The `is_importable` filter additionally excludes already-imported and ignored transfers.
    - `license` License, required: A cannabis license held by a company or tied to a location, identifying it to the state and its compliance system.
      - `active` boolean, required: Whether this license is currently active
      - `expiry_datetime` string, required: ISO 8601 datetime this license expires (e.g. "2026-08-20T00:00:00Z")
      - `id` string, required: ID for this license
      - `inserted_datetime` string, required: ISO 8601 datetime this license was created at
      - `issue_datetime` string: ISO 8601 datetime this license was issued, or null when not set
      - `license_number` string, required: License number
      - `license_type` string, required: The license type as configured in Distru. A state-specific free-form value, e.g. "Distributor" or "Type 11 Distributor-Transport"
    - `manifest_number` string, required: The transfer's Metrc manifest number
    - `order` CompactOrder: A compact view of an order as nested inside another entity (an invoice or a payment) in Distru. Use its id to fetch the full order from the orders endpoint.
      - `id` string, required: ID for this order
      - `order_number` string, required: The order number as shown in the Distru UI (e.g. "ORD-0001"). Unique per company.
      - `status` string, required: The fulfillment status of this order (SCREAMING_CASE) — its lifecycle stage, distinct from an invoice's payment status.
      - `total` string, required: The order total (line items plus charges/taxes minus discounts), as a 2-decimal string (e.g. "150.50").
    - `package_count` integer, required: The number of packages on the transfer, across all its deliveries
    - `purchase` CompactPurchase: A compact view of a purchase as nested inside another entity. Use its id to fetch the full purchase from the purchases endpoint.
      - `id` string, required: ID for this purchase
      - `purchase_number` string, required: The purchase number as shown in the Distru UI (e.g. "PO-0001"). Unique per company.
      - `status` string, required: The fulfillment status of this purchase (SCREAMING_CASE).
      - `total` string, required: The purchase total, as a 2-decimal string (e.g. "150.50").
    - `received_datetime` string: ISO 8601 datetime the transfer was received, or null while it hasn't been received
    - `shipment_type_name` string: The Metrc shipment type (e.g. "Transfer", "Wholesale Manifest"), or null when Metrc reports none on the transfer
    - `shipper_license_number` string, required: The license number of the facility shipping the transfer
    - `shipper_name` string, required: The name of the facility shipping the transfer
    - `transporter_license_number` string: The license number of the transporter facility, or null when Metrc reports none
    - `transporter_name` string: The name of the transporter facility, or null when Metrc reports none
    - `updated_datetime` string, required: ISO 8601 datetime this transfer was last modified in Metrc
  - `next_page` string: URL for the next page of results; null when there is no next page

## Other responses

- `400`: Invalid parameters
- `401`: Missing or invalid API token
- `403`: The API token lacks the required permission, or team restrictions hide the record

## Changes

- **2026-10-07** `e8639f7dafed`: 1 breaking
  - the response property `data/items/shipment_type_name` became optional for the status `200`
- **2026-09-29** `421cc4d0838b`: 4 info
  - added the new optional `query` request parameter `import_status`
  - added the new optional `query` request parameter `search_license_number`
  - added the required property `data/items/import_status` to the response with the `200` status
  - added the required property `data/items/package_count` to the response with the `200` status
- **2026-09-04** `f8930b2c2924`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/distru/apis/distru-api/changes/public/v1/metrc/transfers/get.md)

---

[API](https://skmtc.dev/distru/apis/distru-api.md) - [All operations](https://skmtc.dev/distru/apis/distru-api/llms.txt) - [OpenAPI document](https://skmtc.dev/distru/apis/distru-api/revisions/9d851a88e82f?raw)
