{
  "info": {
    "title": "T3 API",
    "version": "v2",
    "description": "## LLM / AI AGENT USAGE\n\nIf you are an LLM or AI agent, see [/llms.txt](/llms.txt) for a quickstart guide.\n\n## WHAT IS THIS?\n\nThis API is part of the [Track & Trace Tools](https://trackandtrace.tools) platform. The API allows you to programmatically access all your Metrc data that is available on metrc.com\n\nIt is not related to the Metrc 3rd party API, does not use Metrc API keys, and is not affiliated with Metrc.\n\nIf you're looking for where to get started, check out the [T3 Wiki API Getting Started guide](https://github.com/classvsoftware/t3-wiki/wiki/T3-API-:-Getting-Started).\n\nThe T3 API is subject to the [Track & Trace Tools Terms of Use](https://www.trackandtrace.tools/terms-of-use).\n\n## FREE API ACCESS (LIMITED)\n\nThe T3 API features a limited number of free endpoints available to anyone with a Metrc login.\n\nThese can be found in the [Free](#/Free) section.\n\n## FULL API ACCESS\n\nFull API access requires a [T3+](https://trackandtrace.tools/plus) subscription. Two steps:\n\n1. **[Subscribe to T3+](https://wiki.trackandtrace.tools/t3-plus/#subscribing-to-t3)** \u2014 each plan includes a fixed number of seats.\n\n2. **[Register your Metrc username](https://wiki.trackandtrace.tools/t3-plus/#registering-a-metrc-username-in-t3)** \u2014 one seat per username. Access is enabled per-username across the whole T3 platform.\n\nSee the [T3+ wiki page](https://wiki.trackandtrace.tools/t3-plus/) for seat allocation examples and how to verify your registration.\n\nFor custom or enterprise arrangements, [reach out](mailto:matt@trackandtrace.tools).\n\n## AUTHENTICATION\n\nThe T3 API supports two authentication formats. Every endpoint that requires authentication accepts either one.\n\nSee the [Authentication wiki page](https://wiki.trackandtrace.tools/t3-api/authentication/) for a full comparison.\n\n### 1. Credential Authentication (Bearer JWT)\n\nExchange your Metrc credentials at `POST /v2/auth/credentials` for a short-lived JWT. Send it on every subsequent request:\n\n`Authorization: Bearer <jwt>`\n\nCredentials required:\n\n- **hostname**: (The website you use to login to metrc: `ca.metrc.com`, `or.metrc.com`, etc.)\n- **username**: Your Metrc username\n- **email**: Your Metrc email (Only applies to Colorado users)\n- **password**: Your Metrc password\n- **otp**: A one-time password used for 2-factor authentication (Only applies to Michigan users)\n\nRefer to the **Authentication** endpoints below for more information.\n\n### 2. Secret Key Authentication\n\nGenerate a secret key once at `POST /v2/auth/secretkey`, then send it on every request via either the header (preferred) or the query parameter:\n\n`X-T3-API-Key: <yourSecretKeyGoesHere>`\n\n*OR*\n\n`?secretKey=<yourSecretKeyGoesHere>`\n\nWhen both are present, the header value wins. The same secret key shares a single rate-limit bucket across both forms.\n\nSecret keys work on every endpoint that requires authentication.\n\n#### Generating Secret Keys\n\nRefer to the [/v2/auth/secretkey](#/Authentication/post_v2_auth_secretkey) endpoint for information on generating secret keys.\n\n[Secret Key Generation Tool](/v2/pages/secret-key)\n\n[Sync Link Creation Tool](/v2/pages/sync-link)\n\n#### Important: Regenerate Your Secret Key When Credentials Change\n\nYour secret key embeds a snapshot of the credentials you supplied at creation time. If **any** of the following change in Metrc, the existing secret key stops working and you must delete it and generate a new one:\n\n- Password\n- Email (Colorado)\n- Username\n- One-time password (OTP) seed (Michigan)\n\n## SECURITY\n\nThe T3 API interacts with Metrc in a similar manner to the [Track & Trace Tools](https://chromewebstore.google.com/detail/track-trace-tools/dfljickgkbfaoiifheibjpejloipegcb) Chrome extension. The API login process is designed with a strong emphasis on security, but the security model differs between the two auth formats \u2014 read carefully:\n\n### Credential Authentication\n\n- **Single-Use Login Credentials:**\n  - When you obtain a JWT, the T3 API uses your login credentials only once to authenticate with Metrc.\n  - After the Metrc login process is complete, your login credentials are immediately deleted from the system.\n  - You are required to enter your login credentials each time you obtain a JWT, ensuring that your credentials are never stored.\n\n- **Secure Temporary Session Storage:**\n  - The T3 API securely encrypts your logged-in Metrc session data in Redis. This data is only used when you make requests through the T3 API.\n  - The encrypted session data is automatically deleted after 24 hours.\n\n### Secret Key Authentication\n\nSecret-key auth makes a deliberate trade-off: your credentials are retained so T3 can re-authenticate with Metrc on your behalf, sparing your integration from having to do it.\n\n- **Encrypted Credential Storage:**\n  - When you create a secret key, your Metrc credentials (username, password, hostname, and where applicable email and OTP seed) are encrypted at rest in T3's database.\n  - The plaintext is never logged and is only decrypted in-memory at request time.\n  - The encryption protects against a database-only compromise, not against compromise of the running service.\n\n- **Revocable:**\n  - Deleting a secret key via `DELETE /v2/auth/secretkey/<id>` evicts it from all caches immediately \u2014 no grace period.\n  - List your active keys (and inspect their `lastUsedAt` activity) via `GET /v2/auth/secretkey`.\n\nFor any questions or concerns, please contact [matt@trackandtrace.tools](mailto:matt@trackandtrace.tools).\n\n## PRIVACY\n\nThe T3 API privacy model follows the same principles as the [Track & Trace Tools](https://chromewebstore.google.com/detail/track-trace-tools/dfljickgkbfaoiifheibjpejloipegcb) Chrome extension. The T3 API functions solely as a connector between you and Metrc, ensuring your privacy is protected.\n\n- **No Data Collection:**\n  - The T3 API does not record, save, harvest, inspect, or analyze any of your data.\n  - All data interactions are ephemeral and occur in real-time, without permanent storage.\n\n- **Secure and Private Access:**\n  - Your data is never shared with third parties. Unauthorized access to your login information or data is strictly prohibited.\n  - T3 employs industry-standard encryption protocols to safeguard all communications between the T3 API and Metrc.\n\n- **User-Controlled Sessions:**\n  - Your Metrc login credentials and session are used exclusively by you. The T3 API will never initiate Metrc traffic without your explicit authorization.\n\n- **Compliance and Best Practices:**\n  - T3's privacy practices are aligned with applicable data protection regulations, including GDPR and CCPA, ensuring that your data rights are respected.\n\nThe T3 API is subject to the [Track & Trace Tools Privacy Policy](https://trackandtrace.tools/privacy-policy). For any privacy-related inquiries, please contact [matt@trackandtrace.tools](mailto:matt@trackandtrace.tools).\n\n## PERMISSIONS\n\nEach Metrc account has different permissions based on several factors:\n\n- Permissions granted by your Metrc admin\n- Class of license (manufacturing, cultivation, etc)\n- US state the license operates in\n\nUse the Permissions endpoints to determine which actions are available to you.\n\n## LICENSES\n\nView a list of all licenses available to the current user:\n\n`GET https://api.trackandtrace.tools/v2/licenses`\n\nSpecify the target license with the required `licenseNumber` query parameter:\n\n`GET https://api.trackandtrace.tools/v2/items?licenseNumber=LIC-00001`\n\nCollection and supercollection endpoints query one license per request. Report endpoints accept several \u2014 repeat the parameter \u2014 and are described under MULTIPLE LICENSES below.\n\n## RATE LIMITING\n\nThe API has a global default request rate limit of 600 requests/minute/user. Some routes have lower rate limits.\n\n## COLLECTIONS\n\nMost Metrc data is queried as a \"collection\". There are no individual object endpoints.  For example, you cannot find an individual object using an endpoint like `/plants/{plantId}`, individual objects must be queried by filtering the collection endpoint `/plants`.\n\nAlthough the T3 API write endpoints use IDs to identify objects, Metrc does not allow for filtering/querying by ID. You will need to query with a different unique identifier like `label`, or load a full collection and then filter.\n\nCollections are paginated, and can be filtered and sorted by individual object fields.\n\nThe JSON response object includes the following properties:\n- `data`: An array of objects, or any empty array\n- `page`: The requested page index\n- `pageSize`: The requested page size\n- `total`: The total number of items in this collection. Use this to determine how many pages are required to return the entire collection.\n\n### LOADING FULL COLLECTIONS\n`pageSize` is limited to 500 in most cases, so you may need to load multiple pages if a license has a large number of packages.\n\nRefer to [this example](https://github.com/classvsoftware/t3-api/blob/master/load_all_active_packages.py) for how to load a full collection in a python script.\n\n## REPORTS\n\nA **collection** endpoint (`/packages`) returns one page at a time, and you assemble the whole set yourself.\n\nA **supercollection** endpoint (`/packages/super`) returns the same paginated data, but each record can be enriched with related data pulled from other Metrc endpoints \u2014 lab results, history, source harvests \u2014 requested with the `include` parameter.\n\nA **report** endpoint (`/packages/active/report`) loads the entire collection in one request and returns it as a single document \u2014 JSON, CSV, an Excel workbook, or a new Google Sheet. There is no pagination: you get everything matching your filters, up to the row cap. A **super report** (`/packages/active/super/report`) does the same, with `include` support.\n\nReports are built for spreadsheets and one-shot exports. Collections are built for applications that page through data.\n\n### LIMITS\n\n| | Report | Super report |\n|---|---|---|\n| Path | `/report` | `/super/report` |\n| Row cap | 50,000 | 5,000 |\n| Rate limit | 600/minute | 180/minute |\n| Supports `include` | No | Yes |\n\nEvery report shares a budget of **10,000 Metrc requests**. Paging through the collection spends part of it; on a super report, each `include` costs one Metrc request per record. A request estimated to exceed the budget is rejected with `Report Request Too Large` *before any data is loaded*, so it costs you nothing but the round trip. Tighten your filters, set a lower `rowLimit`, or request fewer includes.\n\nThe super report row cap is a tenth of the plain cap for this reason: 5,000 records with one include is roughly the most that fits in the budget.\n\n### PARAMETERS\n\n- `licenseNumber` \u2014 required. Repeat it to report across several licenses. See below.\n- `contentType` \u2014 `json`, `csv`, `xlsx` or `googleSheets`. `json` and `csv` can also be set with the `Content-Type` header; the other two are query-parameter only.\n- `columns` \u2014 comma-separated list of columns. Omit for the report's defaults, which are documented on each endpoint. An unrecognized name returns 400 listing every valid field. Previously called `fieldnames`; that spelling still works, but sending both returns 400.\n- `columnHeaderOverrides` \u2014 renames the column headers of a tabular report. A comma-separated list matched positionally against the columns, where an empty entry keeps that column's default name: `columns=label,item.name,quantity&columnHeaderOverrides=,,Qty`. Names are used exactly as sent. Sending more entries than there are columns returns 400. Ignored by `contentType=json`, which has no header row. See below.\n- `rowLimit` \u2014 caps the records returned. Values above the row cap are clamped, not rejected, so an over-large value behaves like omitting it. Pair it with `sort` for a predictable result. Set it small (`rowLimit=10`) while building a request: a limited report has the same shape as the full one, so it is enough to verify filters and columns without loading everything.\n- `sort` and `filter` \u2014 same syntax as the matching collection endpoint.\n- `prependCsvMetadata` \u2014 set to `false` to drop the metadata preamble from any tabular format. See below.\n- `contentDisposition` \u2014 `attachment` (the default) or `inline`. Reports download by default; `inline` renders them in the browser instead. Ignored by non-browser clients and by `contentType=googleSheets`. See below.\n- `include` \u2014 super reports only.\n- `delivery` and `email` \u2014 deliver the report to an address instead of returning it. Required together, except that `contentType=googleSheets` accepts `email` on its own to share the sheet. See below.\n- `sheetVisibility` \u2014 `public` (the default) or `private`. `googleSheets` only; controls whether anyone with the sheet's link can open it. See below.\n\n### MULTIPLE LICENSES\n\nReports are the only endpoints that accept more than one license. Repeat `licenseNumber` to combine several into one document:\n\n```\nGET /v2/packages/active/report?licenseNumber=LIC-001&licenseNumber=LIC-002&contentType=csv\n```\n\nA comma-joined list is not supported, repeating the same license returns 400, and at most **20** licenses may be requested at once.\n\n**Rows appear in the order the parameters appear.** Every row of `LIC-001` precedes every row of `LIC-002`. `sort` orders rows within a license, not across them.\n\n**The limits are totals, not per-license allowances.** The row cap, `rowLimit` and the 10,000-request budget all apply to the sum across every requested license \u2014 two licenses holding 30,000 records each are 60,000 records and are rejected. `rowLimit` is filled in license order: `rowLimit=600` against a first license holding 400 records returns all 400 of the first and the first 200 of the second, and never asks Metrc for the rest.\n\n**Add `licenseNumber` to `columns` to label the rows.** Every record already carries it, so `columns=licenseNumber,label,quantity` tells the rows apart. It is not a default column, so a single-license report is unchanged. On the three transfer manifest reports the field is `transfer.licenseNumber`.\n\n**A report is all-or-nothing.** If any requested license fails \u2014 most often because you cannot access it \u2014 the whole request fails rather than returning a partial result a spreadsheet has no way to notice.\n\nA multi-license request counts as **one** report request against the rate limits.\n\n### OUTPUT FORMATS\n\n| `contentType` | Response | Notes |\n|---|---|---|\n| `json` | Nested envelope, as an attachment | Unlimited includes |\n| `csv` | `text/csv` attachment | One include |\n| `xlsx` | `.xlsx` attachment | One include |\n| `googleSheets` | `302` redirect to a new sheet | One include, public by default |\n\n`csv`, `xlsx` and `googleSheets` are the same data in different containers: identical rows, identical title-cased headers, identical preamble. Pick `csv` for scripts and scheduled pulls, `xlsx` when you want a file Excel opens without an import step, `googleSheets` for a one-off you intend to share or edit.\n\n### DOWNLOADING\n\nEvery format that returns bytes \u2014 `json`, `csv` and `xlsx` \u2014 is sent with `Content-Disposition: attachment`, so a browser saves it rather than displaying it. Downloads are named for the report, the license, the generation date and a short hash of the request: `active-packages-report_LIC-00001_2024-01-01_a1b2c3.csv`.\n\nThis is a browser concern only. `curl`, `requests`, `fetch` and Google Sheets `IMPORTDATA` all ignore the header and receive the same bytes regardless.\n\nPass `contentDisposition=inline` to have a browser render the response instead; no `Content-Disposition` header is then sent at all. `contentType=googleSheets` returns a redirect rather than bytes, so it ignores the parameter.\n\n### INCLUDES AND OUTPUT FORMAT\n\nWith `contentType=json` you may request as many includes as the request budget allows. With any tabular format \u2014 `csv`, `xlsx` or `googleSheets` \u2014 you may request **at most one**.\n\nThis is a property of the format, not a policy. Each of them is a two-dimensional grid: rows and columns, nothing else. One include folds into that grid by widening each row. A second include adds a data dimension the grid cannot represent \u2014 there is no non-lossy way to place two independent child collections on a single row without a cross join that multiplies the row count and misstates the data. JSON is nested, so it carries as many includes as the budget allows.\n\n### JSON RESPONSE\n\nA JSON report returns a single object describing the request and its results:\n\n- `generatedAt` \u2014 when the report was produced\n- `filters` \u2014 the filters applied\n- `filterLogic` \u2014 `and` or `or`\n- `sort` \u2014 the sort applied, if any\n- `licenseNumbers` \u2014 an array of the licenses queried, in row order\n- `data` \u2014 an array of records\n\n### TABULAR RESPONSES\n\n`csv` and `xlsx` are served with `Content-Disposition: attachment`, so a browser downloads them. Column headers are title-cased from the field names: `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n\nBy default eight rows precede the header \u2014 seven describing the request (report, data model, generation time, license, filters, filter logic, sort) and one blank separator. Column headers therefore land on **row 9** and the first data row on **row 10**.\n\nSet `prependCsvMetadata=false` to remove the preamble entirely, putting headers on row 1. Do this when the output feeds a formula that expects headers first, such as `IMPORTDATA` in Google Sheets.\n\n### EMAIL DELIVERY\n\n`delivery=email&email=you@example.com` sends the report to that address instead of returning it. The response is a receipt \u2014 `status`, `recipient`, `contentType` \u2014 sent immediately, before the report has been generated.\n\nThis is the only way to retrieve a report that takes longer than 240 seconds to build. An inline request gives up at that point with a `504`, and retrying does not help; with email delivery nothing is waiting on the result, so it is generated and delivered however long it takes.\n\n`json`, `csv` and `xlsx` arrive as a file attached to an email. `googleSheets` creates a sheet, shares it with that address, and emails the link \u2014 Google sends its own share notification too, so the recipient gets two messages carrying the same link.\n\n**Errors are emailed, not returned.** Once the receipt is sent there is no response left to fail into, so anything that goes wrong afterwards \u2014 `Report Request Too Large`, a Metrc permission error, a report too large to attach \u2014 is emailed to the recipient carrying the same title and explanation the inline request would have returned. Parameter validation still happens first, so an invalid `columns`, `rowLimit`, `include` or `email` is still an immediate 400.\n\nOne recipient per request. Email delivery is rate limited separately from report generation, and more tightly. Note that a Spreadsheet Sync link is polled on a schedule, so adding `delivery=email` to one sends a message on every refresh.\n\n### GOOGLE SHEETS RESPONSE\n\n`contentType=googleSheets` writes the report into a new Google Sheet. It is the one format whose response is not the report \u2014 it is a way to reach the document.\n\nAsked for inline (the default), the sheet is built during the request and the response is a `302` to it, with the same link in the body for clients that do not follow redirects:\n\n```\nGET /v2/packages/active/report?licenseNumber=LIC-001&contentType=googleSheets\n\nHTTP/1.1 302 Found\nLocation: https://docs.google.com/spreadsheets/d/1AbCdEf.../edit\n\n{\"sheetUrl\": \"https://docs.google.com/spreadsheets/d/1AbCdEf.../edit\", \"sheetId\": \"1AbCdEf...\"}\n```\n\nWith `delivery=email` you get the usual receipt instead, and the link is emailed once the sheet exists.\n\n**By default the sheet is readable and writable by anyone holding the link.** An inline request has no Google account to grant access to, so the URL is the credential \u2014 treat it the way you would treat the report itself. Pass `sheetVisibility=private` together with `email=you@example.com` to withhold the link grant and share it with one account instead; `private` without an `email` is a 400, because the sheet would open for nobody.\n\nThree caveats. **A named `email` must be a Google account** \u2014 Drive may refuse to share with an address it does not recognize, in which case no sheet is left behind and you are told why. **A large report is better asked for with `delivery=email`**: inline, the Drive work happens inside your request, on top of report generation, and a report near the row cap can exceed the request timeout partway through. And **every request creates a new sheet, which is never deleted** \u2014 use `csv` for anything recurring, or a scheduled job will accumulate one abandoned sheet per run.\n\n### CACHING AND TIMING\n\nIdentical report requests are served from cache for **5 minutes**. \"Identical\" means the same license, endpoint and query parameters. A scheduled spreadsheet refresh that runs more often than every 5 minutes will keep receiving the same document.\n\nPresentation and delivery parameters are excluded from that identity: `contentType`, `contentDisposition`, `columns`, `metadata`, `prependCsvMetadata`, `delivery` and `email` are applied to data that has already been loaded, so two people can be emailed the same report without generating it twice. Re-requesting the same report with different columns, or as XLSX instead of JSON, is served from cache rather than reloading from Metrc. `rowLimit`, `filter`, `filterLogic` and `sort` do change which records are fetched, so changing them loads fresh data.\n\nA report request waits up to **240 seconds** for the report to finish. Most complete well inside that. If the wait elapses, you get a `504` \u2014 the report is still being generated, so retry, and the retry is usually served from cache. A report that consistently exceeds 240 seconds is not obtainable inline at all; use `delivery=email`, which does not wait.\n\n## ERROR CODES\n\nAll error responses follow [RFC 7807](https://tools.ietf.org/html/rfc7807) Problem Details format. Each error response includes a `type` URL that links to documentation for that specific error code, along with a machine-readable `code` field.\n\nSee the [Error Reference](/errors/) for the complete list of error codes, their descriptions, common causes, and resolution steps.\n\n## USING THE API\n\nFull documentation on using the T3 API can be found [here](https://github.com/classvsoftware/t3-wiki/wiki/T3-API).\n\n## CONTACT\n\n- **Responsible Organization:** Class V LLC\n- **Responsible Developer:** Matt Frisbie\n- **Email:** [matt@trackandtrace.tools](mailto:matt@trackandtrace.tools)\n- **URL:** [https://trackandtrace.tools](https://trackandtrace.tools)\n- **Terms of Use:** [https://www.trackandtrace.tools/terms-of-use](https://www.trackandtrace.tools/terms-of-use)\n"
  },
  "paths": {
    "/v2/spec/openapi.json": {
      "get": {
        "summary": "Get the OpenAPI specification",
        "description": "Returns the OpenAPI 3.0.2 specification for this API.\n\nSee the [wiki guide on pruning the spec](https://wiki.trackandtrace.tools/t3-api/openapi/#pruning-the-spec) for a longer walkthrough of when and why to use the filters below.\n\n**Without filters:** Returns the full specification containing all paths, schemas, and parameters.\n\n**With filter(s):** Returns a pruned specification containing only the\nrequested resources and their transitive dependencies. This is useful for LLM/AI agent\nconsumption, where sending the full spec would waste tokens.\n\nAll filter values (schema, parameter, tag) are **case-insensitive**.\n\n## Filter Types\n\n### `path` - Filter by API path\n\nReturns the specified path definition(s) plus all transitively-referenced schemas\nand parameters.\n\n```\nGET /v2/spec/openapi.json?path=/v2/packages/active\nGET /v2/spec/openapi.json?path=/v2/packages/active&path=/v2/auth/credentials\n```\n\n### `schema` - Filter by schema name\n\nReturns the specified schema definition(s) plus any transitively-referenced schemas.\nNo paths are included in the response.\n\n```\nGET /v2/spec/openapi.json?schema=MetrcPackage\nGET /v2/spec/openapi.json?schema=metrcpackage\nGET /v2/spec/openapi.json?schema=MetrcPackage&schema=Pagination\n```\n\n### `parameter` - Filter by parameter name\n\nReturns the specified reusable parameter definition(s) plus any schemas they reference.\nNo paths are included in the response.\n\n```\nGET /v2/spec/openapi.json?parameter=LicenseNumber\nGET /v2/spec/openapi.json?parameter=licensenumber\nGET /v2/spec/openapi.json?parameter=CollectionFilter&parameter=CollectionSort\n```\n\n### `tag` - Filter by tag\n\nReturns all paths tagged with the specified tag(s) plus their transitively-referenced\nschemas and parameters.\n\n```\nGET /v2/spec/openapi.json?tag=Items\nGET /v2/spec/openapi.json?tag=items\nGET /v2/spec/openapi.json?tag=Authentication&tag=Packages\n```\n\n## Combining Filters\n\nMultiple filters can be combined in a single request. Results are merged via **union** --\nthe response contains everything matched by any individual filter.\n\n```\nGET /v2/spec/openapi.json?path=/v2/auth/credentials&schema=MetrcPackage\nGET /v2/spec/openapi.json?tag=Items&parameter=LicenseNumber\nGET /v2/spec/openapi.json?path=/v2/packages/active&tag=Authentication&schema=Pagination\n```\n",
        "responses": {
          "200": {
            "description": "A valid OpenAPI 3.0.2 specification",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "One or more requested resources were not found in the spec"
          }
        },
        "parameters": [
          {
            "name": "path",
            "in": "query",
            "required": false,
            "description": "One or more API paths to include. Returns the path definitions plus\ntheir transitively-referenced schemas and parameters. Repeat this\nparameter to include multiple paths.\n",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "/v2/packages/active"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "schema",
            "in": "query",
            "required": false,
            "description": "One or more schema names to include (case-insensitive). Returns the\nschema definition plus any transitively-referenced schemas. No paths\nare included. Repeat this parameter to include multiple schemas.\n",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "MetrcPackage"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "parameter",
            "in": "query",
            "required": false,
            "description": "One or more reusable parameter names to include (case-insensitive).\nReturns the parameter definition plus any referenced schemas. No paths\nare included. Repeat this parameter to include multiple parameters.\n",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "LicenseNumber"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "One or more tag names (case-insensitive). Returns all paths tagged\nwith this tag plus their transitively-referenced schemas and parameters.\nRepeat this parameter to include multiple tags.\n",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "example": [
                "Items"
              ]
            },
            "style": "form",
            "explode": true
          }
        ],
        "tags": [
          "LLM",
          "OpenAPI"
        ],
        "security": []
      }
    },
    "/v2/auth/credentials": {
      "post": {
        "summary": "Authenticate with Metrc credentials",
        "description": "**A T3+ subscription is not required to use this endpoint**\n",
        "requestBody": {
          "description": "JSON object containing your Metrc login details\nNote: The `email` field is only needed if you are authenticating in Colorado. Otherwise, omit this property.\nNote: The `otp` field is only needed if you are authenticating in Michigan. Otherwise, omit this property.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCredentialAuthPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Your JWT access token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accessToken": {
                      "$ref": "#/components/schemas/AccessToken"
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Authentication",
          "Free"
        ],
        "security": []
      }
    },
    "/v2/auth/whoami": {
      "get": {
        "summary": "Returns information about the authenticated user",
        "responses": {
          "200": {
            "description": "Information about the authenticated user including organization and subscription details",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/JWTData"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "organizationPublicId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "The public ID of the organization the user belongs to",
                          "example": "550e8400-e29b-41d4-a716-446655440000"
                        },
                        "subscriptionPublicId": {
                          "type": "string",
                          "format": "uuid",
                          "nullable": true,
                          "description": "The public ID of the subscription attached to the organization",
                          "example": "660e8400-e29b-41d4-a716-446655440001"
                        },
                        "subscriptionStatus": {
                          "type": "string",
                          "nullable": true,
                          "description": "The status of the subscription",
                          "enum": [
                            "active",
                            "trialing",
                            "canceled",
                            "overdue"
                          ],
                          "example": "active"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "tags": [
          "Authentication",
          "Free"
        ]
      }
    },
    "/v2/auth/check": {
      "post": {
        "summary": "Check whether the current JWT can still authenticate against Metrc",
        "description": "Tests the stored Metrc session by issuing a request to the Metrc root and\nconfirming it does not redirect to the login page. Returns `success: true`\nif the session is still valid, otherwise `success: false`. Always responds\nwith HTTP 200.\n",
        "responses": {
          "200": {
            "description": "Whether the JWT's underlying Metrc session is still valid",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "True if the Metrc session is still authenticated, false otherwise",
                      "example": true
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Authentication",
          "Free"
        ]
      }
    },
    "/v2/auth/logout": {
      "post": {
        "summary": "Log out all Metrc sessions",
        "description": "Expires all existing Metrc sessions for the authenticated user by issuing a\nlogout request to Metrc. The cached session data in Redis is also deleted,\nso the JWT will no longer be usable for subsequent API calls.\n",
        "responses": {
          "200": {
            "description": "Successfully logged out of all Metrc sessions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "description": "True if the logout completed successfully",
                      "example": true
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Authentication",
          "Free"
        ]
      }
    },
    "/v2/auth/sandbox": {
      "post": {
        "summary": "Mint a sandbox JWT from an authenticated session",
        "description": "Exchanges an authenticated Metrc session (the caller's JWT or secret key)\nfor a brand-new JWT scoped to the corresponding sandbox hostname\n(e.g. `mo.metrc.com` -> `sandbox-mo.metrc.com`).\n\nThe caller's account must be provisioned for a sandbox session in Metrc;\nif no one-time login link is available, the endpoint returns 400.\n\nThe returned JWT carries the same username and T3+ subscription state as\nthe source session, but a different hostname, licenses, and permissions.\n",
        "responses": {
          "200": {
            "description": "A JWT access token authenticated against the sandbox hostname",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accessToken": {
                      "$ref": "#/components/schemas/AccessToken"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Sandbox is not available for this account, or the caller is already on a sandbox hostname"
          },
          "401": {
            "description": "Missing or invalid authentication"
          }
        },
        "tags": [
          "Authentication",
          "Free"
        ]
      }
    },
    "/v2/auth/secretkey": {
      "post": {
        "summary": "Generate a secret key for use with secret-key authentication.",
        "description": "Generates a secret key that can be passed to any `@session_required` endpoint\nvia the `X-T3-API-Key` header (preferred) or the `?secretKey=` query parameter.\n\n### How your credentials are stored\n\nWhen you create a secret key, your Metrc credentials (username, password,\nhostname, and \u2014 where applicable \u2014 email and one-time password seed) are\n**encrypted at rest** in T3's database. The plaintext credentials are never\nlogged and are only decrypted in-memory at request time to establish a Metrc\nsession.\n\n### When you must regenerate your secret key\n\nYour secret key embeds a snapshot of the credentials you submitted. If **any**\nof the following change in Metrc, the secret key will stop working and you\nmust create a new one:\n\n- Password\n- Email (Colorado)\n- Username\n- One-time password seed (Michigan)\n\nThe T3 API also provides a [secret-key management page](/v2/pages/secret-key).\n",
        "requestBody": {
          "description": "JSON object containing your Metrc secret key details\n\nNote: The `email` field is only needed if you are authenticating in Colorado.\nOtherwise, omit this property.\n\nNote: The `otpSeed` field is only needed if you are authenticating in Michigan.\nOtherwise, omit this property.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Your Metrc username",
                    "example": "user123"
                  },
                  "password": {
                    "type": "string",
                    "description": "Your Metrc password",
                    "example": "secretpassword"
                  },
                  "hostname": {
                    "$ref": "#/components/schemas/MetrcHostname"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true,
                    "description": "(Colorado only) Your Metrc login email",
                    "example": "user@example.com"
                  },
                  "otpSeed": {
                    "type": "string",
                    "description": "(Michigan only) the seed string for your Metrc multi-factor authentication",
                    "example": "J3G5KD9W8ZT2LV6X"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Your secret key",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "secretKey": {
                      "$ref": "#/components/schemas/SecretKey"
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Authentication",
          "Reports"
        ],
        "security": []
      },
      "get": {
        "summary": "List all secret keys for the authenticated user.",
        "description": "Returns all secret keys associated with the authenticated user's hostname and username.\n",
        "responses": {
          "200": {
            "description": "List of secret keys",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "secretKey": {
                            "$ref": "#/components/schemas/SecretKey"
                          },
                          "createdAt": {
                            "type": "string",
                            "format": "date-time",
                            "description": "When the secret key was created"
                          },
                          "isEnabled": {
                            "type": "boolean",
                            "description": "Whether the secret key can authenticate. Disabled keys\nare returned for visibility but cannot be used to\nauthenticate against the API.\n"
                          },
                          "lastUsedAt": {
                            "type": "string",
                            "format": "date-time",
                            "nullable": true,
                            "description": "When the secret key most recently authenticated a\nrequest. `null` if the key has never been used.\n"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "tags": [
          "Authentication"
        ]
      }
    },
    "/v2/auth/secretkey/{secret_key_id}": {
      "delete": {
        "summary": "Delete a secret key.",
        "description": "Permanently deletes a single secret key identified by its UUID. The key must belong to the authenticated user.\n",
        "responses": {
          "200": {
            "description": "The secret key was deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "boolean"
                    },
                    "secretKey": {
                      "$ref": "#/components/schemas/SecretKey"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Secret key not found"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "parameters": [
          {
            "name": "secret_key_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SecretKey"
            },
            "description": "The secret key UUID to delete"
          }
        ],
        "tags": [
          "Authentication"
        ]
      },
      "put": {
        "summary": "Update the Metrc credentials backing an existing secret key (in place).",
        "description": "Rotates the Metrc credentials stored for an existing secret key. The\nsecret key UUID does not change \u2014 callers can continue using the same\nkey value. Use this after a Metrc password change, Colorado email\nchange, Michigan one-time password seed reset, etc., instead of\ndeleting the key and reconfiguring every place it is used.\n\nPer-state requirements are the same as for\n`POST /v2/auth/secretkey`: Colorado requires `email`, Michigan\nrequires `otpSeed`.\n\nThe supplied credentials are validated against Metrc *before* the row\nis updated \u2014 a failed Metrc login leaves the existing credentials\nuntouched. On success, the short-TTL decrypted-credential cache for\nthis secret key is invalidated so the new credentials take effect\nimmediately.\n\nThe `username` and `hostname` in the request body must match the\nidentity that the existing secret key was created with. This endpoint\nrotates credentials in place \u2014 it does not re-key a secret to a\ndifferent Metrc user.\n",
        "requestBody": {
          "description": "JSON object containing the new Metrc credentials.\n\nNote: The `email` field is only needed if you are authenticating in Colorado.\nOtherwise, omit this property.\n\nNote: The `otpSeed` field is only needed if you are authenticating in Michigan.\nOtherwise, omit this property.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Your Metrc username",
                    "example": "user123"
                  },
                  "password": {
                    "type": "string",
                    "description": "Your Metrc password",
                    "example": "secretpassword"
                  },
                  "hostname": {
                    "$ref": "#/components/schemas/MetrcHostname"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true,
                    "description": "(Colorado only) Your Metrc login email",
                    "example": "user@example.com"
                  },
                  "otpSeed": {
                    "type": "string",
                    "description": "(Michigan only) the seed string for your Metrc multi-factor authentication",
                    "example": "J3G5KD9W8ZT2LV6X"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The secret key credentials were updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "updated": {
                      "type": "boolean"
                    },
                    "secretKey": {
                      "$ref": "#/components/schemas/SecretKey"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body, or no secret key matched the supplied UUID and credentials"
          },
          "401": {
            "description": "Metrc login failed with the supplied credentials"
          }
        },
        "parameters": [
          {
            "name": "secret_key_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SecretKey"
            },
            "description": "The secret key UUID whose credentials should be rotated"
          }
        ],
        "tags": [
          "Authentication"
        ],
        "security": []
      }
    },
    "/v2/auth/register": {
      "post": {
        "summary": "Self-register a Metrc username under an organization and issue a secret key.",
        "description": "Registers a Metrc username under the organization identified by a\n`registrationSecret`, and issues a fresh secret key in the same call so\nthe caller can immediately use the API.\n\n### When to use\n\nThis endpoint lets an organization admin programmatically onboard team\nmembers without going through the dash.trackandtrace.tools web flow.\nTwo scenarios:\n\n- **Admin onboarding**: the admin holds the `registrationSecret` and\n  scripts onboarding directly.\n- **Admin-delegated self-registration**: the admin shares the\n  `registrationSecret` with their team members out of band, and each\n  member self-registers without needing a dash account or org\n  membership.\n\n### How the safety model works\n\n- The `registrationSecret` is unique per organization and rotatable from\n  the web UI. A leak only enables abuse against that one org's seat\n  count.\n- The supplied Metrc credentials are validated against Metrc *before*\n  anything is persisted \u2014 a caller cannot register a Metrc username they\n  cannot themselves authenticate as.\n- Registration consumes one seat against the organization's active T3+\n  subscription. When the seat cap is reached, further registrations\n  fail with 402 until seats are freed or the subscription is upgraded.\n\n### Per-state requirements\n\nSame as `POST /v2/auth/secretkey`: Colorado requires `email`, Michigan\nrequires `otpSeed`.\n\n### Idempotency\n\nRe-registering a username that is already attached to the same\norganization returns 409. Registering a username that is already\nattached to a *different* organization is allowed and follows the\nnormal registration path (Metrc-login proof is still required) \u2014 this\nprevents the endpoint from being used to enumerate registrations across\norgs.\n",
        "requestBody": {
          "description": "JSON object containing the organization's `registrationSecret` and the\nMetrc credentials to register.\n\nNote: The `email` field is only needed if you are authenticating in Colorado.\nOtherwise, omit this property.\n\nNote: The `otpSeed` field is only needed if you are authenticating in Michigan.\nOtherwise, omit this property.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "registrationSecret": {
                    "type": "string",
                    "description": "The organization's registration secret (rotatable from the web UI)",
                    "example": "rs-7f5c4e2b-8d1a-4f3c-9e6b-2a5d8c7f1e3b"
                  },
                  "username": {
                    "type": "string",
                    "description": "Your Metrc username",
                    "example": "user123"
                  },
                  "password": {
                    "type": "string",
                    "description": "Your Metrc password",
                    "example": "secretpassword"
                  },
                  "hostname": {
                    "$ref": "#/components/schemas/MetrcHostname"
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true,
                    "description": "(Colorado only) Your Metrc login email",
                    "example": "user@example.com"
                  },
                  "otpSeed": {
                    "type": "string",
                    "description": "(Michigan only) the seed string for your Metrc multi-factor authentication",
                    "example": "J3G5KD9W8ZT2LV6X"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The Metrc username was registered and a secret key was issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "registered": {
                      "type": "boolean"
                    },
                    "secretKey": {
                      "$ref": "#/components/schemas/SecretKey"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body or missing required field"
          },
          "401": {
            "description": "Invalid registration secret, or Metrc login failed"
          },
          "402": {
            "description": "Organization has no active subscription, or all subscription seats are in use"
          },
          "409": {
            "description": "This Metrc username is already registered under the organization"
          }
        },
        "tags": [
          "Authentication"
        ],
        "security": []
      }
    },
    "/v2/licenses": {
      "get": {
        "summary": "List of accessible licenses",
        "description": "**A T3+ subscription is not required to use this endpoint**\n",
        "responses": {
          "200": {
            "description": "A list of accessible Metrc licenses",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetrcLicense"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Licenses",
          "Free"
        ]
      }
    },
    "/v2/states": {
      "get": {
        "summary": "List of accessible states",
        "description": "**A T3+ subscription is not required to use this endpoint**\n",
        "responses": {
          "200": {
            "description": "A list of accessible Metrc states",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetrcState"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "States",
          "Free"
        ]
      }
    },
    "/v2/items": {
      "get": {
        "summary": "List of active items",
        "responses": {
          "200": {
            "description": "A list of active items for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItem"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Items"
        ]
      }
    },
    "/v2/items/super": {
      "get": {
        "summary": "List of active superitems. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active items for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperitem"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more item filters."
          },
          {
            "$ref": "#/components/parameters/SuperitemInclude"
          }
        ],
        "tags": [
          "Items",
          "Supercollections"
        ]
      }
    },
    "/v2/items/history": {
      "get": {
        "summary": "List of item history objects for a single item",
        "responses": {
          "200": {
            "description": "A list of history objects for the specified item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The item with id={itemId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "History"
        ]
      }
    },
    "/v2/items/notes": {
      "get": {
        "summary": "List of item notes objects for a single item",
        "responses": {
          "200": {
            "description": "A list of file objects for the specified item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItemIngredient"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The item with id={itemId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          }
        ],
        "tags": [
          "Items",
          "Single Item"
        ]
      }
    },
    "/v2/items/ingredients": {
      "get": {
        "summary": "List of item ingredients objects for a single item",
        "responses": {
          "200": {
            "description": "A list of file objects for the specified item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItemNote"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The item with id={itemId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          }
        ],
        "tags": [
          "Items",
          "Single Item"
        ]
      }
    },
    "/v2/items/images": {
      "get": {
        "summary": "List of item image objects for a single item",
        "responses": {
          "200": {
            "description": "A list of file objects for the specified item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItemImage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The item with id={itemId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the image sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "fileName__contains:abc",
            "description": "One or more file filters."
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "Files",
          "Photos"
        ]
      }
    },
    "/v2/items/photos": {
      "get": {
        "summary": "List of item image objects for a single item",
        "responses": {
          "200": {
            "description": "A list of file objects for the specified item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItemImage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The item with id={itemId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the image sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "fileName__contains:abc",
            "description": "One or more file filters."
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "Files",
          "Photos"
        ]
      }
    },
    "/v2/items/create": {
      "post": {
        "summary": "Create one or more items",
        "description": "**Refer to the request body schema for details on formatting your request**\n\n'\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreateItemsPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Items",
          "Create Items"
        ]
      }
    },
    "/v2/items/create/inputs": {
      "get": {
        "summary": "Input data used for creating new items",
        "responses": {
          "200": {
            "description": "A dictionary of data used for creating new items",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcCreateItemInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Items",
          "Create Items"
        ]
      }
    },
    "/v2/items/discontinue": {
      "post": {
        "summary": "Discontinue one item",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcDiscontinueItemPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Items",
          "Modify Items"
        ]
      }
    },
    "/v2/items/report": {
      "get": {
        "summary": "Generate a report of all active items",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active items for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcItemReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,productCategoryName,productCategoryTypeName,strainName\nBlue Dream 3.5g Prepack,Bud/Flower (Final Packaging),Buds,Blue Dream\nPineapple Express 3.5g Prepack,Bud/Flower (Final Packaging),Buds,Pineapple Express"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more item filters."
          },
          {
            "name": "columns",
            "description": "Defines which item fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,productCategoryName,productCategoryTypeName,strainName",
              "example": "name,productCategoryName,productCategoryTypeName,strainName"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Items",
          "Reports"
        ]
      }
    },
    "/v2/items/super/report": {
      "get": {
        "summary": "Generate a super report of all items",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of superitems for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperitemReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,productCategoryName\nBuds,Flower\nEdible,Edible"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:kush",
            "description": "One or more item filters."
          },
          {
            "$ref": "#/components/parameters/SuperitemInclude"
          },
          {
            "name": "columns",
            "description": "Defines which item fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,productCategoryName,productCategoryTypeName,strainName",
              "example": "name,productCategoryName,productCategoryTypeName,strainName"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Items",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/items/images/file": {
      "get": {
        "summary": "Get a photo for an item.",
        "responses": {
          "200": {
            "description": "Item photo",
            "content": {
              "image/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "name": "imageFileId",
            "description": "ID of the target photo",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 12345
            }
          },
          {
            "name": "fileType",
            "in": "query",
            "description": "Photo file type",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ItemLabelImage",
                "ItemProductImage",
                "ItemPackagingImage"
              ],
              "example": "ItemLabelImage"
            }
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "Files",
          "Photos"
        ]
      },
      "post": {
        "summary": "Upload a photo for an item.",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "The image file to upload"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully uploaded item photo",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "imageFileId": {
                      "type": "integer",
                      "description": "ID of the uploaded image file"
                    }
                  },
                  "example": {
                    "imageFileId": 301
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request (missing file or invalid fileType)"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "fileType",
            "in": "query",
            "description": "Photo file type",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ItemImageFileType"
            }
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "Files",
          "Photos"
        ]
      }
    },
    "/v2/items/photos/file": {
      "get": {
        "summary": "Get a photo for an item.",
        "responses": {
          "200": {
            "description": "Item photo",
            "content": {
              "image/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "itemId",
            "description": "ID of the target item",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "name": "imageFileId",
            "description": "ID of the target photo",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 12345
            }
          },
          {
            "name": "fileType",
            "in": "query",
            "description": "Photo file type",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ItemLabelImage",
                "ItemProductImage",
                "ItemPackagingImage"
              ],
              "example": "ItemLabelImage"
            }
          }
        ],
        "tags": [
          "Items",
          "Single Item",
          "Files",
          "Photos"
        ]
      }
    },
    "/v2/tags/available": {
      "get": {
        "summary": "List of available tags",
        "responses": {
          "200": {
            "description": "A list of available tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Tags"
        ]
      }
    },
    "/v2/tags/available/super": {
      "get": {
        "summary": "List of available supertags. Each item carries derived `metadata.summary` + `metadata.description` text.",
        "responses": {
          "200": {
            "description": "A list of available supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSupertag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more tag filters."
          }
        ],
        "tags": [
          "Tags",
          "Supercollections"
        ]
      }
    },
    "/v2/tags/used": {
      "get": {
        "summary": "List of used tags",
        "responses": {
          "200": {
            "description": "A list of used tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Tags"
        ]
      }
    },
    "/v2/tags/used/super": {
      "get": {
        "summary": "List of used supertags. Each item carries derived `metadata.summary` + `metadata.description` text.",
        "responses": {
          "200": {
            "description": "A list of used supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSupertag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more tag filters."
          }
        ],
        "tags": [
          "Tags",
          "Supercollections"
        ]
      }
    },
    "/v2/tags/voided": {
      "get": {
        "summary": "List of voided tags",
        "responses": {
          "200": {
            "description": "A list of voided tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Tags"
        ]
      }
    },
    "/v2/tags/voided/super": {
      "get": {
        "summary": "List of voided supertags. Each item carries derived `metadata.summary` + `metadata.description` text.",
        "responses": {
          "200": {
            "description": "A list of voided supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSupertag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more tag filters."
          }
        ],
        "tags": [
          "Tags",
          "Supercollections"
        ]
      }
    },
    "/v2/tags/available/report": {
      "get": {
        "summary": "Generate a report of all available tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of available tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcTagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName,isUsed\nCannabis Package, 1A4400001234000000001234, Received, false\nCannabis Package, 1A4400001234000000001235, Received, false"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more item filters."
          },
          {
            "name": "columns",
            "description": "Defines which item fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports"
        ]
      }
    },
    "/v2/tags/available/super/report": {
      "get": {
        "summary": "Generate a super report of all available tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of available supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSupertagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName\nCannabisPackage,1A4400000000000000001234,Available"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid Include** -- this report attaches no related data, so it accepts no `include` parameter. Any `include` value is rejected.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0",
            "description": "One or more tag filters."
          },
          {
            "name": "columns",
            "description": "Defines which tag fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/tags/used/report": {
      "get": {
        "summary": "Generate a report of all used tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of used tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcTagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName\nCannabisPackage,1A4400000000000000001234,Used"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0",
            "description": "One or more tag filters."
          },
          {
            "name": "columns",
            "description": "Defines which tag fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports"
        ]
      }
    },
    "/v2/tags/used/super/report": {
      "get": {
        "summary": "Generate a super report of all used tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nTags have no sub-resource includes, so this report carries the same columns as /v2/tags/used/report and differs only in the derived metadata the supercollection layer supplies.\n",
        "responses": {
          "200": {
            "description": "A list of used supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSupertagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName\nCannabisPackage,1A4400000000000000001234,Used"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid Include** -- this report attaches no related data, so it accepts no `include` parameter. Any `include` value is rejected.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0",
            "description": "One or more tag filters."
          },
          {
            "name": "columns",
            "description": "Defines which tag fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/tags/voided/report": {
      "get": {
        "summary": "Generate a report of all voided tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of voided tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcTagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName\nCannabisPackage,1A4400000000000000001234,Voided"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0",
            "description": "One or more tag filters."
          },
          {
            "name": "columns",
            "description": "Defines which tag fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports"
        ]
      }
    },
    "/v2/tags/voided/super/report": {
      "get": {
        "summary": "Generate a super report of all voided tags",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nTags have no sub-resource includes, so this report carries the same columns as /v2/tags/voided/report and differs only in the derived metadata the supercollection layer supplies.\n",
        "responses": {
          "200": {
            "description": "A list of voided supertags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSupertagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "tagTypeName,label,statusName\nCannabisPackage,1A4400000000000000001234,Voided"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid Include** -- this report attaches no related data, so it accepts no `include` parameter. Any `include` value is rejected.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0",
            "description": "One or more tag filters."
          },
          {
            "name": "columns",
            "description": "Defines which tag fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "tagTypeName,label,statusName,isUsed",
              "example": "tagTypeName,label,statusName,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Tags",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/locations/active": {
      "get": {
        "summary": "List of active locations",
        "responses": {
          "200": {
            "description": "A list of active locations for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcLocation"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the location sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:row",
            "description": "One or more location filters."
          }
        ],
        "tags": [
          "Locations"
        ]
      }
    },
    "/v2/locations/active/super": {
      "get": {
        "summary": "List of active superlocations. Each item carries derived `metadata.summary` + `metadata.description` text.",
        "responses": {
          "200": {
            "description": "A list of active superlocations for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperlocation"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the location sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:vault",
            "description": "One or more location filters."
          }
        ],
        "tags": [
          "Locations",
          "Supercollections"
        ]
      }
    },
    "/v2/locations/active/report": {
      "get": {
        "summary": "Generate a report of all available locations",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of available locations for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcTagReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name\nRow 01\nRow 02"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the location sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more location filters."
          },
          {
            "name": "columns",
            "description": "Defines which location fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name",
              "example": "name"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Locations",
          "Reports"
        ]
      }
    },
    "/v2/locations/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active locations",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active superlocations for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperlocationReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name\nRoom A\nRoom B"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid Include** -- this report attaches no related data, so it accepts no `include` parameter. Any `include` value is rejected.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the location sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:e",
            "description": "One or more location filters."
          },
          {
            "name": "columns",
            "description": "Defines which location fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name",
              "example": "name"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Locations",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/strains": {
      "get": {
        "summary": "List of active strains",
        "responses": {
          "200": {
            "description": "A list of active strains for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcStrain"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the strain sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:flower",
            "description": "One or more strain filters."
          }
        ],
        "tags": [
          "Strains"
        ]
      }
    },
    "/v2/strains/super": {
      "get": {
        "summary": "List of active superstrains. Each item carries derived `metadata.summary` + `metadata.description` text.",
        "responses": {
          "200": {
            "description": "A list of active superstrains for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperstrain"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the strain sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:kush",
            "description": "One or more strain filters."
          }
        ],
        "tags": [
          "Strains",
          "Supercollections"
        ]
      }
    },
    "/v2/strains/discontinue": {
      "post": {
        "summary": "Discontinue one strain",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcDiscontinueStrainPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Strains",
          "Modify Strains"
        ]
      }
    },
    "/v2/strains/report": {
      "get": {
        "summary": "Generate a report of all active strains",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active strains for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcStrainReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,sativaPercentage,indicaPercentage,isUsed\nBlue Dream,50,50,true"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the strain sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more strain filters."
          },
          {
            "name": "columns",
            "description": "Defines which strain fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,sativaPercentage,indicaPercentage,isUsed",
              "example": "name,sativaPercentage,indicaPercentage,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Strains",
          "Reports"
        ]
      }
    },
    "/v2/strains/super/report": {
      "get": {
        "summary": "Generate a super report of all strains",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of superstrains for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperstrainReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,sativaPercentage,indicaPercentage\nOG Kush,30,70\nBlue Dream,50,50"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid Include** -- this report attaches no related data, so it accepts no `include` parameter. Any `include` value is rejected.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the strain sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:as",
            "description": "One or more strain filters."
          },
          {
            "name": "columns",
            "description": "Defines which strain fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,sativaPercentage,indicaPercentage,isUsed",
              "example": "name,sativaPercentage,indicaPercentage,isUsed"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Strains",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/strains/create": {
      "post": {
        "summary": "Create one or more strains",
        "description": "**Refer to the request body schema for details on formatting your request**\n\n'\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreateStrainsPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Strains",
          "Create Strains"
        ]
      }
    },
    "/v2/packages/active": {
      "get": {
        "summary": "List of active packages",
        "responses": {
          "200": {
            "description": "A list of active packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          }
        ],
        "tags": [
          "Packages"
        ]
      }
    },
    "/v2/packages/active/super": {
      "get": {
        "summary": "List of active superpackages. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperpackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          }
        ],
        "tags": [
          "Packages",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/onhold": {
      "get": {
        "summary": "List of on hold packages",
        "responses": {
          "200": {
            "description": "A list of on hold packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages"
        ]
      }
    },
    "/v2/packages/onhold/super": {
      "get": {
        "summary": "List of on-hold superpackages. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of on-hold superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperpackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          }
        ],
        "tags": [
          "Packages",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/onhold/report": {
      "get": {
        "summary": "Generate a report of all on hold packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports"
        ]
      }
    },
    "/v2/packages/onhold/super/report": {
      "get": {
        "summary": "Generate a super report of all on hold packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperpackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/inactive": {
      "get": {
        "summary": "List of inactive packages",
        "responses": {
          "200": {
            "description": "A list of inactive packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages"
        ]
      }
    },
    "/v2/packages/inactive/super": {
      "get": {
        "summary": "List of inactive superpackages. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperpackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          }
        ],
        "tags": [
          "Packages",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/intransit": {
      "get": {
        "summary": "List of in transit packages",
        "responses": {
          "200": {
            "description": "A list of in transit packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages"
        ]
      }
    },
    "/v2/packages/intransit/super": {
      "get": {
        "summary": "List of intransit superpackages. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of intransit superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperpackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          }
        ],
        "tags": [
          "Packages",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/transferred": {
      "get": {
        "summary": "List of transferred packages",
        "description": "\n**Note: this return type is different from the other package endpoints**\n",
        "responses": {
          "200": {
            "description": "A list of transferred packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcDeliveryPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "packageLabel:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "packageLabel__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages"
        ]
      }
    },
    "/v2/packages/history": {
      "get": {
        "summary": "List of package history objects for a single package",
        "responses": {
          "200": {
            "description": "A list of history objects for the specified package.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The package with id={packageId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "History"
        ]
      }
    },
    "/v2/packages/labresults": {
      "get": {
        "summary": "List of package lab result objects for a single package",
        "responses": {
          "200": {
            "description": "A list of package lab result objects for the specified package.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackageLabResult"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The package with id={packageId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "testTypeName:asc",
            "description": "Defines the package lab result sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "testTypeName__contains:terpenes",
            "description": "One or more package lab result filters."
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "Lab Results"
        ]
      }
    },
    "/v2/packages/labresult-batches": {
      "get": {
        "summary": "List of package lab result batch objects for a single package",
        "responses": {
          "200": {
            "description": "A list of package lab result batch objects for the specified package.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackageLabResultBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The package with id={packageId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "testTypeName:asc",
            "description": "Defines the package lab result sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "testTypeName__contains:terpenes",
            "description": "One or more package lab result filters."
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "Lab Results"
        ]
      }
    },
    "/v2/packages/required-labtest-batches": {
      "get": {
        "summary": "List of package required labtest batch objects for a single package",
        "responses": {
          "200": {
            "description": "A list of package lab result batch objects for the specified package.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackageRequiredLabtestBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The package with id={packageId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "testTypeName:asc",
            "description": "Defines the package lab result sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "testTypeName__contains:terpenes",
            "description": "One or more package lab result filters."
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "Lab Results"
        ]
      }
    },
    "/v2/packages/source-harvests": {
      "get": {
        "summary": "List of package source harvest objects for a single package",
        "responses": {
          "200": {
            "description": "A list of source harvest objects for the specified package.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackageSourceHarvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The package with id={packageId} was not found in the specified license"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "testTypeName:asc",
            "description": "Defines the package source harvest result sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "testTypeName__contains:terpenes",
            "description": "One or more package source harvest result filters."
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "Harvests"
        ]
      }
    },
    "/v2/packages/labresults/document": {
      "get": {
        "summary": "Get the COA PDF for a lab result.",
        "description": "**NOTE: A single package might have hundreds of lab results, but most will share just one or two lab test result document IDs.**\n",
        "responses": {
          "200": {
            "description": "PDF of the lab result COA",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target package",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "name": "labTestResultDocumentFileId",
            "description": "ID of the target lab result",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          }
        ],
        "tags": [
          "Packages",
          "Single Package",
          "Lab Results",
          "PDF"
        ]
      }
    },
    "/v2/packages/create": {
      "post": {
        "summary": "Create one or more packages from existing active packages",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreatePackagesFromPackagesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Packages",
          "Create Packages"
        ]
      }
    },
    "/v2/packages/notes": {
      "post": {
        "summary": "Add notes to packages",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcAddPackageNotePayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Packages",
          "Modify Packages"
        ]
      }
    },
    "/v2/packages/create/inputs": {
      "get": {
        "summary": "Input data used for creating new packages",
        "responses": {
          "200": {
            "description": "A dictionary of data used for creating new packages",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcCreatePackageInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Packages",
          "Create Packages"
        ]
      }
    },
    "/v2/packages/create/source-packages": {
      "get": {
        "summary": "List of packages eligible to be used in creating new packages",
        "responses": {
          "200": {
            "description": "A list of eligible packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages",
          "Create Packages"
        ]
      }
    },
    "/v2/packages/create/source-items": {
      "get": {
        "summary": "List of items eligible to be used in creating new packages",
        "responses": {
          "200": {
            "description": "A list of eligible items for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItem"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Packages",
          "Create Packages"
        ]
      }
    },
    "/v2/packages/create/source-tags": {
      "get": {
        "summary": "List of tags eligible to be used in creating new packages",
        "responses": {
          "200": {
            "description": "A list of eligible tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more tag filters."
          }
        ],
        "tags": [
          "Packages",
          "Create Packages"
        ]
      }
    },
    "/v2/packages/create/testing": {
      "post": {
        "summary": "Create one or more packages for testing from existing active packages",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreateTestingPackagesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/create/testing/inputs": {
      "get": {
        "summary": "Input data used for creating new testing packages",
        "responses": {
          "200": {
            "description": "A dictionary of data used for creating new testing packages",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcCreatePackageInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/create/testing/source-packages": {
      "get": {
        "summary": "List of packages eligible to be used in creating new testing packages",
        "responses": {
          "200": {
            "description": "A list of eligible packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/create/testing/source-items": {
      "get": {
        "summary": "List of items eligible to be used in creating new testing packages",
        "responses": {
          "200": {
            "description": "A list of eligible items for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcItem"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the item sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more item filters."
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/create/testing/source-tags": {
      "get": {
        "summary": "List of tags eligible to be used in creating new testing packages",
        "responses": {
          "200": {
            "description": "A list of eligible tags for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the tag sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more tag filters."
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/create/testing/lab-batches": {
      "get": {
        "summary": "List of lab test batches for a product category",
        "description": "Returns lab test batches available for the given product category, used when\nsubmitting packages for testing. The returned batch IDs are submitted in the\n`requiredLabTestBatches` field of the create testing packages payload.\n",
        "responses": {
          "200": {
            "description": "A list of lab test batches for this product category",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcLabBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "in": "query",
            "name": "productCategoryId",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "The product category ID to fetch lab test batches for"
          }
        ],
        "tags": [
          "Packages",
          "Package Testing"
        ]
      }
    },
    "/v2/packages/adjust": {
      "post": {
        "summary": "Adjust one or more active packages",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcAdjustPackagesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Packages",
          "Package Adjustment"
        ]
      }
    },
    "/v2/packages/adjust/inputs": {
      "get": {
        "summary": "Input data used for adjusting packages",
        "responses": {
          "200": {
            "description": "A dictionary of data used for adjusting packages",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcAdjustPackagesInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Packages",
          "Package Adjustment"
        ]
      }
    },
    "/v2/packages/adjust/source-packages": {
      "get": {
        "summary": "List of active packages eligible for adjustment",
        "responses": {
          "200": {
            "description": "A list of active packages eligible for adjustment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages",
          "Package Adjustment"
        ]
      }
    },
    "/v2/packages/active/report": {
      "get": {
        "summary": "Generate a report of all active packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports"
        ]
      }
    },
    "/v2/packages/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports"
        ]
      }
    },
    "/v2/packages/intransit/report": {
      "get": {
        "summary": "Generate a report of all in-transit packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of in-transit packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports"
        ]
      }
    },
    "/v2/packages/transferred/report": {
      "get": {
        "summary": "Generate a report of all transferred packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of transferred packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcTransferredPackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,packageLabel,productName,quantity\n0001234567,1A4400000000000000001234,Package A,10\n0001234567,1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "packageLabel:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "packageLabel__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,packageLabel,productName,shippedQuantity,shippedUnitOfMeasureAbbreviation,shipperWholesalePrice",
              "example": "manifestNumber,packageLabel,productName,shippedQuantity,shippedUnitOfMeasureAbbreviation,shipperWholesalePrice"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports"
        ]
      }
    },
    "/v2/packages/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperpackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperpackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/intransit/super/report": {
      "get": {
        "summary": "Generate a super report of all in-transit packages",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of in-transit superpackages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperpackageReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,item.name,quantity\n1A4400000000000000001234,Package A,10\n1A4400000000000000005678,Package B,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          },
          {
            "$ref": "#/components/parameters/SuperpackageInclude"
          },
          {
            "name": "columns",
            "description": "Defines which package fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nFour nested item fields are available by dot notation: `item.name`, `item.strainName`, `item.productCategoryName` and `item.unitThcContent`. No other nesting is supported, and `item` on its own is not a valid field.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation",
              "example": "label,locationName,item.name,quantity,unitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Packages",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/packages/unfinish": {
      "post": {
        "summary": "Unfinish packages",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcUnfinishPackagesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Packages",
          "Modify Packages"
        ]
      }
    },
    "/v2/permissions/views": {
      "get": {
        "summary": "List of all available permission views",
        "description": "**A T3+ subscription is not required to use this endpoint**\n",
        "responses": {
          "200": {
            "description": "A list of permission views available to this account",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "example": [
                    "packages",
                    "admin/items",
                    "plants"
                  ],
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Permissions",
          "Free"
        ]
      }
    },
    "/v2/permissions": {
      "get": {
        "summary": "List of all permissions within a single view",
        "description": "**A T3+ subscription is not required to use this endpoint**\n",
        "responses": {
          "200": {
            "description": "A list of accessible permissions for the specified view. Each entry is prefixed with the view it belongs to, in the form `view:action`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "example": [
                    "packages:remediate",
                    "packages:new_packages",
                    "packages:adjust_packages"
                  ],
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "view",
            "description": "Specifies the view to check permissions",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "example": "packages"
            }
          }
        ],
        "tags": [
          "Permissions",
          "Free"
        ]
      }
    },
    "/v2/transfers/incoming/active": {
      "get": {
        "summary": "List of incoming active transfers",
        "responses": {
          "200": {
            "description": "A list of incoming inactive transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcIncomingTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/incoming/active/super": {
      "get": {
        "summary": "List of incoming active supertransfers. Additional data can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of incoming active supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcIncomingSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupertransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/incoming/active/report": {
      "get": {
        "summary": "Generate a report of all active incoming transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer. For a row per package -- with transporter and delivery detail cross-joined in -- use the transfer manifest reports instead.\n",
        "responses": {
          "200": {
            "description": "A list of active incoming transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcIncomingTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,4\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,2"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/incoming/inactive": {
      "get": {
        "summary": "List of incoming inactive transfers",
        "responses": {
          "200": {
            "description": "A list of incoming active transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcIncomingTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/incoming/inactive/super": {
      "get": {
        "summary": "List of incoming inactive supertransfers. Additional data can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of incoming inactive supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcIncomingSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupertransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/incoming/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive incoming transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer. For a row per package -- with transporter and delivery detail cross-joined in -- use the transfer manifest reports instead.\n",
        "responses": {
          "200": {
            "description": "A list of inactive incoming transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcIncomingTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,4\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,2"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/outgoing/active": {
      "get": {
        "summary": "List of outgoing active transfers",
        "responses": {
          "200": {
            "description": "A list of outgoing active transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/outgoing/active/super": {
      "get": {
        "summary": "List of outgoing active supertransfers. Additional data can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of outgoing active supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupertransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/outgoing/active/report": {
      "get": {
        "summary": "Generate a report of all active outgoing transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer. For a row per package -- with transporter and delivery detail cross-joined in -- use the transfer manifest reports instead.\n",
        "responses": {
          "200": {
            "description": "A list of active outgoing transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcOutgoingTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,4\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,2"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/outgoing/inactive": {
      "get": {
        "summary": "List of outgoing inactive transfers",
        "responses": {
          "200": {
            "description": "A list of outgoing inactive transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/outgoing/inactive/super": {
      "get": {
        "summary": "List of outgoing inactive supertransfers. Additional data can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of outgoing inactive supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupertransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/outgoing/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive outgoing transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer. For a row per package -- with transporter and delivery detail cross-joined in -- use the transfer manifest reports instead.\n",
        "responses": {
          "200": {
            "description": "A list of inactive outgoing transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcOutgoingTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,4\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,2"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/rejected": {
      "get": {
        "summary": "List of rejected transfers",
        "responses": {
          "200": {
            "description": "A list of rejected transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/rejected/super": {
      "get": {
        "summary": "List of rejected outgoing supertransfers. Additional data can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of rejected outgoing supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcOutgoingSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupertransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/rejected/report": {
      "get": {
        "summary": "Generate a report of all rejected transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer. For a row per package -- with transporter and delivery detail cross-joined in -- use the transfer manifest reports instead.\n",
        "responses": {
          "200": {
            "description": "A list of rejected transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcOutgoingTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,4\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,2"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,packageCount,createdDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/templates": {
      "get": {
        "summary": "List of transfer templates",
        "responses": {
          "200": {
            "description": "A list of transfer templates for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferTemplate"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers",
          "Transfer Templates"
        ]
      }
    },
    "/v2/transfers/manifest": {
      "get": {
        "summary": "Get the manifest PDF for a transfer.",
        "responses": {
          "200": {
            "description": "PDF of the manifest",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/ManifestNumber"
          }
        ],
        "tags": [
          "Transfers",
          "Single Transfer",
          "Files",
          "PDF",
          "Manifests"
        ]
      }
    },
    "/v2/transfers/deliveries": {
      "get": {
        "summary": "List of deliveries for a single transfer",
        "responses": {
          "200": {
            "description": "A list of deliveries for a single transfer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferDelivery"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/ManifestNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "recipientFacilityName:asc",
            "description": "Defines the delivery sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "recipientFacilityName__endswith:industries",
            "description": "One or more delivery filters."
          }
        ],
        "tags": [
          "Single Transfer",
          "Transfers"
        ]
      }
    },
    "/v2/transfers/transporter-details": {
      "get": {
        "summary": "List of transporter detailss for a single transfer",
        "responses": {
          "200": {
            "description": "A list of transporter details for a single tarnsfer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferTransporterDetails"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/ManifestNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "transporterFacilityName:asc",
            "description": "Defines the delivery sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "transporterFacilityName__endswith:industries",
            "description": "One or more delivery filters."
          }
        ],
        "tags": [
          "Single Transfer",
          "Transfers"
        ]
      }
    },
    "/v2/transfers/transporters": {
      "get": {
        "summary": "List of transporters for a single delivery",
        "responses": {
          "200": {
            "description": "A list of transporters for a single delivery",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferTransporter"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/DeliveryId"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "transporterFacilityName:asc",
            "description": "Defines the delivery sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "transporterFacilityName__endswith:industries",
            "description": "One or more delivery filters."
          }
        ],
        "tags": [
          "Single Transfer",
          "Transfers"
        ]
      }
    },
    "/v2/transfers/packages": {
      "get": {
        "summary": "List of packages for a single delivery",
        "responses": {
          "200": {
            "description": "A list of packages for a single delivery",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferDelivery"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/DeliveryId"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "packageLabel:asc",
            "description": "Defines the delivery package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "packageLabel__endswith:0003",
            "description": "One or more delivery package filters."
          }
        ],
        "tags": [
          "Single Transfer",
          "Transfers"
        ]
      }
    },
    "/v2/transfers/history": {
      "get": {
        "summary": "List of transfer history objects for a single transfer",
        "responses": {
          "200": {
            "description": "A list of history objects for the specified transfer.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "The transfer with manifestNumber={manifestNumber} was not found in the specified license, or you do not have access to view this transfer's history"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/ManifestNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Single Transfer",
          "Transfers",
          "History"
        ]
      }
    },
    "/v2/transfers/create/inputs": {
      "get": {
        "summary": "Input data used for creating new transers",
        "responses": {
          "200": {
            "description": "A dictionary of data used for creating new transfers",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcCreateTransferInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Transfers",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/create": {
      "post": {
        "summary": "Create a transfer",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreateTransfersPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfers",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/update": {
      "post": {
        "summary": "Update a transfer",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcUpdateTransfersPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfers",
          "Modify Transfer"
        ]
      }
    },
    "/v2/transfers/void": {
      "post": {
        "summary": "Void one transfer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcVoidTransferPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfers",
          "Modify Transfer"
        ]
      }
    },
    "/v2/transfers/templates/create": {
      "post": {
        "summary": "Create a transfer template",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreateTransferTemplatesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfers",
          "Transfer Templates",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/templates/update": {
      "post": {
        "summary": "Update a transfer template",
        "description": "**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcUpdateTransferTemplatesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfer Templates",
          "Modify Transfer Template"
        ]
      }
    },
    "/v2/transfers/templates/archive": {
      "post": {
        "summary": "Archive one transfer template",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcArchiveTransferTemplatePayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Transfers",
          "Transfer Templates",
          "Modify Transfer"
        ]
      }
    },
    "/v2/transfers/create/destinations": {
      "get": {
        "summary": "List of destination facilities eligible to be used in creating new transfers",
        "responses": {
          "200": {
            "description": "A list of eligible facilities for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcFacility"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "facilityName:asc",
            "description": "Defines the facility sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "facilityName__endswith:LLC",
            "description": "One or more facility filters."
          }
        ],
        "tags": [
          "Packages",
          "Transfers",
          "Facilities",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/create/transporters": {
      "get": {
        "summary": "List of transporter facilities eligible to be used in creating new transfers",
        "responses": {
          "200": {
            "description": "A list of eligible facilities for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcFacility"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "facilityName:asc",
            "description": "Defines the facility sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "facilityName__endswith:LLC",
            "description": "One or more facility filters."
          }
        ],
        "tags": [
          "Packages",
          "Transfers",
          "Facilities",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/create/packages": {
      "get": {
        "summary": "List of packages eligible to be used in creating new transfers",
        "responses": {
          "200": {
            "description": "A list of eligible packages for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more package filters."
          }
        ],
        "tags": [
          "Packages",
          "Transfers",
          "Create Transfers"
        ]
      }
    },
    "/v2/transfers/hub": {
      "get": {
        "summary": "List of hub transfers",
        "description": "The transfers this license is the transporter for, as shown on Metrc's \"Transfers Hub\" page. Each record is a transfer, one of its deliveries and one of that delivery's transporters flattened onto a single object, with the driver legs embedded as `shipmentTransporterDetails`.\n\nThere is no active/inactive split: Metrc serves this collection from a single path that takes no state parameter.",
        "responses": {
          "200": {
            "description": "A list of hub transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHubTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          }
        ],
        "tags": [
          "Transfers"
        ]
      }
    },
    "/v2/transfers/hub/super": {
      "get": {
        "summary": "List of hub supertransfers. Additional data can be added using the `include` param.",
        "description": "As `/v2/transfers/hub`, with optional sub-collections attached. Note that `transporterDetails` is not an include here: the hub response already embeds the driver legs as `shipmentTransporterDetails`.",
        "responses": {
          "200": {
            "description": "A list of hub supertransfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHubSuperTransfer"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "manifestNumber:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/HubTransferInclude"
          }
        ],
        "tags": [
          "Transfers",
          "Supercollections"
        ]
      }
    },
    "/v2/transfers/hub/report": {
      "get": {
        "summary": "Generate a report of all hub transfers",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nOne row per transfer this license transports. The default columns lead with the driver and vehicle rather than the package count, because on these rows this license is neither the shipper nor the recipient.\n\nFor a row per package use the hub transfer manifest report instead.\n",
        "responses": {
          "200": {
            "description": "A list of hub transfers for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHubTransferReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "manifestNumber,shipperFacilityName,recipientFacilityName,driverName,vehicleMake\n0000012345,Sample Cultivation LLC,Example Dispensary LLC,Jane Doe,Ford\n0000012346,Sample Cultivation LLC,Example Dispensary LLC,John Smith,Ford"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "createdDateTime:desc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters."
          },
          {
            "name": "columns",
            "description": "Defines which transfer fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "manifestNumber,shipperFacilityName,recipientFacilityName,driverName,vehicleMake,estimatedDepartureDateTime",
              "example": "manifestNumber,shipperFacilityName,recipientFacilityName,driverName,vehicleMake,estimatedDepartureDateTime"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports"
        ]
      }
    },
    "/v2/transfers/hub/manifest/report": {
      "get": {
        "summary": "Generate a report of all hub transfer manifests",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nThis report loads the packages for every transfer **automatically** -- there is no `include` to add and no way to switch it off -- then cross-joins them, so the result is one row per package rather than one row per transfer. Column names are prefixed by the object they come from.\n\nIt is cheaper than the incoming and outgoing manifest reports, at one Metrc request per transfer rather than two or four: Metrc returns the delivery and the transporter already flattened onto the record, and embeds the driver legs, so packages are the only thing left to fetch. Those flattened fields appear under `transfer.*`; there is no `delivery.*` or `transporter.*` group.\n\nTwo consequences:\n\n- `rowLimit` caps **transfers**, applied before the join, so a limit of 100 can return several hundred rows.\n- `transporterDetails.*` describes only the **first** driver leg. A transfer with `transfer.multiVehicle` or `transfer.isLayover` true carries further legs that the JSON response returns in full but a flat grid cannot represent; both flags are in the default columns so this is visible from the spreadsheet.\n",
        "responses": {
          "200": {
            "description": "A list of hub transfer manifests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HubTransferManifestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "transfer.manifestNumber,transfer.transporterFacilityName,transporterDetails.driverName,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation\n1000056,Transport Co,Jane Doe,1A4400000000000000001234,Blue Dream Flower,10,g\n1000056,Transport Co,Jane Doe,1A4400000000000000001235,Blue Dream Flower,10,g\n1000057,Transport Co,John Smith,1A4400000000000000005678,Blue Dream Flower,5,g"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid filter** -- a `filter` names a field the underlying transfer collection does not have, or uses an operator its type does not support. The response lists every filterable field. Note that the joined packages, transporters and deliveries are not filterable, so their fields are rejected here.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n\n**Invalid transform** -- `transform` names something other than `scanSheet`.\n\n**Conflicting Parameters** -- `transform` was combined with `columns`, with `metadata`, or with an explicit `prependCsvMetadata=true`. All three are owned by the transform.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/ReportTransform"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters. Filters select which **transfers** the report covers; a matched transfer contributes all of its joined rows, and there is no syntax for filtering the joined packages, transporters or deliveries.\n\nFiltering by manifest number is the common case. Repeat the parameter once per manifest and set `filterLogic=or`, since no transfer has two manifest numbers.\n"
          },
          {
            "name": "columns",
            "description": "Defines which transfer manifest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nThis report joins several objects, so every field carries the prefix of the object it comes from: `transfer.*`, `transporterDetails.*`, `package.*`.\nCannot be combined with `transform`, which defines its own columns.\n\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "transfer.manifestNumber,transfer.shipperFacilityName,transfer.recipientFacilityName,transfer.transporterFacilityName,transfer.multiVehicle,transfer.isLayover,transporterDetails.driverName,transporterDetails.vehicleMake,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation",
              "example": "transfer.manifestNumber,transfer.shipperFacilityName,transfer.recipientFacilityName,transfer.transporterFacilityName,transfer.multiVehicle,transfer.isLayover,transporterDetails.driverName,transporterDetails.vehicleMake,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports",
          "Manifests"
        ]
      }
    },
    "/v2/transfers/incoming/manifest/report": {
      "get": {
        "summary": "Generate a report of all incoming transfer manifests",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nThis report loads the packages and transporters for every transfer **automatically** -- there is no `include` to add and no way to switch it off -- then cross-joins them, so the result is one row per package per transporter rather than one row per transfer. Column names are prefixed by the object they come from.\n\nTwo consequences:\n\n- `rowLimit` caps **transfers**, applied before the join, so a limit of 100 can return several hundred rows.\n- The automatic loading costs one Metrc request per transfer per related object, so this report exhausts the 10,000 request budget at roughly 5,000 transfers -- well before the row cap shown below. Filter to a date range or set a `rowLimit`.\n",
        "responses": {
          "200": {
            "description": "A list of transfer manifests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomingTransferManifestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "transfer.manifestNumber,transfer.recipientFacilityLicenseNumber,transfer.recipientFacilityName,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation\n1000056,1A4400000000000000001234,Blue Dream Flower,10,g\n1000056,1A4400000000000000001235,Blue Dream Flower,10,g\n1000057,1A4400000000000000005678,Blue Dream Flower,5,g"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid filter** -- a `filter` names a field the underlying transfer collection does not have, or uses an operator its type does not support. The response lists every filterable field. Note that the joined packages, transporters and deliveries are not filterable, so their fields are rejected here.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n\n**Invalid transform** -- `transform` names something other than `scanSheet`.\n\n**Conflicting Parameters** -- `transform` was combined with `columns`, with `metadata`, or with an explicit `prependCsvMetadata=true`. All three are owned by the transform.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/ReportTransform"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters. Filters select which **transfers** the report covers; a matched transfer contributes all of its joined rows, and there is no syntax for filtering the joined packages, transporters or deliveries.\n\nFiltering by manifest number is the common case. Repeat the parameter once per manifest and set `filterLogic=or`, since no transfer has two manifest numbers.\n"
          },
          {
            "name": "columns",
            "description": "Defines which transfer manifest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nThis report joins several objects, so every field carries the prefix of the object it comes from: `package.*`, `transfer.*`, `transporter.*`.\nCannot be combined with `transform`, which defines its own columns.\n\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "transfer.manifestNumber,transfer.recipientFacilityLicenseNumber,transfer.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation",
              "example": "transfer.manifestNumber,transfer.recipientFacilityLicenseNumber,transfer.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports",
          "Manifests"
        ]
      }
    },
    "/v2/transfers/outgoing/manifest/report": {
      "get": {
        "summary": "Generate a report of all outgoing transfer manifests",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nThis report loads the packages and transporters for every transfer **automatically** -- there is no `include` to add and no way to switch it off -- then cross-joins them, so the result is one row per package per transporter rather than one row per transfer. Column names are prefixed by the object they come from.\n\nTwo consequences:\n\n- `rowLimit` caps **transfers**, applied before the join, so a limit of 100 can return several hundred rows.\n- The automatic loading costs one Metrc request per transfer per related object. An outgoing transfer's packages and transporters are keyed on its **deliveries** rather than on the transfer, so this report costs about twice what the incoming one does and exhausts the 10,000 request budget at roughly 2,500 transfers -- well before the row cap shown below. Filter to a date range or set a `rowLimit`.\n",
        "responses": {
          "200": {
            "description": "A list of transfer manifests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutgoingTransferManifestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation\n1000056,EX-00001,Sample Facility LLC,1A4400000000000000001234,Blue Dream Flower,10\n1000056,EX-00001,Sample Facility LLC,1A4400000000000000001235,Blue Dream Flower,10\n1000057,EX-00002,Sample Growers LLC,1A4400000000000000005678,Blue Dream Flower,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid filter** -- a `filter` names a field the underlying transfer collection does not have, or uses an operator its type does not support. The response lists every filterable field. Note that the joined packages, transporters and deliveries are not filterable, so their fields are rejected here.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n\n**Invalid transform** -- `transform` names something other than `scanSheet`.\n\n**Conflicting Parameters** -- `transform` was combined with `columns`, with `metadata`, or with an explicit `prependCsvMetadata=true`. All three are owned by the transform.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/ReportTransform"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters. Filters select which **transfers** the report covers; a matched transfer contributes all of its joined rows, and there is no syntax for filtering the joined packages, transporters or deliveries.\n\nFiltering by manifest number is the common case. Repeat the parameter once per manifest and set `filterLogic=or`, since no transfer has two manifest numbers.\n"
          },
          {
            "name": "columns",
            "description": "Defines which transfer manifest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nThis report joins several objects, so every field carries the prefix of the object it comes from: `delivery.*`, `package.*`, `transfer.*`, `transporter.*`, `transporterDetails.*`.\nCannot be combined with `transform`, which defines its own columns.\n\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,transporterDetails.driverName,transporterDetails.driverVehicleLicenseNumber,transporterDetails.vehicleMake,transporterDetails.vehicleModel,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation",
              "example": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,transporterDetails.driverName,transporterDetails.driverVehicleLicenseNumber,transporterDetails.vehicleMake,transporterDetails.vehicleModel,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports",
          "Manifests"
        ]
      }
    },
    "/v2/transfers/rejected/manifest/report": {
      "get": {
        "summary": "Generate a report of all rejected transfer manifests",
        "description": "**Note: this endpoint supports secret key authentication.**\n\nThe rejected counterpart of `/v2/transfers/outgoing/manifest/report`. Metrc returns rejected transfers in the same shape as outgoing ones, so this report loads and joins them identically -- only the collection differs.\n\nThis report loads the packages and transporters for every transfer **automatically** -- there is no `include` to add and no way to switch it off -- then cross-joins them, so the result is one row per package per transporter rather than one row per transfer. Column names are prefixed by the object they come from.\n\nTwo consequences:\n\n- `rowLimit` caps **transfers**, applied before the join, so a limit of 100 can return several hundred rows.\n- The automatic loading costs one Metrc request per transfer per related object. A rejected transfer's packages and transporters are keyed on its **deliveries** rather than on the transfer, so this report costs about twice what the incoming one does and exhausts the 10,000 request budget at roughly 2,500 transfers -- well before the row cap shown below. Filter to a date range or set a `rowLimit`.\n\nAdd `transform=scanSheet` to receive this data as a scan sheet instead -- one row per package with a live-coloured tag reconciliation column. See the `transform` parameter below.\n",
        "responses": {
          "200": {
            "description": "A list of rejected transfer manifests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutgoingTransferManifestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation\n1000056,EX-00001,Sample Facility LLC,1A4400000000000000001234,Blue Dream Flower,10\n1000056,EX-00001,Sample Facility LLC,1A4400000000000000001235,Blue Dream Flower,10\n1000057,EX-00002,Sample Growers LLC,1A4400000000000000005678,Blue Dream Flower,5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid filter** -- a `filter` names a field the underlying transfer collection does not have, or uses an operator its type does not support. The response lists every filterable field. Note that the joined packages, transporters and deliveries are not filterable, so their fields are rejected here.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n\n**Invalid transform** -- `transform` names something other than `scanSheet`.\n\n**Conflicting Parameters** -- `transform` was combined with `columns`, with `metadata`, or with an explicit `prependCsvMetadata=true`. All three are owned by the transform.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/ReportTransform"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the transfer sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "manifestNumber__endswith:0003",
            "description": "One or more transfer filters. Filters select which **transfers** the report covers; a matched transfer contributes all of its joined rows, and there is no syntax for filtering the joined packages, transporters or deliveries.\n\nFiltering by manifest number is the common case. Repeat the parameter once per manifest and set `filterLogic=or`, since no transfer has two manifest numbers.\n"
          },
          {
            "name": "columns",
            "description": "Defines which transfer manifest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\nThis report joins several objects, so every field carries the prefix of the object it comes from: `delivery.*`, `package.*`, `transfer.*`, `transporter.*`, `transporterDetails.*`.\nCannot be combined with `transform`, which defines its own columns.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,transporterDetails.driverName,transporterDetails.driverVehicleLicenseNumber,transporterDetails.vehicleMake,transporterDetails.vehicleModel,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation",
              "example": "transfer.manifestNumber,delivery.recipientFacilityLicenseNumber,delivery.recipientFacilityName,transporter.transporterFacilityName,transporter.transporterFacilityLicenseNumber,transporterDetails.driverName,transporterDetails.driverVehicleLicenseNumber,transporterDetails.vehicleMake,transporterDetails.vehicleModel,transporterDetails.vehicleLicensePlateNumber,package.packageLabel,package.productName,package.shippedQuantity,package.shippedUnitOfMeasureAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Transfers",
          "Reports",
          "Manifests"
        ]
      }
    },
    "/v2/plants/vegetative": {
      "get": {
        "summary": "List of vegetative plants",
        "description": "NOTE: States such as CA do not use vegetative plants, plant batches are promoted directly to flowering.\n",
        "responses": {
          "200": {
            "description": "A list of vegetative plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/vegetative/super": {
      "get": {
        "summary": "List of vegetative superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of vegetative superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/vegetative/report": {
      "get": {
        "summary": "Generate a report of all vegetative plants",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of vegetative plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/flowering": {
      "get": {
        "summary": "List of flowering plants",
        "responses": {
          "200": {
            "description": "A list of flowering plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/flowering/super": {
      "get": {
        "summary": "List of flowering superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of flowering superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/active": {
      "get": {
        "summary": "List of active mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc ",
        "responses": {
          "200": {
            "description": "A list of active mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/mother/active/super": {
      "get": {
        "summary": "List of active mother superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/onhold": {
      "get": {
        "summary": "List of on hold mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/onhold, so the two collections partition the on hold plants rather than overlap.\n",
        "responses": {
          "200": {
            "description": "A list of on hold mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/mother/onhold/super": {
      "get": {
        "summary": "List of on-hold mother superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of on-hold mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/inactive": {
      "get": {
        "summary": "List of inactive mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/inactive, so the two collections partition the inactive plants rather than overlap.\n",
        "responses": {
          "200": {
            "description": "A list of on hold mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/mother/inactive/super": {
      "get": {
        "summary": "List of inactive mother superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/active/report": {
      "get": {
        "summary": "Generate a report of all active mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc ",
        "responses": {
          "200": {
            "description": "A list of active mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/flowering/report": {
      "get": {
        "summary": "Generate a report of all flowering plants",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of flowering plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/vegetative/super/report": {
      "get": {
        "summary": "Generate a super report of all vegetative plants",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of vegetative superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/flowering/super/report": {
      "get": {
        "summary": "Generate a super report of all flowering plants",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of flowering superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active mother plants",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/onhold": {
      "get": {
        "summary": "List of on hold plants",
        "description": "NOTE: Mother plants are excluded. This collection and /v2/plants/mother/onhold partition the on hold plants rather than overlap, so a caller wanting every on hold plant must request both.\n",
        "responses": {
          "200": {
            "description": "A list of on hold plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/onhold/super": {
      "get": {
        "summary": "List of on-hold superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of on-hold superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/onhold/report": {
      "get": {
        "summary": "Generate a report of all on hold plants",
        "description": "NOTE: Mother plants are excluded. This report and /v2/plants/mother/onhold/report partition the on hold plants rather than overlap, so a caller wanting every on hold plant must request both.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/onhold/super/report": {
      "get": {
        "summary": "Generate a super report of all on hold plants",
        "description": "NOTE: Mother plants are excluded. This report and /v2/plants/mother/onhold/super/report partition the on hold plants rather than overlap, so a caller wanting every on hold plant must request both.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/inactive": {
      "get": {
        "summary": "List of inactive plants",
        "description": "NOTE: Mother plants are excluded. This collection and /v2/plants/mother/inactive partition the inactive plants rather than overlap, so a caller wanting every inactive plant must request both.\n",
        "responses": {
          "200": {
            "description": "A list of inactive plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          }
        ],
        "tags": [
          "Plants"
        ]
      }
    },
    "/v2/plants/inactive/super": {
      "get": {
        "summary": "List of inactive superplants. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          }
        ],
        "tags": [
          "Plants",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive plants",
        "description": "NOTE: Mother plants are excluded. This report and /v2/plants/mother/inactive/report partition the inactive plants rather than overlap, so a caller wanting every inactive plant must request both.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive plants",
        "description": "NOTE: Mother plants are excluded. This report and /v2/plants/mother/inactive/super/report partition the inactive plants rather than overlap, so a caller wanting every inactive plant must request both.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/onhold/report": {
      "get": {
        "summary": "Generate a report of all on hold mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/onhold/report, so the two reports partition the on hold plants rather than overlap.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/mother/onhold/super/report": {
      "get": {
        "summary": "Generate a super report of all on hold mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/onhold/super/report, so the two reports partition the on hold plants rather than overlap.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/mother/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/inactive/report, so the two reports partition the inactive plants rather than overlap.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive mother plants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:0003",
            "description": "One or more plant filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports"
        ]
      }
    },
    "/v2/plants/mother/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive mother plants",
        "description": "NOTE: Not all states implement mother plants in Metrc\n\nMother plants are excluded from /v2/plants/inactive/super/report, so the two reports partition the inactive plants rather than overlap.\n\n**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive mother superplants for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "label,locationName,strainName\n1A4400000000000000001234,Room A,OG Kush\n1A4400000000000000005678,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "label:asc",
            "description": "Defines the plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "label__endswith:03",
            "description": "One or more plant filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "label,locationName,strainName,plantedDate",
              "example": "label,locationName,strainName,plantedDate"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plants",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plants/history": {
      "get": {
        "summary": "List of history objects for a single plant",
        "responses": {
          "200": {
            "description": "A list of package history objects for the specified plant.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The plant with id={plantId} was not found in the specified license, or you do not have access to view this plant's history"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "plantId",
            "description": "ID of the target plant",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Plants",
          "Single Plant",
          "History"
        ]
      }
    },
    "/v2/plants/changegrowthphase": {
      "post": {
        "summary": "Change the growth phase of one or more plants",
        "description": "Moves plants between growth phases, most commonly Vegetative to Flowering.\n\n`newLocationId` and `newTagId` must be present but may be `null` to leave the\nplant in place and keep its current tag.\n\n**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcChangePlantGrowthPhasePayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Plants",
          "Modify Plants"
        ]
      }
    },
    "/v2/plantbatches/active": {
      "get": {
        "summary": "List of active plant batches",
        "description": "NOTE: States such as CA use Metrc plant tags as names, other states allow unrestricted names for plant batches.\n",
        "responses": {
          "200": {
            "description": "A list of active plantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlantBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          }
        ],
        "tags": [
          "Plant Batches"
        ]
      }
    },
    "/v2/plantbatches/active/super": {
      "get": {
        "summary": "List of active superplantbatches. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplantbatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:BATCH",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          }
        ],
        "tags": [
          "Plant Batches",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/active/report": {
      "get": {
        "summary": "Generate a report of all active plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active plant batches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantBatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,strainName,locationName\n1A4400000000000000001234,Pineapple Express,Row 10\n1A4400000000000000005678,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports"
        ]
      }
    },
    "/v2/plantbatches/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantbatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,locationName,strainName\nBatch 1,Room A,OG Kush\nBatch 2,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:1",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/onhold": {
      "get": {
        "summary": "List of on hold plantbatches",
        "responses": {
          "200": {
            "description": "A list of on hold plantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlantBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          }
        ],
        "tags": [
          "Plant Batches"
        ]
      }
    },
    "/v2/plantbatches/onhold/super": {
      "get": {
        "summary": "List of on-hold superplantbatches. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of on-hold superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplantbatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:BATCH",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          }
        ],
        "tags": [
          "Plant Batches",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/onhold/report": {
      "get": {
        "summary": "Generate a report of all on hold plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold plant batches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantBatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,strainName,locationName\nBatch 1,Pineapple Express,Row 10\nBatch 2,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports"
        ]
      }
    },
    "/v2/plantbatches/onhold/super/report": {
      "get": {
        "summary": "Generate a super report of all on hold plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantbatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,locationName,strainName\nBatch 1,Room A,OG Kush\nBatch 2,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:1",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/inactive": {
      "get": {
        "summary": "List of inactive plantbatches",
        "responses": {
          "200": {
            "description": "A list of inactive plantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcPlantBatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          }
        ],
        "tags": [
          "Plant Batches"
        ]
      }
    },
    "/v2/plantbatches/inactive/super": {
      "get": {
        "summary": "List of inactive superplantbatches. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperplantbatch"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:BATCH",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          }
        ],
        "tags": [
          "Plant Batches",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive plant batches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcPlantBatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,strainName,locationName\nBatch 1,Pineapple Express,Row 10\nBatch 2,Pineapple Express,Row 5"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more plant batch filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports"
        ]
      }
    },
    "/v2/plantbatches/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive plant batches",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive superplantbatches for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperplantbatchReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,locationName,strainName\nBatch 1,Room A,OG Kush\nBatch 2,Room B,Blue Dream"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the plant batch sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:1",
            "description": "One or more plant batch filters."
          },
          {
            "$ref": "#/components/parameters/SuperplantbatchInclude"
          },
          {
            "name": "columns",
            "description": "Defines which plant batch fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,locationName,strainName,plantedDate,untrackedCount",
              "example": "name,locationName,strainName,plantedDate,untrackedCount"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Plant Batches",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/plantbatches/history": {
      "get": {
        "summary": "List of history objects for a single plant batch",
        "description": "NOTE: only supports INACTIVE plant batches\n",
        "responses": {
          "200": {
            "description": "A list of package history objects for the specified plant batch.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The plant batch with id={plantBatchId} was not found in the specified license, or you do not have access to view this plant batch's history"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "plantBatchId",
            "description": "ID of the target plant batch",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Plant Batches",
          "Single Plant Batch",
          "History"
        ]
      }
    },
    "/v2/plantbatches/create/from-packages": {
      "post": {
        "summary": "Create one or more plant batches from a package",
        "description": "Draws material from a source package and creates immature plant batches.\n\nThe resulting plants are **immature**. Promote them with\n[Promote Immature Plants](#/Plant%20Batches/post_v2_plantbatches_promote) to\nmove them into a tracked growth phase.\n\n**Naming differs by state.** In California a plant batch is identified by a\ntag and the batch name is that tag's label, so pass `tagId`. In every other\nstate the name is free text and no tag is assigned at creation, so pass\n`name` instead.\n\n**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreatePlantBatchesFromPackagesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Plant Batches",
          "Create Plant Batches"
        ]
      }
    },
    "/v2/plantbatches/create/from-packages/inputs": {
      "get": {
        "summary": "Input data used for creating plant batches from packages",
        "description": "Returns the option lists needed to build a\n[Create Plant Batches From Packages](#/Plant%20Batches/post_v2_plantbatches_create_from_packages)\npayload: plant batch types, strains, locations, and units of measure.\n\n`plantBatchTypes` is the only source for `plantBatchTypeId` \u2014 the value is\nstate-specific and does not appear on the plant batch records returned by\nthe list endpoints.\n\nIn California, `tags` is populated and supplies `tagId`. In other states it\nis `null` and the batch takes a free-text `name` instead.\n",
        "responses": {
          "200": {
            "description": "Input data for creating plant batches",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcCreatePlantBatchesFromPackagesInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Plant Batches",
          "Create Plant Batches"
        ]
      }
    },
    "/v2/plantbatches/promote": {
      "post": {
        "summary": "Promote immature plants into a tracked growth phase",
        "description": "Moves plants out of an immature plant batch into the Vegetative or Flowering\nphase, assigning one plant tag per promoted plant.\n\n`startingTagId` and `endingTagId` bound a contiguous tag range. Every tag in\nthat range is consumed, and `plantsCount` must equal the size of the range.\n\n**Refer to the request body schema for details on formatting your request**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcPromoteImmaturePlantsPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Plant Batches",
          "Create Plant Batches"
        ]
      }
    },
    "/v2/harvests/active": {
      "get": {
        "summary": "List of active harvests",
        "responses": {
          "200": {
            "description": "A list of active harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHarvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more harvest filters."
          }
        ],
        "tags": [
          "Harvests"
        ]
      }
    },
    "/v2/harvests/active/super": {
      "get": {
        "summary": "List of active superharvests. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperharvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          }
        ],
        "tags": [
          "Harvests",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/active/report": {
      "get": {
        "summary": "Generate a report of all active harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHarvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,dryingLocationName,plantCount\nHarvest001,Curing Room,100\nHarvest002,Curing Room,85"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more harvest filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports"
        ]
      }
    },
    "/v2/harvests/onhold": {
      "get": {
        "summary": "List of on hold harvests",
        "responses": {
          "200": {
            "description": "A list of on hold harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHarvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more harvest filters."
          }
        ],
        "tags": [
          "Harvests"
        ]
      }
    },
    "/v2/harvests/onhold/super": {
      "get": {
        "summary": "List of on-hold superharvests. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of on-hold superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperharvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          }
        ],
        "tags": [
          "Harvests",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/onhold/report": {
      "get": {
        "summary": "Generate a report of all on hold harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHarvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,harvestStartDate,plantCount\nHarvest A,2024-01-01,10\nHarvest B,2024-01-15,20"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:a",
            "description": "One or more harvest filters."
          },
          {
            "name": "columns",
            "description": "Defines which harvest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports"
        ]
      }
    },
    "/v2/harvests/onhold/super/report": {
      "get": {
        "summary": "Generate a super report of all on hold harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of on hold superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperharvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,harvestStartDate,plantCount\nHarvest A,2024-01-01,10\nHarvest B,2024-01-15,20"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:a",
            "description": "One or more harvest filters."
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          },
          {
            "name": "columns",
            "description": "Defines which harvest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/inactive": {
      "get": {
        "summary": "List of inactive harvests",
        "responses": {
          "200": {
            "description": "A list of inactive harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHarvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more harvest filters."
          }
        ],
        "tags": [
          "Harvests"
        ]
      }
    },
    "/v2/harvests/inactive/super": {
      "get": {
        "summary": "List of inactive superharvests. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSuperharvest"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          }
        ],
        "tags": [
          "Harvests",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive harvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHarvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,dryingLocationName,plantCount\nHarvest001,Curing Room,100\nHarvest002,Curing Room,85"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more harvest filters."
          },
          {
            "name": "columns",
            "description": "Defines which plant fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports"
        ]
      }
    },
    "/v2/harvests/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperharvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,harvestStartDate,plantCount\nHarvest A,2024-01-01,10\nHarvest B,2024-01-15,20"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:a",
            "description": "One or more harvest filters."
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          },
          {
            "name": "columns",
            "description": "Defines which harvest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive harvests",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive superharvests for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSuperharvestReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "name,harvestStartDate,plantCount\nHarvest A,2024-01-01,10\nHarvest B,2024-01-15,20"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the harvest sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:a",
            "description": "One or more harvest filters."
          },
          {
            "$ref": "#/components/parameters/SuperharvestInclude"
          },
          {
            "name": "columns",
            "description": "Defines which harvest fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation",
              "example": "name,harvestStartDate,dryingLocationName,plantCount,currentWeight,totalWetWeight,totalPackagedWeight,totalWasteWeight,unitOfWeightAbbreviation"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Harvests",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/harvests/history": {
      "get": {
        "summary": "List of history objects for a single harvest.",
        "description": "NOTE: only supports INACTIVE harvests\n",
        "responses": {
          "200": {
            "description": "A list of history objects for the specified harvest.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHistory"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The harvest with id={harvestId} was not found in the specified license, or you do not have access to view this harvest's history"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "plantId",
            "description": "ID of the target harvest",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the history sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more history filters."
          }
        ],
        "tags": [
          "Harvests",
          "Single Harvest",
          "History"
        ]
      }
    },
    "/v2/harvests/plants": {
      "get": {
        "summary": "List of harvest plant objects for a single harvest.",
        "description": "NOTE: only supports INACTIVE harvests\n",
        "responses": {
          "200": {
            "description": "A list of harvest plant objects for the specified harvest.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHarvestPlant"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The harvest with id={harvestId} was not found in the specified license, or you do not have access to view this harvest's plants"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "plantId",
            "description": "ID of the target harvest",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the harvest plant sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more harvest plant filters."
          }
        ],
        "tags": [
          "Harvests",
          "Plants",
          "Single Harvest"
        ]
      }
    },
    "/v2/harvests/packages": {
      "get": {
        "summary": "List of harvest package objects for a single harvest.",
        "description": "NOTE: only supports INACTIVE harvests\n",
        "responses": {
          "200": {
            "description": "A list of harvest package objects for the specified harvest.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcHarvestPackage"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The harvest with id={harvestId} was not found in the specified license, or you do not have access to view this harvest's packages"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "packageId",
            "description": "ID of the target harvest",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "userName:asc",
            "description": "Defines the harvest package sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "userName__contains:MSmith001",
            "description": "One or more harvest package filters."
          }
        ],
        "tags": [
          "Harvests",
          "Packages",
          "Single Harvest"
        ]
      }
    },
    "/v2/harvests/create": {
      "post": {
        "summary": "Harvest plants",
        "description": "Harvest one or more plants currently in the Flowering state. The plants\nare consumed by the operation and roll up under the harvest record named\nby `harvestName`.\n\n**Refer to the request body schema for details on formatting your request.**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreatePlantHarvestPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Harvests",
          "Create Harvest"
        ]
      }
    },
    "/v2/harvests/create/inputs": {
      "get": {
        "summary": "Input data for harvesting plants",
        "description": "Returns the reference data needed to build a [Create Harvest](#/Harvests/post_v2_harvests_create)\nrequest body \u2014 eligible drying locations, available units of weight, and\nstate-specific sublocation/patient/detail rows where applicable.\n",
        "responses": {
          "200": {
            "description": "Reference data for harvesting plants.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHarvestPlantsInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Harvests",
          "Create Harvest"
        ]
      }
    },
    "/v2/harvests/manicure": {
      "post": {
        "summary": "Manicure plants",
        "description": "Manicure (partially harvest) one or more plants currently in the Flowering\nstate. The plants remain in Flowering and can be harvested or manicured\nagain. The manicured material rolls up under the harvest record named by\n`harvestName`.\n\n**Refer to the request body schema for details on formatting your request.**\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcCreatePlantManicurePayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Harvests",
          "Create Manicure"
        ]
      }
    },
    "/v2/harvests/manicure/inputs": {
      "get": {
        "summary": "Input data for manicuring plants",
        "description": "Returns the reference data needed to build a [Create Manicure](#/Harvests/post_v2_harvests_manicure)\nrequest body \u2014 eligible drying locations, available units of weight, and\nstate-specific sublocation/patient/detail rows where applicable. Shape is\nidentical to the harvest inputs response.\n",
        "responses": {
          "200": {
            "description": "Reference data for manicuring plants.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcHarvestPlantsInputsResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          }
        ],
        "tags": [
          "Harvests",
          "Create Manicure"
        ]
      }
    },
    "/v2/search": {
      "get": {
        "summary": "Cross-endpoint text search",
        "description": "Searches multiple Metrc collection endpoints in parallel for objects matching\na free-text query, returning a single ranked list of results.\n\n\n**A T3+ subscription is not required to use this endpoint.**\n\n\n### How it works\n\n1. The query string is run through **format detection**. A single query can\n   match multiple formats \u2014 for example, `\"12345\"` is both `INTEGER` and\n   `HEX_STRING`. The detected formats are returned in `detectedQueryFormats`.\n2. The set of endpoints to query is built. If `endpointIds` is omitted, the\n   17 default-enabled endpoints are used. If `endpointIds` is provided, exactly\n   that set is used.\n3. Endpoints whose searchable fields are not compatible with any detected\n   query format are **skipped** and reported in `skippedMetrcEndpointIds`. For\n   example, `\"Blue Dream\"` (`BASIC_STRING`) skips transfer endpoints because\n   they only search `manifestNumber` (`INTEGER` / numeric `BASIC_STRING` only).\n4. The remaining endpoints are queried in parallel. Each downstream endpoint\n   is asked for at most `pageSize` matches (default 10, max 100), so the\n   maximum number of results in a single response is\n   `len(queriedMetrcEndpointIds) * pageSize`.\n5. All results are scored and returned as a single flat list sorted by `score`\n   descending.\n\n\n### Query formats\n\n- `DATETIME` \u2014 ISO 8601 date or datetime such as `2024-07-17` or\n  `2024-07-17T12:00:00Z`. Matches `\\d{4}-\\d{2}-\\d{2}` optionally followed by\n  a time component.\n- `HEX_STRING` \u2014 starts with `1A` (the Metrc tag prefix) **or** is composed\n  entirely of hex characters (`0-9a-fA-F`). Examples: `1A4FF0100000022000000123`,\n  `deadbeef`.\n- `INTEGER` \u2014 all digits. Examples: `12345`, `1234566`.\n- `BASIC_STRING` \u2014 fallback for anything that doesn't match a more specific\n  format. Examples: `Blue Dream`, `HARVEST0001`.\n\n\n> Note: no endpoint currently searches date fields, so a pure `DATETIME`\n> query returns an empty `data` array with every targeted endpoint reported\n> in `skippedMetrcEndpointIds`. Use a tag, label, manifest number, or name\n> to get matches.\n\n\n### Latency\n\nLatency is dominated by the slowest single downstream Metrc call. Tag, item,\nlocation, and strain searches typically return in well under a second; package,\nplant, and especially transfer searches can take several seconds. Narrow the\nquery with `endpointIds` for faster, more predictable response times.\n\n\n### Streaming responses\n\nSet `stream=true` (or send `Accept: text/event-stream`) to receive results as\nServer-Sent Events. Instead of one final JSON payload, the response is a\nstream of `event: result` messages \u2014 one per completed downstream endpoint \u2014\nfollowed by a terminal `event: done` message carrying the queried, failed,\nskipped, and detected-formats summary.\n\n\nEach `result` event payload contains `endpointId`, a `status` of `success`\nor `failed`, an `error` field (failures only), and a `results` array sorted\nby `score` descending. Clients can render or merge each event as it arrives,\nrather than waiting for the slowest endpoint.\n\n\nSee the [Search wiki page](https://wiki.trackandtrace.tools/t3-api/search/)\nfor the full endpoint catalog and worked examples.\n",
        "responses": {
          "200": {
            "description": "Ranked search results across all queried endpoints. Returned as a single\nJSON object by default, or as a stream of Server-Sent Events when\n`stream=true` (or `Accept: text/event-stream`) is requested.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/SearchEventStream"
                }
              }
            }
          },
          "400": {
            "description": "The request was invalid. Common causes:\n\n- `query` parameter missing\n- `query` parameter empty after trimming whitespace\n- `query` parameter is a pure ISO 8601 date/datetime \u2014 no endpoint\n  searches date fields, so this would silently return empty results.\n  Use a tag, label, manifest number, or name instead\n- `licenseNumber` parameter missing\n- `endpointIds` contained an unknown endpoint ID \u2014 the error message\n  names the specific unrecognized IDs\n- `pageSize` was not an integer or was outside [1, 100]\n- `minScore` was not a number or was outside [0.0, 1.0]\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "The text to search for. Whitespace is trimmed. The string is classified\nagainst the four query formats described above; this classification gates\nwhich endpoints are queried versus skipped.\n\n\nCommon patterns:\n\n- **Tag scan** \u2014 pass the full or partial tag, e.g. `1A4FF0100000022000000123`\n  or just the tail `0000123`. Triggers `HEX_STRING` and (if all digits)\n  `INTEGER`.\n- **Manifest lookup** \u2014 pass the manifest number, e.g. `1234566`. Triggers\n  `INTEGER`.\n- **Item / strain / location / harvest name** \u2014 pass a partial name, e.g.\n  `Blue Dream`. Triggers `BASIC_STRING`.\n",
            "schema": {
              "type": "string"
            },
            "examples": {
              "tag": {
                "summary": "Tag scan (HEX_STRING + INTEGER)",
                "value": "1A4FF0100000022000000123"
              },
              "manifest": {
                "summary": "Manifest number (INTEGER)",
                "value": "1234566"
              },
              "name": {
                "summary": "Item or strain name (BASIC_STRING)",
                "value": "Blue Dream"
              }
            }
          },
          {
            "name": "endpointIds",
            "in": "query",
            "required": false,
            "description": "Comma-separated list of Metrc endpoints to query. Restricts the search to\nexactly the endpoints listed (overriding the default-enabled set). Useful\nfor narrowing latency or scope when the caller already knows what they're\nlooking for.\n\n\n**Omit this parameter** to query the 17 default-enabled endpoints.\n**Provide this parameter** to query exactly the listed endpoints \u2014 this\ncan include endpoints that are off by default (e.g. `INACTIVE_PACKAGES`,\n`VOIDED_TAGS`).\n\n\nAll listed IDs must be valid search endpoints; an unknown ID returns\n`400 Bad Request`.\n\n\nDefault-enabled endpoints (queried when `endpointIds` is omitted):\n`AVAILABLE_TAGS`, `USED_TAGS`, `ACTIVE_ITEMS`, `ACTIVE_LOCATIONS`,\n`ACTIVE_STRAINS`, `ACTIVE_HARVESTS`, `ACTIVE_PLANTBATCHES`,\n`ACTIVE_PACKAGES`, `INTRANSIT_PACKAGES`, `TRANSFERRED_PACKAGES`,\n`VEGETATIVE_PLANTS`, `FLOWERING_PLANTS`, `ACTIVE_MOTHER_PLANTS`,\n`INCOMING_ACTIVE_TRANSFERS`, `OUTGOING_ACTIVE_TRANSFERS`,\n`OUTGOING_REJECTED_TRANSFERS`, `ACTIVE_SALES`.\n\n\nOff-by-default endpoints (must be opted in via `endpointIds`):\n`VOIDED_TAGS`, `INACTIVE_HARVESTS`, `INACTIVE_PLANTBATCHES`,\n`INACTIVE_PACKAGES`, `INACTIVE_PLANTS`, `INACTIVE_MOTHER_PLANTS`,\n`INCOMING_INACTIVE_TRANSFERS`, `OUTGOING_INACTIVE_TRANSFERS`,\n`INACTIVE_SALES`.\n",
            "schema": {
              "type": "string"
            },
            "examples": {
              "plants_only": {
                "summary": "Plant endpoints only",
                "value": "VEGETATIVE_PLANTS,FLOWERING_PLANTS"
              },
              "everything_active": {
                "summary": "All active package endpoints",
                "value": "ACTIVE_PACKAGES,INTRANSIT_PACKAGES,TRANSFERRED_PACKAGES"
              },
              "include_inactive": {
                "summary": "Default packages plus inactive",
                "value": "ACTIVE_PACKAGES,INTRANSIT_PACKAGES,INACTIVE_PACKAGES"
              }
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "description": "Maximum number of matches each downstream Metrc endpoint may return.\nDefaults to 10. Capped at 100. Larger values produce more comprehensive\nresults but proportionally larger responses and slightly slower queries.\n\n\nThe total number of items in `data` is at most\n`len(queriedMetrcEndpointIds) * pageSize`. The response's\n`endpointMetadata` array reports per-endpoint `truncated` and\n`totalAvailable` so callers can tell when raising `pageSize` would yield\nmore matches.\n",
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "minScore",
            "in": "query",
            "required": false,
            "description": "Drop results whose relevance score is below this threshold. Scores are in\n`[0, 1]`; 1.0 represents an exact full-string match. Defaults to 0.0\n(no filtering). Useful for noisy queries where the long tail of low-score\nmatches is just noise.\n\n\nThe filter is applied per-result before sorting and before SSE event\nemission. SSE `result` events still fire for endpoints that produced no\nsurviving results, so clients can tell the endpoint completed.\n",
            "schema": {
              "type": "number",
              "format": "float",
              "default": 0.0,
              "minimum": 0.0,
              "maximum": 1.0
            }
          },
          {
            "name": "stream",
            "in": "query",
            "required": false,
            "description": "When `true`, the response is streamed as Server-Sent Events\n(`Content-Type: text/event-stream`) instead of a single JSON payload. The\nsame effect can be triggered by sending `Accept: text/event-stream`.\n\n\nStreaming clients receive one `event: result` per completed downstream\nendpoint, followed by a terminal `event: done` summary event. See the\n\"Streaming responses\" section above.\n",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "tags": [
          "Search",
          "Free"
        ]
      }
    },
    "/v2/sales/active": {
      "get": {
        "summary": "List of active sales",
        "responses": {
          "200": {
            "description": "A list of active sales for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSalesReceipt"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "receiptNumber__contains:003",
            "description": "One or more sales filters."
          }
        ],
        "tags": [
          "Sales Receipts"
        ]
      }
    },
    "/v2/sales/active/super": {
      "get": {
        "summary": "List of active supersales receipts. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of active supersales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSupersalesReceipt"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupersalesInclude"
          }
        ],
        "tags": [
          "Sales",
          "Supercollections"
        ]
      }
    },
    "/v2/sales/active/report": {
      "get": {
        "summary": "Generate a report of all active sales",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active sales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSalesReceiptReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "receiptNumber,salesDateTime,totalPackages,totalPrice\n0001234567,01-01-2024T01:01:01,5,100.50\n0001234568,01-01-2024T01:01:01,6,23.50"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__endswith:0003",
            "description": "One or more sales receipt filters."
          },
          {
            "name": "columns",
            "description": "Defines which sales receipt fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "receiptNumber,salesDateTime,totalPackages,totalPrice",
              "example": "receiptNumber,salesDateTime,totalPackages,totalPrice"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Sales Receipts",
          "Reports"
        ]
      }
    },
    "/v2/sales/active/super/report": {
      "get": {
        "summary": "Generate a super report of all active sales receipts",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of active supersales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSupersalesReceiptReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "receiptNumber,salesDateTime,totalPrice\nR001,2024-01-01T12:00:00,100.00\nR002,2024-01-02T14:00:00,200.00"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "salesDateTime:desc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "receiptNumber__endswith:03",
            "description": "One or more sales receipt filters."
          },
          {
            "$ref": "#/components/parameters/SupersalesInclude"
          },
          {
            "name": "columns",
            "description": "Defines which sales receipt fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "receiptNumber,salesDateTime,totalPackages,totalPrice",
              "example": "receiptNumber,salesDateTime,totalPackages,totalPrice"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Sales",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/sales/inactive": {
      "get": {
        "summary": "List of inactive sales",
        "responses": {
          "200": {
            "description": "A list of inactive sales for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSalesReceipt"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "receiptNumber__contains:003",
            "description": "One or more sales filters."
          }
        ],
        "tags": [
          "Sales Receipts"
        ]
      }
    },
    "/v2/sales/inactive/super": {
      "get": {
        "summary": "List of inactive supersales receipts. Additional metadata can be added using the `include` param.",
        "responses": {
          "200": {
            "description": "A list of inactive supersales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcSupersalesReceipt"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/CollectionSort"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/SupersalesInclude"
          }
        ],
        "tags": [
          "Sales",
          "Supercollections"
        ]
      }
    },
    "/v2/sales/inactive/report": {
      "get": {
        "summary": "Generate a report of all inactive sales receipts",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive sales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSalesReceiptReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "receiptNumber,salesDateTime,totalPrice\nR001,2024-01-01T12:00:00,100.00\nR002,2024-01-02T14:00:00,200.00"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 50,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters or set a lower `rowLimit`.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "salesDateTime:desc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "receiptNumber__endswith:03",
            "description": "One or more sales receipt filters."
          },
          {
            "name": "columns",
            "description": "Defines which sales receipt fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "receiptNumber,salesDateTime,totalPackages,totalPrice",
              "example": "receiptNumber,salesDateTime,totalPackages,totalPrice"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Sales",
          "Reports"
        ]
      }
    },
    "/v2/sales/inactive/super/report": {
      "get": {
        "summary": "Generate a super report of all inactive sales receipts",
        "description": "**Note: this endpoint supports secret key authentication.**\n",
        "responses": {
          "200": {
            "description": "A list of inactive supersales receipts for this license",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcSupersalesReceiptReportResponse"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "example": "receiptNumber,salesDateTime,totalPrice\nR001,2024-01-01T12:00:00,100.00\nR002,2024-01-02T14:00:00,200.00"
                }
              },
              "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "description": "The report was written into a new Google Sheet.\n\nReturned only for `contentType=googleSheets` with inline delivery. The `Location` header holds the sheet URL, and the body repeats it for clients that do not follow redirects. By default anyone holding the link can open and edit the sheet -- see `sheetVisibility`.\n",
            "headers": {
              "Location": {
                "description": "The sheet URL, identical to `sheetUrl` in the body.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InlineSheetResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was rejected before any data was loaded.\n\n**Invalid columns** -- one or more names are not fields of this report. The response lists every valid field.\n\n**Invalid rowLimit** -- `rowLimit` is not an integer, or is below 1. Values above the row cap are clamped rather than rejected.\n\n**Report Request Too Large** -- either the collection is larger than the 5,000 row cap, or the estimated Metrc request count exceeds the budget of 10,000. The response says which. Tighten the filters, set a lower `rowLimit`, or request fewer includes.\n\n**Invalid Include** -- an `include` value is not one this report accepts. The response lists every valid include. Several includes are supplied by repeating the parameter; a comma-joined list is not supported.\n\n**Too Many Includes for 2D Format** -- `contentType=csv` accepts at most one `include`. Use `contentType=json` for more.\n"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumbers"
          },
          {
            "$ref": "#/components/parameters/SecretKey"
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/ContentType"
          },
          {
            "$ref": "#/components/parameters/Delivery"
          },
          {
            "$ref": "#/components/parameters/Email"
          },
          {
            "$ref": "#/components/parameters/SheetVisibility"
          },
          {
            "$ref": "#/components/parameters/RowLimit"
          },
          {
            "$ref": "#/components/parameters/PrependCsvMetadata"
          },
          {
            "$ref": "#/components/parameters/ContentDisposition"
          },
          {
            "$ref": "#/components/parameters/ColumnHeaderOverrides"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "salesDateTime:desc",
            "description": "Defines the sales receipt sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "receiptNumber__endswith:03",
            "description": "One or more sales receipt filters."
          },
          {
            "$ref": "#/components/parameters/SupersalesInclude"
          },
          {
            "name": "columns",
            "description": "Defines which sales receipt fields should appear in the report data, as a comma-separated list. Omit it to return the default columns shown below.\nAn unrecognized name returns 400, listing every field that is valid for this report.\nIn `csv` output the column headers are title-cased from the field names, so `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": "receiptNumber,salesDateTime,totalPackages,totalPrice",
              "example": "receiptNumber,salesDateTime,totalPackages,totalPrice"
            }
          },
          {
            "name": "fieldnames",
            "description": "Deprecated alias for `columns`. Still accepted so existing report URLs keep working, but new integrations should send `columns`. Supplying both returns 400.\n",
            "in": "query",
            "required": false,
            "deprecated": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "Sales",
          "Reports",
          "Supercollections"
        ]
      }
    },
    "/v2/sales/transactions": {
      "get": {
        "summary": "List of transactions for a single sales receipt",
        "responses": {
          "200": {
            "description": "A list of transactions for the specified sales receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransaction"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "salesReceiptId",
            "description": "ID of the target sales receipt",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "example": 123
            }
          },
          {
            "name": "includeHistory",
            "description": "Enables access to archived transactions in Metrc",
            "in": "query",
            "schema": {
              "type": "boolean",
              "example": true
            }
          },
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the transaction sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "packageLabel__contains:003",
            "description": "One or more transaction filters."
          }
        ],
        "tags": [
          "Sales Receipts",
          "Single Sales Receipt"
        ]
      }
    },
    "/v2/sales/unfinalize": {
      "post": {
        "summary": "Unfinalize sales receipts",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcUnfinalizeSalesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Sales Receipts",
          "Modify Sales Receipts"
        ]
      }
    },
    "/v2/sales/void": {
      "post": {
        "summary": "Void one sales receipt",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MetrcVoidSalesReceiptPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation completed successfully.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                      "example": "Success"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "An error response indicating the Metrc servers are experiencing downtime.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "ServiceUnavailable"
                        },
                        "message": {
                          "type": "string",
                          "example": "503 ServiceUnavailable"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 503
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/Submit"
          },
          {
            "$ref": "#/components/parameters/ApplyDynamicValidation"
          },
          {
            "$ref": "#/components/parameters/SkipDynamicValidationChecks"
          }
        ],
        "tags": [
          "Sales Receipts",
          "Modify Sales Receipts"
        ]
      }
    },
    "/v2/labels/label-template-layouts": {
      "get": {
        "summary": "Returns a list of label template layouts",
        "responses": {
          "200": {
            "description": "A list of label template layouts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/T3LabelTemplateLayoutsResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Labels",
          "PDF",
          "Free"
        ]
      },
      "post": {
        "summary": "Create a label template layout",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/T3CreateLabelTemplateLayoutPayload"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The created label template layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body"
          }
        },
        "tags": [
          "Labels",
          "PDF"
        ]
      }
    },
    "/v2/labels/label-content-layouts": {
      "get": {
        "summary": "Returns a list of label content layouts",
        "responses": {
          "200": {
            "description": "A list of label content layouts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/T3LabelContentLayoutsResponse"
                }
              }
            }
          }
        },
        "tags": [
          "Labels",
          "PDF",
          "Free"
        ]
      },
      "post": {
        "summary": "Create a label content layout",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/T3CreateLabelContentLayoutPayload"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The created label content layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request body"
          }
        },
        "tags": [
          "Labels",
          "PDF"
        ]
      }
    },
    "/v2/labels/generate": {
      "post": {
        "summary": "Generate a PDF of labels.",
        "description": "Layout IDs can be found by querying the label template layout and label content layout endpoints.\n\nT3 Free users can only generate watermarked labels. Watermarks can be removed with a T3+ subscription.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/T3GenerateLabelsPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "PDF of the labels",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "tags": [
          "Labels",
          "PDF",
          "Free"
        ]
      }
    },
    "/v2/labels/label-template-layouts/{public_id}": {
      "get": {
        "summary": "Get a single label template layout by ID",
        "responses": {
          "200": {
            "description": "The label template layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Template layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label template layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      },
      "patch": {
        "summary": "Update a label template layout",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/T3UpdateLabelTemplateLayoutPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated label template layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No fields to update"
          },
          "404": {
            "description": "Template layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label template layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      },
      "delete": {
        "summary": "Archive a label template layout",
        "description": "Soft-deletes the template layout by setting is_archived to true.",
        "responses": {
          "200": {
            "description": "The template layout was archived",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "publicId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "isArchived": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Template layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label template layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      }
    },
    "/v2/labels/label-content-layouts/{public_id}": {
      "get": {
        "summary": "Get a single label content layout by ID",
        "responses": {
          "200": {
            "description": "The label content layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Content layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label content layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      },
      "patch": {
        "summary": "Update a label content layout",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/T3UpdateLabelContentLayoutPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated label content layout",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No fields to update"
          },
          "404": {
            "description": "Content layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label content layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      },
      "delete": {
        "summary": "Archive a label content layout",
        "description": "Soft-deletes the content layout by setting is_archived to true.",
        "responses": {
          "200": {
            "description": "The content layout was archived",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "publicId": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "isArchived": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Content layout not found"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The label content layout public ID"
          }
        ],
        "tags": [
          "Labels",
          "PDF"
        ]
      }
    },
    "/v2/tag-lists": {
      "get": {
        "summary": "List all tag lists",
        "description": "Returns tag lists for the specified license number. Each list includes an\n`entryCount` and `scannedCount` summary. To also load every list's full\nentries inline, pass `includeEntries=true` \u2014 this is significantly more\nexpensive for users with many or large lists.\n\nResults are ordered by creation date (newest first) and paginated.\n",
        "responses": {
          "200": {
            "description": "A paginated list of tag lists with their entries",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/TagList"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "name": "isArchived",
            "description": "Filter by archived status. Defaults to `false` (only non-archived lists).\nSet to `true` to return archived lists instead.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "example": false
            }
          },
          {
            "name": "includeEntries",
            "description": "When `true`, every returned tag list includes its full `tagListEntries`\narray. When `false` (default), only `entryCount` and `scannedCount`\nsummaries are returned. Set to `true` only when you need the entries up\nfront; otherwise fetch a single list by ID to load its entries.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "example": false
            }
          }
        ],
        "tags": [
          "Tag Lists",
          "Free"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      },
      "post": {
        "summary": "Create a new tag list",
        "description": "Creates a new tag list with optional initial entries.\n\nIf `allowDuplicateHandles` is `false` (default), any duplicate handles\nin the `entries` array are silently skipped.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTagListPayload"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The tag list was created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "integer",
                          "description": "The ID of the newly created tag list.",
                          "example": 42
                        },
                        "name": {
                          "type": "string",
                          "nullable": true,
                          "description": "The name the list was created with, or null.",
                          "example": "Room A inventory"
                        },
                        "allowDuplicateHandles": {
                          "type": "boolean",
                          "example": false
                        },
                        "created": {
                          "type": "integer",
                          "description": "The number of entries that were created.",
                          "example": 3
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      }
    },
    "/v2/tag-lists/{tag_list_id}": {
      "get": {
        "summary": "Get a tag list by ID",
        "description": "Returns the metadata and all entries for a specific tag list.\n",
        "responses": {
          "200": {
            "description": "The tag list metadata and entries",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/TagListDetail"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list not found"
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list to retrieve.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          }
        ],
        "tags": [
          "Tag Lists",
          "Free"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      },
      "patch": {
        "summary": "Update a tag list",
        "description": "Updates a tag list's mutable properties. Provide at least one of `name` or\n`isArchived`. Any field omitted from the request body is left unchanged; the\nresponse echoes back only the fields that were actually updated.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTagListPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The tag list was updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "integer",
                          "example": 42
                        },
                        "name": {
                          "type": "string",
                          "nullable": true,
                          "description": "Present only if `name` was in the request body.",
                          "example": "Room A inventory"
                        },
                        "isArchived": {
                          "type": "boolean",
                          "description": "Present only if `isArchived` was in the request body.",
                          "example": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list not found"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list to update.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          }
        ],
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      }
    },
    "/v2/tag-lists/{tag_list_id}/entries": {
      "post": {
        "summary": "Add entries to a tag list",
        "description": "Appends one or more entries to an existing tag list.\n\nIf the tag list has `allowDuplicateHandles` set to `false`, entries with handles\nthat already exist in the list or are duplicated within this request are silently skipped.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddTagListEntriesPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Entries were appended successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "appended": {
                          "type": "integer",
                          "description": "The number of entries that were appended.",
                          "example": 2
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list not found"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list to add entries to.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          }
        ],
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      }
    },
    "/v2/tag-lists/{tag_list_id}/scan": {
      "post": {
        "summary": "Bulk mark entries as scanned by handle",
        "description": "Finds every entry in this tag list whose `handle` matches one of the supplied\nhandles and sets its `scannedAt` timestamp. Intended for workflows that sweep\nmany tags at once \u2014 for example, an RFID read \u2014 where issuing one PATCH per\nentry would be prohibitively slow.\n\nHandles not found in the list are silently skipped and returned in the\n`handlesNotFound` array so callers can surface unexpected tags.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScanTagListPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Entries were marked as scanned",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "scanned": {
                          "type": "integer",
                          "description": "Number of entries whose `scannedAt` was updated.",
                          "example": 3
                        },
                        "scannedAt": {
                          "type": "string",
                          "format": "date-time",
                          "description": "The timestamp applied to matching entries.",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "handlesNotFound": {
                          "type": "array",
                          "description": "Supplied handles that did not match any entry in the list.",
                          "items": {
                            "type": "string"
                          },
                          "example": [
                            "1A9..."
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list not found"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list to scan against.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          }
        ],
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      }
    },
    "/v2/tag-lists/{tag_list_id}/entries/{entry_id}": {
      "patch": {
        "summary": "Update a tag list entry",
        "description": "Updates a tag list entry's mutable fields. At least one updatable field\n(`scannedAt`, `metadata`, `name`) must be provided.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTagListEntryPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The entry was updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "example": "101"
                        },
                        "scannedAt": {
                          "type": "string",
                          "format": "date-time",
                          "nullable": true,
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "metadata": {
                          "type": "object",
                          "example": {
                            "note": "Updated note"
                          }
                        },
                        "name": {
                          "type": "string",
                          "nullable": true,
                          "example": "Vault shelf 3"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list or entry not found"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list containing the entry.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          },
          {
            "name": "entry_id",
            "description": "The ID of the entry to update.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 101
            }
          }
        ],
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      },
      "delete": {
        "summary": "Delete a tag list entry",
        "description": "Removes a specific entry from a tag list.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteTagListEntryPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The entry was deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "deleted": {
                          "type": "boolean",
                          "example": true
                        },
                        "entryId": {
                          "type": "string",
                          "example": "101"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Tag list or entry not found"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tag_list_id",
            "description": "The ID of the tag list containing the entry.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 42
            }
          },
          {
            "name": "entry_id",
            "description": "The ID of the entry to delete.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "example": 101
            }
          }
        ],
        "tags": [
          "Tag Lists"
        ],
        "externalDocs": {
          "description": "Tag Lists \u2014 concepts and usage",
          "url": "https://wiki.trackandtrace.tools/tag-lists/"
        }
      }
    },
    "/v2/saved-reports": {
      "get": {
        "summary": "List saved reports",
        "description": "Returns every report saved by the authenticated Metrc account, newest first.\n\nSaved reports are owned by the Metrc account, not by a single credential, so\nany secret key or JWT for this `username` and `hostname` sees the same list.\n\nOptionally narrow by `licenseNumber` or `t3EndpointId`, both of which are\nderived from each saved `reportUrl` when it is stored.\n",
        "responses": {
          "200": {
            "description": "A paginated list of saved reports",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/SavedReport"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "name": "licenseNumber",
            "description": "Return only saved reports that cover this license. A report spanning\nseveral licenses matches any one of them.\n",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "C11-0000001-LIC"
            }
          },
          {
            "name": "t3EndpointId",
            "description": "Return only saved reports pointing at this report endpoint.",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "example": "VEGETATIVE_PLANTS_REPORT"
            }
          }
        ],
        "tags": [
          "Saved Reports"
        ]
      },
      "post": {
        "summary": "Save a report URL",
        "description": "Saves a report URL under a name so it can be retrieved later.\n\n**Saving does not run anything.** A saved report is a definition. To get the\nreport, read back its `reportUrl` and request it as you normally would; the\nreport endpoints remain the only way to fetch report data.\n\n`reportUrl` comes back origin-relative and without a `secretKey`, so prepend\nthe API origin and supply your key when you request it.\n\n**Authentication is not stored.** Any `secretKey` in the submitted URL is\nstripped before the row is written, so a saved report is not a credential and\na leaked `publicId` grants nothing on its own \u2014 running one still requires\nauthenticating as the owning Metrc account. Rotating or revoking a secret key\ntherefore needs no change to saved reports.\n\n**The URL is validated now, not at run time.** Everything the report endpoint\ncan reject without contacting Metrc \u2014 content type, delivery, transform,\nfilters, sort, licenses, row limit, includes \u2014 is checked here, so a URL\naccepted by this endpoint is one that can run.\n\nExample:\n\n```python\nimport requests\n\nresponse = requests.post(\n    \"https://api.trackandtrace.tools/v2/saved-reports\",\n    headers={\"X-T3-API-Key\": SECRET_KEY},\n    json={\n        \"name\": \"Daily veg plant count\",\n        \"reportUrl\": (\n            \"/v2/plants/vegetative/report\"\n            \"?licenseNumber=C11-0000001-LIC\"\n            \"&contentType=csv\"\n            \"&columns=label,strainName,plantedDate\"\n        ),\n    },\n)\n\nsaved = response.json()[\"data\"]\nprint(saved[\"publicId\"])\nprint(saved[\"reportUrl\"])   # request this to get the report\n```\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSavedReportPayload"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The report was saved",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SavedReport"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "The name is already used by another saved report on this account, or the\naccount has reached its saved report limit.\n"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Saved Reports"
        ]
      }
    },
    "/v2/saved-reports/{public_id}": {
      "get": {
        "summary": "Retrieve a saved report",
        "description": "Returns one saved report by its `publicId`.\n\nA saved report belonging to a different Metrc account is reported as not\nfound rather than as forbidden, so this endpoint cannot be used to discover\nwhich identifiers exist.\n",
        "responses": {
          "200": {
            "description": "The saved report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SavedReport"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No saved report with that id belongs to this account."
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "description": "The saved report's `publicId`.",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
            }
          }
        ],
        "tags": [
          "Saved Reports"
        ]
      },
      "patch": {
        "summary": "Update a saved report",
        "description": "Updates a saved report's name, description or URL. Omitted fields are left\nunchanged.\n\nEditing `reportUrl` leaves `publicId` alone, so a client holding the id keeps\nreferring to the same saved report.\n\nA replacement `reportUrl` is validated exactly as on create, and\n`t3EndpointId` and `licenseNumbers` are re-derived from it.\n\nExample \u2014 narrow an existing report to one strain:\n\n```python\nimport requests\n\nrequests.patch(\n    f\"https://api.trackandtrace.tools/v2/saved-reports/{public_id}\",\n    headers={\"X-T3-API-Key\": SECRET_KEY},\n    json={\n        \"reportUrl\": (\n            \"/v2/plants/vegetative/report\"\n            \"?licenseNumber=C11-0000001-LIC\"\n            \"&contentType=csv\"\n            \"&filter=strainName__eq:Blue Dream\"\n        ),\n    },\n)\n```\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSavedReportPayload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The updated saved report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SavedReport"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No saved report with that id belongs to this account."
          },
          "409": {
            "description": "The name is already used by another saved report on this account."
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "description": "The saved report's `publicId`.",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
            }
          }
        ],
        "tags": [
          "Saved Reports"
        ]
      },
      "delete": {
        "summary": "Delete a saved report",
        "description": "Permanently deletes a saved report.\n\nThis removes the stored definition only. Anything already holding the\nreport URL keeps working, because that URL is an ordinary report endpoint\nrequest and does not depend on this record.\n",
        "responses": {
          "200": {
            "description": "The saved report was deleted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "publicId": {
                          "type": "string",
                          "format": "uuid",
                          "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No saved report with that id belongs to this account."
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "in": "path",
            "required": true,
            "description": "The saved report's `publicId`.",
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
            }
          }
        ],
        "tags": [
          "Saved Reports"
        ]
      }
    },
    "/v2/support/tickets": {
      "post": {
        "summary": "File a support ticket",
        "description": "Reports a bug or issue to T3 support, optionally with screenshots or logs\nattached.\n\n**No subscription is required.** Anyone who can authenticate can file a\nticket.\n\n**Tickets are read-only once filed.** There is no endpoint that edits,\ncloses or deletes one. T3 support works the ticket and writes back through\n`resolutionNote`, which appears on the ticket the next time you read it.\n\n### Two ways to send it\n\nWithout attachments, send JSON:\n\n```python\nimport requests\n\nresponse = requests.post(\n    \"https://api.trackandtrace.tools/v2/support/tickets\",\n    headers={\"X-T3-API-Key\": SECRET_KEY},\n    json={\n        \"title\": \"Scanning a package tag opens the wrong package\",\n        \"body\": \"Scanning tags on the Active Packages page opens the package above the one I scanned.\",\n        \"contactEmail\": \"grower@example.com\",\n        \"pageUrl\": \"https://ca.metrc.com/industry/C11-0000001-LIC/packages\",\n        \"stateContext\": {\"route\": \"/packages/active\"},\n    },\n)\n\nprint(response.json()[\"data\"][\"publicId\"])\n```\n\nWith attachments, send `multipart/form-data`: the same JSON object in a\n`payload` part, and one `file` part per attachment.\n\n```python\nimport json\nimport requests\n\npayload = {\n    \"title\": \"Scanning a package tag opens the wrong package\",\n    \"body\": \"Happens every time, on two machines.\",\n    \"contactEmail\": \"grower@example.com\",\n    \"pageUrl\": \"https://ca.metrc.com/industry/C11-0000001-LIC/packages\",\n    \"clientVersion\": \"3.2.1\",\n}\n\nwith open(\"console.png\", \"rb\") as screenshot, open(\"debug.log\", \"rb\") as log:\n    response = requests.post(\n        \"https://api.trackandtrace.tools/v2/support/tickets\",\n        headers={\"X-T3-API-Key\": SECRET_KEY},\n        data={\"payload\": json.dumps(payload)},\n        files=[\n            (\"file\", (\"console.png\", screenshot, \"image/png\")),\n            (\"file\", (\"debug.log\", log, \"text/plain\")),\n        ],\n    )\n\nticket = response.json()[\"data\"]\nprint(ticket[\"publicId\"], [a[\"filename\"] for a in ticket[\"attachments\"]])\n```\n\n### Attachment limits\n\nAt most 5 files, 10 MB each, 25 MB in total. Accepted types are PNG, JPEG,\nGIF and WEBP images, PDF, and plain text, CSV or JSON.\n\nTypes are determined from each file's contents, not from what the upload\ndeclares, so renaming a file does not change whether it is accepted.\n\nAttachments are validated before anything is stored: if one file is rejected\nthe whole request fails and no ticket is created.\n\n**Attachments cannot be downloaded again.** They are stored privately for T3\nsupport. Reading a ticket tells you a file's name, type and size, and nothing\nmore \u2014 keep your own copy of anything you need.\n",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSupportTicketPayload"
              }
            },
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "payload"
                ],
                "properties": {
                  "payload": {
                    "$ref": "#/components/schemas/CreateSupportTicketPayload"
                  },
                  "file": {
                    "type": "array",
                    "description": "The files to attach. Repeat the `file` part once per attachment.\n",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "The ticket was filed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SupportTicket"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "The payload failed validation, `stateContext` was too large, or an\nattachment was rejected. See `SUPPORT_TICKET_ATTACHMENT_REJECTED` in the\n[Error Reference](/errors/).\n"
          },
          "409": {
            "description": "This account already has the maximum number of open tickets. Closing one\nrestores the allowance.\n"
          },
          "500": {
            "description": "An error response indicating the server experienced an unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "InternalServerError"
                        },
                        "message": {
                          "type": "string",
                          "example": "500 InternalServerError"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 500
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Support"
        ]
      },
      "get": {
        "summary": "List support tickets",
        "description": "Returns every support ticket filed by the authenticated Metrc account, newest\nfirst.\n\nTickets are owned by the Metrc account rather than by a single credential, so\nany secret key or JWT for this `username` and `hostname` sees the same list.\nTickets filed by other accounts are never visible.\n\nEach ticket carries its attachments' metadata, so listing tickets needs no\nfollow-up request per ticket.\n\n```python\nimport requests\n\nresponse = requests.get(\n    \"https://api.trackandtrace.tools/v2/support/tickets\",\n    headers={\"X-T3-API-Key\": SECRET_KEY},\n    params={\"status\": \"OPEN\"},\n)\n\nfor ticket in response.json()[\"data\"]:\n    print(ticket[\"status\"], ticket[\"title\"], ticket[\"resolutionNote\"])\n```\n",
        "responses": {
          "200": {
            "description": "A paginated list of support tickets",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/SupportTicket"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "An error response indicating the request was invalid. Refer to the response body for details.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "example": "BadRequest"
                        },
                        "message": {
                          "type": "string",
                          "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                        },
                        "timestamp": {
                          "type": "string",
                          "format": "date-time",
                          "example": "2024-08-09T12:34:56.789Z"
                        },
                        "url": {
                          "type": "string",
                          "example": "https://api.trackandtrace.tools/some-endpoint"
                        },
                        "status_code": {
                          "type": "integer",
                          "example": 400
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "name": "status",
            "description": "Return only tickets in this state.",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "OPEN",
                "CLOSED"
              ],
              "example": "OPEN"
            }
          }
        ],
        "tags": [
          "Support"
        ]
      }
    },
    "/v2/support/tickets/{public_id}": {
      "get": {
        "summary": "Get a support ticket",
        "description": "Returns one of the authenticated Metrc account's support tickets.\n\nThis is how you check on a ticket you filed. `status` shows whether it is\nstill open, and `resolutionNote` carries T3 support's reply once there is\none \u2014 no endpoint modifies a ticket, so reading it is the whole feedback\nchannel.\n\nA ticket filed by a different Metrc account is reported as not found rather\nthan as forbidden, so this endpoint cannot be used to discover which tickets\nexist.\n\n```python\nimport requests\n\nresponse = requests.get(\n    f\"https://api.trackandtrace.tools/v2/support/tickets/{public_id}\",\n    headers={\"X-T3-API-Key\": SECRET_KEY},\n)\n\nticket = response.json()[\"data\"]\nprint(ticket[\"status\"], ticket[\"resolutionNote\"])\n```\n",
        "responses": {
          "200": {
            "description": "The support ticket",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SupportTicket"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No ticket with that id belongs to this account. See\n`SUPPORT_TICKET_NOT_FOUND` in the [Error Reference](/errors/).\n"
          }
        },
        "parameters": [
          {
            "name": "public_id",
            "description": "The ticket's `publicId`, as returned when it was filed.",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
            }
          }
        ],
        "tags": [
          "Support"
        ]
      }
    },
    "/v2/dataimport/templates": {
      "get": {
        "summary": "List available data import CSV templates",
        "responses": {
          "200": {
            "description": "A paginated list of available data import CSV templates",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Pagination"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/MetrcDataimportTemplate"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/CollectionPage"
          },
          {
            "$ref": "#/components/parameters/CollectionPageSize"
          },
          {
            "$ref": "#/components/parameters/StrictPagination"
          },
          {
            "$ref": "#/components/parameters/CollectionSort",
            "example": "name:asc",
            "description": "Defines the template sort order."
          },
          {
            "$ref": "#/components/parameters/CollectionFilterLogic"
          },
          {
            "$ref": "#/components/parameters/CollectionFilter",
            "example": "name__contains:Package",
            "description": "One or more template filters."
          },
          {
            "$ref": "#/components/parameters/CollectionMask"
          }
        ],
        "tags": [
          "Data Import"
        ]
      }
    },
    "/v2/dataimport/csv-documentation": {
      "get": {
        "summary": "Get CSV column documentation for a data import template",
        "responses": {
          "200": {
            "description": "CSV column documentation for the specified template",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetrcDataimportCsvDocumentation"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/LicenseNumber"
          },
          {
            "$ref": "#/components/parameters/TemplateId"
          }
        ],
        "tags": [
          "Data Import"
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Standard Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\""
      },
      "SecretKeyHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-T3-API-Key",
        "description": "T3 secret key passed in a custom HTTP header. Preferred over the query-string form because it does not leak into URLs."
      },
      "SecretKeyQuery": {
        "type": "apiKey",
        "in": "query",
        "name": "secretKey",
        "description": "T3 secret key passed as a query parameter. Supported for backwards compatibility; prefer X-T3-API-Key for new integrations."
      }
    },
    "responses": {
      "SuccessMutationResponse": {
        "description": "The operation completed successfully.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Describes the nature of this successful operation\n- \"Success\" indicates the request passed validation and was successfully passed to Metrc\n- \"Dry run\" indicates the request passed validation, but the request was not sent to Metrc\n",
                  "example": "Success"
                }
              }
            }
          }
        }
      },
      "BadRequestMutationResponse": {
        "description": "An error response indicating the request was invalid. Refer to the response body for details.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "BadRequest"
                    },
                    "message": {
                      "type": "string",
                      "example": "400 Bad Request: Invalid request body: 'note' is a required property"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "example": "2024-08-09T12:34:56.789Z"
                    },
                    "url": {
                      "type": "string",
                      "example": "https://api.trackandtrace.tools/some-endpoint"
                    },
                    "status_code": {
                      "type": "integer",
                      "example": 400
                    }
                  }
                }
              }
            }
          }
        }
      },
      "InternalServerErrorMutationResponse": {
        "description": "An error response indicating the server experienced an unexpected error.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "InternalServerError"
                    },
                    "message": {
                      "type": "string",
                      "example": "500 InternalServerError"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "example": "2024-08-09T12:34:56.789Z"
                    },
                    "url": {
                      "type": "string",
                      "example": "https://api.trackandtrace.tools/some-endpoint"
                    },
                    "status_code": {
                      "type": "integer",
                      "example": 500
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ServiceUnavailableMutationResponse": {
        "description": "An error response indicating the Metrc servers are experiencing downtime.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "ServiceUnavailable"
                    },
                    "message": {
                      "type": "string",
                      "example": "503 ServiceUnavailable"
                    },
                    "timestamp": {
                      "type": "string",
                      "format": "date-time",
                      "example": "2024-08-09T12:34:56.789Z"
                    },
                    "url": {
                      "type": "string",
                      "example": "https://api.trackandtrace.tools/some-endpoint"
                    },
                    "status_code": {
                      "type": "integer",
                      "example": 503
                    }
                  }
                }
              }
            }
          }
        }
      },
      "SupercollectionBadRequestResponse": {
        "description": "The request was rejected before any data was loaded.\n\n**Invalid Include** -- an `include` value is not one this endpoint accepts. The\nresponse lists every include this endpoint does accept, or states that it accepts\nnone. Several includes are supplied by repeating the parameter\n(`include=history&include=labResults`); a comma-joined list is not supported.\n"
      }
    },
    "schemas": {
      "AccessToken": {
        "type": "string",
        "description": "A JSON web token used to send authenticated API requests",
        "example": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjE2ODciLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwic3ViIjoiMTIzNDU2Nzg5MCIsIm5hbWUiOiJKYW5lIERvZSIsImF1ZCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vYXBpIiwiZXhwIjoxNjA5MzYwMDAwfQ.Q8B8u5h5wvxgK3xN-zsmBbs3_HwPkjFz8wq_Fk2JYfw"
      },
      "AddTagListEntriesPayload": {
        "type": "object",
        "required": [
          "licenseNumber",
          "entries"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number associated with this tag list.",
            "example": "LIC-00001"
          },
          "entries": {
            "type": "array",
            "description": "Entries to append to the tag list.\n\nIf the tag list has `allowDuplicateHandles` set to `false`, entries with handles\nthat already exist in the list or are duplicated within this request are silently skipped.\n",
            "items": {
              "type": "object",
              "required": [
                "handle"
              ],
              "properties": {
                "handle": {
                  "type": "string",
                  "description": "The tag handle string.",
                  "example": "TAG002"
                },
                "name": {
                  "type": "string",
                  "nullable": true,
                  "description": "Optional freeform human-readable identifier for this entry.",
                  "example": "Vault shelf 3"
                },
                "metadata": {
                  "type": "object",
                  "description": "Optional metadata to associate with this entry.",
                  "example": {
                    "color": "green"
                  }
                }
              }
            }
          }
        }
      },
      "CreateSavedReportPayload": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "reportUrl"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Label for the saved report. Must be unique among this Metrc account's\nsaved reports.\n",
            "example": "Daily veg plant count",
            "x-errorMessage": "'name' must be a string of 1-200 characters."
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "nullable": true,
            "description": "Optional note about what this report is for.",
            "example": "Feeds the cultivation team's morning dashboard",
            "x-errorMessage": "'description' must be a string of at most 2000 characters."
          },
          "reportUrl": {
            "type": "string",
            "minLength": 1,
            "maxLength": 8000,
            "description": "The report URL to save. Accepts either a full URL as copied from a\nbrowser or a bare path with a query string; the scheme and host are\ndiscarded.\n\nThe URL is validated against the report endpoint it names, so a URL that\nwould be rejected as a request is rejected here rather than the first\ntime the saved report runs.\n\nAny `secretKey` is stripped before storage. Authentication is supplied\nper run, not saved.\n",
            "example": "https://api.trackandtrace.tools/v2/plants/vegetative/report?licenseNumber=C11-0000001-LIC&contentType=csv",
            "x-errorMessage": "'reportUrl' must be a report endpoint URL of at most 8000 characters, e.g. /v2/plants/vegetative/report?licenseNumber=EX-00001"
          }
        }
      },
      "CreateSupportTicketPayload": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "title",
          "body",
          "contactEmail"
        ],
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "pattern": "\\S",
            "description": "One-line summary of the problem.",
            "example": "Scanning a package tag opens the wrong package",
            "x-errorMessage": "'title' must be a string of 1-200 characters and cannot be only whitespace."
          },
          "body": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000,
            "pattern": "\\S",
            "description": "What happened, what you expected, and how to reproduce it. Plain text.\n",
            "example": "Scanning C11-0000001-LIC package tags on the Active Packages page opens\nthe package above the one I scanned. Started this morning. Happens every\ntime, on two machines.\n",
            "x-errorMessage": "'body' must be a string of 1-20000 characters and cannot be only whitespace."
          },
          "contactEmail": {
            "type": "string",
            "minLength": 1,
            "maxLength": 254,
            "format": "email",
            "description": "Where T3 support can reach you about this ticket. Required.\n\nYour Metrc username identifies the account but is not a mailbox, so\nwithout this there is no way to ask you a follow-up question \u2014 the\nanswer would only ever appear in `resolutionNote`, which you would have\nto think to come back and read.\n\nA single address. Lists are rejected, and the address is checked for\nshape before the ticket is written.\n",
            "example": "grower@example.com",
            "x-errorMessage": "'contactEmail' is required and must be a single email address of at most 254 characters."
          },
          "pageUrl": {
            "type": "string",
            "maxLength": 2000,
            "nullable": true,
            "description": "The page you were on when the problem occurred. Optional, but it is the\nsingle most useful field for reproducing a report.\n",
            "example": "https://ca.metrc.com/industry/C11-0000001-LIC/packages",
            "x-errorMessage": "'pageUrl' must be a string of at most 2000 characters."
          },
          "licenseNumber": {
            "type": "string",
            "maxLength": 100,
            "nullable": true,
            "description": "The license the problem concerns, when it concerns one.\n\nStored as sent and not checked against the licenses your account can\nreach \u2014 \"I cannot see license X\" is a legitimate ticket, and validating\nthis would reject exactly that report.\n",
            "example": "C11-0000001-LIC",
            "x-errorMessage": "'licenseNumber' must be a string of at most 100 characters."
          },
          "clientVersion": {
            "type": "string",
            "maxLength": 50,
            "nullable": true,
            "description": "The version of the client filing the ticket, e.g. the T3 Chrome\nextension's version. Lets a wave of reports be tied to a release without\nasking every reporter what they are running.\n",
            "example": "3.2.1",
            "x-errorMessage": "'clientVersion' must be a string of at most 50 characters."
          },
          "stateContext": {
            "type": "object",
            "description": "Arbitrary client-captured context: the active route, the last few console\nerrors, whatever the client thought was worth recording. The shape is\nyours to decide \u2014 nothing here is validated beyond being a JSON object\nthat serializes to at most 64 KB.\n",
            "additionalProperties": true,
            "example": {
              "route": "/packages/active",
              "selectedLicense": "C11-0000001-LIC",
              "lastError": "TypeError: cannot read property 'id' of undefined"
            },
            "x-errorMessage": "'stateContext' must be a JSON object."
          }
        }
      },
      "CreateTagListPayload": {
        "type": "object",
        "required": [
          "licenseNumber"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number to associate this tag list with.",
            "example": "LIC-00001"
          },
          "name": {
            "type": "string",
            "description": "Optional human-readable name for the tag list.",
            "example": "Room A inventory"
          },
          "allowDuplicateHandles": {
            "type": "boolean",
            "description": "Whether to allow duplicate handle values in this tag list.\n\nWhen `false`, duplicate handles in the `entries` array are silently skipped.\n",
            "default": false,
            "example": false
          },
          "entries": {
            "type": "array",
            "description": "Optional initial entries to create with the tag list.",
            "items": {
              "type": "object",
              "required": [
                "handle"
              ],
              "properties": {
                "handle": {
                  "type": "string",
                  "description": "The tag handle string.",
                  "example": "TAG001"
                },
                "name": {
                  "type": "string",
                  "nullable": true,
                  "description": "Optional freeform human-readable identifier for this entry.",
                  "example": "Vault shelf 3"
                },
                "metadata": {
                  "type": "object",
                  "description": "Optional metadata to associate with this entry.",
                  "example": {
                    "note": "Test tag"
                  }
                }
              }
            }
          }
        }
      },
      "DeleteTagListEntryPayload": {
        "type": "object",
        "required": [
          "licenseNumber"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number associated with this tag list.",
            "example": "LIC-00001"
          }
        }
      },
      "EndpointId": {
        "type": "string",
        "description": "Uniquely identifies a Metrc endpoint used to query data.",
        "example": "ACTIVE_PACKAGES",
        "enum": [
          "ACTIVE_HARVESTS",
          "ACTIVE_ITEMS",
          "ACTIVE_PACKAGES",
          "ACTIVE_PLANTBATCHES",
          "ACTIVE_STRAINS",
          "ADD_PACKAGE_NOTES",
          "CREATE_DELIVERY_TRANSPORTERS",
          "CREATE_ITEMS",
          "CREATE_ITEMS_INPUTS",
          "CREATE_PACKAGES_FROM_PACKAGES",
          "CREATE_PACKAGES_INPUTS",
          "CREATE_PACKAGES_SOURCE_ITEMS",
          "CREATE_PACKAGES_SOURCE_PACKAGES",
          "CREATE_STRAINS",
          "CREATE_TRANSFER",
          "CREATE_TRANSFER_DESTINATIONS",
          "CREATE_TRANSFER_INPUTS",
          "DELIVERY_TRANSPORTERS",
          "DISCONTINUE_ITEMS",
          "DISCONTINUE_STRAINS",
          "FLOWERING_PLANTS",
          "INACTIVE_HARVESTS",
          "INACTIVE_PACKAGES",
          "INACTIVE_PLANTBATCHES",
          "INACTIVE_PLANTS",
          "INCOMING_ACTIVE_TRANSFERS",
          "INCOMING_INACTIVE_TRANSFERS",
          "INTRANSIT_PACKAGES",
          "ONHOLD_HARVESTS",
          "ONHOLD_PACKAGES",
          "ONHOLD_PLANTBATCHES",
          "ONHOLD_PLANTS",
          "OUTGOING_ACTIVE_TRANSFERS",
          "OUTGOING_INACTIVE_TRANSFERS",
          "OUTGOING_REJECTED_TRANSFERS",
          "PACKAGE_HISTORY",
          "PACKAGE_LABRESULTS",
          "PACKAGE_LABRESULTS_DOCUMENT",
          "PACKAGE_SOURCE_HARVESTS",
          "TRANSFER_DELIVERIES",
          "TRANSFER_HISTORY",
          "TRANSFER_MANIFEST",
          "TRANSFER_PACKAGES",
          "TRANSFER_TRANSPORTER_DETAILS",
          "TRANSFERRED_PACKAGES",
          "VEGETATIVE_PLANTS"
        ]
      },
      "ExtractedLabResult": {
        "type": "object",
        "properties": {
          "labTestResultId": {
            "type": "number",
            "format": "int"
          },
          "labTestDetailId": {
            "type": "number",
            "format": "int"
          },
          "labResultTestName": {
            "type": "string",
            "example": "Delta-9 THC"
          },
          "labResultTestValue": {
            "type": "number",
            "format": "float",
            "example": 0.123
          },
          "labResultTestUnit": {
            "type": "string",
            "example": "%"
          },
          "labResultBatchName": {
            "description": "The name of the lab result batch. This is only set if the lab results were loaded via `include=labResultBatches`\n",
            "type": "string",
            "example": "Mandatory Terpenes",
            "nullable": true
          },
          "fullLabResultTestName": {
            "type": "string",
            "example": "Delta-9 THC (%) Mandatory Terpenes"
          },
          "passed": {
            "type": "boolean",
            "example": true
          },
          "tags": {
            "type": "array",
            "description": "T3 analyzes each lab result, and creates a normalized list of tags for each lab result.\n\nExamples: \n\n- ['delta9', 'thc']\n- ['total', 'cbd']\n- ['terpene', 'limonene']\n",
            "items": {
              "type": "string",
              "example": "terpene"
            }
          }
        }
      },
      "HubTransferManifestReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "productName__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "description": "The transfers loaded for this report, nested, each carrying its packages and its embedded shipmentTransporterDetails in full. Requesting contentType=csv returns the flattened T3HubTransferManifest columns instead, one row per package, with only the first driver leg.",
            "items": {
              "$ref": "#/components/schemas/MetrcHubSuperTransfer"
            }
          }
        }
      },
      "IncomingTransferManifestReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "productName__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "description": "The transfers loaded for this report, nested. Requesting contentType=csv returns the flattened T3IncomingTransferManifest columns instead, one row per package.",
            "items": {
              "$ref": "#/components/schemas/MetrcIncomingSuperTransfer"
            }
          }
        }
      },
      "InlineSheetResponse": {
        "type": "object",
        "description": "Returned by a report endpoint when `contentType=googleSheets` and delivery is\n`inline` (the default).\n\nThe status is `302` and the `Location` header holds the same URL as `sheetUrl`, so\na browser follows it straight to the sheet and never reads this body. It exists for\nclients that do not follow redirects: without it, the only machine-readable copy of\nthe link would be a header those clients discard.\n\nThe sheet is created and populated during the request, so by the time this is\nreturned the report is already in it. Who can open it is controlled by\n`sheetVisibility`, which defaults to anyone-with-the-link.\n\nEvery request creates a new sheet, and sheets are never deleted. This suits one-off\nexports; for a recurring or scheduled pull use `csv`.\n",
        "required": [
          "sheetUrl",
          "sheetId"
        ],
        "properties": {
          "sheetUrl": {
            "type": "string",
            "format": "uri",
            "description": "The sheet's web view link, identical to the `Location` header.\n",
            "example": "https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit"
          },
          "sheetId": {
            "type": "string",
            "description": "The Google Drive file ID, for callers that want to address the sheet through\nthe Google Sheets API rather than open it in a browser.\n",
            "example": "1AbCdEfGhIjKlMnOpQrStUvWxYz"
          }
        }
      },
      "ItemImageFileType": {
        "type": "string",
        "description": "Category of the image file",
        "example": "ItemProductImage",
        "enum": [
          "ItemLabelImage",
          "ItemPackagingImage",
          "ItemProductImage"
        ]
      },
      "JWTData": {
        "type": "object",
        "properties": {
          "authMode": {
            "type": "string",
            "example": "CREDENTIALS"
          },
          "credentialKey": {
            "type": "string",
            "example": "mo.metrc.com__MyMetrcUsername"
          },
          "hasT3plus": {
            "type": "boolean",
            "example": true
          },
          "t3plusSubscriptionTier": {
            "type": "string",
            "enum": [
              "manual",
              "basic",
              "team",
              "enterprise",
              "corporate"
            ],
            "example": "team",
            "nullable": true
          },
          "username": {
            "type": "string",
            "example": "MyMetrcUsername"
          },
          "hostname": {
            "type": "string",
            "example": "mo.metrc.com"
          }
        }
      },
      "LabTestingStates": {
        "type": "string",
        "example": "TestPassed",
        "enum": [
          "NotSubmitted",
          "SubmittedForTesting",
          "TestFailed",
          "TestPassed",
          "TestingInProgress",
          "AwaitingConfirmation",
          "RetestFailed",
          "RetestPassed",
          "Remediated",
          "SelectedForRandomTesting",
          "NotRequired",
          "ProcessValidated"
        ],
        "nullable": false
      },
      "MetrcAddPackageNotePayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "The package ID",
              "example": 12345
            },
            "note": {
              "type": "string",
              "description": "The note to add to this package",
              "example": "This is a package note"
            }
          },
          "required": [
            "id",
            "note"
          ],
          "additionalProperties": false
        }
      },
      "MetrcAdjustPackagesInputsResponse": {
        "type": "object",
        "properties": {
          "actionReasons": {
            "type": "array",
            "description": "Available reasons for package adjustment.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "example": 1
                },
                "name": {
                  "type": "string",
                  "example": "Theft"
                },
                "forPackageAdjustments": {
                  "type": "boolean",
                  "example": true
                },
                "requiresNote": {
                  "type": "boolean",
                  "example": true
                }
              }
            }
          },
          "packages": {
            "type": "array",
            "description": "The packages available for adjustment.",
            "items": {
              "$ref": "#/components/schemas/MetrcPackage"
            }
          },
          "unitsOfMeasure": {
            "type": "array",
            "description": "Available units of measure for adjustment.",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          },
          "details": {
            "type": "array",
            "description": "Default adjustment values for each package.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "example": 16131
                },
                "adjustmentQuantity": {
                  "type": "number",
                  "example": 0
                },
                "adjustmentUnitOfMeasureId": {
                  "type": "integer",
                  "example": 0
                },
                "adjustmentReasonId": {
                  "type": "integer",
                  "nullable": true
                },
                "reasonNote": {
                  "type": "string",
                  "nullable": true
                },
                "adjustmentDate": {
                  "type": "string",
                  "nullable": true
                },
                "finishPackage": {
                  "type": "boolean",
                  "example": false
                },
                "finishDate": {
                  "type": "string",
                  "nullable": true
                },
                "isFinishedGood": {
                  "type": "boolean",
                  "example": false
                }
              }
            }
          }
        }
      },
      "MetrcAdjustPackagesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "format": "int32",
              "description": "The package ID to adjust.",
              "example": 16131
            },
            "isFinishedGood": {
              "type": "boolean",
              "description": "Whether this package is a finished good.",
              "example": false
            },
            "currentQuantity": {
              "type": "number",
              "format": "float",
              "description": "The current quantity of the package before adjustment.",
              "example": 16
            },
            "currentQuantityUom": {
              "type": "string",
              "description": "The current unit of measure name.",
              "example": "Grams"
            },
            "adjustmentQuantity": {
              "type": "number",
              "format": "float",
              "description": "The quantity to adjust by (positive to increase, negative to decrease).",
              "example": 1
            },
            "adjustmentUnitOfMeasureId": {
              "type": "integer",
              "format": "int32",
              "description": "Unit of measure ID for the adjustment.\n\nTo find eligible units of measure, use the [Adjust Package Inputs](#/Package%20Adjustment/get_v2_packages_adjust_inputs)\nendpoint.\n",
              "example": 4
            },
            "newQuantity": {
              "type": "number",
              "format": "float",
              "description": "The expected new quantity after adjustment.",
              "example": 17
            },
            "newQuantityUom": {
              "type": "string",
              "description": "The new unit of measure name.",
              "example": "Grams"
            },
            "adjustmentReasonId": {
              "type": "integer",
              "format": "int32",
              "description": "The reason ID for this adjustment.\n\nTo find eligible adjustment reasons, use the [Adjust Package Inputs](#/Package%20Adjustment/get_v2_packages_adjust_inputs)\nendpoint.\n",
              "example": 1
            },
            "reasonNote": {
              "type": "string",
              "description": "Note explaining the reason for adjustment.",
              "example": "note"
            },
            "adjustmentDate": {
              "type": "string",
              "format": "date",
              "description": "The date of the adjustment.",
              "example": "2026-04-02"
            },
            "finishDate": {
              "type": "string",
              "description": "Optional finish date. Pass empty string if not finishing the package.",
              "example": ""
            }
          },
          "required": [
            "id",
            "adjustmentQuantity",
            "adjustmentUnitOfMeasureId",
            "newQuantity",
            "adjustmentReasonId",
            "reasonNote",
            "adjustmentDate"
          ],
          "additionalProperties": false
        }
      },
      "MetrcArchiveTransferTemplatePayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The transfer template ID",
            "example": 12345
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "MetrcChangePlantGrowthPhasePayload": {
        "type": "array",
        "description": "Batch of plants to move between growth phases, most commonly Vegetative to\nFlowering.\n\n`newLocationId` and `newTagId` are required keys but accept `null`. Metrc\nexpects to see them whether or not the plant is being moved or retagged.\n",
        "items": {
          "type": "object",
          "properties": {
            "growthDate": {
              "type": "string",
              "format": "date",
              "description": "The date the plant entered the new growth phase.",
              "example": "2026-08-26"
            },
            "growthPhase": {
              "type": "string",
              "enum": [
                "Vegetative",
                "Flowering"
              ],
              "description": "The growth phase to move the plant into.",
              "example": "Flowering"
            },
            "id": {
              "type": "integer",
              "description": "Plant ID changing phase.\n\nTo find eligible plants, use the [Vegetative Plants](#/Plants/get_v2_plants_vegetative)\nendpoint.\n",
              "example": 987654
            },
            "newLocationId": {
              "type": "integer",
              "nullable": true,
              "description": "Location ID to move the plant into, or `null` to leave it in place.\n",
              "example": null
            },
            "newTagId": {
              "type": "integer",
              "nullable": true,
              "description": "Replacement plant tag ID, or `null` to keep the current tag.\n",
              "example": null
            }
          },
          "required": [
            "growthDate",
            "growthPhase",
            "id",
            "newLocationId",
            "newTagId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreateItemInputsResponse": {
        "type": "object",
        "properties": {
          "adding": {
            "type": "boolean",
            "description": "Indicates if items are being added.",
            "example": true
          },
          "items": {
            "type": "array",
            "description": "List of items.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "itemBrands": {
            "type": "array",
            "description": "List of item brands.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "itemCategories": {
            "type": "array",
            "description": "List of item categories.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "Unique identifier of the item category.",
                  "example": 301
                },
                "name": {
                  "type": "string",
                  "description": "Name of the item category.",
                  "example": "Biomass"
                },
                "productCategoryType": {
                  "type": "string",
                  "description": "Type of the product category.",
                  "example": "ShakeTrim"
                },
                "productCategoryTypeName": {
                  "type": "string",
                  "description": "Display name of the product category type.",
                  "example": "ShakeTrim"
                },
                "itemCategoryTypeName": {
                  "type": "string",
                  "description": "Display name of the item category type.",
                  "example": "ShakeTrim"
                },
                "quantityType": {
                  "type": "string",
                  "description": "Type of quantity measurement.",
                  "example": "WeightBased"
                },
                "quantityTypeName": {
                  "type": "string",
                  "description": "Display name of the quantity type.",
                  "example": "WeightBased"
                },
                "defaultLabTestingStateName": {
                  "type": "string",
                  "description": "Default lab testing state name.",
                  "example": "NotSubmitted"
                },
                "patientPurchaseAmountMultiplier": {
                  "type": "number",
                  "description": "Multiplier for patient purchase amount.",
                  "example": 1
                },
                "requiresApproval": {
                  "type": "boolean",
                  "description": "Indicates if item requires approval.",
                  "example": false
                },
                "requiresStrain": {
                  "type": "boolean",
                  "description": "Indicates if a strain is required.",
                  "example": false
                },
                "requiresItemBrand": {
                  "type": "boolean",
                  "description": "Indicates if an item brand is required.",
                  "example": false
                },
                "requiresAdministrationMethod": {
                  "type": "boolean",
                  "description": "Indicates if an administration method is required.",
                  "example": false
                },
                "requiresUnitCbdPercent": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD percent is required.",
                  "example": false
                },
                "requiresUnitCbdContent": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD content is required.",
                  "example": false
                },
                "requiresUnitCbdContentDose": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD content dose is required.",
                  "example": false
                },
                "requiresUnitCbdAPercent": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD-A percent is required.",
                  "example": false
                },
                "requiresUnitCbdAContent": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD-A content is required.",
                  "example": false
                },
                "requiresUnitCbdAContentDose": {
                  "type": "boolean",
                  "description": "Indicates if unit CBD-A content dose is required.",
                  "example": false
                },
                "requiresUnitThcPercent": {
                  "type": "boolean",
                  "description": "Indicates if unit THC percent is required.",
                  "example": false
                },
                "requiresUnitThcContent": {
                  "type": "boolean",
                  "description": "Indicates if unit THC content is required.",
                  "example": false
                },
                "optionalUnitThcContent": {
                  "type": "boolean",
                  "description": "Indicates if unit THC content is optional.",
                  "nullable": true
                },
                "requiresUnitThcContentDose": {
                  "type": "boolean",
                  "description": "Indicates if unit THC content dose is required.",
                  "example": false
                },
                "requiresUnitThcAPercent": {
                  "type": "boolean",
                  "description": "Indicates if unit THC-A percent is required.",
                  "example": false
                },
                "requiresUnitThcAContent": {
                  "type": "boolean",
                  "description": "Indicates if unit THC-A content is required.",
                  "example": false
                },
                "requiresUnitThcAContentDose": {
                  "type": "boolean",
                  "description": "Indicates if unit THC-A content dose is required.",
                  "example": false
                },
                "requiresUnitVolume": {
                  "type": "boolean",
                  "description": "Indicates if unit volume is required.",
                  "example": false
                },
                "requiresUnitWeight": {
                  "type": "boolean",
                  "description": "Indicates if unit weight is required.",
                  "example": false
                },
                "requiresServingSize": {
                  "type": "boolean",
                  "description": "Indicates if serving size is required.",
                  "example": false
                },
                "requiresSupplyDurationDays": {
                  "type": "boolean",
                  "description": "Indicates if supply duration days is required.",
                  "example": false
                },
                "requiresNumberOfDoses": {
                  "type": "boolean",
                  "description": "Indicates if number of doses is required.",
                  "example": false
                },
                "calculateUnitQuantity": {
                  "type": "boolean",
                  "description": "Indicates if unit quantity should be calculated.",
                  "example": false
                },
                "unitQuantityMultiplier": {
                  "type": "number",
                  "description": "Multiplier for unit quantity calculation.",
                  "nullable": true
                },
                "unitQuantityUnitOfMeasureAbbreviation": {
                  "type": "string",
                  "description": "Unit of measure abbreviation for unit quantity.",
                  "nullable": true
                },
                "requiresPublicIngredients": {
                  "type": "boolean",
                  "description": "Indicates if public ingredients are required.",
                  "example": false
                },
                "requiresDescription": {
                  "type": "boolean",
                  "description": "Indicates if a description is required.",
                  "example": false
                },
                "requiresAllergens": {
                  "type": "boolean",
                  "description": "Indicates if allergens are required.",
                  "example": false
                },
                "requiresProductPhotos": {
                  "type": "integer",
                  "description": "Number of product photos required.",
                  "example": 0
                },
                "requiresProductPhotoDescription": {
                  "type": "boolean",
                  "description": "Indicates if product photo description is required.",
                  "example": false
                },
                "requiresLabelPhotos": {
                  "type": "integer",
                  "description": "Number of label photos required.",
                  "example": 0
                },
                "requiresLabelPhotoDescription": {
                  "type": "boolean",
                  "description": "Indicates if label photo description is required.",
                  "example": false
                },
                "requiresPackagingPhotos": {
                  "type": "integer",
                  "description": "Number of packaging photos required.",
                  "example": 0
                },
                "requiresPackagingPhotoDescription": {
                  "type": "boolean",
                  "description": "Indicates if packaging photo description is required.",
                  "example": false
                },
                "canContainSeeds": {
                  "type": "boolean",
                  "description": "Indicates if the item can contain seeds.",
                  "example": true
                },
                "canBePreTreated": {
                  "type": "boolean",
                  "description": "Indicates if the item can be pre-treated.",
                  "example": false
                },
                "canBeRemediated": {
                  "type": "boolean",
                  "description": "Indicates if the item can be remediated.",
                  "example": true
                },
                "canBeDecontaminated": {
                  "type": "boolean",
                  "description": "Indicates if the item can be decontaminated.",
                  "example": false
                },
                "canBeDestroyed": {
                  "type": "boolean",
                  "description": "Indicates if the item can be destroyed.",
                  "example": false
                },
                "useItemWeightAsPatientFlowerPurchased": {
                  "type": "boolean",
                  "description": "Indicates if item weight is used as patient flower purchased.",
                  "example": true
                },
                "useUnitTHCContentAsPatientFlowerPurchased": {
                  "type": "boolean",
                  "description": "Indicates if unit THC content is used as patient flower purchased.",
                  "nullable": true
                },
                "useItemWeightAsPatientConcentratePurchased": {
                  "type": "boolean",
                  "description": "Indicates if item weight is used as patient concentrate purchased.",
                  "example": false
                },
                "useItemWeightAsPatientInfusedPurchased": {
                  "type": "boolean",
                  "description": "Indicates if item weight is used as patient infused purchased.",
                  "example": false
                },
                "expirationDateConfiguration": {
                  "type": "string",
                  "description": "Expiration date configuration setting.",
                  "example": "Off"
                },
                "expirationConfigurationState": {
                  "type": "string",
                  "description": "Expiration configuration state.",
                  "nullable": true
                },
                "sellByDateConfiguration": {
                  "type": "string",
                  "description": "Sell by date configuration setting.",
                  "example": "Off"
                },
                "sellByConfigurationState": {
                  "type": "string",
                  "description": "Sell by configuration state.",
                  "nullable": true
                },
                "useByDateConfiguration": {
                  "type": "string",
                  "description": "Use by date configuration setting.",
                  "example": "Off"
                },
                "useByConfigurationState": {
                  "type": "string",
                  "description": "Use by configuration state.",
                  "nullable": true
                },
                "expirationDateDaysInAdvance": {
                  "type": "integer",
                  "description": "Number of days in advance for expiration date.",
                  "nullable": true
                },
                "sellByDateDaysInAdvance": {
                  "type": "integer",
                  "description": "Number of days in advance for sell by date.",
                  "nullable": true
                },
                "useByDateDaysInAdvance": {
                  "type": "integer",
                  "description": "Number of days in advance for use by date.",
                  "nullable": true
                },
                "minConsecutiveSourcesForRTA": {
                  "type": "integer",
                  "description": "Minimum consecutive sources for RTA.",
                  "nullable": true
                },
                "minDaysForRTA": {
                  "type": "integer",
                  "description": "Minimum days for RTA.",
                  "nullable": true
                },
                "maxDaysForRecoveryAfterFailure": {
                  "type": "integer",
                  "description": "Maximum days for recovery after failure.",
                  "nullable": true
                },
                "maxDaystoReachMinSources": {
                  "type": "integer",
                  "description": "Maximum days to reach minimum sources.",
                  "nullable": true
                },
                "minNewPassesInRecoveryWindow": {
                  "type": "integer",
                  "description": "Minimum new passes in recovery window.",
                  "nullable": true
                },
                "maxDaysToMaintainRTA": {
                  "type": "integer",
                  "description": "Maximum days to maintain RTA.",
                  "nullable": true
                },
                "maxRepackageDistanceFromSource": {
                  "type": "integer",
                  "description": "Maximum repackage distance from source.",
                  "nullable": true
                },
                "maxDaysWithoutTestedSource": {
                  "type": "integer",
                  "description": "Maximum days without a tested source.",
                  "nullable": true
                },
                "facilityTypes": {
                  "type": "array",
                  "description": "List of facility types for this item category.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "productCategoryId": {
                        "type": "integer",
                        "description": "Unique identifier of the product category.",
                        "example": 301
                      },
                      "facilityTypeId": {
                        "type": "integer",
                        "description": "Unique identifier of the facility type.",
                        "example": 201
                      },
                      "facilityTypeName": {
                        "type": "string",
                        "description": "Name of the facility type.",
                        "example": "Comprehensive Cultivator"
                      },
                      "canCreateFromProductionBatch": {
                        "type": "boolean",
                        "description": "Indicates if items can be created from a production batch.",
                        "example": true
                      },
                      "canCreateFromHarvestBatch": {
                        "type": "boolean",
                        "description": "Indicates if items can be created from a harvest batch.",
                        "example": true
                      },
                      "includeInItemCatalog": {
                        "type": "boolean",
                        "description": "Indicates if the item is included in the item catalog.",
                        "example": false
                      }
                    }
                  }
                },
                "requiresProductPDFDocuments": {
                  "type": "integer",
                  "description": "Number of product PDF documents required.",
                  "example": 0
                }
              }
            }
          },
          "processingJobCategories": {
            "type": "array",
            "description": "List of processing job categories.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "processingJobTypes": {
            "type": "array",
            "description": "List of processing job types.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "strains": {
            "type": "array",
            "description": "List of available strains for item creation.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "Unique identifier of the strain.",
                  "example": 12345
                },
                "name": {
                  "type": "string",
                  "description": "Name of the strain.",
                  "example": "Pineapple Express"
                },
                "testingStatus": {
                  "type": "string",
                  "description": "Testing status of the strain.",
                  "example": "ThirdParty"
                },
                "thcLevel": {
                  "type": "number",
                  "description": "THC level of the strain.",
                  "nullable": true
                },
                "cbdLevel": {
                  "type": "number",
                  "description": "CBD level of the strain.",
                  "nullable": true
                },
                "indicaPercentage": {
                  "type": "number",
                  "description": "Indica percentage of the strain.",
                  "example": 100
                },
                "sativaPercentage": {
                  "type": "number",
                  "description": "Sativa percentage of the strain.",
                  "example": 0
                },
                "isUsed": {
                  "type": "boolean",
                  "description": "Indicates if the strain is in use.",
                  "example": true
                },
                "isArchived": {
                  "type": "boolean",
                  "description": "Indicates if the strain is archived.",
                  "example": false
                }
              }
            }
          },
          "unitsOfMeasure": {
            "type": "array",
            "description": "List of available units of measure for item creation.",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          },
          "productBrands": {
            "type": "array",
            "description": "List of available product brands.",
            "items": {
              "type": "object"
            }
          },
          "details": {
            "type": "array",
            "description": "List of item details.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          }
        }
      },
      "MetrcCreateItemsPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the item",
              "example": "Blue Dream Flower"
            },
            "productCategoryId": {
              "type": "integer",
              "description": "The product category ID",
              "example": 1
            },
            "strainId": {
              "type": "integer",
              "description": "The strain ID",
              "example": 737
            },
            "unitOfMeasureId": {
              "type": "integer",
              "description": "The unit of measure ID",
              "example": 2
            },
            "administrationMethod": {
              "type": "string",
              "description": "The administration method",
              "example": ""
            },
            "allergens": {
              "type": "string",
              "description": "Allergens information",
              "example": ""
            },
            "description": {
              "type": "string",
              "description": "The item description",
              "example": ""
            },
            "itemBrandId": {
              "type": "integer",
              "description": "The item brand ID",
              "example": null
            },
            "numberOfDoses": {
              "type": "integer",
              "description": "The number of doses",
              "example": null
            },
            "publicIngredients": {
              "type": "string",
              "description": "Public ingredients information",
              "example": ""
            },
            "servingSize": {
              "type": "string",
              "description": "The serving size",
              "example": ""
            },
            "supplyDurationDays": {
              "type": "integer",
              "description": "The supply duration in days",
              "example": null
            },
            "unitCbdAContentDoseUoMId": {
              "type": "integer",
              "description": "The unit CBD-A content dose unit of measure ID",
              "example": null
            },
            "unitCbdAContentUoMId": {
              "type": "integer",
              "description": "The unit CBD-A content unit of measure ID",
              "example": null
            },
            "unitCbdContentDoseUoMId": {
              "type": "integer",
              "description": "The unit CBD content dose unit of measure ID",
              "example": null
            },
            "unitCbdContentUoMId": {
              "type": "integer",
              "description": "The unit CBD content unit of measure ID",
              "example": null
            },
            "unitThcAContentDoseUoMId": {
              "type": "integer",
              "description": "The unit THC-A content dose unit of measure ID",
              "example": null
            },
            "unitThcAContentUoMId": {
              "type": "integer",
              "description": "The unit THC-A content unit of measure ID",
              "example": null
            },
            "unitThcContent": {
              "type": "number",
              "description": "The unit THC content",
              "example": null
            },
            "unitThcContentDoseUoMId": {
              "type": "integer",
              "description": "The unit THC content dose unit of measure ID",
              "example": null
            },
            "unitThcContentUoMId": {
              "type": "integer",
              "description": "The unit THC content unit of measure ID",
              "example": null
            },
            "unitVolume": {
              "type": "number",
              "description": "The unit volume",
              "example": null
            },
            "unitVolumeUoMId": {
              "type": "integer",
              "description": "The unit volume unit of measure ID",
              "example": null
            },
            "unitWeight": {
              "type": "number",
              "description": "The unit weight",
              "example": null
            },
            "unitWeightUoMId": {
              "type": "integer",
              "description": "The unit weight unit of measure ID",
              "example": null
            },
            "productPhotoDescription": {
              "type": "string",
              "description": "Description for the product photo",
              "example": ""
            },
            "productPhotos": {
              "type": "array",
              "description": "Product photos to attach to the item",
              "items": {
                "$ref": "#/components/schemas/MetrcItemImageReference"
              }
            },
            "labelPhotoDescription": {
              "type": "string",
              "description": "Description for the label photo",
              "example": ""
            },
            "labelPhotos": {
              "type": "array",
              "description": "Label photos to attach to the item",
              "items": {
                "$ref": "#/components/schemas/MetrcItemImageReference"
              }
            },
            "packagingPhotoDescription": {
              "type": "string",
              "description": "Description for the packaging photo",
              "example": ""
            },
            "packagingPhotos": {
              "type": "array",
              "description": "Packaging photos to attach to the item",
              "items": {
                "$ref": "#/components/schemas/MetrcItemImageReference"
              }
            },
            "itemIngredients": {
              "type": "array",
              "description": "Ingredients for the item",
              "items": {
                "$ref": "#/components/schemas/MetrcItemIngredientEntry"
              }
            }
          },
          "required": [
            "name",
            "productCategoryId",
            "unitOfMeasureId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreatePackageInputsResponse": {
        "type": "object",
        "properties": {
          "allowedProductionLabTestingStates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LabTestingStates"
            }
          },
          "allowedProductionProductCategoryIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              1,
              2,
              3
            ]
          },
          "details": {
            "type": "string",
            "nullable": true
          },
          "harvestBatches": {
            "type": "string",
            "nullable": true
          },
          "growthPhase": {
            "type": "integer",
            "format": "int32",
            "example": 0
          },
          "isProductDestruction": {
            "type": "boolean",
            "example": false
          },
          "itemCategoryIds": {
            "type": "string",
            "nullable": true
          },
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": []
          },
          "labTestBatches": {
            "type": "string",
            "nullable": true
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcLocation"
            }
          },
          "sublocations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "packages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": []
          },
          "patientAffiliations": {
            "type": "string",
            "nullable": true
          },
          "plantBatches": {
            "type": "string",
            "nullable": true
          },
          "plants": {
            "type": "string",
            "nullable": true
          },
          "remediationMethods": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcRemediationMethod"
            }
          },
          "submitForTesting": {
            "type": "boolean",
            "example": false
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcTag"
            }
          },
          "unitsOfMeasure": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          }
        }
      },
      "MetrcCreatePackagesFromPackagesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "actualDate": {
              "type": "string",
              "format": "date",
              "description": "The date of the package creation.",
              "example": "2024-08-08"
            },
            "ingredients": {
              "type": "array",
              "description": "List of package ingredients used to create this new package.",
              "items": {
                "type": "object",
                "properties": {
                  "finishDate": {
                    "type": "string",
                    "format": "date",
                    "description": "If you are using the rest of an ingredient package and wish to finish it, pass a finish date.\n",
                    "example": "2024-08-08"
                  },
                  "packageId": {
                    "type": "integer",
                    "format": "int32",
                    "description": "Package ID of the source ingredient package\nTo find source ingredient packages, use the [Source Packages](#/Create%20Package/get_v2_packages_create_source_packages) endpoint.\n",
                    "example": 5077333
                  },
                  "quantity": {
                    "type": "number",
                    "format": "float",
                    "description": "Quantity used from the ingredient package.",
                    "example": 56.3
                  },
                  "unitOfMeasureId": {
                    "type": "integer",
                    "description": "Unit of measure for the quantity",
                    "example": 4
                  }
                },
                "required": [
                  "packageId",
                  "quantity",
                  "unitOfMeasureId"
                ],
                "additionalProperties": false
              }
            },
            "itemId": {
              "type": "integer",
              "description": "Item ID of the item for the new package\n\nTo find eligible items, use the [Source Items](#/Create%20Package/get_v2_packages_create_source_items)\nendpoint.\n\nAlternately, if `useSameItem` is true, the `itemId` must be copied from the source package.\n",
              "example": 1160223
            },
            "useSameItem": {
              "type": "boolean",
              "description": "Indicates if the source package's item should be used for the new package.\n\nUsed when this license does not own the item, but needs to create new sublot packages. \n\n**Note:** you must still pass the `itemId` field with the item ID from the source package.\n"
            },
            "locationId": {
              "type": "integer",
              "description": "Location ID of the location for the new package\nTo find eligible source locations, use the [Create Package Inputs](#/Create%20Package/get_v2_packages_create_inputs) endpoint.\n**Note**: This is not required in some states. ",
              "example": 50901
            },
            "sublocationId": {
              "type": "integer",
              "description": "Sublocation ID of the sublocation for the new package\n\nTo find eligible source sublocations, use the [Create Package Inputs](#/Create%20Package/get_v2_packages_create_inputs)\nendpoint.\n\n**Note**: This is not used in some states, and not required in some states.\n",
              "example": 30123
            },
            "note": {
              "type": "string",
              "description": "Notes about the package creation, if needed.\n",
              "example": "This is a package note"
            },
            "productionBatchNumber": {
              "type": "string",
              "description": "The production batch number of the new package, if needed.",
              "example": "BATCH 1234"
            },
            "quantity": {
              "type": "number",
              "format": "float",
              "description": "Quantity of the new package.",
              "example": 123.45
            },
            "tagId": {
              "type": "integer",
              "description": "Tag ID of the tag used for the new package\nTo find eligible source tags, use the [Create Package Inputs](#/Create%20Package/get_v2_packages_create_inputs) endpoint.\n",
              "example": 1527333
            },
            "unitOfMeasureId": {
              "type": "integer",
              "description": "Unit of measure identifier for the package.",
              "example": 1
            },
            "expirationDate": {
              "type": "string",
              "format": "date",
              "description": "The expiration date of the package, if needed. \n*Only applicable in some Metrc states*\n",
              "example": ""
            },
            "useByDate": {
              "type": "string",
              "format": "date",
              "description": "The use by date of the package, if needed.\n*Only applicable in some Metrc states*\n",
              "example": ""
            },
            "isDonation": {
              "type": "boolean",
              "description": "Indicates if the package is a donation.\n\n*Only applicable in some Metrc states.* Do not set this value if not needed.\n",
              "example": true
            },
            "isTradeSample": {
              "type": "boolean",
              "description": "Indicates if the package is a trade sample.\n\n*Only applicable in some Metrc states.* Do not set this value if not needed.\n",
              "example": true
            },
            "sellByDate": {
              "type": "string",
              "format": "date",
              "description": "The sell by date of the package, if needed.\n*Only applicable in some Metrc states*\n",
              "example": "2024-08-08"
            }
          },
          "required": [
            "actualDate",
            "ingredients",
            "quantity",
            "tagId",
            "unitOfMeasureId",
            "itemId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreatePlantBatchesFromPackagesInputsResponse": {
        "type": "object",
        "description": "Option lists for building a\n[Create Plant Batches From Packages](#/Plant%20Batches/post_v2_plantbatches_create_from_packages)\npayload.\n\nSeveral fields are `null` in most states. Metrc populates them only where the\nstate's workflow uses them \u2014 notably `tags`, which is populated in California,\nwhere a plant batch is identified by a tag, and null elsewhere.\n",
        "properties": {
          "plantBatchTypes": {
            "type": "array",
            "description": "Plant batch types valid for this license, supplying `plantBatchTypeId`.\n",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "Numeric ID of the plant batch type.",
                  "example": 1
                },
                "name": {
                  "type": "string",
                  "description": "Display name of the plant batch type.",
                  "example": "Clone"
                },
                "canBeCloned": {
                  "type": "boolean",
                  "description": "Whether plants of this type may be cloned.",
                  "example": true
                },
                "lastModified": {
                  "type": "string",
                  "format": "date-time",
                  "description": "When the plant batch type was last modified."
                }
              }
            }
          },
          "strains": {
            "type": "array",
            "description": "Strains available to plant, supplying `strainId`.",
            "items": {
              "$ref": "#/components/schemas/MetrcStrain"
            }
          },
          "locations": {
            "type": "array",
            "description": "Locations available to the new plant batch, supplying `locationId`.\nFilter on `forPlantBatches` to exclude locations that cannot hold one.\n",
            "items": {
              "$ref": "#/components/schemas/MetrcLocation"
            }
          },
          "unitsOfMeasure": {
            "type": "array",
            "description": "Units available for `quantity`, supplying `unitOfMeasureId`.",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          },
          "packages": {
            "type": "array",
            "description": "Source packages the plants may be drawn from.",
            "items": {
              "type": "object"
            }
          },
          "details": {
            "type": "array",
            "description": "Default values Metrc pre-populates the form with.",
            "items": {
              "type": "object"
            }
          },
          "growthPhase": {
            "type": "integer",
            "description": "Numeric ID of the growth phase new plantings enter.",
            "example": 0
          },
          "tags": {
            "type": "array",
            "nullable": true,
            "description": "Plant batch tags, supplying `tagId`. **Populated in California only**,\nwhere the batch name is the tag's label. `null` in states that use a\nfree-text batch name.\n",
            "items": {
              "$ref": "#/components/schemas/MetrcTag"
            }
          },
          "plants": {
            "type": "array",
            "nullable": true,
            "description": "Unused by this modal in most states.",
            "items": {
              "type": "object"
            }
          },
          "plantBatches": {
            "type": "array",
            "nullable": true,
            "description": "Unused by this modal in most states.",
            "items": {
              "type": "object"
            }
          },
          "sublocations": {
            "type": "array",
            "nullable": true,
            "description": "Sublocations, where the state and facility use them.",
            "items": {
              "type": "object"
            }
          },
          "patientAffiliations": {
            "type": "array",
            "nullable": true,
            "description": "Patient affiliations, where the state uses them.",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "MetrcCreatePlantBatchesFromPackagesPayload": {
        "type": "array",
        "description": "Batch of plant batches to create. Each entry draws from a source package and\ncreates an immature plant batch of `plantsCount` plants.\n\n**How much is drawn depends on the source package.** When the source is a\nPlant Package, `plantsCount` is the draw and `quantity` is not used. For any\nother package Metrc requires an explicit `quantity` and `unitOfMeasureId`,\nand rejects the request without them:\n\n> Package ABCDEF0100000200000000041 is a non-Plant Package and requires an\n> Adjustment Amount to be specified.\n\nSupplying both is always safe, so pass them unless the source is known to be\na Plant Package.\n\nThe new plants are **immature**. To reach the Vegetative or Flowering state,\nfollow with [Promote Immature Plants](#/Plant%20Batches/post_v2_plantbatches_promote),\nwhich assigns a plant tag to each promoted plant.\n",
        "items": {
          "type": "object",
          "properties": {
            "actualDate": {
              "type": "string",
              "format": "date",
              "description": "The date the plant batch was created.",
              "example": "2026-08-26"
            },
            "plantedDate": {
              "type": "string",
              "format": "date",
              "description": "The date the plants were planted.",
              "example": "2026-08-26"
            },
            "locationId": {
              "type": "integer",
              "description": "Location ID for the new plant batch.\n\nTo find eligible locations, use the [Active Locations](#/Locations/get_v2_locations_active)\nendpoint.\n",
              "example": 12345
            },
            "packageId": {
              "type": "integer",
              "description": "Package ID of the source package the plants are drawn from.\n\nTo find eligible packages, use the [Active Packages](#/Packages/get_v2_packages_active)\nendpoint.\n",
              "example": 5077333
            },
            "plantBatchName": {
              "type": "string",
              "minLength": 1,
              "description": "Name for the new plant batch.\n\nWhere a state identifies a plant batch by tag, pass that tag's label,\nwhich you can read from the [Available Tags](#/Tags/get_v2_tags_available)\nendpoint. Elsewhere this is free text. Metrc takes a string either way.\n",
              "example": "AAAFF03000001F9000000003"
            },
            "plantBatchTypeId": {
              "type": "integer",
              "description": "Numeric ID of the plant batch type, such as Clone or Seed.",
              "example": 1
            },
            "plantsCount": {
              "type": "integer",
              "minimum": 1,
              "description": "How many plants the new batch contains. Also the amount drawn from the\nsource package when that package is a Plant Package.\n",
              "example": 25
            },
            "strainId": {
              "type": "integer",
              "description": "Strain ID for the new plants.\n\nTo find eligible strains, use the [Strains](#/Strains/get_v2_strains)\nendpoint.\n",
              "example": 737
            },
            "quantity": {
              "type": "number",
              "format": "float",
              "minimum": 0,
              "exclusiveMinimum": true,
              "description": "Amount drawn from the source package, called the Adjustment Amount by\nMetrc.\n\n**Required unless the source is a Plant Package**, where the draw comes\nfrom `plantsCount` instead. Omitting it for any other package type is\nrejected.\n",
              "example": 25
            },
            "unitOfMeasureId": {
              "type": "integer",
              "description": "Unit of measure for `quantity`, which must be the source package's own\nunit. Required whenever `quantity` is.\n",
              "example": 4
            }
          },
          "required": [
            "actualDate",
            "plantedDate",
            "locationId",
            "packageId",
            "plantBatchName",
            "plantBatchTypeId",
            "plantsCount",
            "strainId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreatePlantHarvestPayload": {
        "type": "array",
        "description": "Batch of plants to harvest. Each plant is removed from the Flowering state\nand rolled up into the harvest record identified by `harvestName`. Plants\nin the same batch \u2014 or in subsequent requests within the state-specific\nreuse window (typically 24 hours) \u2014 that share a `harvestName` are joined\ninto a single harvest on the Metrc side.\n",
        "items": {
          "type": "object",
          "properties": {
            "actualDate": {
              "type": "string",
              "format": "date",
              "description": "The date the harvest occurred.",
              "example": "2026-05-14"
            },
            "harvestName": {
              "type": "string",
              "description": "Name of the harvest batch. Use the same `harvestName` across rows (or\nacross requests, within the reuse window) to combine plants into a\nsingle harvest record.\n",
              "example": "MyHarvest-2026-05-14"
            },
            "id": {
              "type": "integer",
              "description": "Plant ID of a plant currently in the Flowering state.\n\nTo find eligible plants, use the [Flowering Plants](#/Plants/get_v2_plants_flowering)\nendpoint.\n",
              "example": 987654
            },
            "weight": {
              "type": "number",
              "format": "float",
              "minimum": 0,
              "exclusiveMinimum": true,
              "description": "Wet weight harvested from this plant.",
              "example": 1234.5
            },
            "dryingLocationId": {
              "type": "integer",
              "description": "Location ID of the drying-room location.\n\nTo find eligible locations, use the [Active Locations](#/Locations/get_v2_locations_active)\nendpoint.\n",
              "example": 12345
            },
            "unitOfWeightId": {
              "type": "integer",
              "description": "Numeric ID of the weight unit (grams, kilograms, ounces, pounds).",
              "example": 1
            }
          },
          "required": [
            "actualDate",
            "harvestName",
            "id",
            "weight",
            "dryingLocationId",
            "unitOfWeightId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreatePlantManicurePayload": {
        "type": "array",
        "description": "Batch of plants to manicure (partial harvest). Each plant remains alive in\nthe Flowering state and can be harvested or manicured again later. The\nmanicured material is rolled up into the harvest record identified by\n`harvestName`. Plants in the same batch \u2014 or in subsequent requests within\nthe state-specific reuse window (typically 24 hours) \u2014 that share a\n`harvestName` are joined into a single harvest on the Metrc side.\n",
        "items": {
          "type": "object",
          "properties": {
            "actualDate": {
              "type": "string",
              "format": "date",
              "description": "The date the manicure occurred.",
              "example": "2026-05-14"
            },
            "harvestName": {
              "type": "string",
              "description": "Name of the harvest batch the manicured material rolls up under. Use\nthe same `harvestName` across rows (or across requests, within the\nreuse window) to combine plants into a single harvest record.\n",
              "example": "MyManicure-2026-05-14"
            },
            "id": {
              "type": "integer",
              "description": "Plant ID of a plant currently in the Flowering state. The plant\nremains in Flowering after the manicure.\n\nTo find eligible plants, use the [Flowering Plants](#/Plants/get_v2_plants_flowering)\nendpoint.\n",
              "example": 987654
            },
            "weight": {
              "type": "number",
              "format": "float",
              "minimum": 0,
              "exclusiveMinimum": true,
              "description": "Wet weight of the material manicured from this plant.",
              "example": 120.0
            },
            "dryingLocationId": {
              "type": "integer",
              "description": "Location ID of the drying-room location.\n\nTo find eligible locations, use the [Active Locations](#/Locations/get_v2_locations_active)\nendpoint.\n",
              "example": 12345
            },
            "unitOfWeightId": {
              "type": "integer",
              "description": "Numeric ID of the weight unit (grams, kilograms, ounces, pounds).",
              "example": 1
            }
          },
          "required": [
            "actualDate",
            "harvestName",
            "id",
            "weight",
            "dryingLocationId",
            "unitOfWeightId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreateStrainsPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the strain",
              "example": "Blue Dream"
            },
            "cbdLevel": {
              "type": "number",
              "format": "int8",
              "description": "The strain's CBD Level",
              "example": 5
            },
            "thcLevel": {
              "type": "number",
              "format": "int8",
              "description": "The strain's THC Level",
              "example": 5
            },
            "indicaPercentage": {
              "type": "number",
              "format": "float",
              "description": "The percentage of indica in the strain",
              "example": 60.0
            },
            "sativaPercentage": {
              "type": "number",
              "format": "float",
              "description": "The percentage of sativa in the strain",
              "example": 40.0
            },
            "testingStatus": {
              "type": "string",
              "enum": [
                "None",
                "InHouse",
                "ThirdParty"
              ],
              "description": "The current testing status of the strain",
              "example": "None"
            }
          },
          "required": [
            "name",
            "cbdLevel",
            "thcLevel",
            "indicaPercentage",
            "sativaPercentage",
            "testingStatus"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreateTestingPackagesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "actualDate": {
              "type": "string",
              "format": "date",
              "description": "The date of the package creation.",
              "example": "2026-03-12"
            },
            "ingredients": {
              "type": "array",
              "description": "List of package ingredients used to create this new testing package.",
              "items": {
                "type": "object",
                "properties": {
                  "finishDate": {
                    "type": "string",
                    "format": "date",
                    "description": "If you are using the rest of an ingredient package and wish\nto finish it, pass a finish date.\n",
                    "example": "2026-03-12"
                  },
                  "packageId": {
                    "type": "integer",
                    "format": "int32",
                    "description": "Package ID of the source ingredient package.\n\nTo find source ingredient packages, use the [Source Packages](#/Package%20Testing/get_v2_packages_create_testing_source_packages)\nendpoint.\n",
                    "example": 27301
                  },
                  "quantity": {
                    "type": "number",
                    "format": "float",
                    "description": "Quantity used from the ingredient package.",
                    "example": 1
                  },
                  "unitOfMeasureId": {
                    "type": "integer",
                    "description": "Unit of measure for the quantity.",
                    "example": 4
                  }
                },
                "required": [
                  "packageId",
                  "quantity",
                  "unitOfMeasureId"
                ],
                "additionalProperties": false
              }
            },
            "itemId": {
              "type": "integer",
              "description": "Item ID of the item for the new testing package.\n\nTo find eligible items, use the [Source Items](#/Package%20Testing/get_v2_packages_create_testing_source_items)\nendpoint.\n\nAlternately, if `useSameItem` is true, the `itemId` must be copied from the source package.\n",
              "example": 6645
            },
            "useSameItem": {
              "type": "boolean",
              "description": "Indicates if the source package's item should be used for the new package.\n\nUsed when this license does not own the item, but needs to create new sublot packages.\n\n**Note:** you must still pass the `itemId` field with the item ID from the source package.\n"
            },
            "locationId": {
              "type": "integer",
              "description": "Location ID of the location for the new testing package.\n\nTo find eligible source locations, use the [Create Testing Package Inputs](#/Package%20Testing/get_v2_packages_create_testing_inputs)\nendpoint.\n",
              "example": 505
            },
            "note": {
              "type": "string",
              "description": "Notes about the package creation, if needed.",
              "example": ""
            },
            "quantity": {
              "type": "number",
              "format": "float",
              "description": "Quantity of the new testing package.",
              "example": 1
            },
            "tagId": {
              "type": "integer",
              "description": "Tag ID of the tag used for the new testing package.\n\nTo find eligible source tags, use the [Source Tags](#/Package%20Testing/get_v2_packages_create_testing_source_tags)\nendpoint.\n",
              "example": 513154
            },
            "unitOfMeasureId": {
              "type": "integer",
              "description": "Unit of measure identifier for the package.",
              "example": 4
            },
            "expirationDate": {
              "type": "string",
              "format": "date",
              "description": "The expiration date of the package, if needed.",
              "example": "2026-09-22"
            },
            "sellByDate": {
              "type": "string",
              "format": "date",
              "description": "The sell by date of the package, if needed.",
              "example": "2026-09-22"
            },
            "useByDate": {
              "type": "string",
              "format": "date",
              "description": "The use by date of the package, if needed.",
              "example": "2026-09-22"
            },
            "requiredLabTestBatches": {
              "type": "array",
              "description": "List of lab test batch IDs required for this testing package.\n\nTo find eligible lab test batches, use the [Lab Batches](#/Package%20Testing/get_v2_packages_create_testing_lab_batches)\nendpoint.\n",
              "items": {
                "type": "integer"
              },
              "example": [
                1
              ]
            }
          },
          "required": [
            "actualDate",
            "ingredients",
            "quantity",
            "tagId",
            "unitOfMeasureId",
            "itemId",
            "requiredLabTestBatches"
          ],
          "additionalProperties": false
        }
      },
      "MetrcCreateTransferInputsResponse": {
        "type": "object",
        "properties": {
          "adding": {
            "type": "boolean",
            "description": "Indicates if the entity is being added.",
            "example": true
          },
          "daysWholesalePriceCanEdit": {
            "type": "integer",
            "description": "Number of days the wholesale price can be edited.",
            "example": 0
          },
          "defaultPhoneNumberForQuestions": {
            "type": "string",
            "description": "Default phone number for questions.",
            "example": "5555551234"
          },
          "destinationFacilities": {
            "type": "array",
            "description": "List of destination facilities.",
            "items": {
              "type": "object"
            }
          },
          "details": {
            "type": "object",
            "description": "Additional details.",
            "nullable": true
          },
          "drivers": {
            "type": "array",
            "description": "List of drivers associated with the entity.",
            "items": {
              "$ref": "#/components/schemas/MetrcDriver"
            }
          },
          "editDeliveryDetailsOnly": {
            "type": "boolean",
            "description": "Indicates if only delivery details can be edited.",
            "example": false
          },
          "editWholesalePriceOnly": {
            "type": "boolean",
            "description": "Indicates if only the wholesale price can be edited.",
            "example": false
          },
          "facilities": {
            "type": "object",
            "description": "Details of the facilities."
          },
          "isOutgoingInactive": {
            "type": "boolean",
            "description": "Indicates if the outgoing status is inactive.",
            "example": false
          },
          "items": {
            "type": "object",
            "description": "List of items.",
            "nullable": true
          },
          "packages": {
            "type": "array",
            "description": "List of packages.",
            "items": {
              "type": "object"
            }
          },
          "selectedDeliveryIds": {
            "type": "array",
            "description": "List of selected delivery IDs.",
            "items": {
              "type": "integer"
            }
          },
          "selectedTransferIds": {
            "type": "array",
            "description": "List of selected transfer IDs.",
            "items": {
              "type": "integer"
            }
          },
          "selectedTransferTemplateIds": {
            "type": "object",
            "description": "List of selected transfer template IDs.",
            "nullable": true
          },
          "transferTypes": {
            "type": "array",
            "description": "List of transfer types.",
            "items": {
              "type": "object",
              "properties": {
                "facilityTypes": {
                  "type": "array",
                  "description": "List of facility types.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "facilityTypeId": {
                        "type": "integer",
                        "description": "Unique identifier of the facility type.",
                        "example": 1
                      },
                      "facilityTypeName": {
                        "type": "string",
                        "description": "Name of the facility type.",
                        "example": "Medical Cultivation"
                      }
                    }
                  }
                },
                "forExternalIncomingShipments": {
                  "type": "boolean",
                  "description": "Indicates if the transfer type is for external incoming shipments.",
                  "example": false
                },
                "forExternalOutgoingShipments": {
                  "type": "boolean",
                  "description": "Indicates if the transfer type is for external outgoing shipments.",
                  "example": false
                },
                "forLicensedShipments": {
                  "type": "boolean",
                  "description": "Indicates if the transfer type is for licensed shipments.",
                  "example": true
                },
                "id": {
                  "type": "integer",
                  "description": "Unique identifier of the transfer type.",
                  "example": 1
                },
                "maxDiscrepancyPercentage": {
                  "type": "number",
                  "description": "Maximum allowable discrepancy percentage.",
                  "nullable": true
                },
                "maximumWholesalePrice": {
                  "type": "number",
                  "description": "Maximum wholesale price allowed.",
                  "nullable": true
                },
                "minimumWholesalePrice": {
                  "type": "number",
                  "description": "Minimum wholesale price allowed.",
                  "nullable": true
                },
                "name": {
                  "type": "string",
                  "description": "Name of the transfer type.",
                  "example": "Affiliated Transfer"
                },
                "recipientAddressFieldsEnabled": {
                  "type": "boolean",
                  "description": "Indicates if recipient address fields are enabled.",
                  "example": true
                },
                "recipientLicenseNameFieldEnabled": {
                  "type": "boolean",
                  "description": "Indicates if the recipient license name field is enabled.",
                  "example": true
                },
                "recipientLicenseNumberFieldEnabled": {
                  "type": "boolean",
                  "description": "Indicates if the recipient license number field is enabled.",
                  "example": true
                },
                "recipientLicenseNumberFieldLabel": {
                  "type": "string",
                  "description": "Label for the recipient license number field.",
                  "example": "License No."
                },
                "requiresDestinationGrossWeight": {
                  "type": "boolean",
                  "description": "Indicates if the destination gross weight is required.",
                  "example": false
                },
                "requiresPackagesGrossWeight": {
                  "type": "boolean",
                  "description": "Indicates if the package gross weight is required.",
                  "example": true
                },
                "shipperAddressFieldsEnabled": {
                  "type": "boolean",
                  "description": "Indicates if the shipper address fields are enabled.",
                  "example": true
                },
                "shipperLicenseNameFieldEnabled": {
                  "type": "boolean",
                  "description": "Indicates if the shipper license name field is enabled.",
                  "example": true
                },
                "shipperLicenseNumberFieldEnabled": {
                  "type": "boolean",
                  "description": "Indicates if the shipper license number field is enabled.",
                  "example": true
                },
                "shipperLicenseNumberFieldLabel": {
                  "type": "string",
                  "description": "Label for the shipper license number field.",
                  "example": "License No."
                },
                "transactionType": {
                  "type": "string",
                  "description": "Type of transaction.",
                  "example": "Standard"
                },
                "transactionTypeName": {
                  "type": "string",
                  "description": "Name of the transaction type.",
                  "example": "Standard"
                },
                "transporterFieldsEnabled": {
                  "type": "boolean",
                  "description": "Indicates if transporter fields are enabled.",
                  "example": true
                }
              }
            }
          },
          "transporterFacilities": {
            "type": "array",
            "description": "List of transporter facilities.",
            "items": {
              "type": "object"
            },
            "example": []
          },
          "unitsOfMeasure": {
            "type": "array",
            "description": "List of units of measure.",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          },
          "vehicles": {
            "type": "array",
            "description": "List of vehicles associated with the facility.",
            "items": {
              "$ref": "#/components/schemas/MetrcVehicle"
            }
          }
        }
      },
      "MetrcCreateTransferLikeData": {
        "type": "object",
        "description": "A schema representing a shipment with details about destinations, transporters, and packages.",
        "required": [
          "destinations"
        ],
        "additionalProperties": false,
        "properties": {
          "destinations": {
            "type": "array",
            "description": "List of destinations for the shipment.",
            "items": {
              "type": "object",
              "required": [
                "estimatedArrivalDateTime",
                "estimatedDepartureDateTime",
                "plannedRoute",
                "recipientId",
                "transferTypeId"
              ],
              "additionalProperties": false,
              "properties": {
                "recipientId": {
                  "type": "number",
                  "format": "int32",
                  "description": "Facility ID of the destination facility.\n\nTo find eligible destination facilities, use the [Destinations](#/Create%20Transfer/get_v2_packages_create_transfer_destination_list)\nendpoint.\n",
                  "example": 123456
                },
                "plannedRoute": {
                  "type": "string",
                  "description": "Planned route for the shipment.",
                  "example": "Keep going, you can't miss it"
                },
                "transferTypeId": {
                  "type": "number",
                  "format": "int32",
                  "description": "Identifier for the type of transfer.",
                  "example": 8
                },
                "invoiceNumber": {
                  "type": "string",
                  "description": "Invoice number for this delivery. *Not all transfer types require this value.*\n\nThis value is only required if the `transferType` has `requiresInvoiceNumber=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                  "example": "123456-ABC"
                },
                "estimatedDepartureDateTime": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Estimated departure date and time.",
                  "example": "2023-05-23T21:22:35"
                },
                "estimatedArrivalDateTime": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Estimated arrival date and time.",
                  "example": "2023-05-23T21:22:35"
                },
                "grossWeight": {
                  "type": "number",
                  "format": "float",
                  "description": "Gross weight of the transfer. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                  "example": 123.45
                },
                "grossUnitOfWeightId": {
                  "type": "number",
                  "format": "int32",
                  "description": "Identifier for the unit of weight. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                  "example": 4
                },
                "transporters": {
                  "type": "array",
                  "description": "List of transporters for the transfer.",
                  "items": {
                    "type": "object",
                    "required": [
                      "transporterId",
                      "phoneNumberForQuestions",
                      "transporterDetails"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "transporterId": {
                        "type": "number",
                        "format": "int32",
                        "description": "Facility ID of the transporter facility. \n\nTo find eligible transporter facilities, use the [Transporters](#/Create%20Transfer/get_v2_packages_create_transfer_transporter_list) endpoint.\n",
                        "example": 12345
                      },
                      "phoneNumberForQuestions": {
                        "type": "string",
                        "description": "Phone number for inquiries.",
                        "example": "5555551234"
                      },
                      "transporterDetails": {
                        "type": "array",
                        "description": "Details of the transporter.",
                        "items": {
                          "type": "object",
                          "required": [
                            "driverName",
                            "driverOccupationalLicenseNumber",
                            "driverLicenseNumber",
                            "vehicleMake",
                            "vehicleModel",
                            "vehicleLicensePlateNumber"
                          ],
                          "additionalProperties": false,
                          "properties": {
                            "driverName": {
                              "type": "string",
                              "description": "Name of the driver.",
                              "example": "Jane Doe"
                            },
                            "driverOccupationalLicenseNumber": {
                              "type": "string",
                              "description": "Occupational license number of the driver.",
                              "example": "LIC12345"
                            },
                            "driverLicenseNumber": {
                              "type": "string",
                              "description": "Driver's license number.",
                              "example": "D1234567"
                            },
                            "driverLayoverLeg": {
                              "type": "string",
                              "description": "Layover leg details (if any).",
                              "example": "",
                              "nullable": true
                            },
                            "vehicleMake": {
                              "type": "string",
                              "description": "Make of the vehicle.",
                              "example": "Ford"
                            },
                            "vehicleModel": {
                              "type": "string",
                              "description": "Model of the vehicle.",
                              "example": "GT"
                            },
                            "vehicleLicensePlateNumber": {
                              "type": "string",
                              "description": "License plate number of the vehicle.",
                              "example": "ABC1234"
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "packages": {
                  "type": "array",
                  "description": "List of packages in the transfer.",
                  "items": {
                    "type": "object",
                    "required": [
                      "id"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "number",
                        "format": "int32",
                        "description": "Identifier of the package.",
                        "example": 123456
                      },
                      "wholesalePrice": {
                        "type": "number",
                        "format": "float",
                        "description": "Wholesale price of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `transactionType=\"Wholesale\"`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                        "example": 200.0
                      },
                      "grossWeight": {
                        "type": "number",
                        "format": "float",
                        "description": "Gross weight of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                        "example": 123.45
                      },
                      "grossUnitOfWeightId": {
                        "type": "number",
                        "format": "int32",
                        "description": "Unit of weight identifier for the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                        "example": 5
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "MetrcCreateTransferTemplatesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "description": "A schema representing a shipment with details about destinations, transporters, and packages.",
          "required": [
            "name",
            "destinations"
          ],
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "example": "My template"
            },
            "destinations": {
              "type": "array",
              "description": "List of destinations for the shipment.",
              "items": {
                "type": "object",
                "required": [
                  "estimatedArrivalDateTime",
                  "estimatedDepartureDateTime",
                  "plannedRoute",
                  "recipientId",
                  "transferTypeId"
                ],
                "additionalProperties": false,
                "properties": {
                  "recipientId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Facility ID of the destination facility.\n\nTo find eligible destination facilities, use the [Destinations](#/Create%20Transfer/get_v2_packages_create_transfer_destination_list)\nendpoint.\n",
                    "example": 123456
                  },
                  "plannedRoute": {
                    "type": "string",
                    "description": "Planned route for the shipment.",
                    "example": "Keep going, you can't miss it"
                  },
                  "transferTypeId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the type of transfer.",
                    "example": 8
                  },
                  "invoiceNumber": {
                    "type": "string",
                    "description": "Invoice number for this delivery. *Not all transfer types require this value.*\n\nThis value is only required if the `transferType` has `requiresInvoiceNumber=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": "123456-ABC"
                  },
                  "estimatedDepartureDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated departure date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "estimatedArrivalDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated arrival date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "grossWeight": {
                    "type": "number",
                    "format": "float",
                    "description": "Gross weight of the transfer. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 123.45
                  },
                  "grossUnitOfWeightId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the unit of weight. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 4
                  },
                  "transporters": {
                    "type": "array",
                    "description": "List of transporters for the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "transporterId",
                        "phoneNumberForQuestions",
                        "transporterDetails"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "transporterId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Facility ID of the transporter facility. \n\nTo find eligible transporter facilities, use the [Transporters](#/Create%20Transfer/get_v2_packages_create_transfer_transporter_list) endpoint.\n",
                          "example": 12345
                        },
                        "phoneNumberForQuestions": {
                          "type": "string",
                          "description": "Phone number for inquiries.",
                          "example": "5555551234"
                        },
                        "transporterDetails": {
                          "type": "array",
                          "description": "Details of the transporter.",
                          "items": {
                            "type": "object",
                            "required": [
                              "driverName",
                              "driverOccupationalLicenseNumber",
                              "driverLicenseNumber",
                              "vehicleMake",
                              "vehicleModel",
                              "vehicleLicensePlateNumber"
                            ],
                            "additionalProperties": false,
                            "properties": {
                              "driverName": {
                                "type": "string",
                                "description": "Name of the driver.",
                                "example": "Jane Doe"
                              },
                              "driverOccupationalLicenseNumber": {
                                "type": "string",
                                "description": "Occupational license number of the driver.",
                                "example": "LIC12345"
                              },
                              "driverLicenseNumber": {
                                "type": "string",
                                "description": "Driver's license number.",
                                "example": "D1234567"
                              },
                              "driverLayoverLeg": {
                                "type": "string",
                                "description": "Layover leg details (if any).",
                                "example": "",
                                "nullable": true
                              },
                              "vehicleMake": {
                                "type": "string",
                                "description": "Make of the vehicle.",
                                "example": "Ford"
                              },
                              "vehicleModel": {
                                "type": "string",
                                "description": "Model of the vehicle.",
                                "example": "GT"
                              },
                              "vehicleLicensePlateNumber": {
                                "type": "string",
                                "description": "License plate number of the vehicle.",
                                "example": "ABC1234"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "packages": {
                    "type": "array",
                    "description": "List of packages in the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "id"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "number",
                          "format": "int32",
                          "description": "Identifier of the package.",
                          "example": 123456
                        },
                        "wholesalePrice": {
                          "type": "number",
                          "format": "float",
                          "description": "Wholesale price of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `transactionType=\"Wholesale\"`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 200.0
                        },
                        "grossWeight": {
                          "type": "number",
                          "format": "float",
                          "description": "Gross weight of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 123.45
                        },
                        "grossUnitOfWeightId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Unit of weight identifier for the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 5
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "MetrcCreateTransfersPayload": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/MetrcCreateTransferLikeData"
        }
      },
      "MetrcCredentialAuthPayload": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Your Metrc username",
            "example": "user123"
          },
          "password": {
            "type": "string",
            "description": "Your Metrc password",
            "example": "secretpassword"
          },
          "hostname": {
            "$ref": "#/components/schemas/MetrcHostname"
          },
          "email": {
            "type": "string",
            "format": "email",
            "nullable": true,
            "description": "(Colorado only) Your Metrc login email",
            "example": "user@example.com"
          },
          "otp": {
            "type": "string",
            "pattern": "^[0-9]{6}$",
            "nullable": true,
            "description": "(Michigan only) a valid one-time password. 6 digit number.",
            "example": 123456
          }
        },
        "required": [
          "username",
          "password",
          "hostname"
        ],
        "additionalProperties": false
      },
      "MetrcDataimportCsvDocumentation": {
        "type": "object",
        "description": "CSV column documentation for a data import template",
        "properties": {
          "displayColumns": {
            "type": "array",
            "description": "List of column descriptors with name and optional flag",
            "items": {
              "$ref": "#/components/schemas/MetrcDataimportCsvDocumentationColumn"
            }
          },
          "csvFields": {
            "type": "array",
            "nullable": true,
            "description": "List of CSV field names, if available",
            "items": {
              "type": "string"
            }
          },
          "columnNames": {
            "type": "string",
            "description": "Comma-separated list of all column names",
            "example": "Label,Quantity,UnitOfMeasure,AdjustmentReason,ReasonNote,AdjustmentDate,EmployeeLicenseNumber"
          },
          "optionalColumns": {
            "type": "array",
            "description": "List of optional column names",
            "items": {
              "type": "string"
            }
          },
          "exampleLines": {
            "type": "string",
            "description": "Example CSV lines as a single string with line breaks"
          },
          "displayingHeaderRowMessage": {
            "type": "boolean",
            "description": "Whether to display a header row message"
          },
          "exampleLinesArray": {
            "type": "array",
            "description": "Example CSV lines as an array of strings",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "displayColumns",
          "columnNames",
          "optionalColumns",
          "exampleLines",
          "displayingHeaderRowMessage",
          "exampleLinesArray"
        ]
      },
      "MetrcDataimportCsvDocumentationColumn": {
        "type": "object",
        "description": "A column descriptor in the CSV documentation",
        "properties": {
          "name": {
            "type": "string",
            "description": "Column name",
            "example": "Label"
          },
          "optional": {
            "type": "boolean",
            "description": "Whether this column is optional",
            "example": false
          }
        },
        "required": [
          "name",
          "optional"
        ]
      },
      "MetrcDataimportTemplate": {
        "type": "object",
        "description": "A data import CSV template definition",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the template",
            "example": 21
          },
          "enumName": {
            "type": "string",
            "description": "The enum name for the template type",
            "example": "PackageAdjustment"
          },
          "csvMapClassName": {
            "type": "string",
            "description": "The CSV map class name used for parsing",
            "example": "AdjustPackagesImportCsvMap"
          },
          "csvMap": {
            "type": "string",
            "nullable": true,
            "description": "The CSV map definition, if available"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name for the template",
            "example": "Package Adjustment"
          }
        },
        "required": [
          "id",
          "enumName",
          "csvMapClassName",
          "name"
        ]
      },
      "MetrcDeliveryPackage": {
        "type": "object",
        "properties": {
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model\n\nNote: This cannot be used to sort or filter.\n",
            "example": "MetrcPackage"
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc\n\nNote: This cannot be used to sort or filter.\n"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object\n\nNote: This cannot be used to sort or filter.\n"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. \n\nNote: This cannot be used to sort or filter.\n",
            "example": "TRANSFERRED_PACKAGE",
            "enum": [
              "TRANSFERRED_PACKAGE"
            ]
          },
          "containsRemediatedProduct": {
            "type": "boolean",
            "example": false
          },
          "donationFacilityLicenseNumber": {
            "type": "string",
            "nullable": true
          },
          "donationFacilityName": {
            "type": "string",
            "nullable": true
          },
          "grossUnitOfWeightAbbreviation": {
            "type": "string",
            "example": "g"
          },
          "grossWeight": {
            "type": "number",
            "nullable": true
          },
          "isDonation": {
            "type": "boolean",
            "example": false
          },
          "isTestingSample": {
            "type": "boolean",
            "example": false
          },
          "isTradeSample": {
            "type": "boolean",
            "example": false
          },
          "isTradeSamplePersistent": {
            "type": "boolean",
            "example": false
          },
          "itemBrandName": {
            "type": "string",
            "nullable": true
          },
          "itemServingSize": {
            "type": "string",
            "example": ""
          },
          "itemStrainName": {
            "type": "string",
            "nullable": true
          },
          "itemSupplyDurationDays": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdContent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdContentDose": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitCbdContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitCbdPercent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitQuantity": {
            "type": "number",
            "nullable": true
          },
          "itemUnitQuantityUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcContent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitThcContentDose": {
            "type": "number",
            "nullable": true
          },
          "itemUnitThcContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcPercent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitVolume": {
            "type": "number",
            "nullable": true
          },
          "itemUnitVolumeUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitWeight": {
            "type": "number",
            "nullable": true
          },
          "itemUnitWeightUnitOfMeasureAbbreviation": {
            "type": "string",
            "example": "g"
          },
          "labTestingStateName": {
            "type": "string",
            "example": "TestPassed"
          },
          "multiHarvest": {
            "type": "boolean",
            "example": true
          },
          "multiPackage": {
            "type": "boolean",
            "example": false
          },
          "packageId": {
            "type": "number",
            "example": 123456
          },
          "packageLabel": {
            "type": "string",
            "example": "1A4000000000000000000001"
          },
          "packageType": {
            "type": "string",
            "example": "Product"
          },
          "packagedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "productCategoryName": {
            "type": "string",
            "example": "Infused-Edible"
          },
          "productName": {
            "type": "string",
            "example": "Edible Gummy 20mg (Sativa)"
          },
          "productRequiresRemediation": {
            "type": "boolean",
            "example": false
          },
          "productionBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "receivedQuantity": {
            "type": "number",
            "example": 100
          },
          "receivedUnitOfMeasureAbbreviation": {
            "type": "string",
            "example": "g"
          },
          "receiverWholesalePrice": {
            "type": "number",
            "nullable": true
          },
          "remediationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "shipmentPackageState": {
            "type": "string",
            "example": "Accepted"
          },
          "shippedQuantity": {
            "type": "number",
            "example": 50
          },
          "shippedUnitOfMeasureAbbreviation": {
            "type": "string",
            "example": "g"
          },
          "shipperWholesalePrice": {
            "type": "number",
            "nullable": true
          },
          "sourceHarvestNames": {
            "type": "string",
            "example": "HARVEST 1, HARVEST 2"
          },
          "sourcePackageIsDonation": {
            "type": "boolean",
            "example": false
          },
          "sourcePackageIsTradeSample": {
            "type": "boolean",
            "example": false
          },
          "sourcePackageLabels": {
            "type": "string",
            "example": "1A4000000000000000000528, 1A4000000000000000000529"
          },
          "tradeSampleFacilityLicenseNumber": {
            "type": "string",
            "nullable": true
          },
          "tradeSampleFacilityName": {
            "type": "string",
            "nullable": true
          },
          "sellByDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "processingJobTypeId": {
            "type": "number",
            "nullable": true
          },
          "inTransitStatus": {
            "type": "string",
            "example": "InTransit"
          },
          "isInTransit": {
            "type": "boolean",
            "example": true
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "retailIdQrCount": {
            "type": "number",
            "nullable": true
          },
          "labTestStageId": {
            "type": "number",
            "nullable": true
          },
          "useByDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "productLabel": {
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "type": "number",
            "nullable": true
          },
          "itemUnitThcAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitCbdAContent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcAContent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdAContentDose": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcAPercent": {
            "type": "number",
            "nullable": true
          },
          "itemUnitThcAContentDose": {
            "type": "number",
            "nullable": true
          },
          "itemUnitCbdAPercent": {
            "type": "number",
            "nullable": true
          }
        }
      },
      "MetrcDiscontinueItemPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The item ID",
            "example": 12345
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "MetrcDiscontinueStrainPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The strain ID",
            "example": 12345
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "MetrcDriver": {
        "type": "object",
        "properties": {
          "driversLicenseNumber": {
            "type": "string",
            "description": "Driver's license number.",
            "example": "DL-12345"
          },
          "employeeId": {
            "type": "string",
            "description": "Employee identifier.",
            "example": "EMP00001"
          },
          "facilityId": {
            "type": "integer",
            "description": "Facility identifier.",
            "example": 12345
          },
          "id": {
            "type": "integer",
            "description": "Unique identifier for the driver.",
            "example": 12345
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates if the driver is archived.",
            "example": false
          },
          "lastModified": {
            "type": "string",
            "description": "Date and time the driver information was last modified.",
            "format": "date-time",
            "example": "2023-02-07T15:27:12+00:00"
          },
          "name": {
            "type": "string",
            "description": "Name of the driver.",
            "example": "Jane Doe"
          }
        }
      },
      "MetrcFacility": {
        "type": "object",
        "description": "A schema representing a facility with various details including license, address, and contact information.",
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "License number of the facility.",
            "example": "LIC00001"
          },
          "facilityName": {
            "type": "string",
            "description": "Name of the facility.",
            "example": "Example Facility LLC"
          },
          "id": {
            "type": "integer",
            "description": "Unique identifier of the facility.",
            "example": 1234,
            "format": "int32"
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "index": {
            "type": "string",
            "description": "The current state of this object.",
            "enum": [
              "TRANSPORTER",
              "DESTINATION"
            ]
          },
          "facilityTypeName": {
            "type": "string",
            "description": "Type of the facility.",
            "example": "Example Cultivator"
          },
          "facilityType": {
            "type": "string",
            "description": "Type code of the facility.",
            "nullable": true
          },
          "physicalAddress": {
            "type": "object",
            "description": "Physical address of the facility.",
            "properties": {
              "id": {
                "type": "integer",
                "description": "Unique identifier of the address.",
                "example": 12345,
                "format": "int32"
              },
              "licenseId": {
                "type": "integer",
                "description": "License identifier associated with the address.",
                "example": 0,
                "format": "int32"
              },
              "addressType": {
                "type": "string",
                "description": "Type of the address (e.g., Physical).",
                "example": "Physical"
              },
              "recipient": {
                "type": "string",
                "description": "Name of the recipient at the address.",
                "example": ""
              },
              "contactPhoneNumber": {
                "type": "string",
                "description": "Contact phone number for the address.",
                "nullable": true
              },
              "street1": {
                "type": "string",
                "description": "First line of the street address.",
                "example": "1 EXAMPLE DR"
              },
              "street2": {
                "type": "string",
                "description": "Second line of the street address (optional).",
                "example": ""
              },
              "street3": {
                "type": "string",
                "description": "Third line of the street address (optional).",
                "example": ""
              },
              "street4": {
                "type": "string",
                "description": "Fourth line of the street address (optional).",
                "example": ""
              },
              "city": {
                "type": "string",
                "description": "City of the address.",
                "example": "DETROIT"
              },
              "county": {
                "type": "string",
                "description": "County of the address.",
                "example": "Detroit"
              },
              "state": {
                "type": "string",
                "description": "State of the address.",
                "example": "MI"
              },
              "postalCode": {
                "type": "string",
                "description": "Postal code of the address.",
                "example": "12345"
              },
              "country": {
                "type": "string",
                "description": "Country of the address (optional).",
                "example": ""
              },
              "assessorParcelNumber": {
                "type": "string",
                "description": "Assessor parcel number for the address (optional).",
                "example": ""
              },
              "isDefaultShippingAddress": {
                "type": "boolean",
                "description": "Indicates whether the address is the default shipping address.",
                "example": false
              },
              "isValidated": {
                "type": "boolean",
                "description": "Indicates whether the address has been validated.",
                "example": false
              },
              "isArchived": {
                "type": "boolean",
                "description": "Indicates whether the address is archived.",
                "example": false
              }
            }
          },
          "mainPhoneNumber": {
            "type": "string",
            "description": "Main phone number of the facility.",
            "example": "5555551234"
          },
          "mobilePhoneNumber": {
            "type": "string",
            "description": "Mobile phone number of the facility.",
            "nullable": true
          }
        }
      },
      "MetrcHarvest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the harvest",
            "example": 1234567,
            "nullable": false
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_HARVEST",
            "enum": [
              "ACTIVE_HARVEST",
              "ONHOLD_HARVEST",
              "INACTIVE_HARVEST"
            ]
          },
          "facilityLicenseNumber": {
            "type": "string",
            "description": "License number of the facility",
            "example": "LIC-00001",
            "nullable": true
          },
          "facilityName": {
            "type": "string",
            "description": "Name of the facility",
            "example": "Example Farms",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Name of the harvest",
            "example": "PNXPRESS010124",
            "nullable": false
          },
          "harvestType": {
            "type": "string",
            "description": "Type of the harvest",
            "example": "WholePlant",
            "nullable": false,
            "enum": [
              "WholePlant",
              "PartialPlant",
              "Other"
            ]
          },
          "harvestTypeName": {
            "type": "string",
            "description": "Name of the harvest type",
            "example": "Harvest Batch",
            "nullable": false
          },
          "sourceStrainCount": {
            "type": "integer",
            "description": "Number of source strains",
            "example": 1,
            "nullable": false
          },
          "sourceStrainNames": {
            "type": "string",
            "description": "Names of source strains",
            "example": "Northern Lights",
            "nullable": false
          },
          "multiStrain": {
            "type": "boolean",
            "description": "Indicates if the harvest includes multiple strains",
            "example": false,
            "nullable": false
          },
          "dryingLocationName": {
            "type": "string",
            "description": "Name of the drying location",
            "example": "Drying Room 001",
            "nullable": false
          },
          "dryingSublocationName": {
            "type": "string"
          },
          "dryingLocationTypeName": {
            "type": "string",
            "description": "Type of the drying location",
            "example": "Default Location Type",
            "nullable": false
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient, if applicable",
            "example": "",
            "nullable": true
          },
          "currentWeight": {
            "type": "number",
            "format": "float",
            "description": "Current weight of the harvest",
            "example": 1915.0,
            "nullable": false
          },
          "totalWasteWeight": {
            "type": "number",
            "format": "float",
            "description": "Total waste weight",
            "example": 740.0,
            "nullable": false
          },
          "plantCount": {
            "type": "integer",
            "description": "Number of plants in the harvest",
            "example": 60,
            "nullable": false
          },
          "totalWetWeight": {
            "type": "number",
            "format": "float",
            "description": "Total wet weight of the harvest",
            "example": 81123.0,
            "nullable": false
          },
          "totalRestoredWeight": {
            "type": "number",
            "format": "float",
            "description": "Total restored weight",
            "example": 0.0,
            "nullable": false
          },
          "packageCount": {
            "type": "integer",
            "description": "Number of packages in the harvest",
            "example": 0,
            "nullable": false
          },
          "totalPackagedWeight": {
            "type": "number",
            "format": "float",
            "description": "Total packaged weight",
            "example": 0.0,
            "nullable": false
          },
          "unitOfWeightId": {
            "type": "integer",
            "description": "Identifier for the unit of weight",
            "example": 4,
            "nullable": false
          },
          "unitOfWeightAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the unit of weight",
            "example": "g",
            "nullable": false
          },
          "labTestingStateName": {
            "type": "string",
            "description": "Lab testing state of the harvest",
            "example": "NotSubmitted",
            "nullable": false,
            "enum": [
              "NotSubmitted",
              "Submitted",
              "InTesting",
              "Passed",
              "Failed"
            ]
          },
          "labTestingStateDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date of the lab testing state",
            "example": "2024-07-26T20:00:00+00:00",
            "nullable": true
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the harvest is on hold",
            "example": false,
            "nullable": false
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the harvest is under investigation.",
            "example": false,
            "nullable": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the harvest is on hold due to investigation.",
            "example": false,
            "nullable": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the harvest is under investigation for recall.",
            "example": false,
            "nullable": false
          },
          "isOnHoldCombined": {
            "type": "boolean",
            "description": "Combined hold status indicator.",
            "example": false,
            "nullable": false
          },
          "harvestStartDate": {
            "type": "string",
            "format": "date",
            "description": "Start date of the harvest",
            "example": "2024-07-18",
            "nullable": false
          },
          "isFinished": {
            "type": "boolean",
            "description": "Indicates if the harvest is finished",
            "example": false,
            "nullable": false
          },
          "finishedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the harvest was finished",
            "nullable": true
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates if the harvest is archived",
            "example": false,
            "nullable": false
          },
          "archivedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the harvest was archived",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "Last modified date of the harvest",
            "example": "2024-07-26T20:00:00+00:00",
            "nullable": false
          }
        }
      },
      "MetrcHarvestPackage": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "packageId": {
            "type": "integer",
            "description": "Unique identifier for the package.",
            "example": 123456
          },
          "label": {
            "type": "string",
            "description": "Unique label identifier for the package.",
            "example": "1A4000000000000000000001"
          },
          "packageType": {
            "type": "string",
            "description": "Type of the package.",
            "example": "Product"
          },
          "productName": {
            "type": "string",
            "description": "Name of the product associated with the package.",
            "example": "Blue Dream Flower | Blue Dream"
          },
          "productCategoryName": {
            "type": "string",
            "description": "Category of the product.",
            "example": "Bud/Flower"
          },
          "quantity": {
            "type": "number",
            "format": "float",
            "description": "Quantity of the package contents.",
            "example": 13040.0
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Full name of the unit of measure.",
            "example": "Grams"
          },
          "unitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation for the unit of measure.",
            "example": "g"
          },
          "isProductionBatch": {
            "type": "boolean",
            "description": "Indicates whether the package is part of a production batch.",
            "example": true
          },
          "productionBatchNumber": {
            "type": "string",
            "description": "Identifier for the production batch.",
            "example": "Blue Dream Flower | Blue Dream"
          },
          "actualDate": {
            "type": "string",
            "format": "date",
            "description": "Date the package was created or became active.",
            "example": "2025-04-15"
          },
          "expirationDate": {
            "type": "string",
            "format": "date",
            "description": "Expiration date of the package, if applicable.",
            "nullable": true
          },
          "sellByDate": {
            "type": "string",
            "format": "date",
            "description": "Sell-by date of the package, if applicable.",
            "nullable": true
          },
          "useByDate": {
            "type": "string",
            "format": "date",
            "description": "Use-by date of the package, if applicable.",
            "nullable": true
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates whether the package is archived.",
            "example": false
          },
          "isFinished": {
            "type": "boolean",
            "description": "Indicates whether the package is finished.",
            "example": false
          }
        }
      },
      "MetrcHarvestPlant": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "harvestId": {
            "type": "integer",
            "description": "Unique identifier for the harvest.",
            "example": 123456
          },
          "plantId": {
            "type": "integer",
            "description": "Unique identifier for the plant.",
            "example": 234567
          },
          "harvestCount": {
            "type": "integer",
            "description": "Number of times this plant has been harvested.",
            "example": 1
          },
          "label": {
            "type": "string",
            "description": "Unique label identifier for the package.",
            "example": "1A4000000000000000000001"
          },
          "locationName": {
            "type": "string",
            "description": "Name of the location where the plant was located during harvest.",
            "example": "Row 01"
          },
          "sublocationName": {
            "type": "string",
            "nullable": true
          },
          "locationTypeName": {
            "type": "string",
            "description": "Type of the location.",
            "example": "Default Location Type",
            "enum": [
              "Default Location Type",
              "Greenhouse",
              "Outdoor"
            ]
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient, if applicable.",
            "nullable": true,
            "example": ""
          },
          "plantBatchName": {
            "type": "string",
            "description": "Name of the plant batch.",
            "example": "01012025BLUEDREAM"
          },
          "plantBatchTypeName": {
            "type": "string",
            "description": "Type of the plant batch.",
            "example": "Clone",
            "enum": [
              "Clone",
              "Seed"
            ]
          },
          "harvestSpecificPlantCount": {
            "type": "integer",
            "description": "Number of plants specifically in this harvest package.",
            "example": 1
          },
          "totalPlantCount": {
            "type": "integer",
            "description": "Total number of plants associated with the package.",
            "example": 1
          },
          "strainName": {
            "type": "string",
            "description": "Name of the plant strain.",
            "example": "Blue Dream"
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the plant is on hold.",
            "example": false
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the plant is under investigation.",
            "example": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the plant is on hold due to investigation.",
            "example": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the plant is under investigation for recall.",
            "example": false
          },
          "plantedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was planted.",
            "example": "2024-11-21"
          },
          "vegetativeDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the vegetative stage.",
            "example": "2024-12-11"
          },
          "floweringDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the flowering stage.",
            "example": "2025-01-24"
          },
          "destroyedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was destroyed, if applicable.",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The last time the record was modified.",
            "example": "2025-03-28T17:42:00+00:00"
          }
        }
      },
      "MetrcHarvestPlantsInputsResponse": {
        "type": "object",
        "properties": {
          "locations": {
            "type": "array",
            "description": "Locations eligible to act as the drying location for the harvest.",
            "items": {
              "$ref": "#/components/schemas/MetrcLocation"
            }
          },
          "unitsOfMeasure": {
            "type": "array",
            "description": "Units of measure available when entering the harvest weight.",
            "items": {
              "$ref": "#/components/schemas/UnitOfMeasure"
            }
          },
          "plants": {
            "type": "array",
            "description": "Pre-selected plants, when the modal is opened from a plant selection.\nEmpty in the modal-only fetch used by this endpoint.\n",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "sublocations": {
            "type": "array",
            "description": "Sublocations, where the state supports them.",
            "nullable": true,
            "items": {
              "type": "object"
            }
          },
          "patientAffiliations": {
            "type": "string",
            "description": "Patient affiliations, where the state supports them.",
            "nullable": true
          },
          "details": {
            "type": "string",
            "description": "Additional state-specific detail rows. Unused in most states.",
            "nullable": true
          }
        }
      },
      "MetrcHarvestReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__endswith:0003",
              "name__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcHarvest"
            }
          }
        }
      },
      "MetrcHistory": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "descriptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "Packaged 4,800 Grams of Blue Dream Flower from 1 Harvest",
              "- Took 4,800 Grams from Harvest \"BLUEDREAM0101\"",
              "- Package Type: Product",
              "- Location: Drying Room",
              "- Location Type: Default Location Type",
              "- Production Batch No: BD0001"
            ]
          },
          "userName": {
            "type": "string",
            "example": "Jane Doe (JDoe001)"
          },
          "actualDate": {
            "type": "string",
            "format": "date",
            "example": "2024-01-01"
          },
          "recordedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-01-01T13:07:00.719384Z"
          },
          "inputSourcesNames": {
            "type": "string",
            "description": "Name of the user responsible for this event",
            "example": "User"
          },
          "externalSourceName": {
            "type": "string",
            "description": "Name of the third party software source, if applicable",
            "nullable": true
          }
        }
      },
      "MetrcHostname": {
        "type": "string",
        "description": "The Metrc hostname you use to login. For example, a California user would use ca.metrc.com.",
        "pattern": "^([a-zA-Z0-9-]+\\.)*metrc\\.com$",
        "example": "ca.metrc.com"
      },
      "MetrcHubSuperTransfer": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcHubTransfer"
          },
          {
            "type": "object",
            "description": "A hub transfer with its optional sub-collections attached. There is no transporterDetails include: MetrcHubTransfer already embeds those as shipmentTransporterDetails.",
            "properties": {
              "packages": {
                "type": "array",
                "description": "A list of this transfer delivery's packages",
                "items": {
                  "$ref": "#/components/schemas/MetrcTransferredPackage"
                }
              },
              "history": {
                "type": "array",
                "description": "A list of this transfer's history entries",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcHubTransfer": {
        "type": "object",
        "description": "A transfer this license is the transporter for, as shown on Metrc's \"Transfers Hub\" page. Unlike MetrcIncomingTransfer and MetrcOutgoingTransfer, this record arrives pre-flattened: the transfer, one of its deliveries and one of that delivery's transporters are merged onto a single object, and the driver legs are embedded as shipmentTransporterDetails rather than fetched separately. It also carries facility contact and address blocks for all three parties, which no other transfer model returns.",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "mo.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcHubTransfer"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "HUB_TRANSFER",
            "enum": [
              "HUB_TRANSFER"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 2018358
          },
          "manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0002018358"
          },
          "shipmentLicenseType": {
            "type": "string",
            "description": "Type of license for the shipment. Note this is the raw value; the other transfer models expose the display form as shipmentLicenseTypeName.",
            "example": "Licensed"
          },
          "shipperFacilityId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the shipper's facility",
            "example": 15802
          },
          "shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "MAN000030"
          },
          "shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "shipperFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the shipper's facility",
            "example": "5015551587"
          },
          "shipperFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the shipper's facility"
          },
          "shipperFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the shipper's facility address",
            "example": "5301 Paris Road"
          },
          "shipperFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the shipper's facility address",
            "example": ""
          },
          "shipperFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the shipper's facility address",
            "example": ""
          },
          "shipperFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the shipper's facility address",
            "example": ""
          },
          "shipperFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the shipper's facility address",
            "example": "Columbia"
          },
          "shipperFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the shipper's facility address",
            "example": "Boone"
          },
          "shipperFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the shipper's facility address",
            "example": "MO"
          },
          "shipperFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the shipper's facility address",
            "example": "65202"
          },
          "shipperFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the shipper's facility address",
            "example": ""
          },
          "shipperFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the shipper's facility address",
            "example": ""
          },
          "deliveryCount": {
            "type": "integer",
            "description": "Number of deliveries on this transfer",
            "example": 1
          },
          "receivedDeliveryCount": {
            "type": "integer",
            "description": "Number of deliveries on this transfer that have been received",
            "example": 1
          },
          "packageCount": {
            "type": "integer",
            "description": "Number of packages on this transfer",
            "example": 170
          },
          "receivedPackageCount": {
            "type": "integer",
            "description": "Number of packages on this transfer that have been received",
            "example": 170
          },
          "canEdit": {
            "type": "boolean",
            "description": "Whether this transfer can currently be edited",
            "example": false
          },
          "isVoided": {
            "type": "boolean",
            "description": "Whether this transfer has been voided",
            "example": false
          },
          "createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "When the transfer was created",
            "example": "2024-07-25T18:47:20+00:00"
          },
          "createdByUserId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier of the user who created the transfer",
            "example": 241333
          },
          "createdByUserName": {
            "type": "string",
            "description": "Name of the user who created the transfer",
            "example": "Jane Doe"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "When the transfer was last modified",
            "example": "2024-07-26T13:49:29+00:00"
          },
          "deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery this row represents. Sub-collections such as packages are addressed by this id rather than by the transfer id.",
            "example": 2019158
          },
          "recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient's facility",
            "example": "MAN000038"
          },
          "recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient's facility",
            "example": "Example Dispensary LLC"
          },
          "recipientFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the recipient's facility",
            "example": "8705553222"
          },
          "recipientFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the recipient's facility"
          },
          "recipientFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the recipient's facility address",
            "example": "1755 State Highway DD"
          },
          "recipientFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the recipient's facility address",
            "example": ""
          },
          "recipientFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the recipient's facility address",
            "example": ""
          },
          "recipientFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the recipient's facility address",
            "example": ""
          },
          "recipientFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the recipient's facility address",
            "example": "Moberly"
          },
          "recipientFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the recipient's facility address",
            "example": "Randolph"
          },
          "recipientFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the recipient's facility address",
            "example": "MO"
          },
          "recipientFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the recipient's facility address",
            "example": "65270"
          },
          "recipientFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the recipient's facility address",
            "example": ""
          },
          "recipientFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the recipient's facility address",
            "example": ""
          },
          "recipientApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the recipient approved this delivery"
          },
          "recipientAutoApproval": {
            "type": "boolean",
            "description": "Whether the recipient approval was automatic",
            "example": false
          },
          "shipmentTypeId": {
            "type": "integer",
            "description": "Unique identifier for the shipment type",
            "example": 3
          },
          "shipmentTypeName": {
            "type": "string",
            "description": "Name of the shipment type",
            "example": "Unaffiliated Transfer"
          },
          "shipmentTransactionType": {
            "type": "string",
            "description": "Transaction type of the shipment. Note this is the raw value; the display form is shipmentTransactionTypeName.",
            "example": "Wholesale"
          },
          "shipmentTransactionTypeName": {
            "type": "string",
            "description": "Name of the shipment transaction type",
            "example": "Wholesale"
          },
          "estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated departure date and time for the delivery",
            "example": "2024-07-25T10:56:00.000"
          },
          "actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual departure date and time for the delivery"
          },
          "estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated arrival date and time for the delivery",
            "example": "2024-07-25T17:00:00.000"
          },
          "actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual arrival date and time for the delivery"
          },
          "plannedRoute": {
            "type": "string",
            "nullable": true,
            "description": "The planned route for this delivery, as free text",
            "example": "Head south toward Paris Rd\nTurn right to merge onto US-63 N"
          },
          "deliveryPackageCount": {
            "type": "integer",
            "description": "Number of packages on this delivery",
            "example": 170
          },
          "deliveryReceivedPackageCount": {
            "type": "integer",
            "description": "Number of packages on this delivery that have been received",
            "example": 170
          },
          "receivedById": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Unique identifier of the user who received the delivery",
            "example": 221082
          },
          "receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the user who received the delivery",
            "example": "John Smith"
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the delivery was received",
            "example": "2024-07-26T13:49:18+00:00"
          },
          "estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated return departure date and time"
          },
          "actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual return departure date and time"
          },
          "estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated return arrival date and time"
          },
          "actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual return arrival date and time"
          },
          "rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Whether rejected packages have been returned",
            "example": false
          },
          "transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When all transporters were approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When all destinations were approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Whether the transporters were automatically approved",
            "example": true
          },
          "destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Whether the destinations were automatically approved",
            "example": true
          },
          "transporterFacilityId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transporter facility",
            "example": 15101
          },
          "transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": "DIS000038"
          },
          "transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": "Transport Co"
          },
          "transporterFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the transporter facility"
          },
          "transporterFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the transporter facility"
          },
          "transporterFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the transporter facility address"
          },
          "transporterFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the transporter facility address"
          },
          "transporterFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the transporter facility address"
          },
          "transporterFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the transporter facility address"
          },
          "transporterFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the transporter facility address"
          },
          "transporterFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the transporter facility address"
          },
          "transporterFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the transporter facility address"
          },
          "transporterFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the transporter facility address"
          },
          "transporterFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the transporter facility address"
          },
          "transporterFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the transporter facility address"
          },
          "transporterApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When this transporter was approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "transporterAutoApproval": {
            "type": "boolean",
            "description": "Whether this transporter was automatically approved",
            "example": true
          },
          "transporterDirection": {
            "type": "string",
            "description": "Direction of the transporter. Note this is the raw value; the display form is transporterDirectionName.",
            "example": "Outbound"
          },
          "transporterDirectionName": {
            "type": "string",
            "description": "Name of the transporter direction",
            "example": "Outbound"
          },
          "phoneNumberForQuestions": {
            "type": "string",
            "nullable": true,
            "description": "Phone number to call with questions about this transfer",
            "example": "13145555180"
          },
          "driverName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the driver. Metrc hoists this from the first entry of shipmentTransporterDetails; when multiVehicle is true, the remaining legs are only visible in that array.",
            "example": "Jane Doe"
          },
          "driverOccupationalLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "Occupational license number of the driver",
            "example": "AGT015324"
          },
          "driverVehicleLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "Vehicle license number of the driver",
            "example": "045E289001"
          },
          "driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "description": "Layover leg details for the driver, if applicable"
          },
          "multiVehicle": {
            "type": "boolean",
            "description": "Whether this transfer uses more than one vehicle. When true, the hoisted driver and vehicle fields describe only the first leg and shipmentTransporterDetails holds the rest.",
            "example": false
          },
          "vehicleMake": {
            "type": "string",
            "nullable": true,
            "description": "Make of the vehicle",
            "example": "Ford"
          },
          "vehicleModel": {
            "type": "string",
            "nullable": true,
            "description": "Model of the vehicle",
            "example": "Transit"
          },
          "vehicleLicensePlateNumber": {
            "type": "string",
            "nullable": true,
            "description": "License plate number of the vehicle",
            "example": "XYZ-1234"
          },
          "vehicleRegistrationNumber": {
            "type": "string",
            "nullable": true,
            "description": "Registration number of the vehicle",
            "example": ""
          },
          "transporterAcceptedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the transporter accepted this transfer"
          },
          "isLayover": {
            "type": "boolean",
            "description": "Whether this row is a layover leg. Most rows returned by this endpoint are not layovers, despite the underlying Metrc path being named for them.",
            "example": false
          },
          "transporterEstimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated departure date and time for this transporter's leg"
          },
          "transporterActualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual departure date and time for this transporter's leg"
          },
          "transporterEstimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated arrival date and time for this transporter's leg"
          },
          "transporterActualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual arrival date and time for this transporter's leg"
          },
          "shipmentTransporterDetails": {
            "type": "array",
            "description": "The driver legs for this transfer. Metrc embeds these in the response rather than requiring a second request, so they are always present -- there is no `include` for them. The same objects are served standalone by /v2/transfers/transporter-details. Note that the embedded copies do not carry the hostname, dataModel, retrievedAt and licenseNumber envelope fields, since they never pass through per-object normalization.",
            "items": {
              "$ref": "#/components/schemas/MetrcTransferTransporterDetails"
            }
          }
        }
      },
      "MetrcHubTransferReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "driverName__contains:doe"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "createdDateTime:desc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcHubTransfer"
            }
          }
        }
      },
      "MetrcIncomingSuperTransfer": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcIncomingTransfer"
          },
          {
            "type": "object",
            "properties": {
              "packages": {
                "type": "array",
                "description": "A list of this transfer delivery's packages",
                "items": {
                  "$ref": "#/components/schemas/MetrcTransferredPackage"
                }
              },
              "transporters": {
                "type": "array",
                "description": "A list of this transfer delivery's transporters",
                "items": {
                  "$ref": "#/components/schemas/MetrcTransferTransporter"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcIncomingTransfer": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_INCOMING_TRANSFER",
            "enum": [
              "ACTIVE_INCOMING_TRANSFER",
              "INACTIVE_INCOMING_TRANSFER"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 1234567
          },
          "manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0001234567"
          },
          "shipmentLicenseTypeName": {
            "type": "string",
            "description": "Type of license for the shipment",
            "example": "Licensed"
          },
          "shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "LIC-00002"
          },
          "shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the transfer"
          },
          "transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": ""
          },
          "transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": ""
          },
          "driverName": {
            "type": "string",
            "description": "Name of the driver",
            "example": ""
          },
          "driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "Occupational license number of the driver",
            "example": ""
          },
          "driverVehicleLicenseNumber": {
            "type": "string",
            "description": "License number of the vehicle used by the driver",
            "example": ""
          },
          "vehicleMake": {
            "type": "string",
            "description": "Make of the vehicle used for transport",
            "example": ""
          },
          "vehicleModel": {
            "type": "string",
            "description": "Model of the vehicle used for transport",
            "example": ""
          },
          "vehicleLicensePlateNumber": {
            "type": "string",
            "description": "License plate number of the vehicle",
            "example": ""
          },
          "deliveryFacilities": {
            "type": "string",
            "description": "Details of the delivery facilities",
            "example": "LIC-00001 (Example Dispensary LLC)"
          },
          "deliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries in the transfer",
            "example": 1
          },
          "receivedDeliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries received",
            "example": 0
          },
          "packageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of packages in the transfer",
            "example": 8
          },
          "receivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received",
            "example": 0
          },
          "containsPlantPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains plant packages",
            "example": false
          },
          "containsProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains product packages",
            "example": true
          },
          "containsTradeSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains trade samples",
            "example": false
          },
          "containsDonation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains donations",
            "example": false
          },
          "containsTestingSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains testing samples",
            "example": false
          },
          "containsProductRequiresRemediation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains products that require remediation",
            "example": false
          },
          "containsRemediatedProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains remediated product packages",
            "example": false
          },
          "editCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of times the transfer record has been edited",
            "example": 1
          },
          "canEdit": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited",
            "example": true
          },
          "canEditOutgoingInactive": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited when outgoing and inactive",
            "example": false
          },
          "isVoided": {
            "type": "boolean",
            "description": "Indicates if the transfer has been voided",
            "example": false
          },
          "createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was created",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "createdByUserName": {
            "type": "string",
            "description": "Username of the person who created the transfer record",
            "example": "Jane Doe"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was last modified",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery associated with the transfer",
            "example": 1234566
          },
          "recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001"
          },
          "recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC"
          },
          "recipientFacilityInfo": {
            "type": "string",
            "example": ""
          },
          "shipmentTypeName": {
            "type": "string",
            "description": "Type of shipment",
            "example": "Unaffiliated Transfer"
          },
          "shipmentTransactionTypeName": {
            "type": "string",
            "description": "Type of shipment transaction",
            "example": "Wholesale"
          },
          "estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of departure",
            "example": "2024-07-26T06:00:00.000"
          },
          "actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of departure"
          },
          "estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of arrival",
            "example": "2024-07-26T17:00:00.000"
          },
          "actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of arrival"
          },
          "deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages in the delivery",
            "example": 8
          },
          "deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received in the delivery",
            "example": 0
          },
          "receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the person who received the delivery"
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the delivery was received"
          },
          "estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return departure"
          },
          "actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return departure"
          },
          "estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return arrival"
          },
          "actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return arrival"
          },
          "rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates if rejected packages were returned",
            "example": false
          },
          "transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all transporters were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all destinations were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if transporters were automatically approved",
            "example": true
          },
          "destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if destinations were automatically approved",
            "example": true
          },
          "approvalRejectDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the approval was rejected"
          },
          "approvalRejectedByUser": {
            "type": "string",
            "description": "Username of the person who rejected the approval",
            "example": "Jane Doe"
          },
          "approvalRejectedFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "License number of the facility where approval was rejected"
          },
          "approvalRejectReasonId": {
            "type": "string",
            "nullable": true,
            "description": "Reason ID for the approval rejection"
          },
          "PDFDocumentFileSystemId": {
            "type": "number",
            "example": 0
          },
          "invoiceNumber": {
            "type": "string",
            "example": ""
          },
          "lineNumber": {
            "type": "integer",
            "format": "int32",
            "example": ""
          }
        }
      },
      "MetrcIncomingTransferReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "shipperFacilityName__contains:farms"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "createdDateTime:desc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcIncomingTransfer"
            }
          }
        }
      },
      "MetrcItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The item ID",
            "example": 12345
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_ITEM",
            "enum": [
              "ACTIVE_ITEM"
            ]
          },
          "facilityLicenseNumber": {
            "type": "string",
            "description": "The facility license number",
            "example": "LIC-00001",
            "nullable": true
          },
          "facilityName": {
            "type": "string",
            "description": "The facility name",
            "example": "Example Growers",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The item name",
            "example": "Pineapple Express Flower"
          },
          "productCategoryId": {
            "type": "number",
            "description": "The product category ID",
            "example": 401
          },
          "productCategoryName": {
            "type": "string",
            "description": "The product category name",
            "example": "Bud/Flower (Final Packaging)"
          },
          "productCategoryTypeName": {
            "type": "string",
            "description": "The product category type name",
            "example": "Cannabis"
          },
          "expirationDateConfiguration": {
            "type": "string",
            "enum": [
              "Off",
              "Optional"
            ],
            "description": "The expiration date configuration",
            "example": "Off"
          },
          "expirationConfigurationState": {
            "type": "string",
            "enum": [
              "Off"
            ],
            "description": "The expiration configuration state",
            "example": "Off"
          },
          "expirationDateDaysInAdvance": {
            "type": "number",
            "description": "The number of days in advance for the expiration date",
            "nullable": true
          },
          "sellByDateConfiguration": {
            "type": "string",
            "enum": [
              "Off",
              "Optional"
            ],
            "description": "The sell by date configuration",
            "example": "Off"
          },
          "sellByConfigurationState": {
            "type": "string",
            "enum": [
              "Off"
            ],
            "description": "The sell by configuration state",
            "example": "Off"
          },
          "sellByDateDaysInAdvance": {
            "type": "number",
            "description": "The number of days in advance for the sell by date",
            "nullable": true
          },
          "useByDateConfiguration": {
            "type": "string",
            "enum": [
              "Off",
              "Optional"
            ],
            "description": "The use by date configuration",
            "example": "Off"
          },
          "useByConfigurationState": {
            "type": "string",
            "enum": [
              "Off"
            ],
            "description": "The use by configuration state",
            "example": "Off"
          },
          "useByDateDaysInAdvance": {
            "type": "number",
            "description": "The number of days in advance for the use by date",
            "nullable": true
          },
          "quantityTypeName": {
            "type": "string",
            "enum": [
              "WeightBased",
              "CountBased",
              "VolumeBased"
            ],
            "description": "The quantity type name",
            "example": "WeightBased"
          },
          "defaultLabTestingStateName": {
            "type": "string",
            "enum": [
              "NotRequired",
              "NotSubmitted"
            ],
            "description": "The default lab testing state name",
            "example": "NotSubmitted"
          },
          "unitOfMeasureId": {
            "type": "number",
            "description": "The unit of measure ID",
            "example": 4
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The unit of measure name",
            "example": "Grams"
          },
          "approvalStatusName": {
            "type": "string",
            "enum": [
              "Approved",
              "Revoked"
            ],
            "description": "The approval status name",
            "example": "Approved"
          },
          "approvalStatusDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time of approval status",
            "example": "2023-08-17T22:20:30+00:00"
          },
          "strainName": {
            "type": "string",
            "description": "The strain name",
            "example": "Pineapple Express",
            "nullable": true
          },
          "itemBrandId": {
            "type": "number",
            "description": "The item brand ID",
            "example": 0
          },
          "itemBrandName": {
            "type": "string",
            "description": "The item brand name",
            "example": "BrandName",
            "nullable": true
          },
          "administrationMethod": {
            "type": "string",
            "description": "The method of administration",
            "example": "N/A"
          },
          "unitCbdPercent": {
            "type": "number",
            "description": "The unit CBD percentage",
            "nullable": true
          },
          "unitCbdContentDose": {
            "type": "number",
            "description": "The unit CBD content dose",
            "nullable": true
          },
          "unitCbdContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit CBD content dose unit of measure abbreviation",
            "nullable": true
          },
          "unitThcPercent": {
            "type": "number",
            "description": "The unit THC percentage",
            "nullable": true
          },
          "unitThcContentUnitOfMeasureId": {
            "type": "number",
            "description": "The unit THC content unit of measure ID",
            "nullable": true
          },
          "unitThcContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit THC content dose unit of measure abbreviation",
            "nullable": true
          },
          "unitWeight": {
            "type": "number",
            "description": "The unit weight",
            "nullable": true
          },
          "servingSize": {
            "type": "string",
            "description": "The serving size",
            "example": "1g"
          },
          "numberOfDoses": {
            "type": "number",
            "description": "The number of doses",
            "example": 28,
            "nullable": true
          },
          "unitQuantity": {
            "type": "number",
            "description": "The unit quantity",
            "nullable": true
          },
          "unitQuantityUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit quantity unit of measure abbreviation",
            "nullable": true
          },
          "publicIngredients": {
            "type": "string",
            "description": "The public ingredients",
            "example": "Cannabis Flower"
          },
          "description": {
            "type": "string",
            "description": "The item description",
            "example": ""
          },
          "allergens": {
            "type": "string",
            "description": "The allergens present in the item",
            "example": ""
          },
          "productImages": {
            "type": "array",
            "description": "A list of product image references",
            "items": {
              "type": "object",
              "properties": {
                "productImageFileId": {
                  "type": "integer",
                  "description": "Unique ID for this product image file"
                },
                "fileType": {
                  "type": "string",
                  "enum": [
                    "ItemProductImage"
                  ]
                },
                "productId": {
                  "type": "integer",
                  "description": "ID of the associated product"
                },
                "fileName": {
                  "type": "string",
                  "nullable": true,
                  "description": "Path or name of the file"
                },
                "encodedImageBase64": {
                  "type": "string",
                  "nullable": true,
                  "description": "Base64-encoded image data"
                },
                "fileSystemId": {
                  "type": "integer",
                  "description": "File system ID"
                }
              }
            }
          },
          "productPhotoDescription": {
            "type": "string",
            "description": "Description of the product photo",
            "example": ""
          },
          "labelImages": {
            "type": "array",
            "description": "A list of label image references",
            "items": {
              "type": "object",
              "properties": {
                "labelImageFileId": {
                  "type": "integer",
                  "description": "Unique ID for this label image file"
                },
                "fileType": {
                  "type": "string",
                  "enum": [
                    "ItemLabelImage"
                  ]
                },
                "productId": {
                  "type": "integer",
                  "description": "ID of the associated product"
                },
                "fileName": {
                  "type": "string",
                  "nullable": true,
                  "description": "Path or name of the file"
                },
                "encodedImageBase64": {
                  "type": "string",
                  "nullable": true,
                  "description": "Base64-encoded image data"
                },
                "fileSystemId": {
                  "type": "integer",
                  "description": "File system ID"
                }
              }
            }
          },
          "labelPhotoDescription": {
            "type": "string",
            "description": "Description of the label photo",
            "example": ""
          },
          "packagingImages": {
            "type": "array",
            "description": "A list of packaging image references",
            "items": {
              "type": "object",
              "properties": {
                "packagingImageFileId": {
                  "type": "integer",
                  "description": "Unique ID for this packaging image file"
                },
                "fileType": {
                  "type": "string",
                  "enum": [
                    "ItemPackagingImage"
                  ]
                },
                "productId": {
                  "type": "integer",
                  "description": "ID of the associated product"
                },
                "fileName": {
                  "type": "string",
                  "nullable": true,
                  "description": "Path or name of the file"
                },
                "encodedImageBase64": {
                  "type": "string",
                  "nullable": true,
                  "description": "Base64-encoded image data"
                },
                "fileSystemId": {
                  "type": "integer",
                  "description": "File system ID"
                }
              }
            }
          },
          "packagingPhotoDescription": {
            "type": "string",
            "description": "Description of the packaging photo",
            "example": ""
          },
          "productPDFDocuments": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of product PDF documents"
          },
          "isUsed": {
            "type": "boolean",
            "description": "Indicates if the item is used",
            "example": false
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates if the item is archived",
            "example": false
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The last modified date and time",
            "nullable": true
          },
          "processingJobCategoryId": {
            "type": "number",
            "description": "The processing job category ID",
            "nullable": true
          },
          "processingJobCategoryName": {
            "type": "string",
            "description": "The processing job category name",
            "nullable": true
          },
          "supplyDurationDays": {
            "type": "number",
            "description": "The supply duration in days",
            "nullable": true
          },
          "unitCbdPercentOverride": {
            "type": "number",
            "description": "Override value for the unit CBD percentage",
            "nullable": true
          },
          "unitCbdContent": {
            "type": "number",
            "description": "The unit CBD content",
            "nullable": true
          },
          "unitCbdContentOverride": {
            "type": "number",
            "description": "Override value for the unit CBD content",
            "nullable": true
          },
          "unitCbdContentDoseUoMId": {
            "type": "number",
            "description": "The unit CBD content dose UoM ID",
            "nullable": true
          },
          "unitCbdContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit CBD content unit of measure abbreviation",
            "nullable": true
          },
          "unitCbdContentUnitOfMeasureId": {
            "type": "number",
            "description": "The unit CBD content unit of measure ID",
            "nullable": true
          },
          "unitCbdContentUoMId": {
            "type": "number",
            "description": "The unit CBD content UoM ID",
            "nullable": true
          },
          "unitThcContent": {
            "type": "number",
            "description": "The unit THC content",
            "nullable": true
          },
          "unitThcContentOverride": {
            "type": "number",
            "description": "Override value for the unit THC content",
            "nullable": true
          },
          "unitThcContentDose": {
            "type": "number",
            "description": "The unit THC content dose",
            "nullable": true
          },
          "unitThcContentDoseUnitOfMeasureId": {
            "type": "number",
            "description": "The unit THC content dose unit of measure ID",
            "nullable": true
          },
          "unitThcContentDoseUoMId": {
            "type": "number",
            "description": "The unit THC content dose UoM ID",
            "nullable": true
          },
          "unitThcContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit THC content unit of measure abbreviation",
            "nullable": true
          },
          "unitThcContentUoMId": {
            "type": "number",
            "description": "The unit THC content UoM ID",
            "nullable": true
          },
          "unitWeightUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit weight unit of measure abbreviation",
            "nullable": true
          },
          "unitWeightUnitOfMeasureId": {
            "type": "number",
            "description": "The unit weight unit of measure ID",
            "nullable": true
          },
          "unitWeightUoMId": {
            "type": "number",
            "description": "The unit weight UoM ID",
            "nullable": true
          },
          "unitVolume": {
            "type": "number",
            "description": "The unit volume",
            "nullable": true
          },
          "unitVolumeUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "The unit volume unit of measure abbreviation",
            "nullable": true
          },
          "unitVolumeUnitOfMeasureId": {
            "type": "number",
            "description": "The unit volume unit of measure ID",
            "nullable": true
          },
          "unitVolumeUoMId": {
            "type": "number",
            "description": "The unit volume UoM ID",
            "nullable": true
          },
          "publicIngredientsOverride": {
            "type": "string",
            "description": "Override value for the public ingredients",
            "nullable": true
          },
          "allergensOverride": {
            "type": "string",
            "description": "Override value for the allergens present in the item",
            "nullable": true
          },
          "descriptionOverride": {
            "type": "string",
            "description": "Override value for the item description",
            "nullable": true
          },
          "globalProductName": {
            "type": "string",
            "description": "The global product name",
            "nullable": true
          },
          "globalProductNumber": {
            "type": "number",
            "nullable": true
          },
          "productBrandName": {
            "type": "string",
            "description": "The product brand name",
            "nullable": true
          },
          "administrationMethodOverride": {
            "type": "string",
            "description": "Override value for the method of administration",
            "nullable": true
          },
          "unitCbdContentDoseUnitOfMeasureId": {
            "type": "number",
            "description": "The unit CBD content dose unit of measure ID",
            "nullable": true
          },
          "strainId": {
            "type": "number",
            "description": "The strain ID",
            "example": 1234567
          },
          "productCategoryRequiresApproval": {
            "type": "boolean",
            "description": "Indicates if the item's product category requires approval",
            "example": false
          },
          "packagingPhotoDescriptionOverride": {
            "type": "string",
            "nullable": true
          },
          "packagingPhotoOverride": {
            "type": "string",
            "nullable": true
          },
          "labelPhotoDescriptionOverride": {
            "type": "string",
            "nullable": true
          },
          "productPhotoDescriptionOverride": {
            "type": "string",
            "nullable": true
          },
          "brandName": {
            "type": "string",
            "nullable": true
          },
          "productPhotoOverride": {
            "type": "string",
            "nullable": true
          },
          "globalProductId": {
            "type": "number",
            "nullable": true
          },
          "labelPhotoOverride": {
            "type": "string",
            "nullable": true
          },
          "processingJobTypeId": {
            "type": "string",
            "nullable": true
          },
          "processingJobTypeName": {
            "type": "string",
            "nullable": true
          },
          "unitThcPercentOverride": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentUoMId": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContent": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentDose": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "unitThcAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "unitCbdAPercentOverride": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContent": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentDoseUnitOfMeasureId": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAPercent": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "unitThcAPercentOverride": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentDoseUnitOfMeasureId": {
            "type": "number",
            "nullable": true
          },
          "unitThcAPercent": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentOverride": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentDose": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "nullable": true
          },
          "unitThcAContentDoseUoMId": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentUnitOfMeasureId": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentDoseUoMId": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentUnitOfMeasureId": {
            "type": "number",
            "nullable": true
          },
          "unitCbdAContentUoMId": {
            "type": "number",
            "nullable": true
          },
          "unitThcAContentOverride": {
            "type": "number",
            "nullable": true
          }
        }
      },
      "MetrcItemImage": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcItemImage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "fileName": {
            "type": "string",
            "description": "Path or name of the file",
            "example": "Photos/Product photo-Cannabis Flower.png"
          },
          "productId": {
            "type": "integer",
            "description": "ID of the associated product",
            "example": 234567
          },
          "imageFileId": {
            "type": "integer",
            "description": "Unique ID for this image file",
            "example": 123456
          },
          "fileType": {
            "$ref": "#/components/schemas/ItemImageFileType"
          }
        }
      },
      "MetrcItemImageReference": {
        "type": "object",
        "description": "A reference to an uploaded item image",
        "properties": {
          "imageFileId": {
            "type": "integer",
            "description": "The ID of the uploaded image file",
            "example": 202
          },
          "fileType": {
            "$ref": "#/components/schemas/ItemImageFileType"
          }
        },
        "required": [
          "imageFileId",
          "fileType"
        ],
        "additionalProperties": false
      },
      "MetrcItemIngredient": {
        "type": "object",
        "properties": {
          "ingredient": {
            "type": "string",
            "description": "The ingredient name or description",
            "example": "Cannabis Flower"
          }
        }
      },
      "MetrcItemIngredientEntry": {
        "type": "object",
        "description": "An ingredient entry for an item",
        "properties": {
          "ingredient": {
            "type": "string",
            "description": "The ingredient name or description",
            "example": "example ingredient"
          }
        },
        "required": [
          "ingredient"
        ],
        "additionalProperties": false
      },
      "MetrcItemNote": {
        "type": "object",
        "properties": {
          "note": {
            "type": "string",
            "description": "A note associated with the item",
            "example": "This item requires special handling"
          }
        }
      },
      "MetrcItemReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcItem"
            }
          }
        }
      },
      "MetrcLabBatch": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The lab batch ID.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the lab batch.",
            "example": "Additional - Mandatory Cannabinoid % and Totals"
          },
          "labTestTypeCount": {
            "type": "integer",
            "description": "The number of lab test types in this batch.",
            "example": 12
          },
          "labTestTypes": {
            "type": "array",
            "description": "List of lab test types in this batch.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The lab test type ID.",
                  "example": 153
                },
                "name": {
                  "type": "string",
                  "description": "The name of the lab test type.",
                  "example": "CBD (%) Mandatory Cannabinoid % and Totals"
                },
                "requiresTestResult": {
                  "type": "boolean",
                  "description": "Whether this test type requires a result.",
                  "example": true
                },
                "informationalOnly": {
                  "type": "boolean",
                  "description": "Whether this test type is informational only.",
                  "example": false
                },
                "researchAndDevelopment": {
                  "type": "boolean",
                  "description": "Whether this test type is for research and development.",
                  "example": false
                },
                "alwaysPasses": {
                  "type": "boolean",
                  "description": "Whether this test type always passes.",
                  "example": false
                },
                "maxAllowedFailureCount": {
                  "type": "integer",
                  "description": "Maximum allowed failure count.",
                  "example": 0
                },
                "passingCountAfterFail": {
                  "type": "integer",
                  "description": "Number of passing results needed after a failure.",
                  "example": 2
                },
                "passingCountAfterRemediation": {
                  "type": "integer",
                  "description": "Number of passing results needed after remediation.",
                  "example": 1
                },
                "passingCountAfterDecontamination": {
                  "type": "integer",
                  "description": "Number of passing results needed after decontamination.",
                  "example": 0
                },
                "labTestResultMode": {
                  "type": "string",
                  "description": "The lab test result mode.",
                  "example": "None"
                },
                "labTestResultModeName": {
                  "type": "string",
                  "description": "The display name of the lab test result mode.",
                  "example": "None"
                },
                "labTestResultMinimum": {
                  "type": "number",
                  "nullable": true,
                  "description": "The minimum lab test result value, if applicable."
                },
                "labTestResultMaximum": {
                  "type": "number",
                  "nullable": true,
                  "description": "The maximum lab test result value, if applicable."
                },
                "labTestResultExpirationDays": {
                  "type": "integer",
                  "nullable": true,
                  "description": "Number of days until the lab test result expires, if applicable."
                },
                "dependencyMode": {
                  "type": "string",
                  "description": "The dependency mode for this test type.",
                  "example": "RequiresAll"
                },
                "dependencyModeName": {
                  "type": "string",
                  "description": "The display name of the dependency mode.",
                  "example": "RequiresAll"
                }
              }
            }
          }
        }
      },
      "MetrcLicense": {
        "type": "object",
        "properties": {
          "licenseName": {
            "type": "string",
            "description": "The facility name for this license",
            "example": "Stinky Farms"
          },
          "licenseNumber": {
            "type": "string",
            "description": "The license number",
            "example": "LIC-00001"
          }
        }
      },
      "MetrcLocation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the location record.",
            "example": 123456
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_LOCATION",
            "enum": [
              "ACTIVE_LOCATION"
            ]
          },
          "forHarvests": {
            "type": "boolean",
            "example": true
          },
          "forPackages": {
            "type": "boolean",
            "example": true
          },
          "forPlantBatches": {
            "type": "boolean",
            "example": true
          },
          "forPlants": {
            "type": "boolean",
            "example": true
          },
          "isArchived": {
            "type": "boolean",
            "example": false
          },
          "locationTypeId": {
            "type": "integer",
            "example": 1
          },
          "locationTypeName": {
            "type": "string",
            "example": "Default Location Type"
          },
          "name": {
            "type": "string",
            "example": "Row 01"
          }
        }
      },
      "MetrcMotherPlant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the plant record.",
            "example": 123456
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "VEGETATIVE_PLANT",
            "enum": [
              "ACTIVE_MOTHER_PLANT",
              "ONHOLD_MOTHER_PLANT",
              "INACTIVE_MOTHER_PLANT"
            ]
          },
          "label": {
            "type": "string",
            "description": "Unique label identifier for the plant.",
            "example": "1A4000000000000000000001"
          },
          "stateName": {
            "type": "string",
            "description": "The current state of the plant.",
            "example": "Tracked",
            "enum": [
              "Tracked",
              "Untracked",
              "Destroyed"
            ]
          },
          "growthPhaseName": {
            "type": "string",
            "description": "The growth phase of the plant.",
            "example": "Flowering",
            "enum": [
              "Germination",
              "Vegetative",
              "Flowering",
              "Harvest"
            ]
          },
          "plantCount": {
            "type": "integer",
            "description": "Number of plants in this record.",
            "example": 1
          },
          "groupTagTypeMax": {
            "type": "integer",
            "description": "Maximum type of group tag.",
            "example": 0
          },
          "tagTypeMax": {
            "type": "integer",
            "description": "Maximum type of tag.",
            "example": 1
          },
          "plantBatchName": {
            "type": "string",
            "description": "Name of the plant batch.",
            "example": "PNXPRESS010124"
          },
          "plantBatchTypeName": {
            "type": "string",
            "description": "Type of the plant batch.",
            "example": "Clone",
            "enum": [
              "Clone",
              "Seed"
            ]
          },
          "strainId": {
            "type": "integer",
            "example": 12345
          },
          "strainName": {
            "type": "string",
            "description": "Name of the plant strain.",
            "example": "Northern Lights"
          },
          "locationName": {
            "type": "string",
            "description": "Name of the location where the plant is situated.",
            "example": "Row 05"
          },
          "sublocationName": {
            "type": "string",
            "nullable": true
          },
          "locationTypeName": {
            "type": "string",
            "description": "Type of the location.",
            "example": "Default Location Type",
            "enum": [
              "Default Location Type",
              "Greenhouse",
              "Outdoor"
            ]
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient, if applicable.",
            "example": "",
            "nullable": true
          },
          "harvestCount": {
            "type": "integer",
            "description": "Number of times the plant has been harvested.",
            "example": 0
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the plant is on hold.",
            "example": false
          },
          "plantedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was planted.",
            "example": "2024-04-09"
          },
          "vegetativeDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the vegetative stage.",
            "example": "2024-04-30"
          },
          "floweringDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the flowering stage.",
            "example": "2024-06-14"
          },
          "destroyedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was destroyed, if applicable.",
            "nullable": true
          },
          "destroyedNote": {
            "type": "string",
            "description": "Note about the destruction of the plant, if applicable.",
            "nullable": true
          },
          "destroyedByUserName": {
            "type": "string",
            "description": "Username of the person who destroyed the plant, if applicable.",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The last time the plant record was modified.",
            "example": "2024-07-26T13:00:00+00:00"
          },
          "survivedCount": {
            "type": "integer",
            "description": "Number of plants that survived from this record.",
            "example": 1
          },
          "motherPlantD ate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was designated as a mother plant.",
            "example": "2024-05-01"
          },
          "descendedCount": {
            "type": "integer",
            "description": "Number of descendant plants from this plant.",
            "example": 3
          },
          "clonedCount": {
            "type": "integer",
            "description": "Number of clones taken from this plant.",
            "example": 2
          }
        }
      },
      "MetrcOutgoingSuperTransfer": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcOutgoingTransfer"
          },
          {
            "type": "object",
            "properties": {
              "deliveries": {
                "type": "array",
                "description": "A list of this transfer's deliveries, each with optional packages and transporters",
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/MetrcTransferDelivery"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "packages": {
                          "type": "array",
                          "description": "A list of this delivery's packages",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferredPackage"
                          }
                        },
                        "transporters": {
                          "type": "array",
                          "description": "A list of this delivery's transporters",
                          "items": {
                            "$ref": "#/components/schemas/MetrcTransferTransporter"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcOutgoingTransfer": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_OUTGOING_TRANSFER",
            "enum": [
              "ACTIVE_OUTGOING_TRANSFER",
              "INACTIVE_OUTGOING_TRANSFER",
              "REJECTED_TRANSFER"
            ]
          },
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 1234567
          },
          "manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0001234567"
          },
          "shipmentLicenseTypeName": {
            "type": "string",
            "description": "Type of license for the shipment",
            "example": "Licensed"
          },
          "shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "LIC-00002"
          },
          "shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the transfer"
          },
          "transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": ""
          },
          "transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": ""
          },
          "driverName": {
            "type": "string",
            "description": "Name of the driver",
            "example": ""
          },
          "driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "Occupational license number of the driver",
            "example": ""
          },
          "driverVehicleLicenseNumber": {
            "type": "string",
            "description": "License number of the vehicle used by the driver",
            "example": ""
          },
          "vehicleMake": {
            "type": "string",
            "description": "Make of the vehicle used for transport",
            "example": ""
          },
          "vehicleModel": {
            "type": "string",
            "description": "Model of the vehicle used for transport",
            "example": ""
          },
          "vehicleLicensePlateNumber": {
            "type": "string",
            "description": "License plate number of the vehicle",
            "example": ""
          },
          "deliveryFacilities": {
            "type": "string",
            "description": "Details of the delivery facilities",
            "example": "LIC-00001 (Example Dispensary LLC)"
          },
          "deliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries in the transfer",
            "example": 1
          },
          "receivedDeliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries received",
            "example": 0
          },
          "packageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of packages in the transfer",
            "example": 8
          },
          "receivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received",
            "example": 0
          },
          "containsPlantPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains plant packages",
            "example": false
          },
          "containsProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains product packages",
            "example": true
          },
          "containsTradeSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains trade samples",
            "example": false
          },
          "containsDonation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains donations",
            "example": false
          },
          "containsTestingSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains testing samples",
            "example": false
          },
          "containsProductRequiresRemediation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains products that require remediation",
            "example": false
          },
          "containsRemediatedProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains remediated product packages",
            "example": false
          },
          "editCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of times the transfer record has been edited",
            "example": 1
          },
          "canEdit": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited",
            "example": true
          },
          "canEditOutgoingInactive": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited when outgoing and inactive",
            "example": false
          },
          "isVoided": {
            "type": "boolean",
            "description": "Indicates if the transfer has been voided",
            "example": false
          },
          "createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was created",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "createdByUserName": {
            "type": "string",
            "description": "Username of the person who created the transfer record",
            "example": "Jane Doe"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was last modified",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery associated with the transfer",
            "example": 1234566
          },
          "recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001"
          },
          "recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC"
          },
          "recipientFacilityInfo": {
            "type": "string",
            "example": ""
          },
          "shipmentTypeName": {
            "type": "string",
            "description": "Type of shipment",
            "example": "Unaffiliated Transfer"
          },
          "shipmentTransactionTypeName": {
            "type": "string",
            "description": "Type of shipment transaction",
            "example": "Wholesale"
          },
          "estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of departure",
            "example": "2024-07-26T06:00:00.000"
          },
          "actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of departure"
          },
          "estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of arrival",
            "example": "2024-07-26T17:00:00.000"
          },
          "actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of arrival"
          },
          "deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages in the delivery",
            "example": 8
          },
          "deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received in the delivery",
            "example": 0
          },
          "receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the person who received the delivery"
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the delivery was received"
          },
          "estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return departure"
          },
          "actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return departure"
          },
          "estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return arrival"
          },
          "actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return arrival"
          },
          "rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates if rejected packages were returned",
            "example": false
          },
          "transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all transporters were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all destinations were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if transporters were automatically approved",
            "example": true
          },
          "destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if destinations were automatically approved",
            "example": true
          },
          "approvalRejectDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the approval was rejected"
          },
          "approvalRejectedByUser": {
            "type": "string",
            "description": "Username of the person who rejected the approval",
            "example": "Jane Doe"
          },
          "approvalRejectedFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "License number of the facility where approval was rejected"
          },
          "approvalRejectReasonId": {
            "type": "string",
            "nullable": true,
            "description": "Reason ID for the approval rejection"
          },
          "PDFDocumentFileSystemId": {
            "type": "number",
            "example": 0
          },
          "invoiceNumber": {
            "type": "string",
            "example": ""
          },
          "lineNumber": {
            "type": "integer",
            "format": "int32",
            "example": ""
          }
        }
      },
      "MetrcOutgoingTransferReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "recipientFacilityName__contains:dispensary"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "createdDateTime:desc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcOutgoingTransfer"
            }
          }
        }
      },
      "MetrcPackage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The unique identifier for the package.",
            "example": 1234567
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "The current state of the package, such as ACTIVE, ONHOLD, INACTIVE, or INTRANSIT.",
            "enum": [
              "ACTIVE_PACKAGE",
              "ONHOLD_PACKAGE",
              "INACTIVE_PACKAGE",
              "INTRANSIT_PACKAGE"
            ],
            "example": "ACTIVE_PACKAGE"
          },
          "archivedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the package was archived, if applicable."
          },
          "containsRemediatedProduct": {
            "type": "boolean",
            "description": "Indicates if the package contains remediated product.",
            "example": false
          },
          "donationFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "The license number of the facility where the donation occurred, if applicable."
          },
          "donationFacilityName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the facility where the donation occurred, if applicable."
          },
          "facilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "The license number of the facility associated with the package."
          },
          "facilityName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the facility associated with the package."
          },
          "finishedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the package was finished, if applicable."
          },
          "initialLabTestingState": {
            "description": "The initial state of lab testing for the package, such as NotRequired, TestPassed, or NotSubmitted.",
            "$ref": "#/components/schemas/LabTestingStates"
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates if the package is archived.",
            "example": false
          },
          "isDonation": {
            "type": "boolean",
            "description": "Indicates if the package was a donation.",
            "example": false
          },
          "isDonationPersistent": {
            "type": "boolean",
            "description": "Indicates if the donation status of the package is persistent.",
            "example": false
          },
          "isFinished": {
            "type": "boolean",
            "description": "Indicates if the package is marked as finished.",
            "example": false
          },
          "isInTransit": {
            "type": "boolean",
            "description": "Indicates if the package is currently in transit.",
            "example": false
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the package is on hold.",
            "example": false
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the package is under investigation.",
            "example": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the package is on hold due to investigation.",
            "example": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the package is under investigation for recall.",
            "example": false
          },
          "investigation": {
            "type": "string",
            "nullable": true,
            "description": "Investigation details or status, if applicable."
          },
          "isOnHoldCombined": {
            "type": "boolean",
            "description": "Combined hold status indicator.",
            "example": false
          },
          "isOnRecallCombined": {
            "type": "boolean",
            "description": "Combined recall status indicator.",
            "example": false
          },
          "isProcessValidationTestingSample": {
            "type": "boolean",
            "description": "Indicates if the package is a sample for process validation testing.",
            "example": false
          },
          "isProductionBatch": {
            "type": "boolean",
            "description": "Indicates if the package is part of a production batch.",
            "example": false
          },
          "isTestingSample": {
            "type": "boolean",
            "description": "Indicates if the package is a testing sample.",
            "example": false
          },
          "isTradeSample": {
            "type": "boolean",
            "description": "Indicates if the package is a trade sample.",
            "example": false
          },
          "isTradeSamplePersistent": {
            "type": "boolean",
            "description": "Indicates if the trade sample status of the package is persistent.",
            "example": false
          },
          "item": {
            "$ref": "#/components/schemas/MetrcItem",
            "description": "Details of the item associated with the package."
          },
          "itemFromFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the facility from which the item originated.",
            "example": "LIC-00001"
          },
          "itemFromFacilityName": {
            "type": "string",
            "description": "The name of the facility from which the item originated.",
            "example": "Example Dispensary LLC"
          },
          "labTestingStateDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date when the lab testing state was last updated.",
            "example": "2024-07-24"
          },
          "labTestingStateName": {
            "type": "string",
            "description": "The current state of lab testing for the package.",
            "example": "TestPassed"
          },
          "labTestingRecordedDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the lab testing results were recorded.",
            "example": "2024-07-24T19:00:00+00:00"
          },
          "labTestingPerformedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the lab testing was performed."
          },
          "labTestStageId": {
            "type": "integer",
            "nullable": true,
            "description": "The identifier for the stage of the lab test, if applicable."
          },
          "labTestResultExpirationDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The expiration date and time of the lab test result, if applicable."
          },
          "label": {
            "type": "string",
            "description": "The label identifier for the package.",
            "example": "1A4000000000000000000001"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the package details were last modified.",
            "example": "2024-07-24T19:00:00+00:00"
          },
          "locationName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the location where the package is stored.",
            "example": "Packaging Room"
          },
          "sublocationName": {
            "type": "string",
            "nullable": true
          },
          "locationTypeName": {
            "type": "string",
            "nullable": true,
            "description": "The type of location where the package is stored.",
            "example": "Default Location Type"
          },
          "multiHarvest": {
            "type": "boolean",
            "description": "Indicates if the package contains material from multiple harvests.",
            "example": false
          },
          "multiPackage": {
            "type": "boolean",
            "description": "Indicates if the package is part of multiple packages.",
            "example": false
          },
          "multiProductionBatch": {
            "type": "boolean",
            "description": "Indicates if the package is part of multiple production batches.",
            "example": false
          },
          "note": {
            "type": "string",
            "description": "Additional notes or comments about the package.",
            "example": ""
          },
          "packageType": {
            "type": "string",
            "description": "The type of package, such as ImmaturePlant or Product.",
            "enum": [
              "ImmaturePlant",
              "Product"
            ],
            "example": "Product"
          },
          "packagedByFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the facility where the package was created.",
            "example": "LIC-00001"
          },
          "packagedByFacilityName": {
            "type": "string",
            "description": "The name of the facility where the package was created.",
            "example": "Example Dispensary LLC"
          },
          "packagedDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date when the package was created.",
            "example": "2024-07-24"
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "The license number of the patient, if applicable.",
            "example": ""
          },
          "productRequiresRemediation": {
            "type": "boolean",
            "description": "Indicates if the product in the package requires remediation.",
            "example": false
          },
          "productionBatchNumber": {
            "type": "string",
            "description": "The number of the production batch associated with the package.",
            "example": "PB00001"
          },
          "quantity": {
            "type": "number",
            "description": "The quantity of the product in the package.",
            "example": 1130.7
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the package was received, if applicable."
          },
          "receivedFromFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "The license number of the facility from which the package was received, if applicable."
          },
          "receivedFromFacilityName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the facility from which the package was received, if applicable."
          },
          "receivedFromManifestNumber": {
            "type": "string",
            "nullable": true,
            "description": "The manifest number associated with the received package, if applicable."
          },
          "remediationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date when the product in the package was remediated, if applicable."
          },
          "sourceHarvestNames": {
            "type": "string",
            "description": "The names of the harvests from which the package was created.",
            "example": "HARVEST0001"
          },
          "sourcePackageIsDonation": {
            "type": "boolean",
            "description": "Indicates if the source package was a donation.",
            "example": false
          },
          "sourcePackageIsTradeSample": {
            "type": "boolean",
            "description": "Indicates if the source package was a trade sample.",
            "example": false
          },
          "sourcePackageLabels": {
            "type": "string",
            "description": "The labels of the source packages used to create the current package.",
            "example": "1A4000000000000000000002"
          },
          "sourceProductionBatchNumbers": {
            "type": "string",
            "description": "The numbers of the production batches from which the package was created.",
            "example": "HARVEST0003"
          },
          "tradeSampleFacilityName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the facility where the trade sample was created, if applicable."
          },
          "tradeSampleFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "The license number of the facility where the trade sample was created, if applicable."
          },
          "transferManifestNumber": {
            "type": "string",
            "description": "The manifest number associated with the transfer of the package.",
            "example": ""
          },
          "unitOfMeasureAbbreviation": {
            "$ref": "#/components/schemas/UnitOfMeasureAbbreviation",
            "description": "The abbreviation for the unit of measure used for the package quantity.",
            "example": "g"
          },
          "unitOfMeasureId": {
            "type": "number",
            "description": "The ID of the unit of measure used for the package quantity.",
            "example": 4
          },
          "unitOfMeasureQuantityType": {
            "type": "string",
            "description": "The type of quantity measurement used, such as WeightBased, CountBased, or VolumeBased.",
            "enum": [
              "WeightBased",
              "CountBased",
              "VolumeBased"
            ],
            "example": "WeightBased"
          },
          "sourceHarvestCount": {
            "type": "number",
            "description": "The number of harvests from which the package was created.",
            "example": 1
          },
          "sourcePackageCount": {
            "type": "number",
            "description": "The number of source packages used to create the current package.",
            "example": 1
          },
          "sourceProcessingJobCount": {
            "type": "number",
            "description": "The number of processing jobs involved in creating the package.",
            "example": 0
          },
          "sourceProcessingJobNumbers": {
            "type": "string",
            "description": "The numbers of the processing jobs involved in creating the package.",
            "example": ""
          },
          "sourceProcessingJobNames": {
            "type": "string",
            "description": "The names of the processing jobs involved in creating the package.",
            "example": ""
          },
          "multiProcessingJob": {
            "type": "boolean",
            "description": "Indicates if multiple processing jobs were involved in creating the package.",
            "example": false
          },
          "expirationDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The expiration date of the product in the package, if applicable."
          },
          "sellByDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The sell-by date of the product in the package, if applicable."
          },
          "useByDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The use-by date of the product in the package, if applicable."
          },
          "labTestResultDocumentFileId": {
            "type": "number",
            "nullable": true,
            "description": "The file ID of the lab test result document, if available."
          },
          "isOnRetailerDelivery": {
            "type": "boolean",
            "description": "Indicates if the package is on a retailer delivery.",
            "example": false
          },
          "packageForProductDestruction": {
            "type": "boolean",
            "nullable": true,
            "description": "Indicates if the package is intended for product destruction."
          },
          "hasPartial": {
            "type": "boolean",
            "description": "Indicates if the package has partial status.",
            "example": false
          },
          "isPartial": {
            "type": "boolean",
            "description": "Indicates if the package is a partial package.",
            "example": false
          },
          "inTransitStatus": {
            "type": "string",
            "description": "The current transit status of the package.",
            "example": "None"
          },
          "processingJobTypeId": {
            "type": "integer",
            "nullable": true,
            "description": "The identifier for the type of processing job, if applicable."
          },
          "isOnRecall": {
            "type": "boolean",
            "example": false
          },
          "decontaminationDate": {
            "type": "string",
            "nullable": true
          },
          "containsDecontaminatedProduct": {
            "type": "boolean",
            "example": false
          },
          "productRequiresDecontamination": {
            "type": "boolean",
            "example": false
          },
          "productLabel": {
            "type": "string",
            "nullable": true
          },
          "labTestStage": {
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "type": "number",
            "nullable": true
          },
          "labelsLastGeneratedDateTime": {
            "type": "string",
            "nullable": true
          },
          "hasBeenSampled": {
            "type": "boolean",
            "example": false
          }
        }
      },
      "MetrcPackageLabResult": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "packageId": {
            "type": "integer",
            "description": "Unique identifier for the package.",
            "example": 123456
          },
          "labTestResultId": {
            "type": "integer",
            "description": "Unique identifier for the lab test result.",
            "example": 654321
          },
          "labFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the lab facility.",
            "example": "TES000011"
          },
          "labFacilityName": {
            "type": "string",
            "description": "Name of the lab facility.",
            "example": "Green Precision Analytics Inc."
          },
          "sourcePackageLabel": {
            "type": "string",
            "description": "Label of the source package.",
            "example": "1A4000000000000000000001"
          },
          "productName": {
            "type": "string",
            "description": "Name of the product.",
            "example": "Blue Dream Flower"
          },
          "productCategoryName": {
            "type": "string",
            "description": "Category name of the product.",
            "example": "Bud/Flower"
          },
          "testPerformedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the test was performed.",
            "example": "2024-01-01"
          },
          "overallPassed": {
            "type": "boolean",
            "description": "Indicates if the overall test was passed.",
            "example": true
          },
          "isRevoked": {
            "type": "boolean",
            "description": "Indicates if the test result has been revoked.",
            "example": false
          },
          "revokedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date when the test result was revoked, if applicable."
          },
          "labTestResultDocumentFileId": {
            "type": "integer",
            "description": "Identifier for the document file of the lab test result.",
            "example": 123456
          },
          "resultReleased": {
            "type": "boolean",
            "description": "Indicates if the test result has been released.",
            "example": true
          },
          "resultReleaseDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the test result was released.",
            "example": "2024-01-01T18:00:00+00:00"
          },
          "expirationDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Expiration date and time for the test result, if applicable."
          },
          "labTestDetailId": {
            "type": "integer",
            "description": "Identifier for the detailed lab test result.",
            "example": 4321234
          },
          "testTypeName": {
            "type": "string",
            "description": "Name of the test type.",
            "example": "Alpha-Bisabolol (%) Mandatory Terpenes"
          },
          "testPassed": {
            "type": "boolean",
            "description": "Indicates if the specific test was passed.",
            "example": true
          },
          "testResultLevel": {
            "type": "number",
            "format": "float",
            "description": "Level of the test result.",
            "example": 0.0234
          },
          "testComment": {
            "type": "string",
            "description": "Comments on the test result.",
            "example": "No significant findings."
          },
          "testInformationalOnly": {
            "type": "boolean",
            "description": "Indicates if the test result is for informational purposes only.",
            "example": false
          },
          "labTestDetailIsRevoked": {
            "type": "boolean",
            "description": "Indicates if the detailed lab test result has been revoked.",
            "example": false
          },
          "labTestDetailRevokedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date when the detailed lab test result was revoked, if applicable."
          },
          "labTestResultLastModified": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the lab test result was last modified.",
            "example": "2024-01-01T18:01:00+00:00"
          }
        }
      },
      "MetrcPackageLabResultBatch": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from.",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "The name of the object's data model.",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The timestamp of when this object was pulled from Metrc."
          },
          "licenseNumber": {
            "type": "string",
            "description": "The license number used to access this object."
          },
          "id": {
            "type": "integer",
            "description": "The unique identifier of the test result.",
            "example": 1234567
          },
          "name": {
            "type": "string",
            "description": "The name of the test panel or category.",
            "example": "Additional - Mandatory Terpenes"
          },
          "testTypesRequired": {
            "type": "integer",
            "description": "The number of test types required for this item.",
            "example": 29
          },
          "testTypesPerformed": {
            "type": "integer",
            "description": "The number of test types actually performed.",
            "example": 29
          },
          "testsPassed": {
            "type": "integer",
            "description": "The number of tests that passed.",
            "example": 58
          },
          "testsFailed": {
            "type": "integer",
            "description": "The number of tests that failed.",
            "example": 0
          },
          "isFullyRevoked": {
            "type": "boolean",
            "nullable": true,
            "description": "Whether the item is fully revoked; may be null."
          },
          "tests": {
            "type": "array",
            "description": "A list of individual test result entries.",
            "items": {
              "$ref": "#/components/schemas/MetrcPackageLabResult"
            }
          }
        }
      },
      "MetrcPackageReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__endswith:0003",
              "item.name__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcPackage"
            }
          }
        }
      },
      "MetrcPackageRequiredLabtestBatch": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackageRequiredLabtestBatch"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "packageId": {
            "type": "integer",
            "description": "Unique identifier for the package.",
            "example": 123456
          },
          "labTestBatchId": {
            "type": "integer",
            "description": "Unique identifier for the lab test batch.",
            "example": 123456
          },
          "labTestBatchName": {
            "type": "integer",
            "description": "Lab test batch name.",
            "example": "Raw Plant Material"
          }
        }
      },
      "MetrcPackageSourceHarvest": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "harvestedByFacilityLicenseNumber": {
            "type": "string",
            "example": "EX000001"
          },
          "harvestedByFacilityName": {
            "type": "string",
            "example": "Example Facility LLC"
          },
          "name": {
            "type": "string",
            "example": "01012025 - Northern Lights"
          },
          "harvestTypeName": {
            "type": "string",
            "example": "Harvest Batch"
          },
          "labTestingStateName": {
            "type": "string",
            "example": "Not Submitted"
          },
          "labTestingStateDate": {
            "type": "string",
            "nullable": true
          },
          "isOnHold": {
            "type": "boolean"
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the harvest is under investigation.",
            "example": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the harvest is on hold due to investigation.",
            "example": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the harvest is under investigation for recall.",
            "example": false
          },
          "isOnHoldCombined": {
            "type": "boolean",
            "description": "Combined hold status indicator.",
            "example": false
          },
          "harvestStartDate": {
            "type": "string",
            "format": "date",
            "example": "2025-01-01"
          }
        }
      },
      "MetrcPlant": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the plant record.",
            "example": 123456
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "VEGETATIVE_PLANT",
            "enum": [
              "VEGETATIVE_PLANT",
              "FLOWERING_PLANT",
              "ONHOLD_PLANT",
              "INACTIVE_PLANT",
              "ACTIVE_MOTHER_PLANT",
              "ONHOLD_MOTHER_PLANT",
              "INACTIVE_MOTHER_PLANT"
            ]
          },
          "label": {
            "type": "string",
            "description": "Unique label identifier for the plant.",
            "example": "1A4000000000000000000001"
          },
          "stateName": {
            "type": "string",
            "description": "The current state of the plant.",
            "example": "Tracked",
            "enum": [
              "Tracked",
              "Untracked",
              "Destroyed"
            ]
          },
          "growthPhaseName": {
            "type": "string",
            "description": "The growth phase of the plant.",
            "example": "Flowering",
            "enum": [
              "Germination",
              "Vegetative",
              "Flowering",
              "Harvest"
            ]
          },
          "plantCount": {
            "type": "integer",
            "description": "Number of plants in this record.",
            "example": 1
          },
          "groupTagTypeMax": {
            "type": "integer",
            "description": "Maximum type of group tag.",
            "example": 0
          },
          "tagTypeMax": {
            "type": "integer",
            "description": "Maximum type of tag.",
            "example": 1
          },
          "plantBatchName": {
            "type": "string",
            "description": "Name of the plant batch.",
            "example": "PNXPRESS010124"
          },
          "plantBatchTypeName": {
            "type": "string",
            "description": "Type of the plant batch.",
            "example": "Clone",
            "enum": [
              "Clone",
              "Seed"
            ]
          },
          "strainId": {
            "type": "integer",
            "example": 12345
          },
          "strainName": {
            "type": "string",
            "description": "Name of the plant strain.",
            "example": "Northern Lights"
          },
          "locationName": {
            "type": "string",
            "description": "Name of the location where the plant is situated.",
            "example": "Row 05"
          },
          "sublocationName": {
            "type": "string",
            "nullable": true
          },
          "locationTypeName": {
            "type": "string",
            "description": "Type of the location.",
            "example": "Default Location Type",
            "enum": [
              "Default Location Type",
              "Greenhouse",
              "Outdoor"
            ]
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient, if applicable.",
            "example": "",
            "nullable": true
          },
          "harvestCount": {
            "type": "integer",
            "description": "Number of times the plant has been harvested.",
            "example": 0
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the plant is on hold.",
            "example": false
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the plant is under investigation.",
            "example": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the plant is on hold due to investigation.",
            "example": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the plant is under investigation for recall.",
            "example": false
          },
          "plantedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was planted.",
            "example": "2024-04-09"
          },
          "vegetativeDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the vegetative stage.",
            "example": "2024-04-30"
          },
          "floweringDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant entered the flowering stage.",
            "example": "2024-06-14"
          },
          "destroyedDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was destroyed, if applicable.",
            "nullable": true
          },
          "destroyedNote": {
            "type": "string",
            "description": "Note about the destruction of the plant, if applicable.",
            "nullable": true
          },
          "destroyedByUserName": {
            "type": "string",
            "description": "Username of the person who destroyed the plant, if applicable.",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The last time the plant record was modified.",
            "example": "2024-07-26T13:00:00+00:00"
          },
          "survivedCount": {
            "type": "integer",
            "description": "Number of plants that survived from this record.",
            "example": 1
          },
          "motherPlantDate": {
            "type": "string",
            "format": "date",
            "description": "Date when the plant was designated as a mother plant.",
            "example": "2024-05-01"
          },
          "descendedCount": {
            "type": "integer",
            "description": "Number of descendant plants from this plant.",
            "example": 3
          },
          "clonedCount": {
            "type": "integer",
            "description": "Number of clones taken from this plant.",
            "example": 2
          }
        }
      },
      "MetrcPlantBatch": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the plant batch.",
            "example": 123456,
            "nullable": false
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_PLANTBATCH",
            "enum": [
              "ACTIVE_PLANTBATCH",
              "ONHOLD_PLANTBATCH",
              "INACTIVE_PLANTBATCH"
            ]
          },
          "name": {
            "type": "string",
            "description": "The name of the plant batch. In CA, this is a plant tag label.",
            "example": "BATCH001_01.01.25",
            "nullable": false
          },
          "plantBatchTypeName": {
            "type": "string",
            "description": "The type of the plant batch, typically a category or classification.",
            "example": "Clone",
            "nullable": false
          },
          "locationName": {
            "type": "string",
            "description": "The name of the location where the plant batch is stored or processed.",
            "example": "Row 01",
            "nullable": false
          },
          "sublocationName": {
            "type": "string",
            "nullable": true
          },
          "locationTypeName": {
            "type": "string",
            "description": "The type of location.",
            "example": "Default Location Type",
            "nullable": false
          },
          "strainId": {
            "type": "integer",
            "example": 12345
          },
          "strainName": {
            "type": "string",
            "description": "The name of the strain of the plants.",
            "example": "Pineapple Express",
            "nullable": false
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient, if applicable.",
            "example": "",
            "nullable": true
          },
          "untrackedCount": {
            "type": "integer",
            "description": "Count of untracked plants in the batch.",
            "example": 6,
            "nullable": false
          },
          "trackedCount": {
            "type": "integer",
            "description": "Count of tracked plants in the batch.",
            "example": 0,
            "nullable": false
          },
          "packagedCount": {
            "type": "integer",
            "description": "Count of packaged plants in the batch.",
            "example": 0,
            "nullable": false
          },
          "destroyedCount": {
            "type": "integer",
            "description": "Count of destroyed plants in the batch.",
            "example": 0,
            "nullable": false
          },
          "sourcePackageLabel": {
            "type": "string",
            "description": "Label of the source package, if available.",
            "nullable": true
          },
          "sourcePlantLabel": {
            "type": "string",
            "description": "Label of the source plant.",
            "example": "1A4000000000000000000001",
            "nullable": true
          },
          "sourcePlantBatchNames": {
            "type": "string",
            "description": "Names of the source plant batches, if any.",
            "example": "",
            "nullable": true
          },
          "multiPlantBatch": {
            "type": "boolean",
            "description": "Indicates if the batch contains multiple plants.",
            "example": false,
            "nullable": false
          },
          "plantedDate": {
            "type": "string",
            "format": "date",
            "description": "The date the plants were planted.",
            "example": "2024-07-19",
            "nullable": false
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The last modified timestamp for the plant batch data.",
            "example": "2024-07-26T13:00:00+00:00",
            "nullable": false
          },
          "isOnHold": {
            "type": "boolean",
            "description": "Indicates if the batch is currently on hold.",
            "example": false,
            "nullable": false
          },
          "isOnInvestigation": {
            "type": "boolean",
            "description": "Indicates if the batch is under investigation.",
            "example": false,
            "nullable": false
          },
          "isOnInvestigationHold": {
            "type": "boolean",
            "description": "Indicates if the batch is on hold due to investigation.",
            "example": false,
            "nullable": false
          },
          "isOnInvestigationRecall": {
            "type": "boolean",
            "description": "Indicates if the batch is under investigation for recall.",
            "example": false,
            "nullable": false
          }
        }
      },
      "MetrcPlantBatchReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__endswith:0003",
              "strainName__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcPlantBatch"
            }
          }
        }
      },
      "MetrcPlantReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__endswith:0003",
              "item.name__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcPlant"
            }
          }
        }
      },
      "MetrcPromoteImmaturePlantsPayload": {
        "type": "array",
        "description": "Batch of plant batches to promote. Each entry moves `plantsCount` plants out\nof an immature plant batch into a tracked growth phase, assigning one plant\ntag per plant.\n\n`startingTagId` and `endingTagId` bound a **contiguous** tag range. Every tag\nfrom start to end inclusive is consumed, and `plantsCount` must equal the\nsize of that range.\n",
        "items": {
          "type": "object",
          "properties": {
            "growthDate": {
              "type": "string",
              "format": "date",
              "description": "The date the plants entered the new growth phase.",
              "example": "2026-08-26"
            },
            "growthPhase": {
              "type": "string",
              "description": "Growth phase to promote into. Metrc supplies the valid display names\nper state; in practice `Vegetative` or `Flowering`.\n",
              "example": "Vegetative"
            },
            "id": {
              "type": "integer",
              "description": "Plant batch ID being promoted.\n\nTo find eligible plant batches, use the [Active Plant Batches](#/Plant%20Batches/get_v2_plantbatches_active)\nendpoint.\n",
              "example": 987654
            },
            "newLocationId": {
              "type": "integer",
              "description": "Location ID the promoted plants move into.\n\nTo find eligible locations, use the [Active Locations](#/Locations/get_v2_locations_active)\nendpoint.\n",
              "example": 12345
            },
            "plantsCount": {
              "type": "integer",
              "minimum": 1,
              "description": "How many plants to promote. Must equal the number of tags in the\n`startingTagId`..`endingTagId` range.\n",
              "example": 25
            },
            "startingTagId": {
              "type": "integer",
              "description": "First plant tag ID in the contiguous range consumed by this promotion.\n\nTo find eligible tags, use the [Available Tags](#/Tags/get_v2_tags_available)\nendpoint.\n",
              "example": 1527333
            },
            "endingTagId": {
              "type": "integer",
              "description": "Last plant tag ID in the contiguous range, inclusive.\n",
              "example": 1527357
            }
          },
          "required": [
            "growthDate",
            "growthPhase",
            "id",
            "newLocationId",
            "plantsCount",
            "startingTagId",
            "endingTagId"
          ],
          "additionalProperties": false
        }
      },
      "MetrcRemediationMethod": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "format": "int32",
            "description": "The unique identifier for the remediation method.",
            "example": 3
          },
          "name": {
            "type": "string",
            "description": "The name of the remediation method.",
            "example": "Repacking"
          }
        }
      },
      "MetrcSalesReceipt": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the sale",
            "example": 1234567,
            "nullable": false
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_SALES_RECEIPT",
            "enum": [
              "ACTIVE_SALES_RECEIPT",
              "INACTIVE_SALES_RECEIPT"
            ]
          },
          "receiptNumber": {
            "type": "string",
            "description": "The receipt number associated with the sale",
            "example": "001234567"
          },
          "salesDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the sale occurred",
            "example": "2024-09-05T16:35:00.123"
          },
          "salesCustomerType": {
            "type": "string",
            "description": "Type of customer for the sale",
            "example": "Consumer"
          },
          "salesCustomerTypeName": {
            "type": "string",
            "description": "Name of the customer type",
            "example": "Consumer"
          },
          "patientLicenseNumber": {
            "type": "string",
            "description": "License number of the patient (if applicable)",
            "example": "",
            "nullable": true
          },
          "caregiverLicenseNumber": {
            "type": "string",
            "description": "License number of the caregiver (if applicable)",
            "example": "",
            "nullable": true
          },
          "identificationMethod": {
            "type": "string",
            "description": "Method of identification for the customer",
            "example": "",
            "nullable": true
          },
          "patientRegistrationLocationId": {
            "type": "integer",
            "description": "Location ID for the patient registration",
            "nullable": true
          },
          "totalPackages": {
            "type": "integer",
            "description": "Total number of packages sold",
            "example": 4
          },
          "totalPrice": {
            "type": "number",
            "format": "float",
            "description": "Total price of the sale",
            "example": 113.0
          },
          "transactions": {
            "type": "array",
            "description": "List of transactions included in the sale",
            "items": {
              "type": "object"
            },
            "example": []
          },
          "isFinal": {
            "type": "boolean",
            "description": "Whether the sale is finalized",
            "example": false
          },
          "isArchived": {
            "type": "boolean",
            "description": "Whether the sale is archived",
            "example": false
          },
          "archivedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the sale was archived, if applicable",
            "nullable": true
          },
          "recordedDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the sale was recorded",
            "example": "2024-09-05T21:00:00+00:00"
          },
          "recordedByUserName": {
            "type": "string",
            "description": "The username of the person who recorded the sale",
            "example": "Jane Doe"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the sale record was last modified",
            "example": "2024-09-05T21:00:00+00:00"
          }
        }
      },
      "MetrcSalesReceiptReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "receiptNumber__endswith:0003"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "receiptNumber:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSalesReceipt"
            }
          }
        }
      },
      "MetrcSessionAuthPayload": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Your Metrc username",
            "example": "user123"
          },
          "hostname": {
            "$ref": "#/components/schemas/MetrcHostname"
          },
          "cookies": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Session cookies for authentication",
            "example": {
              "metrc_session": "abc123xyz"
            }
          },
          "facilities": {
            "type": "array",
            "description": "List of facilities associated with the session",
            "items": {
              "type": "object",
              "properties": {
                "facility_license_number": {
                  "type": "string",
                  "description": "The license number of the facility",
                  "example": "LIC-00001"
                },
                "facility_name": {
                  "type": "string",
                  "description": "The name of the facility",
                  "example": "Example Dispensary"
                }
              }
            }
          },
          "apiVerificationToken": {
            "type": "string",
            "description": "Verification token used for API authentication",
            "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
          }
        },
        "required": [
          "username",
          "hostname",
          "cookies",
          "facilities",
          "apiVerificationToken"
        ]
      },
      "MetrcState": {
        "type": "object",
        "properties": {
          "abbreviation": {
            "type": "string",
            "description": "The state abbreviation",
            "example": "CA"
          },
          "name": {
            "type": "string",
            "description": "The state name",
            "example": "California"
          },
          "hostname": {
            "type": "string",
            "description": "The Metrc hostname for this state",
            "example": "ca.metrc.com"
          }
        }
      },
      "MetrcStrain": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The item ID",
            "example": 12345
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_STRAIN",
            "enum": [
              "ACTIVE_STRAIN"
            ]
          },
          "name": {
            "type": "string",
            "description": "The strain name",
            "example": "Pineapple Express"
          },
          "sativaPercentage": {
            "type": "number",
            "example": 25
          },
          "indicaPercentage": {
            "type": "number",
            "example": 25
          },
          "cbdLevel": {
            "type": "number",
            "example": 25
          },
          "thcLevel": {
            "type": "number",
            "example": 25
          },
          "testingStatus": {
            "type": "string",
            "example": 25,
            "nullable": true
          },
          "isUsed": {
            "type": "boolean"
          },
          "isArchived": {
            "type": "boolean"
          }
        }
      },
      "MetrcStrainReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcStrain"
            }
          }
        }
      },
      "MetrcSuperharvest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcHarvest"
          },
          {
            "type": "object",
            "properties": {
              "history": {
                "type": "array",
                "description": "A list of this harvest's history records (populated via include=history).",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "plants": {
                "type": "array",
                "description": "A list of this harvest's source plants (populated via include=plants).",
                "items": {
                  "$ref": "#/components/schemas/MetrcHarvestPlant"
                }
              },
              "packages": {
                "type": "array",
                "description": "A list of packages created from this harvest (populated via include=packages).",
                "items": {
                  "$ref": "#/components/schemas/MetrcHarvestPackage"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSuperharvestReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:a",
              "name__endswith:harvest"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperharvest"
            }
          }
        }
      },
      "MetrcSuperitem": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcItem"
          },
          {
            "type": "object",
            "properties": {
              "images": {
                "type": "array",
                "description": "A list of this item's images",
                "items": {
                  "$ref": "#/components/schemas/MetrcItemImage"
                }
              },
              "ingredients": {
                "type": "array",
                "description": "A list of this item's ingredients\n",
                "items": {
                  "$ref": "#/components/schemas/MetrcItemIngredient"
                }
              },
              "notes": {
                "type": "array",
                "description": "A list of this item's notes\n",
                "items": {
                  "$ref": "#/components/schemas/MetrcItemNote"
                }
              },
              "history": {
                "type": "array",
                "description": "A list of this item's history",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "metadata": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SupercollectionMetadata"
                  },
                  {
                    "type": "object",
                    "description": "`approvalNumber` and `itemImages` are populated when available. The\n`include=images` parameter can load additional image data.\n",
                    "properties": {
                      "approvalNumber": {
                        "type": "string",
                        "description": "The approval number for this item, if applicable.\n",
                        "example": "M000303083393"
                      },
                      "itemImages": {
                        "type": "array",
                        "description": "A list of image metadata for this item\n",
                        "items": {
                          "type": "object",
                          "properties": {
                            "fileName": {
                              "type": "string",
                              "description": "Path or name of the file",
                              "example": "Product photo-Cannabis Flower.png"
                            },
                            "fileType": {
                              "$ref": "#/components/schemas/ItemImageFileType"
                            },
                            "imageFileId": {
                              "type": "integer",
                              "description": "Unique ID for this image file",
                              "example": 123456
                            },
                            "imageUrl": {
                              "type": "string",
                              "description": "URL to access the image",
                              "example": "https://example.com/images/123456.png"
                            }
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        ]
      },
      "MetrcSuperitemReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:kush",
              "name__endswith:OG"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperitem"
            }
          }
        }
      },
      "MetrcSuperlocation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcLocation"
          },
          {
            "type": "object",
            "properties": {
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSuperlocationReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:e",
              "name__endswith:room"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperlocation"
            }
          }
        }
      },
      "MetrcSuperpackage": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcPackage"
          },
          {
            "type": "object",
            "properties": {
              "sourceHarvests": {
                "type": "array",
                "description": "A list of this package's source harvests",
                "items": {
                  "$ref": "#/components/schemas/MetrcPackageSourceHarvest"
                }
              },
              "labResults": {
                "type": "array",
                "description": "A list of this package's lab results\n\nNote: these are the raw values passed back from Metrc. For extracted lab results,\nrefer to the metadata property.\n",
                "items": {
                  "$ref": "#/components/schemas/MetrcPackageLabResult"
                }
              },
              "labResultBatches": {
                "type": "array",
                "description": "A list of this package's lab result batches\n\nNote: these are the raw values passed back from Metrc. For extracted lab results,\nrefer to the metadata property.\n",
                "items": {
                  "$ref": "#/components/schemas/MetrcPackageLabResultBatch"
                }
              },
              "history": {
                "type": "array",
                "description": "A list of this package's history",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "metadata": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SupercollectionMetadata"
                  },
                  {
                    "type": "object",
                    "description": "The fields below are conditionally populated based on the `includes` param\nsent with the request.\n",
                    "properties": {
                      "harvestDates": {
                        "description": "All source harvest dates for this package, duplicates removed.\n",
                        "example": [
                          "01-01-2024",
                          "01-03-2024"
                        ],
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "initialQuantity": {
                        "type": "number",
                        "format": "float",
                        "description": "The quantity this package was initially created with, extracted from history\n"
                      },
                      "initialQuantityUnitOfMeasure": {
                        "type": "string",
                        "description": "The unit of measure this package was initially created with, extracted from history\n"
                      },
                      "manifestNumber": {
                        "type": "string",
                        "description": "The manifest number for this package's most recent transfer, extracted from history.\nOnly present for intransit packages.\n"
                      },
                      "destinationFacilityLicenseNumber": {
                        "type": "string",
                        "description": "The destination facility license number for this package's most recent transfer, extracted from history.\nOnly present for intransit packages.\n"
                      },
                      "destinationFacilityName": {
                        "type": "string",
                        "description": "The destination facility name for this package's most recent transfer, extracted from history.\nOnly present for intransit packages.\n"
                      },
                      "transferType": {
                        "type": "string",
                        "description": "The transfer type for this package's most recent transfer, extracted from history.\nOnly present for intransit packages.\n"
                      },
                      "netWeightOrVolume": {
                        "type": "number",
                        "format": "float",
                        "description": "The net weight/volume for this package.\n\n- If package unit is already weight/volume, returns the package quantity\n- If package unit is \"each\", returns `quantity * unit weight/volume`\n- If package has no measureable weight, returns quantitiy. (Only occurs in rare cases, such as with seeds)\n"
                      },
                      "netWeightOrVolumeUnitOfMeasure": {
                        "type": "string",
                        "description": "The unit of measure for this package's net weight/volume, specified in netWeightOrVolume\n"
                      },
                      "testSamplePackageLabels": {
                        "type": "array",
                        "description": "A list of all test sample package labels associated with this package, duplicates removed.\n\nThis list is typically length 1.\n",
                        "items": {
                          "type": "string",
                          "example": "1A4400001234000000005678"
                        }
                      },
                      "extractedLabResults": {
                        "type": "array",
                        "description": "An array of lab results, with values and tags extracted.\n\nThis array is populated via the labResults or labResultBatches mixin. Duplicates will be removed.\n",
                        "items": {
                          "$ref": "#/components/schemas/ExtractedLabResult"
                        }
                      },
                      "labResultPdfs": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uri"
                        },
                        "description": "A list of T3 API URLs to this package's lab result PDF files.\n\nThese files can be accessed by sending an authenticated GET request.\n"
                      },
                      "indexedLabResults": {
                        "type": "object",
                        "description": "A simplified dictionary of lab results intended for use in label templates.\n\nExample use:\n\n```\n{{ package.metadata.indexedLabResults.totalThc.name }}:\n{{ package.metadata.indexedLabResults.totalThc.value }}\n{{ package.metadata.indexedLabResults.totalThc.unit }}\n```\n\nor\n\n```\n{{ package.metadata.indexedLabResults.totalThc.full }}\n```\n\nThis would show something like:\n`Total THC: 12.5 %`\n\nAlso indexed are topTerpene1,topTerpene2,...\n",
                        "example": {
                          "totalThc": {
                            "full": "Total THC: 12.5 %",
                            "name": "Total THC",
                            "value": 12.5,
                            "unit": "%"
                          },
                          "totalCbd": {
                            "full": "Total CBD: 0.7 %",
                            "name": "Total CBD",
                            "value": 0.7,
                            "unit": "%"
                          }
                        },
                        "additionalProperties": {
                          "type": "object",
                          "description": "One entry per lab result.",
                          "additionalProperties": false,
                          "required": [
                            "full",
                            "name",
                            "value",
                            "unit"
                          ],
                          "properties": {
                            "full": {
                              "type": "string",
                              "description": "Name, value, and unit all combined into one value"
                            },
                            "name": {
                              "type": "string",
                              "description": "Human-readable test name (e.g., \"Total THC\")."
                            },
                            "value": {
                              "oneOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "string"
                                }
                              ],
                              "description": "Parsed numeric value when available; may be a string for non-detects or qualifiers\n(e.g., \"ND\", \"<LOQ\").\n"
                            },
                            "unit": {
                              "type": "string",
                              "description": "Measurement unit (e.g., \"%\", \"mg/g\", \"ppm\")."
                            }
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        ]
      },
      "MetrcSuperpackageReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__endswith:0003",
              "label__contains:ABC"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperpackage"
            }
          }
        }
      },
      "MetrcSuperplant": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcPlant"
          },
          {
            "type": "object",
            "properties": {
              "history": {
                "type": "array",
                "description": "A list of this plant's history records (populated via include=history).",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSuperplantReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__endswith:03",
              "label__contains:ABC"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperplant"
            }
          }
        }
      },
      "MetrcSuperplantbatch": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcPlantBatch"
          },
          {
            "type": "object",
            "properties": {
              "history": {
                "type": "array",
                "description": "A list of this plant batch's history records (populated via include=history).",
                "items": {
                  "$ref": "#/components/schemas/MetrcHistory"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSuperplantbatchReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:1",
              "name__endswith:batch"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperplantbatch"
            }
          }
        }
      },
      "MetrcSupersalesReceipt": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcSalesReceipt"
          },
          {
            "type": "object",
            "properties": {
              "transactions": {
                "type": "array",
                "description": "A list of this receipt's transactions (populated via include=transactions).",
                "items": {
                  "$ref": "#/components/schemas/MetrcTransaction"
                }
              },
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSupersalesReceiptReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "receiptNumber__endswith:03",
              "receiptNumber__contains:001"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "salesDateTime:desc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSupersalesReceipt"
            }
          }
        }
      },
      "MetrcSuperstrain": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcStrain"
          },
          {
            "type": "object",
            "properties": {
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSuperstrainReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "name__contains:as",
              "name__endswith:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSuperstrain"
            }
          }
        }
      },
      "MetrcSupertag": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcTag"
          },
          {
            "type": "object",
            "properties": {
              "metadata": {
                "$ref": "#/components/schemas/SupercollectionMetadata"
              }
            }
          }
        ]
      },
      "MetrcSupertagReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__endswith:0",
              "label__contains:ABC"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcSupertag"
            }
          }
        }
      },
      "MetrcTag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "example": 12345
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "The current state of the tag, such as AVAILALBE.",
            "enum": [
              "AVAILABLE_TAG",
              "USED_TAG",
              "VOID_TAG"
            ],
            "example": "AVAILABLE_TAG"
          },
          "commissionedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2022-01-19T07:00:00+00:00"
          },
          "detachedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "facilityId": {
            "type": "integer",
            "example": 12345
          },
          "groupTagTypeId": {
            "type": "string",
            "example": "TagType-6"
          },
          "groupTagTypeName": {
            "type": "string",
            "example": "Medical Package"
          },
          "isArchived": {
            "type": "boolean",
            "example": false
          },
          "isUsed": {
            "type": "boolean",
            "example": false
          },
          "label": {
            "type": "string",
            "example": "1A4000000000000000000011"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "example": "2023-08-29T01:00:00+00:00"
          },
          "maxGroupSize": {
            "type": "integer",
            "example": 1
          },
          "statusName": {
            "type": "string",
            "example": "Received"
          },
          "tagInventoryTypeName": {
            "type": "string",
            "example": "MedicalPackage"
          },
          "tagTypeId": {
            "type": "string",
            "example": "TagType-6"
          },
          "tagTypeName": {
            "type": "string",
            "example": "Medical Package"
          },
          "usedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "productLabel": {
            "type": "string",
            "example": "1A4000000000000000000011",
            "nullable": true
          },
          "isStaged": {
            "type": "boolean",
            "example": false
          }
        }
      },
      "MetrcTagReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "label__contains:0003"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "name:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcTag"
            }
          }
        }
      },
      "MetrcTransaction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the harvest",
            "example": 123467,
            "nullable": false
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "packageId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the package",
            "example": 123466,
            "nullable": false
          },
          "tripId": {
            "type": "integer",
            "description": "Identifier for the trip (nullable)",
            "nullable": true
          },
          "tripManifestNumber": {
            "type": "string",
            "description": "Trip manifest number (nullable)",
            "nullable": true
          },
          "packageLabel": {
            "type": "string",
            "description": "Label associated with the package",
            "example": "1A4000000000000000000023",
            "nullable": false
          },
          "isPartial": {
            "type": "boolean",
            "description": "Whether the package is partial (nullable)",
            "nullable": true
          },
          "hasPartial": {
            "type": "boolean",
            "description": "Whether the package has a partial item",
            "example": false,
            "nullable": false
          },
          "packageType": {
            "type": "string",
            "description": "Type of the package",
            "example": "Product",
            "nullable": false
          },
          "productName": {
            "type": "string",
            "description": "Name of the product",
            "example": " Pre-Roll - (2pk) 0.5g - Gelato",
            "nullable": false
          },
          "productCategoryName": {
            "type": "string",
            "description": "Category of the product",
            "example": "Raw Preroll (Final Packaging)",
            "nullable": false
          },
          "itemStrainName": {
            "type": "string",
            "description": "Strain name of the product (nullable)",
            "nullable": true
          },
          "itemBrandName": {
            "type": "string",
            "description": "Brand name of the product (nullable)",
            "nullable": true
          },
          "itemUnitCbdPercent": {
            "type": "number",
            "format": "float",
            "description": "Percentage of CBD in the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdContent": {
            "type": "number",
            "format": "float",
            "description": "CBD content in the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the CBD content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitCbdContentDose": {
            "type": "number",
            "format": "float",
            "description": "CBD content dose of the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the CBD dose content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitThcPercent": {
            "type": "number",
            "format": "float",
            "description": "Percentage of THC in the item (nullable)",
            "nullable": true
          },
          "itemUnitThcContent": {
            "type": "number",
            "format": "float",
            "description": "THC content in the item (nullable)",
            "nullable": true
          },
          "itemUnitThcContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the THC content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitThcContentDose": {
            "type": "number",
            "format": "float",
            "description": "THC content dose of the item (nullable)",
            "nullable": true
          },
          "itemUnitThcContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the THC dose content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitVolume": {
            "type": "number",
            "format": "float",
            "description": "Volume of the item (nullable)",
            "nullable": true
          },
          "itemUnitVolumeUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the volume unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitWeight": {
            "type": "number",
            "format": "float",
            "description": "Weight of the item",
            "example": 1.0,
            "nullable": false
          },
          "itemUnitWeightUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the weight unit of measure",
            "example": "g",
            "nullable": false
          },
          "itemServingSize": {
            "type": "string",
            "description": "Serving size of the item",
            "example": "0.5 grams",
            "nullable": false
          },
          "itemSupplyDurationDays": {
            "type": "integer",
            "description": "Supply duration in days (nullable)",
            "nullable": true
          },
          "itemUnitQuantity": {
            "type": "number",
            "format": "float",
            "description": "Quantity of the item (nullable)",
            "nullable": true
          },
          "itemUnitQuantityUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the quantity unit of measure (nullable)",
            "nullable": true
          },
          "quantitySold": {
            "type": "number",
            "format": "float",
            "description": "Quantity of the item sold",
            "example": 1.0,
            "nullable": false
          },
          "unitOfMeasureId": {
            "type": "integer",
            "description": "ID of the unit of measure",
            "example": 1,
            "nullable": false
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Name of the unit of measure",
            "example": "Each",
            "nullable": false
          },
          "unitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the unit of measure",
            "example": "ea",
            "nullable": false
          },
          "unitThcPercent": {
            "type": "number",
            "format": "float",
            "description": "Percentage of THC in the unit (nullable)",
            "nullable": true
          },
          "unitThcContent": {
            "type": "number",
            "format": "float",
            "description": "THC content in the unit (nullable)",
            "nullable": true
          },
          "unitThcContentUnitOfMeasureId": {
            "type": "integer",
            "description": "Unit of measure ID for THC content (nullable)",
            "nullable": true
          },
          "unitWeight": {
            "type": "number",
            "format": "float",
            "description": "Weight of the unit",
            "example": 1.0,
            "nullable": false
          },
          "unitWeightUnitOfMeasureId": {
            "type": "integer",
            "description": "Unit of measure ID for weight",
            "example": 4,
            "nullable": false
          },
          "totalPrice": {
            "type": "number",
            "format": "float",
            "description": "Total price of the sale",
            "example": 0.01,
            "nullable": false
          },
          "salesDeliveryState": {
            "type": "string",
            "description": "Delivery state of the sale (nullable)",
            "nullable": true
          },
          "salesDeliveryStateName": {
            "type": "string",
            "description": "Name of the delivery state (nullable)",
            "nullable": true
          },
          "isTradeSample": {
            "type": "boolean",
            "description": "Whether the sale was a trade sample",
            "example": false,
            "nullable": false
          },
          "isDonation": {
            "type": "boolean",
            "description": "Whether the sale was a donation",
            "example": false,
            "nullable": false
          },
          "isTestingSample": {
            "type": "boolean",
            "description": "Whether the sale was a testing sample",
            "example": false,
            "nullable": false
          },
          "productRequiresRemediation": {
            "type": "boolean",
            "description": "Whether the product requires remediation",
            "example": false,
            "nullable": false
          },
          "containsRemediatedProduct": {
            "type": "boolean",
            "description": "Whether the product contains remediated items",
            "example": false,
            "nullable": false
          },
          "remediationDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date of product remediation (nullable)",
            "nullable": true
          },
          "isArchived": {
            "type": "boolean",
            "description": "Whether the sale is archived",
            "example": false,
            "nullable": false
          },
          "archivedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the sale was archived (nullable)",
            "nullable": true
          },
          "recordedDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the sale was recorded",
            "example": "0001-01-01T00:00:00+00:00",
            "nullable": false
          },
          "recordedByUserName": {
            "type": "string",
            "description": "Username of the person who recorded the sale (nullable)",
            "nullable": true
          },
          "lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the sale was last modified",
            "example": "2024-09-06T20:00:00+00:00",
            "nullable": false
          },
          "invoiceNumber": {
            "type": "string",
            "description": "Invoice number of the sale (nullable)",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "float",
            "description": "Price of the sale (nullable)",
            "nullable": true
          },
          "exciseTax": {
            "type": "number",
            "format": "float",
            "description": "Excise tax applied to the sale (nullable)",
            "nullable": true
          },
          "cityTax": {
            "type": "number",
            "format": "float",
            "description": "City tax applied to the sale (nullable)",
            "nullable": true
          },
          "countyTax": {
            "type": "number",
            "format": "float",
            "description": "County tax applied to the sale (nullable)",
            "nullable": true
          },
          "municipalTax": {
            "type": "number",
            "format": "float",
            "description": "Municipal tax applied to the sale (nullable)",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "format": "float",
            "description": "Discount applied to the sale (nullable)",
            "nullable": true
          },
          "subTotal": {
            "type": "number",
            "format": "float",
            "description": "Subtotal of the sale (nullable)",
            "nullable": true
          },
          "salesTax": {
            "type": "number",
            "format": "float",
            "description": "Sales tax applied to the sale (nullable)",
            "nullable": true
          },
          "tradeSampleSaleVerified": {
            "type": "boolean",
            "description": "Whether the trade sample sale was verified (nullable)",
            "nullable": true
          },
          "productSaleVerified": {
            "type": "boolean",
            "description": "Whether the product sale was verified (nullable)",
            "nullable": true
          },
          "qrCodeDocument": {
            "type": "string",
            "nullable": true
          },
          "itemUnitThcAPercent": {
            "type": "number",
            "format": "float",
            "description": "Alternate percentage of THC in the item (nullable)",
            "nullable": true
          },
          "itemUnitThcAContent": {
            "type": "number",
            "format": "float",
            "description": "Alternate THC content in the item (nullable)",
            "nullable": true
          },
          "itemUnitThcAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the alternate THC content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitThcAContentDose": {
            "type": "number",
            "format": "float",
            "description": "Alternate THC content dose of the item (nullable)",
            "nullable": true
          },
          "itemUnitThcAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the alternate THC dose content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitCbdAPercent": {
            "type": "number",
            "format": "float",
            "description": "Alternate percentage of CBD in the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdAContent": {
            "type": "number",
            "format": "float",
            "description": "Alternate CBD content in the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdAContentUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the alternate CBD content unit of measure (nullable)",
            "nullable": true
          },
          "itemUnitCbdAContentDose": {
            "type": "number",
            "format": "float",
            "description": "Alternate CBD content dose of the item (nullable)",
            "nullable": true
          },
          "itemUnitCbdAContentDoseUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Abbreviation of the alternate CBD dose content unit of measure (nullable)",
            "nullable": true
          }
        }
      },
      "MetrcTransferDelivery": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "The transfer delivery ID",
            "example": 12345
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "manifestNumber": {
            "type": "integer",
            "format": "int32",
            "example": 1234567
          },
          "deliveryNumber": {
            "type": "integer",
            "format": "int32",
            "example": 1234567
          },
          "actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual arrival date and time."
          },
          "actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual departure date and time."
          },
          "actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual return arrival date and time."
          },
          "actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual return departure date and time."
          },
          "deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "The number of packages delivered.",
            "example": 5
          },
          "deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "The number of packages received.",
            "example": 4
          },
          "estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The estimated arrival date and time.",
            "example": "2024-07-25T15:30:00Z"
          },
          "estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The estimated departure date and time.",
            "example": "2024-07-25T13:30:00Z"
          },
          "estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated return arrival date and time."
          },
          "estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated return departure date and time."
          },
          "grossUnitOfWeightAbbreviation": {
            "type": "string",
            "nullable": true,
            "description": "The abbreviation for the unit of gross weight.",
            "example": "kg"
          },
          "grossUnitOfWeightId": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "The ID for the unit of gross weight.",
            "example": 1
          },
          "grossWeight": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "description": "The gross weight.",
            "example": 100.5
          },
          "plannedRoute": {
            "type": "string",
            "description": "The planned route for the transfer.",
            "example": "Route A"
          },
          "receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the person who received the shipment."
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the shipment was received."
          },
          "recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the recipient facility.",
            "example": "AB12345"
          },
          "recipientFacilityName": {
            "type": "string",
            "description": "The name of the recipient facility.",
            "example": "Facility A"
          },
          "rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates whether rejected packages were returned.",
            "example": false
          },
          "shipmentTransactionTypeName": {
            "type": "string",
            "description": "The name of the shipment transaction type.",
            "example": "Regular"
          },
          "shipmentTypeName": {
            "type": "string",
            "description": "The name of the shipment type.",
            "example": "Transfer",
            "enum": [
              "Transfer"
            ]
          },
          "recipientApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the recipient approved the shipment upon receipt."
          },
          "recipientAutoApproval": {
            "type": "boolean",
            "description": "Indicates whether the recipient's approval of the shipment is automatically granted, typically when there are no issues with the received packages.",
            "example": false
          },
          "PDFDocumentFileSystemId": {
            "type": "number",
            "example": 0
          },
          "invoiceNumber": {
            "type": "string",
            "example": ""
          }
        }
      },
      "MetrcTransferTemplate": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcOutgoingTransfer"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "example": "My template"
              }
            }
          }
        ]
      },
      "MetrcTransferTransporter": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the transporter's facility.",
            "example": "LIC-00001"
          },
          "transporterFacilityName": {
            "type": "string",
            "description": "The name of the transporter's facility.",
            "example": "Example Dispensary LLC"
          },
          "transporterDirectionName": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "description": "The direction of the transporter.",
            "example": "Outbound"
          },
          "transporterApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transporter was approved.",
            "example": "2024-07-26T13:00:00+00:00"
          },
          "transporterAutoApproval": {
            "type": "boolean",
            "description": "Indicates if the transporter was automatically approved.",
            "example": true
          },
          "driverName": {
            "type": "string",
            "description": "The name of the driver.",
            "example": "Jane Doe"
          },
          "driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "The occupational license number of the driver.",
            "example": "DL123456789"
          },
          "driverVehicleLicenseNumber": {
            "type": "string",
            "description": "The vehicle license number of the driver.",
            "example": "ABC1234"
          },
          "driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "description": "Information about the driver's layover leg."
          },
          "vehicleMake": {
            "type": "string",
            "description": "The make of the vehicle.",
            "example": "Ford"
          },
          "vehicleModel": {
            "type": "string",
            "description": "The model of the vehicle.",
            "example": "F-150"
          },
          "vehicleLicensePlateNumber": {
            "type": "string",
            "description": "The license plate number of the vehicle.",
            "example": "XYZ7890"
          },
          "acceptedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the transporter was accepted.",
            "example": "2024-07-26T13:00:00-05:00"
          },
          "isLayover": {
            "type": "boolean",
            "description": "Indicates if the transport includes a layover.",
            "example": false
          },
          "estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of departure.",
            "example": "2024-07-26T14:00:00+00:00"
          },
          "actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of departure."
          },
          "estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of arrival.",
            "example": "2024-07-26T15:00:00+00:00"
          },
          "actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of arrival."
          }
        }
      },
      "MetrcTransferTransporterDetails": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "shipmentPlanId": {
            "type": "integer",
            "example": 12345,
            "description": "Unique identifier for the shipment plan."
          },
          "shipmentDeliveryId": {
            "type": "integer",
            "example": 67890,
            "description": "Unique identifier for the shipment delivery."
          },
          "transporterDirection": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "example": "Outbound",
            "description": "Direction of the transporter."
          },
          "transporterFacilityId": {
            "type": "integer",
            "example": 54321,
            "description": "Unique identifier for the transporter facility."
          },
          "lineNumber": {
            "type": "integer",
            "example": 1,
            "description": "Line number in the shipment details."
          },
          "transporterDetailsTransporterLineNumber": {
            "type": "integer",
            "example": 0,
            "description": "Line number of the transporter this driver leg belongs to. Together with lineNumber this orders the legs of a multi-vehicle or layover transfer."
          },
          "vehicleRegistrationNumber": {
            "type": "string",
            "example": "",
            "description": "Registration number of the vehicle."
          },
          "driverName": {
            "type": "string",
            "example": "Jane Doe",
            "description": "Name of the driver."
          },
          "driverOccupationalLicenseNumber": {
            "type": "string",
            "example": "AB1234567",
            "description": "Occupational license number of the driver."
          },
          "driverVehicleLicenseNumber": {
            "type": "string",
            "example": "XYZ987654",
            "description": "Vehicle license number of the driver."
          },
          "driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "example": "Leg1",
            "description": "Layover leg details for the driver, if applicable."
          },
          "vehicleMake": {
            "type": "string",
            "example": "Ford",
            "description": "Make of the vehicle."
          },
          "vehicleModel": {
            "type": "string",
            "example": "Transit",
            "description": "Model of the vehicle."
          },
          "vehicleLicensePlateNumber": {
            "type": "string",
            "example": "XYZ-1234",
            "description": "License plate number of the vehicle."
          },
          "actualDriverStartDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2024-07-26T08:30:00Z",
            "description": "Actual start date and time for the driver."
          },
          "isVoided": {
            "type": "boolean",
            "example": false,
            "description": "Indicates if the record is voided."
          },
          "receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T18:47:20+00:00",
            "description": "The date and time when the shipment was received."
          },
          "receivedDeliveryCount": {
            "type": "integer",
            "example": 1,
            "description": "The number of deliveries received."
          }
        }
      },
      "MetrcTransferredPackage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique identifier for the item",
            "example": 1234567,
            "nullable": false
          },
          "hostname": {
            "type": "string",
            "description": "The hostname this object was retrieved from",
            "example": "ca.metrc.com"
          },
          "dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "TRANSFERRED_PACKAGE",
            "enum": [
              "TRANSFERRED_PACKAGE"
            ]
          },
          "packageId": {
            "type": "integer",
            "description": "Identifier for the package",
            "example": 9876543,
            "nullable": false
          },
          "recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001",
            "nullable": false
          },
          "recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC",
            "nullable": false
          },
          "manifestNumber": {
            "type": "string",
            "description": "Manifest number associated with the shipment",
            "example": "0001234567",
            "nullable": false
          },
          "packageLabel": {
            "type": "string",
            "description": "Label of the package",
            "example": "1A4000000000000000000001",
            "nullable": false
          },
          "sourceHarvestNames": {
            "type": "string",
            "description": "Names of the source harvests",
            "example": "Blue Dream",
            "nullable": true
          },
          "sourcePackageLabels": {
            "type": "string",
            "description": "Labels of the source packages",
            "example": "1A4000000000000000000002",
            "nullable": true
          },
          "productName": {
            "type": "string",
            "description": "Name of the product",
            "example": "Blue Dream Flower | 3.5g",
            "nullable": false
          },
          "productCategoryName": {
            "type": "string",
            "description": "Category name of the product",
            "example": "Bud/Flower (Final Packaging)",
            "nullable": false
          },
          "itemStrainName": {
            "type": "string",
            "description": "Strain name of the item",
            "example": "Blue Dream",
            "nullable": false
          },
          "labTestingStateName": {
            "description": "Lab testing status of the item",
            "$ref": "#/components/schemas/LabTestingStates"
          },
          "shippedQuantity": {
            "type": "number",
            "description": "Quantity shipped",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "shippedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the shipped quantity",
            "example": "g",
            "nullable": false
          },
          "grossWeight": {
            "type": "number",
            "description": "Gross weight of the package",
            "format": "double",
            "example": 224.0,
            "nullable": false
          },
          "grossUnitOfWeightAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the gross weight",
            "example": "g",
            "nullable": false
          },
          "shipperWholesalePrice": {
            "type": "number",
            "description": "Wholesale price from the shipper",
            "format": "double",
            "nullable": true
          },
          "receivedQuantity": {
            "type": "number",
            "description": "Quantity received",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "receivedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the received quantity",
            "example": "g",
            "nullable": false
          },
          "receiverWholesalePrice": {
            "type": "number",
            "description": "Wholesale price to the receiver",
            "format": "double",
            "nullable": true
          },
          "shipmentPackageStateName": {
            "type": "string",
            "description": "State of the shipment package",
            "example": "Accepted",
            "enum": [
              "Accepted",
              "Rejected",
              "Pending"
            ],
            "nullable": false
          },
          "actualDepartureDateTime": {
            "type": "string",
            "description": "Actual departure date and time",
            "format": "date-time",
            "nullable": true
          },
          "receivedDateTime": {
            "type": "string",
            "description": "Date and time when the package was received",
            "format": "date-time",
            "example": "2024-07-26T00:00:00-05:00",
            "nullable": false
          },
          "processingJobTypeName": {
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "type": "number",
            "nullable": true
          }
        },
        "required": [
          "grossUnitOfWeightAbbreviation",
          "grossWeight",
          "id",
          "itemStrainName",
          "labTestingStateName",
          "manifestNumber",
          "packageId",
          "packageLabel",
          "productCategoryName",
          "productName",
          "receivedDateTime",
          "receivedQuantity",
          "receivedUnitOfMeasureAbbreviation",
          "recipientFacilityLicenseNumber",
          "recipientFacilityName",
          "shipmentPackageStateName",
          "shippedQuantity",
          "shippedUnitOfMeasureAbbreviation"
        ]
      },
      "MetrcTransferredPackageReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "packageLabel__endswith:0003",
              "productName__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetrcTransferredPackage"
            }
          }
        }
      },
      "MetrcUnfinalizeSalesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "The sales receipt ID",
              "example": 12345
            }
          },
          "required": [
            "id"
          ],
          "additionalProperties": false
        }
      },
      "MetrcUnfinishPackagesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "integer",
              "description": "The package ID",
              "example": 12345
            }
          },
          "required": [
            "id"
          ],
          "additionalProperties": false
        }
      },
      "MetrcUpdateTransferTemplatesPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "description": "A schema representing a shipment with details about destinations, transporters, and packages.",
          "required": [
            "id",
            "name",
            "destinations"
          ],
          "additionalProperties": false,
          "properties": {
            "id": {
              "type": "integer",
              "description": "The transfer ID",
              "example": 12345
            },
            "name": {
              "type": "string",
              "example": "My template"
            },
            "destinations": {
              "type": "array",
              "description": "List of destinations for the shipment.",
              "items": {
                "type": "object",
                "required": [
                  "estimatedArrivalDateTime",
                  "estimatedDepartureDateTime",
                  "plannedRoute",
                  "recipientId",
                  "transferTypeId"
                ],
                "additionalProperties": false,
                "properties": {
                  "recipientId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Facility ID of the destination facility.\n\nTo find eligible destination facilities, use the [Destinations](#/Create%20Transfer/get_v2_packages_create_transfer_destination_list)\nendpoint.\n",
                    "example": 123456
                  },
                  "plannedRoute": {
                    "type": "string",
                    "description": "Planned route for the shipment.",
                    "example": "Keep going, you can't miss it"
                  },
                  "transferTypeId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the type of transfer.",
                    "example": 8
                  },
                  "invoiceNumber": {
                    "type": "string",
                    "description": "Invoice number for this delivery. *Not all transfer types require this value.*\n\nThis value is only required if the `transferType` has `requiresInvoiceNumber=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": "123456-ABC"
                  },
                  "estimatedDepartureDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated departure date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "estimatedArrivalDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated arrival date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "grossWeight": {
                    "type": "number",
                    "format": "float",
                    "description": "Gross weight of the transfer. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 123.45
                  },
                  "grossUnitOfWeightId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the unit of weight. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 4
                  },
                  "transporters": {
                    "type": "array",
                    "description": "List of transporters for the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "transporterId",
                        "phoneNumberForQuestions",
                        "transporterDetails"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "transporterId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Facility ID of the transporter facility. \n\nTo find eligible transporter facilities, use the [Transporters](#/Create%20Transfer/get_v2_packages_create_transfer_transporter_list) endpoint.\n",
                          "example": 12345
                        },
                        "phoneNumberForQuestions": {
                          "type": "string",
                          "description": "Phone number for inquiries.",
                          "example": "5555551234"
                        },
                        "transporterDetails": {
                          "type": "array",
                          "description": "Details of the transporter.",
                          "items": {
                            "type": "object",
                            "required": [
                              "driverName",
                              "driverOccupationalLicenseNumber",
                              "driverLicenseNumber",
                              "vehicleMake",
                              "vehicleModel",
                              "vehicleLicensePlateNumber"
                            ],
                            "additionalProperties": false,
                            "properties": {
                              "driverName": {
                                "type": "string",
                                "description": "Name of the driver.",
                                "example": "Jane Doe"
                              },
                              "driverOccupationalLicenseNumber": {
                                "type": "string",
                                "description": "Occupational license number of the driver.",
                                "example": "LIC12345"
                              },
                              "driverLicenseNumber": {
                                "type": "string",
                                "description": "Driver's license number.",
                                "example": "D1234567"
                              },
                              "driverLayoverLeg": {
                                "type": "string",
                                "description": "Layover leg details (if any).",
                                "example": "",
                                "nullable": true
                              },
                              "vehicleMake": {
                                "type": "string",
                                "description": "Make of the vehicle.",
                                "example": "Ford"
                              },
                              "vehicleModel": {
                                "type": "string",
                                "description": "Model of the vehicle.",
                                "example": "GT"
                              },
                              "vehicleLicensePlateNumber": {
                                "type": "string",
                                "description": "License plate number of the vehicle.",
                                "example": "ABC1234"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "packages": {
                    "type": "array",
                    "description": "List of packages in the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "id"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "number",
                          "format": "int32",
                          "description": "Identifier of the package.",
                          "example": 123456
                        },
                        "wholesalePrice": {
                          "type": "number",
                          "format": "float",
                          "description": "Wholesale price of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `transactionType=\"Wholesale\"`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 200.0
                        },
                        "grossWeight": {
                          "type": "number",
                          "format": "float",
                          "description": "Gross weight of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 123.45
                        },
                        "grossUnitOfWeightId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Unit of weight identifier for the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 5
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "MetrcUpdateTransfersPayload": {
        "type": "array",
        "items": {
          "type": "object",
          "description": "A schema representing a shipment with details about destinations, transporters, and packages.",
          "required": [
            "id",
            "destinations"
          ],
          "additionalProperties": false,
          "properties": {
            "id": {
              "type": "integer",
              "description": "The transfer ID",
              "example": 12345
            },
            "destinations": {
              "type": "array",
              "description": "List of destinations for the shipment.",
              "items": {
                "type": "object",
                "required": [
                  "estimatedArrivalDateTime",
                  "estimatedDepartureDateTime",
                  "plannedRoute",
                  "recipientId",
                  "transferTypeId"
                ],
                "additionalProperties": false,
                "properties": {
                  "recipientId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Facility ID of the destination facility.\n\nTo find eligible destination facilities, use the [Destinations](#/Create%20Transfer/get_v2_packages_create_transfer_destination_list)\nendpoint.\n",
                    "example": 123456
                  },
                  "plannedRoute": {
                    "type": "string",
                    "description": "Planned route for the shipment.",
                    "example": "Keep going, you can't miss it"
                  },
                  "transferTypeId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the type of transfer.",
                    "example": 8
                  },
                  "invoiceNumber": {
                    "type": "string",
                    "description": "Invoice number for this delivery. *Not all transfer types require this value.*\n\nThis value is only required if the `transferType` has `requiresInvoiceNumber=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": "123456-ABC"
                  },
                  "estimatedDepartureDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated departure date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "estimatedArrivalDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Estimated arrival date and time.",
                    "example": "2023-05-23T21:22:35"
                  },
                  "grossWeight": {
                    "type": "number",
                    "format": "float",
                    "description": "Gross weight of the transfer. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 123.45
                  },
                  "grossUnitOfWeightId": {
                    "type": "number",
                    "format": "int32",
                    "description": "Identifier for the unit of weight. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresDestinationGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                    "example": 4
                  },
                  "transporters": {
                    "type": "array",
                    "description": "List of transporters for the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "transporterId",
                        "phoneNumberForQuestions",
                        "transporterDetails"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "transporterId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Facility ID of the transporter facility. \n\nTo find eligible transporter facilities, use the [Transporters](#/Create%20Transfer/get_v2_packages_create_transfer_transporter_list) endpoint.\n",
                          "example": 12345
                        },
                        "phoneNumberForQuestions": {
                          "type": "string",
                          "description": "Phone number for inquiries.",
                          "example": "5555551234"
                        },
                        "transporterDetails": {
                          "type": "array",
                          "description": "Details of the transporter.",
                          "items": {
                            "type": "object",
                            "required": [
                              "driverName",
                              "driverOccupationalLicenseNumber",
                              "driverLicenseNumber",
                              "vehicleMake",
                              "vehicleModel",
                              "vehicleLicensePlateNumber"
                            ],
                            "additionalProperties": false,
                            "properties": {
                              "driverName": {
                                "type": "string",
                                "description": "Name of the driver.",
                                "example": "Jane Doe"
                              },
                              "driverOccupationalLicenseNumber": {
                                "type": "string",
                                "description": "Occupational license number of the driver.",
                                "example": "LIC12345"
                              },
                              "driverLicenseNumber": {
                                "type": "string",
                                "description": "Driver's license number.",
                                "example": "D1234567"
                              },
                              "driverLayoverLeg": {
                                "type": "string",
                                "description": "Layover leg details (if any).",
                                "example": "",
                                "nullable": true
                              },
                              "vehicleMake": {
                                "type": "string",
                                "description": "Make of the vehicle.",
                                "example": "Ford"
                              },
                              "vehicleModel": {
                                "type": "string",
                                "description": "Model of the vehicle.",
                                "example": "GT"
                              },
                              "vehicleLicensePlateNumber": {
                                "type": "string",
                                "description": "License plate number of the vehicle.",
                                "example": "ABC1234"
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "packages": {
                    "type": "array",
                    "description": "List of packages in the transfer.",
                    "items": {
                      "type": "object",
                      "required": [
                        "id"
                      ],
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "number",
                          "format": "int32",
                          "description": "Identifier of the package.",
                          "example": 123456
                        },
                        "wholesalePrice": {
                          "type": "number",
                          "format": "float",
                          "description": "Wholesale price of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `transactionType=\"Wholesale\"`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 200.0
                        },
                        "grossWeight": {
                          "type": "number",
                          "format": "float",
                          "description": "Gross weight of the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 123.45
                        },
                        "grossUnitOfWeightId": {
                          "type": "number",
                          "format": "int32",
                          "description": "Unit of weight identifier for the package. *Not all transfer types require this value.*\n\nOnly should be set if the `transferType` has `requiresPackagesGrossWeight=true`.\n\nSee the [create transfer inputs](#/Create%20Transfer/get_v2_transfers_create_inputs) endpoints for details.\n",
                          "example": 5
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "MetrcVehicle": {
        "type": "object",
        "properties": {
          "facilityId": {
            "type": "integer",
            "description": "Facility identifier.",
            "example": 12345
          },
          "id": {
            "type": "integer",
            "description": "Unique identifier for the vehicle.",
            "example": 12345
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicates if the vehicle is archived.",
            "example": false
          },
          "lastModified": {
            "type": "string",
            "description": "Date and time the vehicle information was last modified.",
            "format": "date-time",
            "example": "2022-06-16T07:43:23-05:00"
          },
          "licensePlateNumber": {
            "type": "string",
            "description": "License plate number of the vehicle.",
            "example": "ABC1234"
          },
          "make": {
            "type": "string",
            "description": "Make of the vehicle.",
            "example": "Ford"
          },
          "model": {
            "type": "string",
            "description": "Model of the vehicle.",
            "example": "Transit Connect"
          }
        }
      },
      "MetrcVoidSalesReceiptPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The sales receipt ID",
            "example": 12345
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "MetrcVoidTransferPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The transfer ID",
            "example": 12345
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "OutgoingTransferManifestReportResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "manifestNumber__endswith:0003",
              "productName__contains:kush"
            ]
          },
          "filterLogic": {
            "type": "string",
            "description": "The filter logic specified for this report, if any",
            "example": "and",
            "nullable": true
          },
          "sort": {
            "type": "string",
            "description": "The sort order specified for this report, if any",
            "example": "label:asc",
            "nullable": true
          },
          "licenseNumber": {
            "type": "string",
            "description": "The unique identifier for the license associated with this request.",
            "example": "LIC-00001"
          },
          "data": {
            "type": "array",
            "description": "The transfers loaded for this report, nested. Requesting contentType=csv returns the flattened T3OutgoingTransferManifest columns instead, one row per package.",
            "items": {
              "$ref": "#/components/schemas/T3OutgoingTransferManifestRecord"
            }
          }
        }
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "example": 1
          },
          "totalPages": {
            "type": "integer",
            "example": 3
          },
          "pageSize": {
            "type": "integer",
            "example": 100
          },
          "total": {
            "type": "integer",
            "example": 235
          }
        }
      },
      "RefreshToken": {
        "type": "string",
        "description": "Refresh token used to acquire a new access token",
        "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiYWJjMTIzIiwidXNlcm5hbWUiOiJleGFtcGxlVXNlciIsImV4cCI6MTYwOTM1OTAwMH0.HJbO67hFNph5t6KjKQ1T1-EKn9H7hvhb34bTft1zDsQ"
      },
      "ReportDeliveryResponse": {
        "type": "object",
        "description": "Returned by a report endpoint when `delivery=email`.\n\nThe response is sent before the report has been generated -- often before generation\nhas even started. It confirms that the request was accepted and names where the\nresult will go; it carries no data and no link.\n\nThere is no status endpoint and nothing to poll. The report arrives by email, and so\ndoes any failure: because the response has already been sent, errors that would\notherwise have been an HTTP status are emailed to the recipient with the same title\nand explanation.\n\nFor `contentType=googleSheets` the response carries no sheet URL because the sheet\ndoes not exist yet -- it is created by the worker after this receipt is sent. The\nlink is emailed to the recipient once it does, and Google sends its own share\nnotification alongside. To receive the URL in the response instead, drop\n`delivery=email`: an inline `googleSheets` request builds the sheet during the\nrequest and returns a `302` to it.\n",
        "required": [
          "status",
          "recipient",
          "contentType"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "Always `processing`. The report is being generated and will be delivered when\nit is ready.\n",
            "enum": [
              "processing"
            ],
            "example": "processing"
          },
          "recipient": {
            "type": "string",
            "format": "email",
            "description": "The address the report will be delivered to.",
            "example": "you@example.com"
          },
          "contentType": {
            "type": "string",
            "description": "The format the report will be delivered in.",
            "enum": [
              "json",
              "csv",
              "xlsx",
              "googleSheets"
            ],
            "example": "xlsx"
          }
        }
      },
      "SavedReport": {
        "type": "object",
        "properties": {
          "publicId": {
            "type": "string",
            "format": "uuid",
            "description": "The saved report's identifier. Stable across every edit, so a client\nholding it keeps referring to the same saved report however the\ndefinition changes.\n",
            "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
          },
          "name": {
            "type": "string",
            "description": "User-supplied label. Unique per Metrc account.",
            "example": "Daily veg plant count"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Optional note about what this report is for.",
            "example": "Feeds the cultivation team's morning dashboard"
          },
          "reportUrl": {
            "type": "string",
            "description": "The saved report as a URL: a report path plus its query string. This is\nwhat you request to get the report \u2014 saved reports are definitions, and\nthese endpoints never run one.\n\n**Origin-relative, and unauthenticated.** Two things are yours to add:\n\n- Prepend the API origin, e.g. `https://api.trackandtrace.tools`. The\n  origin is deliberately omitted so one saved report is correct in every\n  environment it might be read from.\n- Supply your `secretKey`, as a query parameter or an `X-T3-API-Key`\n  header. It is stripped before the report is saved and never stored, so\n  a saved report is not a credential.\n\nRendered from the stored configuration on every read rather than kept as\ntext, so it always names the endpoint's current published path. A URL\nsaved against a deprecated path therefore reads back as the current one.\n",
            "example": "/v2/plants/vegetative/report?licenseNumber=C11-0000001-LIC&contentType=csv"
          },
          "t3EndpointId": {
            "type": "string",
            "description": "Which report this is. Stored directly rather than inferred from a path,\nso a saved report is unaffected if a report endpoint's URL is ever\ncorrected.\n",
            "example": "VEGETATIVE_PLANTS_REPORT"
          },
          "licenseNumbers": {
            "type": "array",
            "description": "The licenses the report covers, in row order. Read out of the saved\nparameters, so it always matches what the report actually requests.\n",
            "items": {
              "type": "string"
            },
            "example": [
              "C11-0000001-LIC"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          }
        }
      },
      "ScanTagListPayload": {
        "type": "object",
        "required": [
          "licenseNumber",
          "handles"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number associated with this tag list.",
            "example": "LIC-00001"
          },
          "handles": {
            "type": "array",
            "description": "The handles to mark as scanned. Duplicates in this array are treated as\na single handle. Handles that don't match any entry in the list are\nreturned in `handlesNotFound`.\n",
            "items": {
              "type": "string"
            },
            "example": [
              "1A4...",
              "1A5..."
            ]
          },
          "scannedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp to set on matching entries. If omitted, the server's current\ntime is used. Applied to every matching entry, including entries whose\n`scannedAt` was already set (the value is overwritten).\n",
            "example": "2024-08-09T12:34:56.789Z"
          }
        }
      },
      "SearchEventStream": {
        "type": "string",
        "description": "Server-Sent Events stream emitted when `/v2/search` is invoked with\n`stream=true` or `Accept: text/event-stream`. The body is a sequence of SSE\nmessages. There are two event types:\n\n\n**`event: result`** \u2014 emitted once per downstream Metrc endpoint as it\ncompletes. Successful payload schema:\n\n```json\n{\n  \"endpointId\": \"ACTIVE_PACKAGES\",\n  \"status\": \"success\",\n  \"results\": [\n    { \"score\": 0.7142857142857143, \"matchedEntry\": { \"...\": \"...\" } }\n  ],\n  \"truncated\": true,\n  \"totalAvailable\": 47\n}\n```\n\nSuccessful payloads carry a `results` array (already filtered by `minScore`\nand sorted by `score` descending), a `truncated` boolean indicating whether\nMetrc had more matches available than `pageSize` returned, and\n`totalAvailable` for Metrc's reported total count. Failed payloads have\n`status: \"failed\"`, an `error` string, and an empty `results` array \u2014 no\n`truncated` or `totalAvailable`:\n\n```json\n{\n  \"endpointId\": \"INTRANSIT_PACKAGES\",\n  \"status\": \"failed\",\n  \"error\": \"Metrc Connection Failed\",\n  \"results\": []\n}\n```\n\n\n**`event: done`** \u2014 emitted once after every downstream endpoint has\ncompleted. Payload mirrors the JSON-mode summary fields plus an echo of the\nresolved request parameters:\n\n```json\n{\n  \"queriedMetrcEndpointIds\": [\"ACTIVE_PACKAGES\", \"AVAILABLE_TAGS\"],\n  \"failedMetrcEndpointIds\": [],\n  \"skippedMetrcEndpointIds\": [\"ACTIVE_ITEMS\"],\n  \"detectedQueryFormats\": [\"HEX_STRING\", \"INTEGER\"],\n  \"request\": {\n    \"query\": \"1A4FF...\",\n    \"licenseNumber\": \"LIC-00001\",\n    \"pageSize\": 10,\n    \"minScore\": 0.0\n  }\n}\n```\n\n\nEach SSE message is two lines (`event: <type>\\ndata: <json>\\n`) followed by\na blank line, per the SSE spec. Clients should consume `result` events\nincrementally and treat `done` as the terminal signal.\n",
        "example": "event: result\ndata: {\"endpointId\":\"ACTIVE_PACKAGES\",\"status\":\"success\",\"results\":[{\"score\":0.71,\"matchedEntry\":{\"...\":\"...\"}}],\"truncated\":true,\"totalAvailable\":47}\n\nevent: result\ndata: {\"endpointId\":\"AVAILABLE_TAGS\",\"status\":\"success\",\"results\":[],\"truncated\":false,\"totalAvailable\":3}\n\nevent: done\ndata: {\"queriedMetrcEndpointIds\":[\"ACTIVE_PACKAGES\",\"AVAILABLE_TAGS\"],\"failedMetrcEndpointIds\":[],\"skippedMetrcEndpointIds\":[\"ACTIVE_ITEMS\"],\"detectedQueryFormats\":[\"HEX_STRING\",\"INTEGER\"],\"request\":{\"query\":\"1A4FF...\",\"licenseNumber\":\"LIC-00001\",\"pageSize\":10,\"minScore\":0.0}}\n"
      },
      "SearchResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "description": "Ranked list of matched objects across all queried endpoints. Sorted by `score` descending. Each downstream endpoint contributes at most 10 entries, so the maximum length is `len(queriedMetrcEndpointIds) * 10`.",
            "items": {
              "type": "object",
              "properties": {
                "endpointId": {
                  "description": "Identifier of the Metrc endpoint that produced this match. Use this to disambiguate `matchedEntry`, since different endpoints return different shapes.",
                  "$ref": "#/components/schemas/EndpointId"
                },
                "score": {
                  "type": "number",
                  "description": "Relevance score for this match. Higher is better. Computed from query length, target length, and the position of the match within the target. Scores from different endpoints are directly comparable.",
                  "format": "float"
                },
                "matchedEntry": {
                  "type": "object",
                  "description": "The Metrc object that matched the query. Shape depends on `endpointId` \u2014 for example, a match from `ACTIVE_PACKAGES` looks like a Metrc package, a match from `INCOMING_ACTIVE_TRANSFERS` looks like a Metrc transfer."
                }
              }
            },
            "example": [
              {
                "endpointId": "ACTIVE_ITEMS",
                "score": 0.12244897959183673,
                "matchedEntry": {
                  "administrationMethod": "N/A",
                  "allergens": "",
                  "approvalStatusDateTime": "2023-08-20T15:11:10+00:00",
                  "approvalStatusName": "Approved",
                  "dataModel": "MetrcItem",
                  "defaultLabTestingStateName": "NotSubmitted",
                  "description": "",
                  "expirationConfigurationState": "Off",
                  "expirationDateConfiguration": "Off",
                  "expirationDateDaysInAdvance": null,
                  "facilityLicenseNumber": null,
                  "facilityName": null,
                  "id": 12345,
                  "index": "ACTIVE_ITEM",
                  "isArchived": false,
                  "isUsed": false,
                  "itemBrandId": 0,
                  "itemBrandName": null,
                  "labelImages": [],
                  "labelPhotoDescription": "",
                  "lastModified": null,
                  "licenseNumber": "EX-00001",
                  "name": "Blue Dream - 3.5g Prepack",
                  "numberOfDoses": 14,
                  "packagingImages": [],
                  "packagingPhotoDescription": "",
                  "processingJobCategoryId": null,
                  "processingJobCategoryName": null,
                  "productCategoryId": 401,
                  "productCategoryName": "Bud/Flower (Final Packaging)",
                  "productCategoryTypeName": "Buds",
                  "productImages": [],
                  "productPDFDocuments": [],
                  "productPhotoDescription": "",
                  "publicIngredients": "Cannabis flower",
                  "quantityTypeName": "WeightBased",
                  "retrievedAt": "2024-08-28T01:19:48.123456",
                  "sellByConfigurationState": "Off",
                  "sellByDateConfiguration": "Off",
                  "sellByDateDaysInAdvance": null,
                  "servingSize": "0.25g",
                  "strainName": "Blue Dream",
                  "supplyDurationDays": null,
                  "unitCbdContent": null,
                  "unitCbdContentDose": null,
                  "unitCbdContentDoseUnitOfMeasureAbbreviation": null,
                  "unitCbdContentUnitOfMeasureAbbreviation": null,
                  "unitCbdPercent": null,
                  "unitOfMeasureId": 4,
                  "unitOfMeasureName": "Grams",
                  "unitQuantity": null,
                  "unitQuantityUnitOfMeasureAbbreviation": null,
                  "unitThcContent": null,
                  "unitThcContentDose": null,
                  "unitThcContentDoseUnitOfMeasureAbbreviation": null,
                  "unitThcContentUnitOfMeasureAbbreviation": null,
                  "unitThcContentUnitOfMeasureId": null,
                  "unitThcPercent": null,
                  "unitVolume": null,
                  "unitVolumeUnitOfMeasureAbbreviation": null,
                  "unitWeight": null,
                  "unitWeightUnitOfMeasureAbbreviation": null,
                  "unitWeightUnitOfMeasureId": null,
                  "useByConfigurationState": "Off",
                  "useByDateConfiguration": "Off",
                  "useByDateDaysInAdvance": null
                }
              },
              {
                "endpointId": "TRANSFERRED_PACKAGES",
                "score": 0.08333333333333333,
                "matchedEntry": {
                  "actualDepartureDateTime": "2024-07-17T07:00:00-05:00",
                  "dataModel": "MetrcTransferredPackage",
                  "grossUnitOfWeightAbbreviation": "g",
                  "grossWeight": 222.0,
                  "id": 123456,
                  "index": "TRANSFERRED_PACKAGE",
                  "itemStrainName": "Blue Dream",
                  "labTestingStateName": "TestPassed",
                  "licenseNumber": "EX-00001",
                  "manifestNumber": "1234566",
                  "packageId": 1234566,
                  "packageLabel": "1A4000000000000000000001",
                  "productCategoryName": "Shake/Trim",
                  "productName": "Blue Dream",
                  "receivedDateTime": "2024-07-17T00:00:00-05:00",
                  "receivedQuantity": 222.0,
                  "receivedUnitOfMeasureAbbreviation": "g",
                  "receiverWholesalePrice": 0.01,
                  "recipientFacilityLicenseNumber": "LIC-00002",
                  "recipientFacilityName": "Example Distributor LLC",
                  "retrievedAt": "2024-08-28T15:01:11.123456",
                  "shipmentPackageStateName": "Accepted",
                  "shippedQuantity": 222.0,
                  "shippedUnitOfMeasureAbbreviation": "g",
                  "shipperWholesalePrice": 0.01,
                  "sourceHarvestNames": "HARVEST0001",
                  "sourcePackageLabels": "1A4000000000000000000002, 1A4000000000000000000003"
                }
              }
            ]
          },
          "queriedMetrcEndpointIds": {
            "description": "Endpoints that were successfully queried for this request. Combined with `failedMetrcEndpointIds` and `skippedMetrcEndpointIds`, this accounts for every endpoint the request would have touched.",
            "type": "array",
            "example": [
              "ACTIVE_ITEMS",
              "ACTIVE_HARVESTS",
              "ACTIVE_PLANTBATCHES",
              "ACTIVE_PACKAGES",
              "INTRANSIT_PACKAGES",
              "TRANSFERRED_PACKAGES",
              "VEGETATIVE_PLANTS",
              "FLOWERING_PLANTS"
            ],
            "items": {
              "$ref": "#/components/schemas/EndpointId"
            }
          },
          "failedMetrcEndpointIds": {
            "description": "Endpoints that were attempted but errored out \u2014 typically a Metrc API error, timeout, or insufficient license permissions. Their results are omitted from `data`.",
            "type": "array",
            "example": [],
            "items": {
              "$ref": "#/components/schemas/EndpointId"
            }
          },
          "skippedMetrcEndpointIds": {
            "description": "Endpoints that were not queried because the detected query format is not searchable on any of their fields. For example, a `BASIC_STRING` query like `\"Blue Dream\"` skips transfer endpoints that only search `manifestNumber`, and a `DATETIME` query like `\"2024-07-17\"` skips every endpoint (no endpoint currently searches date fields). Use `detectedQueryFormats` to understand why.",
            "type": "array",
            "example": [
              "INCOMING_ACTIVE_TRANSFERS",
              "OUTGOING_ACTIVE_TRANSFERS",
              "OUTGOING_REJECTED_TRANSFERS"
            ],
            "items": {
              "$ref": "#/components/schemas/EndpointId"
            }
          },
          "detectedQueryFormats": {
            "description": "Formats the server detected for the query string. A query may match multiple formats simultaneously \u2014 for example, `\"12345\"` is both `INTEGER` and `HEX_STRING`. Format detection determines which endpoints are queried versus skipped.",
            "type": "array",
            "example": [
              "HEX_STRING",
              "INTEGER"
            ],
            "items": {
              "type": "string",
              "enum": [
                "DATETIME",
                "HEX_STRING",
                "INTEGER",
                "BASIC_STRING"
              ]
            }
          },
          "endpointMetadata": {
            "description": "Per-endpoint completion metadata, one entry per endpoint in `queriedMetrcEndpointIds`. `truncated` is true when Metrc reported more matches than `pageSize` returned \u2014 raise `pageSize` to retrieve them. `totalAvailable` is Metrc's reported total count for the underlying query. Failed and skipped endpoints are omitted (no Metrc response to derive from).",
            "type": "array",
            "example": [
              {
                "endpointId": "ACTIVE_PACKAGES",
                "truncated": true,
                "totalAvailable": 47
              },
              {
                "endpointId": "AVAILABLE_TAGS",
                "truncated": false,
                "totalAvailable": 3
              }
            ],
            "items": {
              "type": "object",
              "properties": {
                "endpointId": {
                  "$ref": "#/components/schemas/EndpointId"
                },
                "truncated": {
                  "type": "boolean"
                },
                "totalAvailable": {
                  "type": "integer"
                }
              }
            }
          },
          "request": {
            "description": "Echo of the resolved request parameters used to produce this response. Useful when the response is cached or proxied, or when the caller fans out concurrent searches. Values reflect server-side defaults and trimming, not the raw query string.",
            "type": "object",
            "example": {
              "query": "Blue Dream",
              "licenseNumber": "LIC-00001",
              "pageSize": 10,
              "minScore": 0.0
            },
            "properties": {
              "query": {
                "type": "string"
              },
              "licenseNumber": {
                "type": "string"
              },
              "pageSize": {
                "type": "integer"
              },
              "minScore": {
                "type": "number",
                "format": "float"
              }
            }
          }
        }
      },
      "SecretKey": {
        "type": "string",
        "description": "The generated secret key",
        "example": "2616ec56-fa2a-4c5b-86c0-acacf23c9ef7"
      },
      "SupercollectionMetadata": {
        "type": "object",
        "description": "Derived metadata fields attached to every supercollection item. `summary` and\n`description` are always populated, computed from the item's data with\nper-kind logic and a generic identifier-based fallback.\n",
        "properties": {
          "summary": {
            "type": "string",
            "description": "Short human-readable label (60 characters or fewer in the common case)\nsuitable for table cells, dropdowns, and other compact UI. Composed from\nprioritized required fragments (always rendered in full) plus truncatable\nfragments that are word-boundary-truncated with an ellipsis when they\noverflow the cap. May exceed 60 characters in rare cases when the\nrequired fragments alone do.\n"
          },
          "description": {
            "type": "string",
            "description": "Longer human-readable description (uncapped) suitable for detail views,\ntooltips, and search-result previews. Reads as a sentence or short\nparagraph composed from the item's populated fields.\n"
          }
        }
      },
      "SupportTicket": {
        "type": "object",
        "properties": {
          "publicId": {
            "type": "string",
            "format": "uuid",
            "description": "The ticket's identifier. Use it to read the ticket back.",
            "example": "3f6c1e2a-9b4d-4f7e-8a21-5c0d7e9b1234"
          },
          "status": {
            "type": "string",
            "enum": [
              "OPEN",
              "CLOSED"
            ],
            "description": "Where the ticket stands. Every ticket is created `OPEN`; T3 support\ncloses it. No endpoint changes this \u2014 poll the ticket to see it move.\n",
            "example": "OPEN"
          },
          "title": {
            "type": "string",
            "description": "One-line summary of the problem, as filed.",
            "example": "Scanning a package tag opens the wrong package"
          },
          "body": {
            "type": "string",
            "description": "The full description, as filed.",
            "example": "Scanning C11-0000001-LIC package tags opens the package above the one I scanned."
          },
          "contactEmail": {
            "type": "string",
            "nullable": true,
            "description": "The address T3 support will reply to, as filed. `null` only on tickets\nfiled before the field existed.\n",
            "example": "grower@example.com"
          },
          "pageUrl": {
            "type": "string",
            "nullable": true,
            "description": "The page the reporter was on, if the client reported one.",
            "example": "https://ca.metrc.com/industry/C11-0000001-LIC/packages"
          },
          "licenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "The license the ticket concerns, if one was given.",
            "example": "C11-0000001-LIC"
          },
          "clientVersion": {
            "type": "string",
            "nullable": true,
            "description": "The client version that filed the ticket, if it reported one.",
            "example": "3.2.1"
          },
          "stateContext": {
            "type": "object",
            "additionalProperties": true,
            "description": "The client-captured context submitted with the ticket, returned exactly\nas it was sent.\n",
            "example": {
              "route": "/packages/active",
              "selectedLicense": "C11-0000001-LIC"
            }
          },
          "resolutionNote": {
            "type": "string",
            "nullable": true,
            "description": "T3 support's reply, written when the ticket is worked. `null` until\nsomeone has said something. This is the only channel back to you, since\nno endpoint modifies a ticket \u2014 read it when `status` becomes `CLOSED`.\n",
            "example": "Fixed in extension 3.2.4. Update from the Chrome Web Store."
          },
          "attachments": {
            "type": "array",
            "description": "The files submitted with the ticket. Always present, empty when there are\nnone. Each entry describes a file without providing any way to fetch it.\n",
            "items": {
              "$ref": "#/components/schemas/SupportTicketAttachment"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          }
        }
      },
      "SupportTicketAttachment": {
        "type": "object",
        "description": "A file attached to a support ticket, described but not located.\n\nThere is deliberately no URL here and no endpoint that serves the bytes. The\nstorage bucket is private, and attachments are read by T3 support rather than\nfetched back by the client that uploaded them. What this tells you is that\nyour upload arrived and what it was.\n",
        "properties": {
          "publicId": {
            "type": "string",
            "format": "uuid",
            "description": "The attachment's identifier.",
            "example": "8c2f1b90-4d6e-4a11-9f03-6b1c2d3e4f50"
          },
          "filename": {
            "type": "string",
            "description": "The name the file had when it was uploaded. Kept for display only \u2014 it is\nnot used to build the stored object's path.\n",
            "example": "console.png"
          },
          "contentType": {
            "type": "string",
            "description": "What the file actually is, determined from its contents rather than from\nthe type the upload declared.\n",
            "example": "image/png"
          },
          "byteSize": {
            "type": "integer",
            "description": "The file's size in bytes.",
            "example": 412334
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          }
        }
      },
      "T3CreateLabelContentLayoutPayload": {
        "type": "object",
        "required": [
          "labelContentLayoutConfig"
        ],
        "properties": {
          "labelContentLayoutConfig": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
              },
              {
                "description": "The label content layout configuration. Must include a 'name' field."
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Optional description for the layout"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional tags for the layout"
          }
        }
      },
      "T3CreateLabelTemplateLayoutPayload": {
        "type": "object",
        "required": [
          "labelTemplateLayoutConfig"
        ],
        "properties": {
          "labelTemplateLayoutConfig": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
              },
              {
                "description": "The label template layout configuration. Must include a 'name' field."
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Optional description for the layout"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional tags for the layout"
          }
        }
      },
      "T3GenerateLabelsPayload": {
        "type": "object",
        "properties": {
          "labelTemplateLayoutConfig": {
            "type": "object",
            "description": "The identifier for the label template configuration",
            "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
          },
          "labelContentLayoutConfig": {
            "type": "object",
            "description": "The identifier for the label content configuration.",
            "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
          },
          "labelContentDataList": {
            "type": "array",
            "description": "A list of objects, each of which will be filled into one label. \n\nSuppose you were to pass the following data, which represents two distinct labels:\n\n```json\n[\n  {\n    \"package\": {\n      \"label\": \"12345\"\n    }\n  },\n  {\n    \"package\": {\n      \"label\": \"67890\"\n    }\n  }\n]\n```\n\nYou could access these values in the content layout template as follows:\n\n```\n{{ package.label }}\n```\n\nNote: The format of the objects is not validated.\n\nNote: Any values with `common` or `images` will be overwritten.\n",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "example": [
              {
                "package": {
                  "label": "12345"
                }
              },
              {
                "package": {
                  "label": "67890"
                }
              }
            ]
          },
          "commonContentData": {
            "type": "object",
            "description": "A dictionary of values shared between all labels. Any supplied values\nwill be prefixed with `common.`\n\nSuppose you were to pass the following data:\n\n```json\n{\n  \"facilityContactInfo\": {\n    \"phoneNumber\": \"123-456-7890\"\n  }\n}\n```\n\nYou could access this values in the content layout template as follows:\n\n```\n{{ facilityContactInfo.phoneNumber }}\n```\n\nNote: The format of the object is not validated.\n",
            "example": {
              "facilityContactinfo": {
                "phoneNumber": "123-456-7890"
              }
            }
          },
          "images": {
            "type": "object",
            "description": "A dictionary of base64 image dadta shared between all labels. Any supplied values\nwill be prefixed with `images.`\n\nSuppose you were to pass the following data:\n\n```json\n{\n  \"logo\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMBgKZzmtkAAAAASUVORK5CYII=\"\n}\n```\n\nYou could access this values in the content layout template as follows:\n\n```\n{{ images.logo }}\n```\n\nNote: The format of the object is not validated.\n",
            "example": {
              "logo": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMBgKZzmtkAAAAASUVORK5CYII="
            }
          },
          "fragments": {
            "type": "object",
            "description": "A dictionary of reusable label layouts that can be embedded inside the\nlayout you are generating. Works like `images`: a flat map of named things,\nshipped alongside the layout and referenced by name.\n\nA fragment is an ordinary label content layout \u2014 the same shape as\n`labelContentLayoutConfig`, and exactly what\n`GET /v2/labels/label-content-layouts` returns \u2014 so a saved layout can be\ndropped in here unchanged.\n\nReference one from a `FRAGMENT` element:\n\n```json\n{\n  \"labelContentLayoutConfig\": {\n    \"labelContentLayoutElements\": [\n      {\n        \"elementType\": \"FRAGMENT\",\n        \"fragmentKey\": \"warning\",\n        \"yStartFraction\": 0,\n        \"yEndFraction\": 0.3\n      }\n    ]\n  },\n  \"fragments\": {\n    \"warning\": {\n      \"labelContentLayoutElements\": [\n        { \"elementType\": \"TEXT\", \"valueTemplate\": \"{{ t3.text.poison_control_center_phone }}\" }\n      ]\n    }\n  }\n}\n```\n\nThe fragment fills the element's box, and its own elements position\nthemselves against that box. Fragments may embed other fragments; every key\ngoes in this one flat map regardless of how deeply it is nested.\n\nRequires `renderingOptions.renderingVersion` of `2`.\n",
            "additionalProperties": {
              "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
            }
          },
          "renderingOptions": {
            "type": "object",
            "description": "Global options for controlling how all labels render or print",
            "$ref": "#/components/schemas/T3LabelRenderingOptions"
          },
          "disposition": {
            "type": "string",
            "description": "Specifies whether the PDF should be opened inline or downloaded as an attachment.",
            "enum": [
              "inline",
              "attachment"
            ],
            "default": "inline"
          }
        },
        "required": [
          "labelTemplateLayoutConfig",
          "labelContentLayoutConfig",
          "labelContentDataList"
        ],
        "additionalProperties": false
      },
      "T3GenerateLabelsPayload_DEPRECATED": {
        "type": "object",
        "properties": {
          "labelTemplateLayoutId": {
            "type": "string",
            "description": "The identifier for the label template configuration",
            "example": "AVERY_8160__2_625Wx1_0H"
          },
          "labelContentLayoutId": {
            "type": "string",
            "description": "The identifier for the label content configuration.",
            "example": "COL_TEXT_CODE128_TEXT"
          },
          "labelContentData": {
            "type": "array",
            "description": "A list of label content data objects to be filled into labels.  Refer to the label content layout information for which of these fields are required and where they will be inserted.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "text1": {
                  "type": "string",
                  "example": "text1"
                },
                "text2": {
                  "type": "string",
                  "example": "text2"
                },
                "text3": {
                  "type": "string",
                  "example": "text3"
                },
                "text4": {
                  "type": "string",
                  "example": "text4"
                },
                "text5": {
                  "type": "string",
                  "example": "text5"
                },
                "text6": {
                  "type": "string",
                  "example": "text6"
                },
                "text7": {
                  "type": "string",
                  "example": "text7"
                },
                "text8": {
                  "type": "string",
                  "example": "text8"
                }
              }
            }
          },
          "renderingOptions": {
            "type": "object",
            "description": "Options for controlling how the barcode will render.",
            "additionalProperties": false,
            "properties": {
              "debug": {
                "type": "boolean"
              },
              "enablePromo": {
                "type": "boolean"
              },
              "reversePrintOrder": {
                "type": "boolean"
              },
              "rotationDegrees": {
                "type": "number",
                "format": "float"
              },
              "barcodeBarThickness": {
                "type": "number",
                "format": "float",
                "description": "Controls how thick a barcode's bars will appear. Useful for low-DPI thermal printers.\nTested values: - Zebra printers with a Code128 should use 0.94 - Dymo printers with a Code128 should use 0.8\n- 1.0 is normal rendering.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              },
              "labelMarginThickness": {
                "type": "number",
                "format": "float",
                "description": "Controls width of a label's margins. Useful for thermal printers with slighly skewed printing.\n- 1.0 is normal margin.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              }
            }
          },
          "debug": {
            "type": "boolean",
            "description": "When set to true, draws bounding boxes around the label containers, the printable area, and the individual elements per label."
          },
          "forcePromo": {
            "type": "boolean",
            "description": "When set to true, force-enables the T3 promo bar on all generated labels irrespective of T3+ subscription status."
          },
          "disposition": {
            "type": "string",
            "description": "Specifies whether the PDF should be opened inline or downloaded as an attachment.",
            "enum": [
              "inline",
              "attachment"
            ],
            "default": "inline"
          }
        },
        "required": [
          "labelTemplateLayoutId",
          "labelContentLayoutId",
          "labelContentData"
        ],
        "additionalProperties": false
      },
      "T3HubTransferManifest": {
        "type": "object",
        "description": "One row of the hub transfer manifest report in tabular (CSV) form: a transfer this license transports, cross-joined with one of its packages. Metrc returns the delivery and the transporter already flattened onto the transfer, so there is no delivery or transporter column group -- those fields all appear under transfer. The JSON representation of the same report returns the transfers nested instead, described by MetrcHubSuperTransfer.\n\ntransporterDetails holds the FIRST driver leg only. A transfer with multiVehicle true or isLayover true carries further legs that reach the JSON response but not this 2D form; transfer.multiVehicle and transfer.isLayover are in the report's default columns so that is visible from the spreadsheet. The transporterDetails group omits the hostname/dataModel/retrievedAt/licenseNumber envelope columns: these objects arrive embedded in the transfer and never pass through per-object normalization, so those columns would always be blank.",
        "properties": {
          "transfer.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcHubTransfer"
          },
          "transfer.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transfer.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transfer.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "HUB_TRANSFER",
            "enum": [
              "HUB_TRANSFER"
            ]
          },
          "transfer.id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 2018358
          },
          "transfer.manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0002018358"
          },
          "transfer.shipmentLicenseType": {
            "type": "string",
            "description": "Type of license for the shipment. Note this is the raw value; the other transfer models expose the display form as shipmentLicenseTypeName.",
            "example": "Licensed"
          },
          "transfer.shipperFacilityId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the shipper's facility",
            "example": 15802
          },
          "transfer.shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "MAN000030"
          },
          "transfer.shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "transfer.shipperFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the shipper's facility",
            "example": "5015551587"
          },
          "transfer.shipperFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the shipper's facility"
          },
          "transfer.shipperFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the shipper's facility address",
            "example": "5301 Paris Road"
          },
          "transfer.shipperFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the shipper's facility address",
            "example": ""
          },
          "transfer.shipperFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the shipper's facility address",
            "example": ""
          },
          "transfer.shipperFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the shipper's facility address",
            "example": ""
          },
          "transfer.shipperFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the shipper's facility address",
            "example": "Columbia"
          },
          "transfer.shipperFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the shipper's facility address",
            "example": "Boone"
          },
          "transfer.shipperFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the shipper's facility address",
            "example": "MO"
          },
          "transfer.shipperFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the shipper's facility address",
            "example": "65202"
          },
          "transfer.shipperFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the shipper's facility address",
            "example": ""
          },
          "transfer.shipperFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the shipper's facility address",
            "example": ""
          },
          "transfer.deliveryCount": {
            "type": "integer",
            "description": "Number of deliveries on this transfer",
            "example": 1
          },
          "transfer.receivedDeliveryCount": {
            "type": "integer",
            "description": "Number of deliveries on this transfer that have been received",
            "example": 1
          },
          "transfer.packageCount": {
            "type": "integer",
            "description": "Number of packages on this transfer",
            "example": 170
          },
          "transfer.receivedPackageCount": {
            "type": "integer",
            "description": "Number of packages on this transfer that have been received",
            "example": 170
          },
          "transfer.canEdit": {
            "type": "boolean",
            "description": "Whether this transfer can currently be edited",
            "example": false
          },
          "transfer.isVoided": {
            "type": "boolean",
            "description": "Whether this transfer has been voided",
            "example": false
          },
          "transfer.createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "When the transfer was created",
            "example": "2024-07-25T18:47:20+00:00"
          },
          "transfer.createdByUserId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier of the user who created the transfer",
            "example": 241333
          },
          "transfer.createdByUserName": {
            "type": "string",
            "description": "Name of the user who created the transfer",
            "example": "Jane Doe"
          },
          "transfer.lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "When the transfer was last modified",
            "example": "2024-07-26T13:49:29+00:00"
          },
          "transfer.deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery this row represents. Sub-collections such as packages are addressed by this id rather than by the transfer id.",
            "example": 2019158
          },
          "transfer.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient's facility",
            "example": "MAN000038"
          },
          "transfer.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient's facility",
            "example": "Example Dispensary LLC"
          },
          "transfer.recipientFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the recipient's facility",
            "example": "8705553222"
          },
          "transfer.recipientFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the recipient's facility"
          },
          "transfer.recipientFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the recipient's facility address",
            "example": "1755 State Highway DD"
          },
          "transfer.recipientFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the recipient's facility address",
            "example": ""
          },
          "transfer.recipientFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the recipient's facility address",
            "example": ""
          },
          "transfer.recipientFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the recipient's facility address",
            "example": ""
          },
          "transfer.recipientFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the recipient's facility address",
            "example": "Moberly"
          },
          "transfer.recipientFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the recipient's facility address",
            "example": "Randolph"
          },
          "transfer.recipientFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the recipient's facility address",
            "example": "MO"
          },
          "transfer.recipientFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the recipient's facility address",
            "example": "65270"
          },
          "transfer.recipientFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the recipient's facility address",
            "example": ""
          },
          "transfer.recipientFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the recipient's facility address",
            "example": ""
          },
          "transfer.recipientApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the recipient approved this delivery"
          },
          "transfer.recipientAutoApproval": {
            "type": "boolean",
            "description": "Whether the recipient approval was automatic",
            "example": false
          },
          "transfer.shipmentTypeId": {
            "type": "integer",
            "description": "Unique identifier for the shipment type",
            "example": 3
          },
          "transfer.shipmentTypeName": {
            "type": "string",
            "description": "Name of the shipment type",
            "example": "Unaffiliated Transfer"
          },
          "transfer.shipmentTransactionType": {
            "type": "string",
            "description": "Transaction type of the shipment. Note this is the raw value; the display form is shipmentTransactionTypeName.",
            "example": "Wholesale"
          },
          "transfer.shipmentTransactionTypeName": {
            "type": "string",
            "description": "Name of the shipment transaction type",
            "example": "Wholesale"
          },
          "transfer.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated departure date and time for the delivery",
            "example": "2024-07-25T10:56:00.000"
          },
          "transfer.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual departure date and time for the delivery"
          },
          "transfer.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated arrival date and time for the delivery",
            "example": "2024-07-25T17:00:00.000"
          },
          "transfer.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual arrival date and time for the delivery"
          },
          "transfer.plannedRoute": {
            "type": "string",
            "nullable": true,
            "description": "The planned route for this delivery, as free text",
            "example": "Head south toward Paris Rd\nTurn right to merge onto US-63 N"
          },
          "transfer.deliveryPackageCount": {
            "type": "integer",
            "description": "Number of packages on this delivery",
            "example": 170
          },
          "transfer.deliveryReceivedPackageCount": {
            "type": "integer",
            "description": "Number of packages on this delivery that have been received",
            "example": 170
          },
          "transfer.receivedById": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Unique identifier of the user who received the delivery",
            "example": 221082
          },
          "transfer.receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the user who received the delivery",
            "example": "John Smith"
          },
          "transfer.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the delivery was received",
            "example": "2024-07-26T13:49:18+00:00"
          },
          "transfer.estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated return departure date and time"
          },
          "transfer.actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual return departure date and time"
          },
          "transfer.estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated return arrival date and time"
          },
          "transfer.actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual return arrival date and time"
          },
          "transfer.rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Whether rejected packages have been returned",
            "example": false
          },
          "transfer.transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When all transporters were approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "transfer.destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When all destinations were approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "transfer.transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Whether the transporters were automatically approved",
            "example": true
          },
          "transfer.destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Whether the destinations were automatically approved",
            "example": true
          },
          "transfer.transporterFacilityId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transporter facility",
            "example": 15101
          },
          "transfer.transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": "DIS000038"
          },
          "transfer.transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": "Transport Co"
          },
          "transfer.transporterFacilityMainPhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Main phone number for the transporter facility"
          },
          "transfer.transporterFacilityMobilePhoneNumber": {
            "type": "string",
            "nullable": true,
            "description": "Mobile phone number for the transporter facility"
          },
          "transfer.transporterFacilityAddressStreet1": {
            "type": "string",
            "nullable": true,
            "description": "First street line of the transporter facility address"
          },
          "transfer.transporterFacilityAddressStreet2": {
            "type": "string",
            "nullable": true,
            "description": "Second street line of the transporter facility address"
          },
          "transfer.transporterFacilityAddressStreet3": {
            "type": "string",
            "nullable": true,
            "description": "Third street line of the transporter facility address"
          },
          "transfer.transporterFacilityAddressStreet4": {
            "type": "string",
            "nullable": true,
            "description": "Fourth street line of the transporter facility address"
          },
          "transfer.transporterFacilityAddressCity": {
            "type": "string",
            "nullable": true,
            "description": "City of the transporter facility address"
          },
          "transfer.transporterFacilityAddressCounty": {
            "type": "string",
            "nullable": true,
            "description": "County of the transporter facility address"
          },
          "transfer.transporterFacilityAddressState": {
            "type": "string",
            "nullable": true,
            "description": "State of the transporter facility address"
          },
          "transfer.transporterFacilityAddressPostalCode": {
            "type": "string",
            "nullable": true,
            "description": "Postal code of the transporter facility address"
          },
          "transfer.transporterFacilityAddressCountry": {
            "type": "string",
            "nullable": true,
            "description": "Country of the transporter facility address"
          },
          "transfer.transporterFacilityAddressAssessorParcelNumber": {
            "type": "string",
            "nullable": true,
            "description": "Assessor parcel number of the transporter facility address"
          },
          "transfer.transporterApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When this transporter was approved",
            "example": "2024-07-25T16:00:18+00:00"
          },
          "transfer.transporterAutoApproval": {
            "type": "boolean",
            "description": "Whether this transporter was automatically approved",
            "example": true
          },
          "transfer.transporterDirection": {
            "type": "string",
            "description": "Direction of the transporter. Note this is the raw value; the display form is transporterDirectionName.",
            "example": "Outbound"
          },
          "transfer.transporterDirectionName": {
            "type": "string",
            "description": "Name of the transporter direction",
            "example": "Outbound"
          },
          "transfer.phoneNumberForQuestions": {
            "type": "string",
            "nullable": true,
            "description": "Phone number to call with questions about this transfer",
            "example": "13145555180"
          },
          "transfer.driverName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the driver. Metrc hoists this from the first entry of shipmentTransporterDetails; when multiVehicle is true, the remaining legs are only visible in that array.",
            "example": "Jane Doe"
          },
          "transfer.driverOccupationalLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "Occupational license number of the driver",
            "example": "AGT015324"
          },
          "transfer.driverVehicleLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "Vehicle license number of the driver",
            "example": "045E289001"
          },
          "transfer.driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "description": "Layover leg details for the driver, if applicable"
          },
          "transfer.multiVehicle": {
            "type": "boolean",
            "description": "Whether this transfer uses more than one vehicle. When true, the hoisted driver and vehicle fields describe only the first leg and shipmentTransporterDetails holds the rest.",
            "example": false
          },
          "transfer.vehicleMake": {
            "type": "string",
            "nullable": true,
            "description": "Make of the vehicle",
            "example": "Ford"
          },
          "transfer.vehicleModel": {
            "type": "string",
            "nullable": true,
            "description": "Model of the vehicle",
            "example": "Transit"
          },
          "transfer.vehicleLicensePlateNumber": {
            "type": "string",
            "nullable": true,
            "description": "License plate number of the vehicle",
            "example": "XYZ-1234"
          },
          "transfer.vehicleRegistrationNumber": {
            "type": "string",
            "nullable": true,
            "description": "Registration number of the vehicle",
            "example": ""
          },
          "transfer.transporterAcceptedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "When the transporter accepted this transfer"
          },
          "transfer.isLayover": {
            "type": "boolean",
            "description": "Whether this row is a layover leg. Most rows returned by this endpoint are not layovers, despite the underlying Metrc path being named for them.",
            "example": false
          },
          "transfer.transporterEstimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated departure date and time for this transporter's leg"
          },
          "transfer.transporterActualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual departure date and time for this transporter's leg"
          },
          "transfer.transporterEstimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated arrival date and time for this transporter's leg"
          },
          "transfer.transporterActualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual arrival date and time for this transporter's leg"
          },
          "transporterDetails.shipmentPlanId": {
            "type": "integer",
            "example": 12345,
            "description": "Unique identifier for the shipment plan."
          },
          "transporterDetails.shipmentDeliveryId": {
            "type": "integer",
            "example": 67890,
            "description": "Unique identifier for the shipment delivery."
          },
          "transporterDetails.transporterDirection": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "example": "Outbound",
            "description": "Direction of the transporter."
          },
          "transporterDetails.transporterFacilityId": {
            "type": "integer",
            "example": 54321,
            "description": "Unique identifier for the transporter facility."
          },
          "transporterDetails.lineNumber": {
            "type": "integer",
            "example": 1,
            "description": "Line number in the shipment details."
          },
          "transporterDetails.transporterDetailsTransporterLineNumber": {
            "type": "integer",
            "example": 0,
            "description": "Line number of the transporter this driver leg belongs to. Together with lineNumber this orders the legs of a multi-vehicle or layover transfer."
          },
          "transporterDetails.vehicleRegistrationNumber": {
            "type": "string",
            "example": "",
            "description": "Registration number of the vehicle."
          },
          "transporterDetails.driverName": {
            "type": "string",
            "example": "Jane Doe",
            "description": "Name of the driver."
          },
          "transporterDetails.driverOccupationalLicenseNumber": {
            "type": "string",
            "example": "AB1234567",
            "description": "Occupational license number of the driver."
          },
          "transporterDetails.driverVehicleLicenseNumber": {
            "type": "string",
            "example": "XYZ987654",
            "description": "Vehicle license number of the driver."
          },
          "transporterDetails.driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "example": "Leg1",
            "description": "Layover leg details for the driver, if applicable."
          },
          "transporterDetails.vehicleMake": {
            "type": "string",
            "example": "Ford",
            "description": "Make of the vehicle."
          },
          "transporterDetails.vehicleModel": {
            "type": "string",
            "example": "Transit",
            "description": "Model of the vehicle."
          },
          "transporterDetails.vehicleLicensePlateNumber": {
            "type": "string",
            "example": "XYZ-1234",
            "description": "License plate number of the vehicle."
          },
          "transporterDetails.actualDriverStartDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2024-07-26T08:30:00Z",
            "description": "Actual start date and time for the driver."
          },
          "transporterDetails.isVoided": {
            "type": "boolean",
            "example": false,
            "description": "Indicates if the record is voided."
          },
          "transporterDetails.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T18:47:20+00:00",
            "description": "The date and time when the shipment was received."
          },
          "transporterDetails.receivedDeliveryCount": {
            "type": "integer",
            "example": 1,
            "description": "The number of deliveries received."
          },
          "package.id": {
            "type": "integer",
            "description": "Unique identifier for the item",
            "example": 1234567,
            "nullable": false
          },
          "package.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "package.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "package.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "package.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "TRANSFERRED_PACKAGE",
            "enum": [
              "TRANSFERRED_PACKAGE"
            ]
          },
          "package.packageId": {
            "type": "integer",
            "description": "Identifier for the package",
            "example": 9876543,
            "nullable": false
          },
          "package.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001",
            "nullable": false
          },
          "package.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC",
            "nullable": false
          },
          "package.manifestNumber": {
            "type": "string",
            "description": "Manifest number associated with the shipment",
            "example": "0001234567",
            "nullable": false
          },
          "package.packageLabel": {
            "type": "string",
            "description": "Label of the package",
            "example": "1A4000000000000000000001",
            "nullable": false
          },
          "package.sourceHarvestNames": {
            "type": "string",
            "description": "Names of the source harvests",
            "example": "Blue Dream",
            "nullable": true
          },
          "package.sourcePackageLabels": {
            "type": "string",
            "description": "Labels of the source packages",
            "example": "1A4000000000000000000002",
            "nullable": true
          },
          "package.productName": {
            "type": "string",
            "description": "Name of the product",
            "example": "Blue Dream | 3.5g",
            "nullable": false
          },
          "package.productCategoryName": {
            "type": "string",
            "description": "Category name of the product",
            "example": "Bud/Flower (Final Packaging)",
            "nullable": false
          },
          "package.itemStrainName": {
            "type": "string",
            "description": "Strain name of the item",
            "example": "Blue Dream",
            "nullable": false
          },
          "package.labTestingStateName": {
            "description": "Lab testing status of the item",
            "$ref": "#/components/schemas/LabTestingStates"
          },
          "package.shippedQuantity": {
            "type": "number",
            "description": "Quantity shipped",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.shippedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the shipped quantity",
            "example": "g",
            "nullable": false
          },
          "package.grossWeight": {
            "type": "number",
            "description": "Gross weight of the package",
            "format": "double",
            "example": 224.0,
            "nullable": false
          },
          "package.grossUnitOfWeightAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the gross weight",
            "example": "g",
            "nullable": false
          },
          "package.shipperWholesalePrice": {
            "type": "number",
            "description": "Wholesale price from the shipper",
            "format": "double",
            "nullable": true
          },
          "package.receivedQuantity": {
            "type": "number",
            "description": "Quantity received",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.receivedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the received quantity",
            "example": "g",
            "nullable": false
          },
          "package.receiverWholesalePrice": {
            "type": "number",
            "description": "Wholesale price to the receiver",
            "format": "double",
            "nullable": true
          },
          "package.shipmentPackageStateName": {
            "type": "string",
            "description": "State of the shipment package",
            "example": "Accepted",
            "enum": [
              "Accepted",
              "Rejected",
              "Pending"
            ],
            "nullable": false
          },
          "package.actualDepartureDateTime": {
            "type": "string",
            "description": "Actual departure date and time",
            "format": "date-time",
            "nullable": true
          },
          "package.receivedDateTime": {
            "type": "string",
            "description": "Date and time when the package was received",
            "format": "date-time",
            "example": "2024-07-26T00:00:00-05:00",
            "nullable": false
          },
          "package.processingJobTypeName": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "T3IncomingTransferManifest": {
        "type": "object",
        "description": "One row of the incoming transfer manifest report in tabular (CSV) form: a transfer cross-joined with one of its packages. The JSON representation of the same report returns the transfers nested instead, described by MetrcIncomingSuperTransfer.",
        "properties": {
          "transfer.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "transfer.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transfer.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transfer.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_INCOMING_TRANSFER",
            "enum": [
              "ACTIVE_INCOMING_TRANSFER",
              "INACTIVE_INCOMING_TRANSFER"
            ]
          },
          "transfer.id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 1234567
          },
          "transfer.manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0001234567"
          },
          "transfer.shipmentLicenseTypeName": {
            "type": "string",
            "description": "Type of license for the shipment",
            "example": "Licensed"
          },
          "transfer.shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "LIC-00002"
          },
          "transfer.shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "transfer.name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the transfer"
          },
          "transfer.transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": ""
          },
          "transfer.transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": ""
          },
          "transfer.driverName": {
            "type": "string",
            "description": "Name of the driver",
            "example": ""
          },
          "transfer.driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "Occupational license number of the driver",
            "example": ""
          },
          "transfer.driverVehicleLicenseNumber": {
            "type": "string",
            "description": "License number of the vehicle used by the driver",
            "example": ""
          },
          "transfer.vehicleMake": {
            "type": "string",
            "description": "Make of the vehicle used for transport",
            "example": ""
          },
          "transfer.vehicleModel": {
            "type": "string",
            "description": "Model of the vehicle used for transport",
            "example": ""
          },
          "transfer.vehicleLicensePlateNumber": {
            "type": "string",
            "description": "License plate number of the vehicle",
            "example": ""
          },
          "transfer.deliveryFacilities": {
            "type": "string",
            "description": "Details of the delivery facilities",
            "example": "LIC-00001 (Example Dispensary LLC)"
          },
          "transfer.deliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries in the transfer",
            "example": 1
          },
          "transfer.receivedDeliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries received",
            "example": 0
          },
          "transfer.packageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of packages in the transfer",
            "example": 8
          },
          "transfer.receivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received",
            "example": 0
          },
          "transfer.containsPlantPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains plant packages",
            "example": false
          },
          "transfer.containsProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains product packages",
            "example": true
          },
          "transfer.containsTradeSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains trade samples",
            "example": false
          },
          "transfer.containsDonation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains donations",
            "example": false
          },
          "transfer.containsTestingSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains testing samples",
            "example": false
          },
          "transfer.containsProductRequiresRemediation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains products that require remediation",
            "example": false
          },
          "transfer.containsRemediatedProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains remediated product packages",
            "example": false
          },
          "transfer.editCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of times the transfer record has been edited",
            "example": 1
          },
          "transfer.canEdit": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited",
            "example": true
          },
          "transfer.canEditOutgoingInactive": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited when outgoing and inactive",
            "example": false
          },
          "transfer.isVoided": {
            "type": "boolean",
            "description": "Indicates if the transfer has been voided",
            "example": false
          },
          "transfer.createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was created",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.createdByUserName": {
            "type": "string",
            "description": "Username of the person who created the transfer record",
            "example": "Jane Doe"
          },
          "transfer.lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was last modified",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "transfer.deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery associated with the transfer",
            "example": 1234566
          },
          "transfer.recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "transfer.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001"
          },
          "transfer.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC"
          },
          "transfer.shipmentTypeName": {
            "type": "string",
            "description": "Type of shipment",
            "example": "Unaffiliated Transfer"
          },
          "transfer.shipmentTransactionTypeName": {
            "type": "string",
            "description": "Type of shipment transaction",
            "example": "Wholesale"
          },
          "transfer.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of departure",
            "example": "2024-07-26T06:00:00.000"
          },
          "transfer.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of departure"
          },
          "transfer.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of arrival",
            "example": "2024-07-26T17:00:00.000"
          },
          "transfer.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of arrival"
          },
          "transfer.deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages in the delivery",
            "example": 8
          },
          "transfer.deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received in the delivery",
            "example": 0
          },
          "transfer.receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the person who received the delivery"
          },
          "transfer.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the delivery was received"
          },
          "transfer.estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return departure"
          },
          "transfer.actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return departure"
          },
          "transfer.estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return arrival"
          },
          "transfer.actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return arrival"
          },
          "transfer.rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates if rejected packages were returned",
            "example": false
          },
          "transfer.transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all transporters were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all destinations were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if transporters were automatically approved",
            "example": true
          },
          "transfer.destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if destinations were automatically approved",
            "example": true
          },
          "transfer.approvalRejectDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the approval was rejected"
          },
          "transfer.approvalRejectedByUser": {
            "type": "string",
            "description": "Username of the person who rejected the approval",
            "example": "Jane Doe"
          },
          "transfer.approvalRejectedFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "License number of the facility where approval was rejected"
          },
          "transfer.approvalRejectReasonId": {
            "type": "string",
            "nullable": true,
            "description": "Reason ID for the approval rejection"
          },
          "transfer.tollingAgreementFileSystemId": {
            "type": "number",
            "example": 0
          },
          "transfer.invoiceNumber": {
            "type": "string",
            "example": ""
          },
          "transporter.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "transporter.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transporter.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transporter.transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the transporter's facility.",
            "example": "LIC-00001"
          },
          "transporter.transporterFacilityName": {
            "type": "string",
            "description": "The name of the transporter's facility.",
            "example": "Example Dispensary LLC"
          },
          "transporter.transporterDirectionName": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "description": "The direction of the transporter.",
            "example": "Outbound"
          },
          "transporter.transporterApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transporter was approved.",
            "example": "2024-07-26T13:00:00+00:00"
          },
          "transporter.transporterAutoApproval": {
            "type": "boolean",
            "description": "Indicates if the transporter was automatically approved.",
            "example": true
          },
          "transporter.driverName": {
            "type": "string",
            "description": "The name of the driver.",
            "example": "Jane Doe"
          },
          "transporter.driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "The occupational license number of the driver.",
            "example": "DL123456789"
          },
          "transporter.driverVehicleLicenseNumber": {
            "type": "string",
            "description": "The vehicle license number of the driver.",
            "example": "ABC1234"
          },
          "transporter.driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "description": "Information about the driver's layover leg."
          },
          "transporter.vehicleMake": {
            "type": "string",
            "description": "The make of the vehicle.",
            "example": "Ford"
          },
          "transporter.vehicleModel": {
            "type": "string",
            "description": "The model of the vehicle.",
            "example": "F-150"
          },
          "transporter.vehicleLicensePlateNumber": {
            "type": "string",
            "description": "The license plate number of the vehicle.",
            "example": "XYZ7890"
          },
          "transporter.acceptedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the transporter was accepted.",
            "example": "2024-07-26T13:00:00-05:00"
          },
          "transporter.isLayover": {
            "type": "boolean",
            "description": "Indicates if the transport includes a layover.",
            "example": false
          },
          "transporter.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of departure.",
            "example": "2024-07-26T14:00:00+00:00"
          },
          "transporter.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of departure."
          },
          "transporter.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of arrival.",
            "example": "2024-07-26T15:00:00+00:00"
          },
          "transporter.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of arrival."
          },
          "package.id": {
            "type": "integer",
            "description": "Unique identifier for the item",
            "example": 1234567,
            "nullable": false
          },
          "package.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "package.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "package.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "package.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "TRANSFERRED_PACKAGE",
            "enum": [
              "TRANSFERRED_PACKAGE"
            ]
          },
          "package.packageId": {
            "type": "integer",
            "description": "Identifier for the package",
            "example": 9876543,
            "nullable": false
          },
          "package.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001",
            "nullable": false
          },
          "package.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC",
            "nullable": false
          },
          "package.manifestNumber": {
            "type": "string",
            "description": "Manifest number associated with the shipment",
            "example": "0001234567",
            "nullable": false
          },
          "package.packageLabel": {
            "type": "string",
            "description": "Label of the package",
            "example": "1A4000000000000000000001",
            "nullable": false
          },
          "package.sourceHarvestNames": {
            "type": "string",
            "description": "Names of the source harvests",
            "example": "Blue Dream",
            "nullable": true
          },
          "package.sourcePackageLabels": {
            "type": "string",
            "description": "Labels of the source packages",
            "example": "1A4000000000000000000002",
            "nullable": true
          },
          "package.productName": {
            "type": "string",
            "description": "Name of the product",
            "example": "Blue Dream | 3.5g",
            "nullable": false
          },
          "package.productCategoryName": {
            "type": "string",
            "description": "Category name of the product",
            "example": "Bud/Flower (Final Packaging)",
            "nullable": false
          },
          "package.itemStrainName": {
            "type": "string",
            "description": "Strain name of the item",
            "example": "Blue Dream",
            "nullable": false
          },
          "package.labTestingStateName": {
            "description": "Lab testing status of the item",
            "$ref": "#/components/schemas/LabTestingStates"
          },
          "package.shippedQuantity": {
            "type": "number",
            "description": "Quantity shipped",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.shippedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the shipped quantity",
            "example": "g",
            "nullable": false
          },
          "package.grossWeight": {
            "type": "number",
            "description": "Gross weight of the package",
            "format": "double",
            "example": 224.0,
            "nullable": false
          },
          "package.grossUnitOfWeightAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the gross weight",
            "example": "g",
            "nullable": false
          },
          "package.shipperWholesalePrice": {
            "type": "number",
            "description": "Wholesale price from the shipper",
            "format": "double",
            "nullable": true
          },
          "package.receivedQuantity": {
            "type": "number",
            "description": "Quantity received",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.receivedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the received quantity",
            "example": "g",
            "nullable": false
          },
          "package.receiverWholesalePrice": {
            "type": "number",
            "description": "Wholesale price to the receiver",
            "format": "double",
            "nullable": true
          },
          "package.shipmentPackageStateName": {
            "type": "string",
            "description": "State of the shipment package",
            "example": "Accepted",
            "enum": [
              "Accepted",
              "Rejected",
              "Pending"
            ],
            "nullable": false
          },
          "package.actualDepartureDateTime": {
            "type": "string",
            "description": "Actual departure date and time",
            "format": "date-time",
            "nullable": true
          },
          "package.receivedDateTime": {
            "type": "string",
            "description": "Date and time when the package was received",
            "format": "date-time",
            "example": "2024-07-26T00:00:00-05:00",
            "nullable": false
          },
          "package.processingJobTypeName": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "package.grossUnitOfWeightAbbreviation",
          "package.grossWeight",
          "package.id",
          "package.itemStrainName",
          "package.labTestingStateName",
          "package.manifestNumber",
          "package.packageId",
          "package.packageLabel",
          "package.productCategoryName",
          "package.productName",
          "package.receivedDateTime",
          "package.receivedQuantity",
          "package.receivedUnitOfMeasureAbbreviation",
          "package.recipientFacilityLicenseNumber",
          "package.recipientFacilityName",
          "package.shipmentPackageStateName",
          "package.shippedQuantity",
          "package.shippedUnitOfMeasureAbbreviation"
        ]
      },
      "T3LabelContentData": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "text1": {
            "type": "string",
            "example": "text1"
          },
          "text2": {
            "type": "string",
            "example": "text2"
          },
          "text3": {
            "type": "string",
            "example": "text3"
          },
          "text4": {
            "type": "string",
            "example": "text4"
          },
          "text5": {
            "type": "string",
            "example": "text5"
          },
          "text6": {
            "type": "string",
            "example": "text6"
          },
          "text7": {
            "type": "string",
            "example": "text7"
          },
          "text8": {
            "type": "string",
            "example": "text8"
          }
        }
      },
      "T3LabelContentDataListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/T3LabelContentData"
            }
          }
        }
      },
      "T3LabelContentLayoutConfig": {
        "type": "object",
        "description": "Data describing how each label will be laid out, including a list of pieces and how they are arranged.",
        "properties": {
          "name": {
            "type": "string"
          },
          "minAspectRatio": {
            "type": "number",
            "format": "float"
          },
          "maxAspectRatio": {
            "type": "number",
            "format": "float"
          },
          "labelContentLayoutElements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/T3LabelContentLayoutElement"
            }
          }
        },
        "required": [
          "labelContentLayoutElements"
        ]
      },
      "T3LabelContentLayoutElement": {
        "type": "object",
        "description": "Describes the bounding rectangle and styling of one piece of a label layout.",
        "properties": {
          "name": {
            "type": "string"
          },
          "elementType": {
            "$ref": "#/components/schemas/T3LabelContentLayoutElementType"
          },
          "xStartFraction": {
            "description": "The left edge of the bounding box for this element, represented as a fraction of the total width of the content layout.",
            "type": "number",
            "format": "float",
            "default": 0
          },
          "xEndFraction": {
            "description": "The right edge of the bounding box for this element, represented as a fraction of the total width of the content layout.",
            "type": "number",
            "format": "float",
            "default": 1
          },
          "yStartFraction": {
            "description": "The bottom edge of the bounding box for this element, represented as a fraction of the total height of the content layout.",
            "type": "number",
            "format": "float",
            "default": 0
          },
          "yEndFraction": {
            "type": "number",
            "format": "float",
            "default": 1
          },
          "valueTemplate": {
            "type": "string",
            "description": "A general purpose template string. This is compiled with Jinja.\n\nValues can be interpolated from the following places:\n- Each\n",
            "nullable": true
          },
          "fragmentKey": {
            "type": "string",
            "description": "Only used when `elementType` is `FRAGMENT`. Names an entry in the request's\n`fragments` map, whose layout is drawn inside this element's bounding box.\n\nThe embedded layout's own elements position themselves against this box, so\n`yStartFraction: 0, yEndFraction: 0.5` inside the fragment means the bottom\nhalf of *this element*, not the bottom half of the label.\n",
            "nullable": true
          },
          "paragraphFontName": {
            "$ref": "#/components/schemas/T3LabelContentLayoutElementParagraphFontName"
          },
          "paragraphFontSize": {
            "type": "number",
            "format": "float",
            "default": 6
          },
          "horizontalParagraphAlignment": {
            "type": "string",
            "enum": [
              "LEFT",
              "CENTER",
              "RIGHT"
            ],
            "default": "CENTER"
          },
          "verticalParagraphAlignment": {
            "type": "string",
            "enum": [
              "TOP",
              "CENTER",
              "BOTTOM"
            ],
            "default": "CENTER"
          },
          "paragraphSpacing": {
            "type": "number",
            "format": "float",
            "default": 6
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "paragraphTextResizeStrategy": {
            "$ref": "#/components/schemas/T3LabelContentLayoutElementTextResizeStrategy"
          },
          "boxStrokeColor": {
            "description": "Hex color string for the box stroke.",
            "type": "string",
            "default": "#000000"
          },
          "boxStrokeWidth": {
            "description": "Width of the box stroke in points.",
            "type": "number",
            "format": "float",
            "default": 0.5
          },
          "boxStrokeAlpha": {
            "description": "Opacity of the box stroke (0.0 to 1.0).",
            "type": "number",
            "format": "float",
            "default": 1.0
          },
          "boxBackgroundColor": {
            "description": "Hex color string for the box background fill. Omit to disable fill.",
            "type": "string"
          },
          "boxBackgroundAlpha": {
            "description": "Opacity of the box background fill (0.0 to 1.0).",
            "type": "number",
            "format": "float",
            "default": 1.0
          }
        },
        "required": [
          "elementType"
        ]
      },
      "T3LabelContentLayoutElementParagraphFontName": {
        "type": "string",
        "enum": [
          "Times-Roman",
          "Times-Bold",
          "Times-Italic",
          "Times-BoldItalic",
          "Helvetica",
          "Helvetica-Bold",
          "Helvetica-Oblique",
          "Helvetica-BoldOblique",
          "Courier",
          "Courier-Bold",
          "Courier-Oblique",
          "Courier-BoldOblique",
          "Symbol",
          "ZapfDingbats"
        ],
        "default": "Helvetica"
      },
      "T3LabelContentLayoutElementTextResizeStrategy": {
        "type": "string",
        "enum": [
          "ALLOW_OVERFLOW",
          "TRUNCATE_TEXT",
          "SHRINK_TEXT"
        ]
      },
      "T3LabelContentLayoutElementType": {
        "type": "string",
        "enum": [
          "TEXT",
          "CODE128_BARCODE",
          "CODE39_BARCODE",
          "QR_CODE",
          "IMAGE",
          "BOX",
          "TABLE",
          "FRAGMENT"
        ]
      },
      "T3LabelContentLayoutsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "labelContentLayoutId": {
                  "type": "string",
                  "example": "COL_CODE128_TEXT"
                },
                "labelContentLayoutConfig": {
                  "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
                },
                "description": {
                  "type": "string",
                  "example": "Code128 barcode, with text below"
                },
                "allowedFacilities": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true,
                  "example": [
                    "LIC-00001",
                    "LIC-00002"
                  ]
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "example": [
                    "barcode",
                    "thermal"
                  ]
                },
                "publicId": {
                  "type": "string",
                  "format": "uuid",
                  "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "isArchived": {
                  "type": "boolean",
                  "example": false
                }
              }
            }
          }
        }
      },
      "T3LabelRenderingOptions": {
        "type": "object",
        "description": "Options for controlling how 1D barcodes will render.",
        "additionalProperties": false,
        "properties": {
          "debug": {
            "type": "boolean",
            "description": "When set to `true`, the generated label will draw boxes around\nall the content elements. This is used to troubleshoot how elements\nare laid out on a label.\n",
            "default": false
          },
          "enableWatermark": {
            "type": "boolean",
            "description": "When set to `true`, the generated label will have a watermark applied.\nWatermarked label requests do not count towards monthly subscription limits.\n",
            "default": false
          },
          "reversePrintOrder": {
            "type": "boolean",
            "description": "When set to `true`, the labels will be laid out in the PDF in reverse order.\nThis is used when the printed labels are coming off a spool, and you want\nthe top-to-bottom order to match the PDF.\n",
            "default": false
          },
          "rotationDegrees": {
            "type": "number",
            "enum": [
              0,
              90
            ],
            "description": "Used to rotate the label content. A value of 0 means no rotation. \nA value of 90 will rotate the label clockwise by 90 degrees.\n",
            "example": 0,
            "default": 0
          },
          "labelCopies": {
            "type": "integer",
            "minimum": 1,
            "description": "Number of copies to generate for each label. Must be at least 1.\n",
            "example": 1,
            "default": 1
          },
          "barcodeBarThickness": {
            "type": "number",
            "format": "float",
            "description": "Controls how thick a barcode's bars will appear. Useful for\nlow-DPI thermal printers.\n\n- 1.0 is normal rendering.  - 0.9 is 10% thinner - 1.1 is 10% thicker\n",
            "example": 1.0,
            "default": 1.0
          },
          "labelMarginThickness": {
            "type": "number",
            "format": "float",
            "description": "Controls width of a label''s margins. Useful for thermal printers\nwith slighly skewed printing.\n\n- 1.0 is normal margin.  - 0.9 is 10% thinner - 1.1 is 10% thicker\n",
            "example": 1.0,
            "default": 1.0
          },
          "renderingVersion": {
            "type": "number",
            "format": "integer",
            "enum": [
              1,
              2
            ],
            "description": "Controls rendering path for labels.\n",
            "example": 1,
            "default": 1
          },
          "strictTemplates": {
            "type": "boolean",
            "description": "When set to `true`, any template expression that would render as blank\nraises a `LABEL_TEMPLATE_ERROR` instead of silently printing nothing.\nThis covers undefined variable names, keys missing from your label data,\nand values that are explicitly `null`.\n\nTurn this on while authoring a layout to catch typos that would otherwise\nproduce blank labels. Leave it off (the default) to preserve the lenient\nbehaviour, where missing values simply render as empty strings.\n\nSupply a fallback for values that are legitimately absent:\n\n- `{{ package.item.strain | default('N/A') }}` covers a missing key.\n- `{{ package.packagedDate | default('N/A', true) }}` also covers `null`.\n- `{% if package.field is defined %}` guards an optional key, whereas\n  `{% if package.field %}` will raise when the key is absent.\n\nOnly applies when `renderingVersion` is `2`, the rendering path that\nevaluates templates.\n",
            "example": false,
            "default": false
          }
        }
      },
      "T3LabelTemplateLayoutConfig": {
        "type": "object",
        "description": "Describes the label layout on a printed medium.\nCapable of supporting any rectangular printable medium, with an arbitrarily sized grid of labels.\nAssumes that multiple labels are arranged in a centered grid, and arranged with even spacing.\nNOTE: y-coordinates are inverted.\n",
        "properties": {
          "name": {
            "type": "string"
          },
          "pagesizeXIn": {
            "type": "number",
            "format": "float"
          },
          "pagesizeYIn": {
            "type": "number",
            "format": "float"
          },
          "labelWidthIn": {
            "type": "number",
            "format": "float"
          },
          "labelHeightIn": {
            "type": "number",
            "format": "float"
          },
          "xGapIn": {
            "type": "number",
            "format": "float"
          },
          "yGapIn": {
            "type": "number",
            "format": "float"
          },
          "numColumns": {
            "type": "integer"
          },
          "numRows": {
            "type": "integer"
          },
          "pageMarginTopIn": {
            "type": "number",
            "format": "float"
          },
          "pageMarginLeftIn": {
            "type": "number",
            "format": "float"
          },
          "labelPaddingXIn": {
            "type": "number",
            "format": "float"
          },
          "labelPaddingYIn": {
            "type": "number",
            "format": "float"
          }
        }
      },
      "T3LabelTemplateLayoutsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "labelTemplateLayoutId": {
                  "type": "string",
                  "example": "AVERY_8160__2_625Wx1_0H"
                },
                "labelTemplateLayoutConfig": {
                  "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
                },
                "description": {
                  "type": "string",
                  "example": "8.5\"x11\" sheet of Avery 8160 labels (2.625\"x1\")"
                },
                "allowedFacilities": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true,
                  "example": [
                    "LIC-00001",
                    "LIC-00002"
                  ]
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "example": [
                    "thermal",
                    "4x6"
                  ]
                },
                "publicId": {
                  "type": "string",
                  "format": "uuid",
                  "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "isArchived": {
                  "type": "boolean",
                  "example": false
                }
              }
            }
          }
        }
      },
      "T3OutgoingTransferManifest": {
        "type": "object",
        "description": "One row of the outgoing transfer manifest report in tabular (CSV) form: a transfer cross-joined with one of its deliveries and one of that delivery's packages. The JSON representation of the same report returns the transfers nested instead, described by T3OutgoingTransferManifestRecord.",
        "properties": {
          "transfer.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "transfer.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transfer.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transfer.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "ACTIVE_OUTGOING_TRANSFER",
            "enum": [
              "ACTIVE_OUTGOING_TRANSFER",
              "INACTIVE_OUTGOING_TRANSFER",
              "REJECTED_TRANSFER"
            ]
          },
          "transfer.id": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the transfer",
            "example": 1234567
          },
          "transfer.manifestNumber": {
            "type": "string",
            "description": "Unique manifest number associated with the transfer",
            "example": "0001234567"
          },
          "transfer.shipmentLicenseTypeName": {
            "type": "string",
            "description": "Type of license for the shipment",
            "example": "Licensed"
          },
          "transfer.shipperFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the shipper's facility",
            "example": "LIC-00002"
          },
          "transfer.shipperFacilityName": {
            "type": "string",
            "description": "Name of the shipper's facility",
            "example": "Sample Manufacturing, Inc."
          },
          "transfer.name": {
            "type": "string",
            "nullable": true,
            "description": "Name of the transfer"
          },
          "transfer.transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the transporter facility",
            "example": ""
          },
          "transfer.transporterFacilityName": {
            "type": "string",
            "description": "Name of the transporter facility",
            "example": ""
          },
          "transfer.driverName": {
            "type": "string",
            "description": "Name of the driver",
            "example": ""
          },
          "transfer.driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "Occupational license number of the driver",
            "example": ""
          },
          "transfer.driverVehicleLicenseNumber": {
            "type": "string",
            "description": "License number of the vehicle used by the driver",
            "example": ""
          },
          "transfer.vehicleMake": {
            "type": "string",
            "description": "Make of the vehicle used for transport",
            "example": ""
          },
          "transfer.vehicleModel": {
            "type": "string",
            "description": "Model of the vehicle used for transport",
            "example": ""
          },
          "transfer.vehicleLicensePlateNumber": {
            "type": "string",
            "description": "License plate number of the vehicle",
            "example": ""
          },
          "transfer.deliveryFacilities": {
            "type": "string",
            "description": "Details of the delivery facilities",
            "example": "LIC-00001 (Example Dispensary LLC)"
          },
          "transfer.deliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries in the transfer",
            "example": 1
          },
          "transfer.receivedDeliveryCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of deliveries received",
            "example": 0
          },
          "transfer.packageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of packages in the transfer",
            "example": 8
          },
          "transfer.receivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received",
            "example": 0
          },
          "transfer.containsPlantPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains plant packages",
            "example": false
          },
          "transfer.containsProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains product packages",
            "example": true
          },
          "transfer.containsTradeSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains trade samples",
            "example": false
          },
          "transfer.containsDonation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains donations",
            "example": false
          },
          "transfer.containsTestingSample": {
            "type": "boolean",
            "description": "Indicates if the transfer contains testing samples",
            "example": false
          },
          "transfer.containsProductRequiresRemediation": {
            "type": "boolean",
            "description": "Indicates if the transfer contains products that require remediation",
            "example": false
          },
          "transfer.containsRemediatedProductPackage": {
            "type": "boolean",
            "description": "Indicates if the transfer contains remediated product packages",
            "example": false
          },
          "transfer.editCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of times the transfer record has been edited",
            "example": 1
          },
          "transfer.canEdit": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited",
            "example": true
          },
          "transfer.canEditOutgoingInactive": {
            "type": "boolean",
            "description": "Indicates if the transfer record can be edited when outgoing and inactive",
            "example": false
          },
          "transfer.isVoided": {
            "type": "boolean",
            "description": "Indicates if the transfer has been voided",
            "example": false
          },
          "transfer.createdDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was created",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.createdByUserName": {
            "type": "string",
            "description": "Username of the person who created the transfer record",
            "example": "Jane Doe"
          },
          "transfer.lastModified": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transfer was last modified",
            "example": "2024-07-25T00:00:00+00:00"
          },
          "transfer.deliveryId": {
            "type": "integer",
            "format": "int64",
            "description": "Unique identifier for the delivery associated with the transfer",
            "example": 1234566
          },
          "transfer.recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "transfer.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001"
          },
          "transfer.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC"
          },
          "transfer.shipmentTypeName": {
            "type": "string",
            "description": "Type of shipment",
            "example": "Unaffiliated Transfer"
          },
          "transfer.shipmentTransactionTypeName": {
            "type": "string",
            "description": "Type of shipment transaction",
            "example": "Wholesale"
          },
          "transfer.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of departure",
            "example": "2024-07-26T06:00:00.000"
          },
          "transfer.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of departure"
          },
          "transfer.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "Estimated date and time of arrival",
            "example": "2024-07-26T17:00:00.000"
          },
          "transfer.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of arrival"
          },
          "transfer.deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages in the delivery",
            "example": 8
          },
          "transfer.deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of packages received in the delivery",
            "example": 0
          },
          "transfer.receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "Name of the person who received the delivery"
          },
          "transfer.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the delivery was received"
          },
          "transfer.estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return departure"
          },
          "transfer.actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return departure"
          },
          "transfer.estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Estimated date and time of return arrival"
          },
          "transfer.actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Actual date and time of return arrival"
          },
          "transfer.rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates if rejected packages were returned",
            "example": false
          },
          "transfer.transporterAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all transporters were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.destinationsAllApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when all destinations were approved",
            "example": "2024-07-25T13:00:00+00:00"
          },
          "transfer.transportersAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if transporters were automatically approved",
            "example": true
          },
          "transfer.destinationsAutomaticallyApproved": {
            "type": "boolean",
            "description": "Indicates if destinations were automatically approved",
            "example": true
          },
          "transfer.approvalRejectDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Date and time when the approval was rejected"
          },
          "transfer.approvalRejectedByUser": {
            "type": "string",
            "description": "Username of the person who rejected the approval",
            "example": "Jane Doe"
          },
          "transfer.approvalRejectedFacilityLicenseNumber": {
            "type": "string",
            "nullable": true,
            "description": "License number of the facility where approval was rejected"
          },
          "transfer.approvalRejectReasonId": {
            "type": "string",
            "nullable": true,
            "description": "Reason ID for the approval rejection"
          },
          "transfer.tollingAgreementFileSystemId": {
            "type": "number",
            "example": 0
          },
          "transfer.invoiceNumber": {
            "type": "string",
            "example": ""
          },
          "transporter.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "transporter.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transporter.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transporter.transporterFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the transporter's facility.",
            "example": "LIC-00001"
          },
          "transporter.transporterFacilityName": {
            "type": "string",
            "description": "The name of the transporter's facility.",
            "example": "Example Dispensary LLC"
          },
          "transporter.transporterDirectionName": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "description": "The direction of the transporter.",
            "example": "Outbound"
          },
          "transporter.transporterApprovalDate": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the transporter was approved.",
            "example": "2024-07-26T13:00:00+00:00"
          },
          "transporter.transporterAutoApproval": {
            "type": "boolean",
            "description": "Indicates if the transporter was automatically approved.",
            "example": true
          },
          "transporter.driverName": {
            "type": "string",
            "description": "The name of the driver.",
            "example": "Jane Doe"
          },
          "transporter.driverOccupationalLicenseNumber": {
            "type": "string",
            "description": "The occupational license number of the driver.",
            "example": "DL123456789"
          },
          "transporter.driverVehicleLicenseNumber": {
            "type": "string",
            "description": "The vehicle license number of the driver.",
            "example": "ABC1234"
          },
          "transporter.driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "description": "Information about the driver's layover leg."
          },
          "transporter.vehicleMake": {
            "type": "string",
            "description": "The make of the vehicle.",
            "example": "Ford"
          },
          "transporter.vehicleModel": {
            "type": "string",
            "description": "The model of the vehicle.",
            "example": "F-150"
          },
          "transporter.vehicleLicensePlateNumber": {
            "type": "string",
            "description": "The license plate number of the vehicle.",
            "example": "XYZ7890"
          },
          "transporter.acceptedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the transporter was accepted.",
            "example": "2024-07-26T13:00:00-05:00"
          },
          "transporter.isLayover": {
            "type": "boolean",
            "description": "Indicates if the transport includes a layover.",
            "example": false
          },
          "transporter.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of departure.",
            "example": "2024-07-26T14:00:00+00:00"
          },
          "transporter.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of departure."
          },
          "transporter.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated date and time of arrival.",
            "example": "2024-07-26T15:00:00+00:00"
          },
          "transporter.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual date and time of arrival."
          },
          "transporterDetails.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "transporterDetails.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "transporterDetails.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "transporterDetails.shipmentPlanId": {
            "type": "integer",
            "example": 12345,
            "description": "Unique identifier for the shipment plan."
          },
          "transporterDetails.shipmentDeliveryId": {
            "type": "integer",
            "example": 67890,
            "description": "Unique identifier for the shipment delivery."
          },
          "transporterDetails.transporterDirection": {
            "type": "string",
            "enum": [
              "Outbound"
            ],
            "example": "Outbound",
            "description": "Direction of the transporter."
          },
          "transporterDetails.transporterFacilityId": {
            "type": "integer",
            "example": 54321,
            "description": "Unique identifier for the transporter facility."
          },
          "transporterDetails.lineNumber": {
            "type": "integer",
            "example": 1,
            "description": "Line number in the shipment details."
          },
          "transporterDetails.driverName": {
            "type": "string",
            "example": "Jane Doe",
            "description": "Name of the driver."
          },
          "transporterDetails.driverOccupationalLicenseNumber": {
            "type": "string",
            "example": "AB1234567",
            "description": "Occupational license number of the driver."
          },
          "transporterDetails.driverVehicleLicenseNumber": {
            "type": "string",
            "example": "XYZ987654",
            "description": "Vehicle license number of the driver."
          },
          "transporterDetails.driverLayoverLeg": {
            "type": "string",
            "nullable": true,
            "example": "Leg1",
            "description": "Layover leg details for the driver, if applicable."
          },
          "transporterDetails.vehicleMake": {
            "type": "string",
            "example": "Ford",
            "description": "Make of the vehicle."
          },
          "transporterDetails.vehicleModel": {
            "type": "string",
            "example": "Transit",
            "description": "Model of the vehicle."
          },
          "transporterDetails.vehicleLicensePlateNumber": {
            "type": "string",
            "example": "XYZ-1234",
            "description": "License plate number of the vehicle."
          },
          "transporterDetails.actualDriverStartDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2024-07-26T08:30:00Z",
            "description": "Actual start date and time for the driver."
          },
          "transporterDetails.isVoided": {
            "type": "boolean",
            "example": false,
            "description": "Indicates if the record is voided."
          },
          "transporterDetails.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "example": "2024-07-25T18:47:20+00:00",
            "description": "The date and time when the shipment was received."
          },
          "transporterDetails.receivedDeliveryCount": {
            "type": "integer",
            "example": 1,
            "description": "The number of deliveries received."
          },
          "delivery.id": {
            "type": "number",
            "description": "The transfer delivery ID",
            "example": 12345
          },
          "delivery.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "delivery.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "delivery.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "delivery.actualArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual arrival date and time."
          },
          "delivery.actualDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual departure date and time."
          },
          "delivery.actualReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual return arrival date and time."
          },
          "delivery.actualReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The actual return departure date and time."
          },
          "delivery.deliveryPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "The number of packages delivered.",
            "example": 5
          },
          "delivery.deliveryReceivedPackageCount": {
            "type": "integer",
            "format": "int32",
            "description": "The number of packages received.",
            "example": 4
          },
          "delivery.estimatedArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The estimated arrival date and time.",
            "example": "2024-07-25T15:30:00Z"
          },
          "delivery.estimatedDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The estimated departure date and time.",
            "example": "2024-07-25T13:30:00Z"
          },
          "delivery.estimatedReturnArrivalDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated return arrival date and time."
          },
          "delivery.estimatedReturnDepartureDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The estimated return departure date and time."
          },
          "delivery.grossUnitOfWeightAbbreviation": {
            "type": "string",
            "nullable": true,
            "description": "The abbreviation for the unit of gross weight.",
            "example": "kg"
          },
          "delivery.grossUnitOfWeightId": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "description": "The ID for the unit of gross weight.",
            "example": 1
          },
          "delivery.grossWeight": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "description": "The gross weight.",
            "example": 100.5
          },
          "delivery.plannedRoute": {
            "type": "string",
            "description": "The planned route for the transfer.",
            "example": "Route A"
          },
          "delivery.receivedByName": {
            "type": "string",
            "nullable": true,
            "description": "The name of the person who received the shipment."
          },
          "delivery.receivedDateTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the shipment was received."
          },
          "delivery.recipientFacilityId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the recipient facility.",
            "example": 456
          },
          "delivery.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "The license number of the recipient facility.",
            "example": "AB12345"
          },
          "delivery.recipientFacilityName": {
            "type": "string",
            "description": "The name of the recipient facility.",
            "example": "Facility A"
          },
          "delivery.rejectedPackagesReturned": {
            "type": "boolean",
            "description": "Indicates whether rejected packages were returned.",
            "example": false
          },
          "delivery.shipmentTransactionTypeName": {
            "type": "string",
            "description": "The name of the shipment transaction type.",
            "example": "Regular"
          },
          "delivery.shipmentTypeName": {
            "type": "string",
            "description": "The name of the shipment type.",
            "example": "Transfer",
            "enum": [
              "Transfer"
            ]
          },
          "delivery.recipientApprovalDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "The date and time when the recipient approved the shipment upon receipt."
          },
          "delivery.recipientAutoApproval": {
            "type": "boolean",
            "description": "Indicates whether the recipient's approval of the shipment is automatically granted, typically when there are no issues with the received packages.",
            "example": false
          },
          "delivery.tollingAgreementFileSystemId": {
            "type": "number",
            "example": 0
          },
          "delivery.invoiceNumber": {
            "type": "string",
            "example": ""
          },
          "package.id": {
            "type": "integer",
            "description": "Unique identifier for the item",
            "example": 1234567,
            "nullable": false
          },
          "package.dataModel": {
            "type": "string",
            "description": "Name of this object's data model",
            "example": "MetrcPackage"
          },
          "package.retrievedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of when this object was pulled from Metrc"
          },
          "package.licenseNumber": {
            "type": "string",
            "description": "License number used to access this object"
          },
          "package.index": {
            "type": "string",
            "description": "Describes the current state of this object at the time it was returned from the API. This cannot be used to sort or filter.",
            "example": "TRANSFERRED_PACKAGE",
            "enum": [
              "TRANSFERRED_PACKAGE"
            ]
          },
          "package.packageId": {
            "type": "integer",
            "description": "Identifier for the package",
            "example": 9876543,
            "nullable": false
          },
          "package.recipientFacilityLicenseNumber": {
            "type": "string",
            "description": "License number of the recipient facility",
            "example": "LIC-00001",
            "nullable": false
          },
          "package.recipientFacilityName": {
            "type": "string",
            "description": "Name of the recipient facility",
            "example": "Example Dispensary LLC",
            "nullable": false
          },
          "package.manifestNumber": {
            "type": "string",
            "description": "Manifest number associated with the shipment",
            "example": "0001234567",
            "nullable": false
          },
          "package.packageLabel": {
            "type": "string",
            "description": "Label of the package",
            "example": "1A4000000000000000000001",
            "nullable": false
          },
          "package.sourceHarvestNames": {
            "type": "string",
            "description": "Names of the source harvests",
            "example": "Blue Dream",
            "nullable": true
          },
          "package.sourcePackageLabels": {
            "type": "string",
            "description": "Labels of the source packages",
            "example": "1A4000000000000000000002",
            "nullable": true
          },
          "package.productName": {
            "type": "string",
            "description": "Name of the product",
            "example": "Blue Dream | 3.5g",
            "nullable": false
          },
          "package.productCategoryName": {
            "type": "string",
            "description": "Category name of the product",
            "example": "Bud/Flower (Final Packaging)",
            "nullable": false
          },
          "package.itemStrainName": {
            "type": "string",
            "description": "Strain name of the item",
            "example": "Blue Dream",
            "nullable": false
          },
          "package.labTestingStateName": {
            "description": "Lab testing status of the item",
            "$ref": "#/components/schemas/LabTestingStates"
          },
          "package.shippedQuantity": {
            "type": "number",
            "description": "Quantity shipped",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.shippedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the shipped quantity",
            "example": "g",
            "nullable": false
          },
          "package.grossWeight": {
            "type": "number",
            "description": "Gross weight of the package",
            "format": "double",
            "example": 224.0,
            "nullable": false
          },
          "package.grossUnitOfWeightAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the gross weight",
            "example": "g",
            "nullable": false
          },
          "package.shipperWholesalePrice": {
            "type": "number",
            "description": "Wholesale price from the shipper",
            "format": "double",
            "nullable": true
          },
          "package.receivedQuantity": {
            "type": "number",
            "description": "Quantity received",
            "format": "double",
            "example": 1224.0,
            "nullable": false
          },
          "package.receivedUnitOfMeasureAbbreviation": {
            "type": "string",
            "description": "Unit of measure for the received quantity",
            "example": "g",
            "nullable": false
          },
          "package.receiverWholesalePrice": {
            "type": "number",
            "description": "Wholesale price to the receiver",
            "format": "double",
            "nullable": true
          },
          "package.shipmentPackageStateName": {
            "type": "string",
            "description": "State of the shipment package",
            "example": "Accepted",
            "enum": [
              "Accepted",
              "Rejected",
              "Pending"
            ],
            "nullable": false
          },
          "package.actualDepartureDateTime": {
            "type": "string",
            "description": "Actual departure date and time",
            "format": "date-time",
            "nullable": true
          },
          "package.receivedDateTime": {
            "type": "string",
            "description": "Date and time when the package was received",
            "format": "date-time",
            "example": "2024-07-26T00:00:00-05:00",
            "nullable": false
          },
          "package.processingJobTypeName": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "package.grossUnitOfWeightAbbreviation",
          "package.grossWeight",
          "package.id",
          "package.itemStrainName",
          "package.labTestingStateName",
          "package.manifestNumber",
          "package.packageId",
          "package.packageLabel",
          "package.productCategoryName",
          "package.productName",
          "package.receivedDateTime",
          "package.receivedQuantity",
          "package.receivedUnitOfMeasureAbbreviation",
          "package.recipientFacilityLicenseNumber",
          "package.recipientFacilityName",
          "package.shipmentPackageStateName",
          "package.shippedQuantity",
          "package.shippedUnitOfMeasureAbbreviation"
        ]
      },
      "T3OutgoingTransferManifestRecord": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MetrcOutgoingSuperTransfer"
          },
          {
            "type": "object",
            "description": "An outgoing transfer as returned by the manifest report in JSON, with its deliveries, packages and transporters nested beneath it. The tabular (CSV) representation of this same data is described by T3OutgoingTransferManifest, which flattens each transfer into one row per package.",
            "properties": {
              "transporterDetails": {
                "type": "array",
                "description": "A list of this transfer's transporter details",
                "items": {
                  "$ref": "#/components/schemas/MetrcTransferTransporterDetails"
                }
              }
            }
          }
        ]
      },
      "T3PackageLabelsPayload": {
        "type": "object",
        "properties": {
          "labelTemplateLayoutId": {
            "type": "string",
            "description": "The identifier for the label template configuration",
            "example": "AVERY_8160__2_625Wx1_0H"
          },
          "labelContentLayoutId": {
            "type": "string",
            "description": "The identifier for the label content configuration.",
            "example": "COL_TEXT_CODE128_TEXT"
          },
          "data": {
            "type": "array",
            "description": "An array of tags",
            "example": [
              "1A4000000000000000000001",
              "1A4000000000000000000002",
              "1A4000000000000000000003",
              "1A4000000000000000000004",
              "1A4000000000000000000005",
              "1A4000000000000000000006"
            ],
            "items": {
              "type": "string"
            }
          },
          "renderingOptions": {
            "type": "object",
            "description": "Options for controlling how the barcode will render.",
            "additionalProperties": false,
            "properties": {
              "barcodeBarThickness": {
                "description": "Controls how thick a barcode's bars will appear. Useful for low-DPI thermal printers.\nTested values: - Zebra printers with a Code128 should use 0.94 - Dymo printers with a Code128 should use 0.8\n- 1.0 is normal rendering.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              },
              "labelMarginThickness": {
                "description": "Controls width of a label's margins. Useful for thermal printers with slighly skewed printing.\n- 1.0 is normal margin.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              }
            }
          },
          "debug": {
            "type": "boolean",
            "description": "When set to true, draws bounding boxes around the label containers, the printable area, and the individual elements per label."
          }
        },
        "required": [
          "labelTemplateLayoutId",
          "labelContentLayoutId",
          "data"
        ],
        "additionalProperties": false
      },
      "T3PackageLabelsPayload_DEPRECATED": {
        "type": "object",
        "properties": {
          "labelTemplateLayoutId": {
            "type": "string",
            "description": "The identifier for the label template configuration",
            "example": "AVERY_8160__2_625Wx1_0H"
          },
          "labelContentLayoutId": {
            "type": "string",
            "description": "The identifier for the label content configuration.",
            "example": "COL_TEXT_CODE128_TEXT"
          },
          "data": {
            "type": "array",
            "description": "An array of tags",
            "example": [
              "1A4000000000000000000001",
              "1A4000000000000000000002",
              "1A4000000000000000000003",
              "1A4000000000000000000004",
              "1A4000000000000000000005",
              "1A4000000000000000000006"
            ],
            "items": {
              "type": "string"
            }
          },
          "renderingOptions": {
            "type": "object",
            "description": "Options for controlling how the barcode will render.",
            "additionalProperties": false,
            "properties": {
              "barcodeBarThickness": {
                "description": "Controls how thick a barcode's bars will appear. Useful for low-DPI thermal printers.\nTested values: - Zebra printers with a Code128 should use 0.94 - Dymo printers with a Code128 should use 0.8\n- 1.0 is normal rendering.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              },
              "labelMarginThickness": {
                "description": "Controls width of a label's margins. Useful for thermal printers with slighly skewed printing.\n- 1.0 is normal margin.  - 0.9 is 10% thinner - 1.1 is 10% thicker",
                "example": 1.0
              }
            }
          },
          "debug": {
            "type": "boolean",
            "description": "When set to true, draws bounding boxes around the label containers, the printable area, and the individual elements per label."
          }
        },
        "required": [
          "labelTemplateLayoutId",
          "labelContentLayoutId",
          "data"
        ],
        "additionalProperties": false
      },
      "T3TagListPayload": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "description": "An array of tags",
            "example": [
              "1A4000000000000000000001",
              "1A4000000000000000000002",
              "1A4000000000000000000003",
              "1A4000000000000000000004",
              "1A4000000000000000000005",
              "1A4000000000000000000006"
            ],
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "T3UpdateLabelContentLayoutPayload": {
        "type": "object",
        "properties": {
          "labelContentLayoutConfig": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T3LabelContentLayoutConfig"
              },
              {
                "description": "The updated label content layout configuration"
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Updated description for the layout"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Updated tags for the layout"
          }
        }
      },
      "T3UpdateLabelTemplateLayoutPayload": {
        "type": "object",
        "properties": {
          "labelTemplateLayoutConfig": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T3LabelTemplateLayoutConfig"
              },
              {
                "description": "The updated label template layout configuration"
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Updated description for the layout"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Updated tags for the layout"
          }
        }
      },
      "TagList": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "example": 42
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Human-readable name for the tag list, or null if not set.",
            "example": "Room A inventory"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          },
          "createdBy": {
            "type": "string",
            "example": "user@example.com"
          },
          "allowDuplicateHandles": {
            "type": "boolean",
            "example": false
          },
          "isArchived": {
            "type": "boolean",
            "example": false
          },
          "entryCount": {
            "type": "integer",
            "description": "Total number of entries in this tag list.",
            "example": 42
          },
          "scannedCount": {
            "type": "integer",
            "description": "Number of entries whose `scannedAt` field is set (non-null).",
            "example": 17
          },
          "tagListEntries": {
            "type": "array",
            "description": "The list's entries. Only populated when the list endpoint is called with\n`?includeEntries=true`; absent otherwise.\n",
            "items": {
              "$ref": "#/components/schemas/TagListEntry"
            }
          }
        }
      },
      "TagListDetail": {
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer",
                "example": 42
              },
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Human-readable name for the tag list, or null if not set.",
                "example": "Room A inventory"
              },
              "allowDuplicateHandles": {
                "type": "boolean",
                "example": false
              },
              "isArchived": {
                "type": "boolean",
                "example": false
              },
              "createdAt": {
                "type": "string",
                "format": "date-time",
                "example": "2024-08-09T12:34:56.789Z"
              },
              "createdBy": {
                "type": "string",
                "example": "user@example.com"
              },
              "entryCount": {
                "type": "integer",
                "description": "Total number of entries in this tag list.",
                "example": 42
              },
              "scannedCount": {
                "type": "integer",
                "description": "Number of entries whose `scannedAt` field is set (non-null).",
                "example": 17
              }
            }
          },
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagListEntry"
            }
          }
        }
      },
      "TagListEntry": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "example": 101
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2024-08-09T12:34:56.789Z"
          },
          "createdBy": {
            "type": "string",
            "example": "user@example.com"
          },
          "handle": {
            "type": "string",
            "example": "TAG001"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Freeform human-readable identifier for this entry, or null if not set.",
            "example": "Vault shelf 3"
          },
          "metadata": {
            "type": "object",
            "example": {
              "note": "Test tag"
            }
          },
          "scannedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Timestamp indicating when the entry was scanned, or null if not yet scanned.",
            "example": "2024-08-09T12:34:56.789Z"
          }
        }
      },
      "UnitOfMeasure": {
        "type": "object",
        "properties": {
          "abbreviation": {
            "type": "string",
            "example": "ml"
          },
          "fromBaseFactor": {
            "type": "number",
            "format": "double",
            "example": 29.5735295625
          },
          "id": {
            "type": "integer",
            "example": 10
          },
          "isArchived": {
            "type": "boolean",
            "example": false
          },
          "isBaseUnit": {
            "type": "boolean",
            "example": false
          },
          "name": {
            "type": "string",
            "example": "Milliliters"
          },
          "quantityType": {
            "type": "string",
            "example": "VolumeBased"
          },
          "toBaseFactor": {
            "type": "number",
            "format": "double",
            "example": 0.033814022701843
          }
        }
      },
      "UnitOfMeasureAbbreviation": {
        "type": "string",
        "example": "g",
        "enum": [
          "g",
          "mg",
          "kg",
          "oz",
          "lb",
          "ml",
          "l",
          "ea"
        ]
      },
      "UpdateSavedReportPayload": {
        "type": "object",
        "description": "At least one field must be supplied. Omitted fields are left unchanged.\n\nUpdating `reportUrl` does not change `publicId`, so a client holding the id\nkeeps referring to the same saved report.\n",
        "minProperties": 1,
        "additionalProperties": false,
        "x-errorMessage": "Supply at least one of 'name', 'description' or 'reportUrl'.",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "New label. Must be unique among this account's saved reports.",
            "example": "Daily veg plant count",
            "x-errorMessage": "'name' must be a string of 1-200 characters."
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "nullable": true,
            "description": "New note, or null to clear it.",
            "example": "Feeds the cultivation team's morning dashboard",
            "x-errorMessage": "'description' must be a string of at most 2000 characters, or null to clear it."
          },
          "reportUrl": {
            "type": "string",
            "minLength": 1,
            "maxLength": 8000,
            "description": "Replacement report URL. Validated exactly as on create, and any\n`secretKey` is stripped. `t3EndpointId` and `licenseNumbers` are\nre-derived from it.\n",
            "example": "/v2/plants/vegetative/report?licenseNumber=C11-0000001-LIC&filter=strainName__eq:Blue%20Dream",
            "x-errorMessage": "'reportUrl' must be a report endpoint URL of at most 8000 characters, e.g. /v2/plants/vegetative/report?licenseNumber=EX-00001"
          }
        }
      },
      "UpdateTagListEntryPayload": {
        "type": "object",
        "required": [
          "licenseNumber"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number associated with this tag list.",
            "example": "LIC-00001"
          },
          "scannedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "ISO 8601 timestamp indicating when the entry was scanned, or `null` to clear.",
            "example": "2024-08-09T12:34:56.789Z"
          },
          "metadata": {
            "type": "object",
            "nullable": true,
            "description": "Arbitrary metadata to associate with the entry. Replaces existing metadata.",
            "example": {
              "note": "Updated note"
            }
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Freeform human-readable identifier for the entry, or `null` to clear.",
            "example": "Vault shelf 3"
          }
        }
      },
      "UpdateTagListPayload": {
        "type": "object",
        "description": "At least one of `name` or `isArchived` must be provided.\n",
        "required": [
          "licenseNumber"
        ],
        "properties": {
          "licenseNumber": {
            "type": "string",
            "description": "The license number associated with this tag list.",
            "example": "LIC-00001"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "New human-readable name for the tag list. Pass `null` to clear the name.\n",
            "example": "Room A inventory"
          },
          "isArchived": {
            "type": "boolean",
            "description": "Set to `true` to archive the tag list, or `false` to unarchive it.",
            "example": true
          }
        }
      }
    },
    "parameters": {
      "ApplyDynamicValidation": {
        "name": "applyDynamicValidation",
        "in": "query",
        "required": false,
        "description": "Controls whether T3 should apply dynamic validation before forwarded to Metrc.\n  - **If present and set to 'true'**: The request will be dynamically validated. An error will be returned if dynamic validation fails.\n  - **If omitted or set to any value other than 'true'**: This parameter has no effect.\nExamples:\n  - \"true\": Apply dynamic validation\n  - \"false\": No-op\n\n**Dynamic validation** refers to validation that:\n  - Requires making API calls to Metrc to validate data dependencies (e.g., verifying that referenced items exist in Metrc).\n  - Cannot be performed through static schema validation alone.\n  - Does not guarantee that the request will be accepted by Metrc, as Metrc may have additional business rules not covered by T3's validation.\n",
        "schema": {
          "type": "string",
          "example": "true"
        }
      },
      "CollectionFilter": {
        "name": "filter",
        "description": "Filters the collection to only return objects matching the specified criteria. Multiple filters can be applied, and the logical operator between them is controlled by the `filterLogic` parameter.\n\n## Format\n\nThe filter parameter uses the format: `fieldName__operator:value`\n\n- **fieldName**: The name of the field to filter by (e.g., `label`, `quantity`, `packagedDate`)\n- **operator**: The comparison operator to use (see operator lists below by field type)\n- **value**: The value to compare against\n\n## Behavior\n\n- Multiple filters can be applied by including multiple `filter` query parameters\n- By default, all filters must match (AND logic). Use `filterLogic=or` to match any filter (OR logic)\n- Filters are applied before sorting and pagination\n- Only root-level fields can be filtered (nested fields are not supported)\n- All string comparisons are case-insensitive\n\n## String Field Operators\n\nString fields support the following operators:\n\n- **contains**: Field contains the specified substring\n- **doesnotcontain**: Field does not contain the specified substring\n- **eq**: Field exactly equals the specified value\n- **neq**: Field does not equal the specified value\n- **startswith**: Field starts with the specified substring\n- **endswith**: Field ends with the specified substring\n\n## Datetime Field Operators\n\nDatetime fields support the following operators:\n\n- **lt**: Less than (before)\n- **lte**: Less than or equal to (on or before)\n- **eq**: Exactly equals\n- **neq**: Not equal to\n- **gt**: Greater than (after)\n- **gte**: Greater than or equal to (on or after)\n\n**Note: All datetime values must be in ISO8601 format (e.g., `2024-07-17T20:26:07.117Z`)**\n\n## Numeric Field Operators\n\nNumeric fields support the same operators as datetime fields:\n\n- **lt**: Less than\n- **lte**: Less than or equal to\n- **eq**: Exactly equals\n- **neq**: Not equal to\n- **gt**: Greater than\n- **gte**: Greater than or equal to\n\n## Boolean Field Operators\n\nBoolean fields support only one operator:\n\n- **eq**: Exactly equals (use `true` or `false`)\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: Single string filter (contains)\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=label__contains:0003\n```\n\nReturns only packages whose label contains \"0003\":\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000020003\", ... },\n    { \"label\": \"1A4000000000000000030003\", ... }\n  ]\n}\n```\n\n### Example 2: String filter (starts with)\nRequest:\n```\nGET /v2/items?licenseNumber=LIC-00001&filter=name__startswith:wedding\n```\n\nReturns only items whose name starts with \"wedding\" (case-insensitive):\n```json\n{\n  \"data\": [\n    { \"name\": \"Blue Dream Flower\", ... },\n    { \"name\": \"Northern Lights Pre-Roll\", ... }\n  ]\n}\n```\n\n### Example 3: Numeric filter (greater than or equal)\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=quantity__gte:1000\n```\n\nReturns only packages with quantity >= 1000:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"quantity\": 5000.0, ... },\n    { \"label\": \"1A4000000000000000000002\", \"quantity\": 2500.0, ... }\n  ]\n}\n```\n\n### Example 4: Boolean filter\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=isFinished__eq:false\n```\n\nReturns only active (unfinished) packages:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"isFinished\": false, ... },\n    { \"label\": \"1A4000000000000000000002\", \"isFinished\": false, ... }\n  ]\n}\n```\n\n### Example 5: Datetime filter (on or after)\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=packagedDate__gte:2024-03-01T00:00:00.000Z\n```\n\nReturns only packages created on or after March 1, 2024:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000003\", \"packagedDate\": \"2024-03-15T10:30:00.000Z\", ... },\n    { \"label\": \"1A4000000000000000000002\", \"packagedDate\": \"2024-03-10T14:20:00.000Z\", ... }\n  ]\n}\n```\n\n### Example 6: Multiple filters (AND logic - default)\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=quantity__gte:100&filter=isFinished__eq:false\n```\n\nReturns packages that have quantity >= 100 AND are not finished:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"quantity\": 500.0, \"isFinished\": false, ... }\n  ]\n}\n```\n\n### Example 7: Multiple filters (OR logic)\nRequest:\n```\nGET /v2/items?licenseNumber=LIC-00001&filter=name__contains:flower&filter=name__contains:pre-roll&filterLogic=or\n```\n\nReturns items whose name contains \"flower\" OR \"pre-roll\":\n```json\n{\n  \"data\": [\n    { \"name\": \"Blue Dream Flower\", ... },\n    { \"name\": \"Blue Dream pre-roll\", ... },\n    { \"name\": \"Pineapple Express Flower\", ... }\n  ]\n}\n```\n\n</details>\n\n## Notes\n\n- An unrecognized field name returns a `400` listing every field that is valid for the collection. On report endpoints this is checked when the request arrives, before any Metrc data is loaded.\n- Filters apply to the **top-level collection only**. Endpoints that attach related records \u2014 a report's joined packages or transporters, or anything pulled in by `include` \u2014 return those in full for every matching record. There is no syntax for filtering them.\n- Not all field names are filterable. This includes the `id` field.\n- Not all filter operators are supported for all fields. Unsupported filters will throw an error.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "label__endswith:0003",
          "items": {
            "type": "string"
          }
        },
        "style": "form",
        "explode": true
      },
      "CollectionFilterLogic": {
        "name": "filterLogic",
        "description": "Controls how multiple filters are combined when more than one `filter` parameter is provided. Determines whether all filters must match (AND logic) or if any single filter matching is sufficient (OR logic).\n\n## Behavior\n\n- **and**: All filters must match for an object to be included in the results (intersection)\n- **or**: At least one filter must match for an object to be included in the results (union)\n- Default value is `and` if not specified\n- This parameter has no effect when only one filter is provided\n- Applied during the filtering stage, before sorting and pagination\n\n## Values\n\n- **and** (default): Logical AND - all conditions must be true\n- **or**: Logical OR - at least one condition must be true\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: AND logic (default) - all filters must match\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=quantity__gte:100&filter=isFinished__eq:false\n```\n\nOr explicitly:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=quantity__gte:100&filter=isFinished__eq:false&filterLogic=and\n```\n\nReturns only packages where quantity >= 100 AND isFinished = false:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"quantity\": 500.0, \"isFinished\": false, ... },\n    { \"label\": \"1A4000000000000000000002\", \"quantity\": 250.0, \"isFinished\": false, ... }\n  ]\n}\n```\n\nPackages with quantity >= 100 but isFinished = true are excluded.\nPackages with isFinished = false but quantity < 100 are excluded.\n\n### Example 2: OR logic - any filter can match\nRequest:\n```\nGET /v2/items?licenseNumber=LIC-00001&filter=name__contains:flower&filter=name__contains:pre-roll&filterLogic=or\n```\n\nReturns items where name contains \"flower\" OR name contains \"pre-roll\":\n```json\n{\n  \"data\": [\n    { \"name\": \"Blue Dream Flower\", ... },\n    { \"name\": \"Blue Dream pre-roll\", ... },\n    { \"name\": \"Pineapple Express Flower\", ... },\n    { \"name\": \"Gelato Pre-Roll\", ... }\n  ]\n}\n```\n\nItems containing either \"flower\" or \"pre-roll\" (or both) are included.\n\n### Example 3: OR logic with different fields\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=quantity__gte:1000&filter=isOnHold__eq:true&filterLogic=or\n```\n\nReturns packages where quantity >= 1000 OR isOnHold = true:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"quantity\": 5000.0, \"isOnHold\": false, ... },\n    { \"label\": \"1A4000000000000000000002\", \"quantity\": 50.0, \"isOnHold\": true, ... },\n    { \"label\": \"1A4000000000000000000003\", \"quantity\": 2500.0, \"isOnHold\": false, ... }\n  ]\n}\n```\n\n### Example 4: Complex OR logic with multiple string filters\nRequest:\n```\nGET /v2/items?licenseNumber=LIC-00001&filter=name__contains:wedding&filter=name__contains:blue&filter=name__contains:gelato&filterLogic=or\n```\n\nReturns items matching any of the search terms:\n```json\n{\n  \"data\": [\n    { \"name\": \"Blue Dream Flower\", ... },\n    { \"name\": \"Northern Lights Pre-Roll\", ... },\n    { \"name\": \"Blue Dream flower\", ... },\n    { \"name\": \"Blue Dream Edible\", ... },\n    { \"name\": \"Gelato Pre-Roll\", ... }\n  ]\n}\n```\n\n### Example 5: AND logic with date range\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=packagedDate__gte:2024-01-01T00:00:00.000Z&filter=packagedDate__lte:2024-12-31T23:59:59.999Z&filterLogic=and\n```\n\nReturns packages created in 2024 (both date filters must match):\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000000001\", \"packagedDate\": \"2024-03-15T10:30:00.000Z\", ... },\n    { \"label\": \"1A4000000000000000000002\", \"packagedDate\": \"2024-06-20T14:15:00.000Z\", ... }\n  ]\n}\n```\n\n</details>\n\n## Notes\n\n- AND logic (`and`) is more restrictive and typically returns fewer results\n- OR logic (`or`) is more permissive and typically returns more results\n- When filtering the same field with multiple values, OR logic creates a \"match any\" behavior\n- Complex queries combining AND and OR logic require multiple API requests with client-side filtering\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "and",
            "or"
          ],
          "default": "and",
          "example": "and"
        }
      },
      "CollectionMask": {
        "name": "collectionMask",
        "description": "A comma-separated list of field paths to include in the response. Only the specified fields will be returned for each object in the collection.\n\nThe mask uses dot notation for nested fields and supports array wildcard notation [*] for filtering array elements.\n\n## Behavior\n\n- **Root-level fields**: Specify the field name to include it (e.g., `label` includes only the label field)\n- **Multiple fields**: Separate with commas (e.g., `label,quantity,isFinished`)\n- **Nested objects**: Use dot notation (e.g., `item.name` includes only the name field from the nested item object)\n- **Entire nested objects**: Specify just the parent field name to include the entire nested object as-is (e.g., `item` includes the complete item object with all its fields)\n- **Array elements**: Use `[*]` wildcard to filter fields from all array elements (e.g., `items[*].name` keeps only the name field from each array element)\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: Single root-level field\nMask: `label`\n\nReturns only the package label:\n```json\n{\n  \"label\": \"1A4000000000000000000001\"\n}\n```\n\n### Example 2: Multiple root-level fields\nMask: `label,quantity,unitOfMeasureAbbreviation`\n\nReturns only the specified fields:\n```json\n{\n  \"label\": \"1A4000000000000000000001\",\n  \"quantity\": 1130.7,\n  \"unitOfMeasureAbbreviation\": \"g\"\n}\n```\n\n### Example 3: Nested object field\nMask: `label,item.name,item.productCategoryName`\n\nReturns the label and only specific fields from the nested item object:\n```json\n{\n  \"label\": \"1A4000000000000000000001\",\n  \"item\": {\n    \"name\": \"Blue Dream Flower\",\n    \"productCategoryName\": \"Bud/Flower (Final Packaging)\"\n  }\n}\n```\n\n### Example 4: Entire nested object\nMask: `label,item`\n\nReturns the label and the complete item object with all its fields:\n```json\n{\n  \"label\": \"1A4000000000000000000001\",\n  \"item\": {\n    \"id\": 12345,\n    \"name\": \"Blue Dream Flower\",\n    \"productCategoryName\": \"Bud/Flower (Final Packaging)\",\n    \"strainName\": \"Blue Dream\",\n    ... all other item fields ...\n  }\n}\n```\n\n### Example 5: Array wildcard (for endpoints returning arrays within objects)\nMask: `packages[*].label,packages[*].quantity`\n\nReturns only label and quantity from each package in a packages array:\n```json\n{\n  \"packages\": [\n    {\n      \"label\": \"1A4000000000000000000001\",\n      \"quantity\": 1130.7\n    },\n    {\n      \"label\": \"1A4000000000000000020199\",\n      \"quantity\": 500.0\n    }\n  ]\n}\n```\n\n</details>\n\n## Notes\n\n- Fields not specified in the mask are completely removed from the response\n- The mask is applied after all other processing (pagination, sorting, filtering)\n- Invalid field paths are silently ignored\n- Whitespace around field names and commas is trimmed automatically\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "example": "label,item.name,item.productCategoryName"
        }
      },
      "CollectionPage": {
        "name": "page",
        "description": "Specifies which page of results to return. Used in conjunction with `pageSize` to control pagination.\n\n## Behavior\n\n- Pages are 1-indexed (the first page is `page=1`, not `page=0`)\n- If `page` exceeds the total number of available pages, an empty `data` array is returned\n- The `total` field in the response indicates the total number of items across all pages\n- Pagination is applied after filtering and sorting\n- Default value is `1` if not specified\n\n## Calculating Total Pages\n\nTo determine how many pages are available:\n```\ntotalPages = ceil(total / pageSize)\n```\n\nFor example, if `total=450` and `pageSize=100`:\n```\ntotalPages = ceil(450 / 100) = 5 pages\n```\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: Get first page (default)\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001\n```\n\nEquivalent to:\n```\nGET /v2/packages?licenseNumber=LIC-00001&page=1&pageSize=100\n```\n\nReturns the first 100 packages:\n```json\n{\n  \"data\": [ ... 100 packages ... ],\n  \"page\": 1,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 2: Get second page\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&page=2&pageSize=100\n```\n\nReturns packages 101-200:\n```json\n{\n  \"data\": [ ... 100 packages ... ],\n  \"page\": 2,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 3: Get last page with smaller page size\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&page=5&pageSize=100\n```\n\nReturns packages 401-450 (only 50 items on last page):\n```json\n{\n  \"data\": [ ... 50 packages ... ],\n  \"page\": 5,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 4: Page beyond available data\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&page=10&pageSize=100\n```\n\nReturns empty array when page exceeds total pages:\n```json\n{\n  \"data\": [],\n  \"page\": 10,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 5: Combined with filters and sorting\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&filter=isFinished__eq:false&sort=packagedDate:desc&page=2&pageSize=50\n```\n\nReturns the second page of active packages sorted by date:\n```json\n{\n  \"data\": [ ... 50 packages matching filter, sorted ... ],\n  \"page\": 2,\n  \"pageSize\": 50,\n  \"total\": 127\n}\n```\n\n</details>\n\n## Notes\n\n- To retrieve all data, you must iterate through all pages until `data` is empty or `page > ceil(total/pageSize)`\n- The response always includes `page`, `pageSize`, and `total` fields to help with pagination logic\n- For large datasets, consider using filters to reduce the total number of results\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "default": 1,
          "example": 1
        }
      },
      "CollectionPageSize": {
        "name": "pageSize",
        "description": "Specifies the maximum number of objects to return per page. Used in conjunction with `page` to control pagination.\n\n## Behavior\n\n- Default value is `100` if not specified\n- Maximum allowed value is `500` for most endpoints. Some endpoints like supercollections have reduced maximums.\n- If the requested `pageSize` exceeds the maximum, it will be capped at the maximum allowed value\n- The actual number of items returned may be less than `pageSize` on the last page\n- Larger page sizes reduce the number of requests needed but increase response time and payload size\n\n## Choosing an Appropriate Page Size\n\n- **Small datasets (<100 items)**: Use default `pageSize=100` or larger\n- **Medium datasets (100-1000 items)**: Use `pageSize=200-500` to minimize requests\n- **Large datasets (>1000 items)**: Use maximum `pageSize=500` and implement pagination loop\n- **Real-time updates**: Use smaller page sizes (50-100) for faster responses\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: Default page size\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001\n```\n\nReturns up to 100 packages (default):\n```json\n{\n  \"data\": [ ... up to 100 packages ... ],\n  \"page\": 1,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 2: Small page size\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&pageSize=25\n```\n\nReturns up to 25 packages:\n```json\n{\n  \"data\": [ ... up to 25 packages ... ],\n  \"page\": 1,\n  \"pageSize\": 25,\n  \"total\": 450\n}\n```\n\n### Example 3: Maximum page size\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&pageSize=500\n```\n\nReturns up to 500 packages:\n```json\n{\n  \"data\": [ ... up to 500 packages ... ],\n  \"page\": 1,\n  \"pageSize\": 500,\n  \"total\": 450\n}\n```\n\n### Example 4: Last page with partial results\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&page=5&pageSize=100\n```\n\nReturns only remaining packages (less than pageSize):\n```json\n{\n  \"data\": [ ... 50 packages ... ],\n  \"page\": 5,\n  \"pageSize\": 100,\n  \"total\": 450\n}\n```\n\n### Example 5: Loading all data with maximum page size\nRequest (Page 1):\n```\nGET /v2/packages?licenseNumber=LIC-00001&pageSize=500&page=1\n```\n\nRequest (Page 2):\n```\nGET /v2/packages?licenseNumber=LIC-00001&pageSize=500&page=2\n```\n\nThis efficiently loads 1000 total packages in just 2 requests.\n\n</details>\n\n## Notes\n\n- Requesting `pageSize` values above the maximum will not result in an error, but will be capped\n- The `total` field in the response helps determine how many pages are needed: `ceil(total / pageSize)`\n- Consider using `collectionMask` with larger page sizes to reduce response payload\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "default": 100,
          "example": 100
        }
      },
      "CollectionSort": {
        "name": "sort",
        "description": "Specifies the field and direction to sort the collection by. Only one sort field is supported per request.\n\n## Format\n\nThe sort parameter uses the format: `fieldName:direction`\n\n- **fieldName**: The name of the field to sort by (e.g., `label`, `quantity`, `createdDate`)\n- **direction**: Either `asc` for ascending or `desc` for descending\n\n## Behavior\n\n- Sorting is applied before pagination, so the sorted order is consistent across pages\n- Only root-level fields can be used for sorting (nested fields are not supported)\n- If an invalid field name is provided, the request may return an error or ignore the sort parameter\n- String fields are sorted alphabetically (case-insensitive)\n- Numeric fields are sorted numerically\n- Date fields are sorted chronologically\n\n## Examples using MetrcPackage\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: Sort by label ascending\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&sort=label:asc\n```\n\nReturns packages sorted by label from A to Z:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000020001\", ... },\n    { \"label\": \"1A4000000000000000020002\", ... },\n    { \"label\": \"1A4000000000000000020003\", ... }\n  ]\n}\n```\n\n### Example 2: Sort by quantity descending\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&sort=quantity:desc\n```\n\nReturns packages sorted by quantity from highest to lowest:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000020198\", \"quantity\": 5000.0, ... },\n    { \"label\": \"1A4000000000000000020199\", \"quantity\": 2500.0, ... },\n    { \"label\": \"1A4000000000000000020200\", \"quantity\": 100.0, ... }\n  ]\n}\n```\n\n### Example 3: Sort by date field descending\nRequest:\n```\nGET /v2/packages?licenseNumber=LIC-00001&sort=packagedDate:desc\n```\n\nReturns packages sorted by packaged date, most recent first:\n```json\n{\n  \"data\": [\n    { \"label\": \"1A4000000000000000020200\", \"packagedDate\": \"2024-03-15\", ... },\n    { \"label\": \"1A4000000000000000020199\", \"packagedDate\": \"2024-03-10\", ... },\n    { \"label\": \"1A4000000000000000020198\", \"packagedDate\": \"2024-03-05\", ... }\n  ]\n}\n```\n\n</details>\n\n## Notes\n\n- The default sort order varies by endpoint and is not guaranteed if `sort` is not specified\n- Sorting by some fields is not supported\n- Only one sort parameter can be applied per request\n",
        "required": false,
        "in": "query",
        "schema": {
          "type": "string",
          "example": "label:asc"
        }
      },
      "ColumnHeaderOverrides": {
        "name": "columnHeaderOverrides",
        "description": "Replaces the column headers of a tabular report with names of your own.\nBy default a header is derived from its field name -- `unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`, `item.name` becomes `Item Name`. This parameter replaces any of them with a string you choose, without changing which columns are returned or what is in them.\n## The syntax\nA comma-separated list, matched **positionally** against the columns the report renders. An empty entry keeps that column's default name, so you only have to count commas up to the column you want to rename:\n```\nGET /v2/packages/active/report ?licenseNumber=LIC-00001 &contentType=csv &columns=label,item.name,quantity,unitOfMeasureAbbreviation &columnHeaderOverrides=,,,Unit\nLabel,Item Name,Quantity,Unit\n```\nTo rename the fourth of six columns and leave the rest alone, send `,,,Unit`. Trailing entries may be omitted entirely -- `columnHeaderOverrides=Tag` renames only the first column.\nPositions run across the report's own columns first and then any `metadata` columns, which is the order they appear in the header row.\n## Names are used exactly as sent\nNo title-casing, no trimming, no change of case. `qty` stays `qty`, `NET WEIGHT` stays `NET WEIGHT`, and a leading space is preserved -- so an override is safe to point a formula, a Power Query step or a partner's import template at.\nA value beginning with `=` is written as text, never as a spreadsheet formula.\n## Two rules worth knowing\n- **A header cannot contain a comma.** A comma always starts a new entry, and percent-encoding it does not help: `%2C` is decoded back to a comma before the list is split. There is no escape syntax.\n- **You may send fewer entries than there are columns, but not more.** Extra entries return 400 rather than being ignored, because a list longer than the report is a miscount and a silently truncated one renders a header row that looks right. Note that trailing commas count: `,,,Unit,,` is six entries.\n## Where it applies\nThe tabular formats -- `contentType=csv`, `xlsx` and `googleSheets` -- which are the ones with a header row. `json` returns records keyed by their field names and is unaffected; the parameter is accepted and ignored there, so it can be set once alongside a `contentType` that varies. It is still validated for `json`, so a miscount is reported before you switch formats.\nCannot be combined with `transform`, which names its own columns; sending both returns 400.\nThis parameter does not affect which report is loaded, so switching headers on a report you just requested is served from cache rather than reloaded from Metrc.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "example": ",,,Unit"
        }
      },
      "ContentDisposition": {
        "name": "contentDisposition",
        "description": "Controls whether the response is sent as a file download or rendered in place.\nDefaults to `attachment`, so opening a report URL in a browser saves a file rather than displaying it. This applies to every format that returns bytes -- `contentType=json`, `csv` and `xlsx` alike.\n## When this matters\nOnly for browsers. `curl`, `requests`, `fetch` and every other programmatic client ignore `Content-Disposition` entirely, so a script sees exactly the same bytes either way. Google Sheets `IMPORTDATA` is likewise unaffected.\nSet `contentDisposition=inline` when you want a browser to display the response -- reading a JSON report without downloading it, for example, or previewing a CSV in a browser tab. No `Content-Disposition` header is sent at all in that case.\n```\n# Saves active-packages-report_LIC-00001_2024-01-01_a1b2c3.json\nGET /v2/packages/active/report?licenseNumber=LIC-00001\n\n# Renders in the browser\nGET /v2/packages/active/report?licenseNumber=LIC-00001&contentDisposition=inline\n```\n## The filename\nDownloads are named for the report, the license, the date the report was generated and a short hash of the request:\n```\nactive-packages-report_LIC-00001_2024-01-01_a1b2c3.csv\n```\nA report spanning several licenses names the first and counts the rest (`LIC-00001-plus-3`). The hash is what keeps two variants of the same report -- different `columns`, different `filter` -- from overwriting each other in a downloads folder. A `transform` names its own output instead and is unaffected.\n## Ignored for googleSheets\n`contentType=googleSheets` answers with a redirect to a spreadsheet rather than with bytes, so there is nothing to download. The parameter is accepted and ignored, which means it can be set once alongside a `contentType` that varies.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "attachment",
            "inline"
          ],
          "default": "attachment",
          "example": "inline"
        }
      },
      "ContentType": {
        "name": "contentType",
        "description": "Specifies how the report should be formatted. One of `json`, `csv`, `xlsx` or `googleSheets`.\n*`json` and `csv` can also be set with the Content-Type header. `xlsx` and `googleSheets` are only settable with this query parameter.*\nAny of these formats can be delivered to an email address instead of returned in the response -- see the `delivery` parameter.\n`googleSheets` is the one format whose inline response is not the report itself: it redirects to a spreadsheet. See `sheetVisibility` for who can open it.\n## json\nReturns a nested envelope: `generatedAt`, `filters`, `filterLogic`, `sort`, `licenseNumber`, and `data`. On a super report, `json` accepts as many `include` values as the Metrc request budget allows.\n## csv\nReturns a flat grid with `Content-Disposition: attachment`, so a browser downloads it rather than rendering it. Column headers are title-cased from the field names (`unitOfMeasureAbbreviation` becomes `Unit Of Measure Abbreviation`, `item.name` becomes `Item Name`). A metadata preamble is prepended unless `prependCsvMetadata` is `false`.\nOn a super report, `csv` accepts **at most one** `include`.\n## xlsx\nReturns an `.xlsx` workbook as an attachment. Same rows, same title-cased headers and same metadata preamble as `csv` -- the only difference is the container. Choose it over `csv` when you want a file that opens in Excel without an import step, or when your values would otherwise be mangled by CSV type-guessing.\nOn a super report, `xlsx` accepts **at most one** `include`.\n## googleSheets\nWrites the report into a new Google Sheet. Unlike the other three formats, the response is not the report -- it is a way to reach the document.\n### Inline (the default)\nThe sheet is created and populated during the request, and the response is a `302` redirecting to it. The same link is in the body, for clients that do not follow redirects:\n``` GET /v2/packages/active/report?licenseNumber=LIC-001&contentType=googleSheets\nHTTP/1.1 302 Found Location: https://docs.google.com/spreadsheets/d/1AbCdEf.../edit Content-Type: application/json\n{ \"sheetUrl\": \"https://docs.google.com/spreadsheets/d/1AbCdEf.../edit\", \"sheetId\": \"1AbCdEf...\" } ```\nPaste that URL into a browser and you land on the finished sheet. By default **anyone holding the link can open and edit it** -- see `sheetVisibility` for how to restrict it, and note that doing so requires an `email`.\n### With delivery=email\nReturns a delivery receipt immediately instead, and a worker builds the sheet:\n```json { \"status\": \"processing\", \"recipient\": \"you@example.com\", \"contentType\": \"googleSheets\" } ```\nThe receipt carries no URL because the sheet does not exist yet. Once it does, the link is emailed to the recipient, and Google sends its own share notification alongside.\nContent matches what `csv` would return for the same query.\nOn a super report, `googleSheets` accepts **at most one** `include`.\nThree things to know before you use it:\n- **The default sheet is link-accessible to anyone.** An inline request has no Google account to grant access to, so the link is the credential. Treat the URL the way you would treat the report itself, and use `sheetVisibility=private` with an `email` when you have a specific recipient in mind. - **A named `email` must be a Google account.** The sheet is granted to that address directly; sharing with a non-Google address may be refused by Google Drive. If it is, no sheet is left behind, and you are told why -- inline as an error response, or by email when deferred. Use `contentType=xlsx` to receive a file instead. - **Every request creates a new sheet, and sheets are never deleted.** This format suits one-off exports. For a recurring or scheduled pull, use `csv` -- a job polling `googleSheets` on a schedule accumulates one abandoned sheet per run.\n### Why a large sheet is better asked for with delivery=email\nInline, the whole thing happens inside your request: the report is generated, then the sheet is created, shared and written to Drive, all before the redirect is sent. A report near the row cap can exceed the request timeout partway through. `delivery=email` has no such ceiling, because nothing is waiting on the result.\n## Why the tabular formats are limited to one include\n`csv`, `xlsx` and `googleSheets` are all the same shape: a two-dimensional grid of rows and columns, nothing else. One include folds into that grid by widening each row. A second include adds a data dimension the grid cannot represent -- there is no non-lossy way to place two independent child collections on one row without a cross join that multiplies the row count and misstates the data. JSON is nested, so it carries as many includes as the budget allows.\nThis is a property of the output format, not a policy choice.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "json",
            "csv",
            "xlsx",
            "googleSheets"
          ],
          "default": "json",
          "example": "json"
        }
      },
      "Delivery": {
        "name": "delivery",
        "description": "Where the report should be sent. `inline` (the default) returns it in the response body. `email` delivers it to the address in the `email` parameter instead.\n`delivery=email` always requires an `email`. The reverse holds for every format except `googleSheets`: an address without `delivery=email` is a 400, because the report would come back inline and the address would be ignored.\n`contentType=googleSheets` is the exception. A sheet is an object that can be granted to an account, so an `email` on an inline sheet request names who to share it with -- see `sheetVisibility` -- and the report still comes back over HTTP as a `302` to the sheet.\n## What email delivery changes\nThe request returns immediately with a delivery receipt, without waiting for the report to be generated:\n```json { \"status\": \"processing\", \"recipient\": \"you@example.com\", \"contentType\": \"xlsx\" } ```\nThis is the only way to retrieve a report that takes longer than 240 seconds to generate. An inline request gives up at that point and returns `504`, and retrying does not help -- the report is simply not obtainable over HTTP. With `delivery=email` there is nothing waiting on the result, so the report is generated and delivered however long it takes.\nHow it arrives depends on `contentType`:\n- `json`, `csv`, `xlsx` -- attached to an email as a file. - `googleSheets` -- a new Google Sheet is shared with the address, and its link is emailed. Google sends its own share notification too, so the recipient receives two messages carrying the same link. By default that sheet is also openable by anyone holding the link; set `sheetVisibility=private` to restrict it to the recipient.\n## Errors are emailed, not returned\nBecause the response is sent before the report is generated, nothing that happens afterwards can be reported as an HTTP status. Any failure -- `Report Request Too Large`, a Metrc permission error, a report too large to attach -- is emailed to the recipient instead, carrying the same title and explanation the inline request would have returned in its response body.\nParameters are still validated before the receipt is sent, so an invalid `columns`, `rowLimit`, `include` or `email` is still an immediate 400.\n## Notes\n- **One recipient per request.** A comma-separated list is rejected. - **Rate limited separately** from report generation, and more tightly. - **On a Spreadsheet Sync link, every scheduled refresh sends an email.** Sync links are polled on a schedule, so adding `delivery=email` to one produces a message per refresh rather than a one-off export. - There is no status endpoint and no way to poll for completion. The report arrives, or an explanation does.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "inline",
            "email"
          ],
          "default": "inline",
          "example": "email"
        }
      },
      "DeliveryId": {
        "name": "deliveryId",
        "in": "query",
        "required": true,
        "schema": {
          "type": "integer",
          "example": 1234567
        }
      },
      "Email": {
        "name": "email",
        "description": "The address the report is delivered to. Required when `delivery=email`, and rejected without it for every format except `googleSheets`, so that an address supplied by mistake never silently goes nowhere.\nOne address only; a comma- or semicolon-separated list is a 400.\n## With contentType=googleSheets\nThis must be a **Google account**: the sheet is granted to the address directly, and Google Drive may refuse to share with an address it does not recognize. If the share fails, the unshareable sheet is deleted rather than left behind, and you are told why -- as a 400-series response inline, or by email when deferred.\nIt is also the one case where the parameter is accepted *without* `delivery=email`. On an inline sheet request it names the account to share with; the report still comes back as a `302` to the sheet. It is required when `sheetVisibility=private`, since a sheet with no link grant and no named share is openable by nobody.\nFor the file formats any deliverable address works.\nThe address is not verified against your Metrc account, and the report is sent wherever you point it. Treat it the way you would treat any export destination.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "format": "email",
          "example": "you@example.com"
        }
      },
      "HubTransferInclude": {
        "name": "include",
        "description": "One or more hub supertransfer mixins.\n\n- packages\n- history\n\nThere is no `transporterDetails` include. Metrc embeds the driver legs in the\nhub response as `shipmentTransporterDetails`, so they are already present on\nevery record without spending a request.\n\n## Cost\n\nEach include costs one Metrc request per record. Every report shares a budget of\n10,000 Metrc requests, and a request estimated to exceed it returns\n`Report Request Too Large` before any data is loaded. Reduce the record count\nwith filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "packages",
          "items": {
            "type": "string",
            "enum": [
              "packages",
              "history"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "LicenseNumber": {
        "name": "licenseNumber",
        "description": "The unique identifier for the license associated with this request.\n\n## Behavior\n\n- Only one license can be queried per request\n- The `licenseNumber` parameter must match an active license accessible to the authenticated user\n- Use the licenses endpoint to retrieve available license numbers\n\n## Examples\n\n<details>\n<summary>Click to expand</summary>\n\n### Example 1: View available licenses\nRetrieve all licenses available to the current user:\n```\nGET https://api.trackandtrace.tools/v2/licenses\n```\n\n### Example 2: Query with license number\nSpecify the target license with the required `licenseNumber` query parameter:\n```\nGET https://api.trackandtrace.tools/v2/items?licenseNumber=LIC-00001\n```\n\n</details>\n\n## Notes\n\n- The license number is required for all data-retrieval endpoints\n- Invalid or inaccessible license numbers will return an authorization error\n- License numbers are case-sensitive\n",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "example": "LIC-00001"
        }
      },
      "LicenseNumbers": {
        "name": "licenseNumber",
        "description": "The license or licenses this report covers.\n\nReports are the only endpoints that accept more than one. Every other endpoint\nreads a single `licenseNumber` and ignores any extra values.\n\n## Syntax\n\nRepeat the parameter to report across several licenses:\n`licenseNumber=LIC-00001&licenseNumber=LIC-00002`. A comma-joined list is not\nsupported and returns `400`. At most 20 licenses may be requested at once, and\nrepeating the same license returns `400 Duplicate License`.\n\n## Row order\n\nRows appear in the order the parameters appear. Every row of the first license\nprecedes every row of the second, and so on. Ordering within a license is\nunchanged \u2014 `sort` applies inside each license, not across them.\n\n## Limits are totals, not per-license allowances\n\n- The row cap \u2014 50,000 for a report, 5,000 for a super report \u2014 applies to the\n  **sum** across every requested license. Two licenses holding 30,000 records\n  each are 60,000 records and return `Report Request Too Large`; the error\n  names each license's count so you can see which to filter.\n- `rowLimit` is likewise a total, filled in license order. With\n  `rowLimit=600` against a first license holding 400 records, you get all 400\n  of the first and the first 200 of the second; nothing beyond that is\n  requested from Metrc.\n- The 10,000 Metrc request budget is a single total across all licenses.\n\n## Which license a row came from\n\nEvery record carries its own `licenseNumber` field, so add it to `columns`\nto label the rows:\n\n```\nGET https://api.trackandtrace.tools/v2/packages/active/report\n  ?licenseNumber=LIC-00001\n  &licenseNumber=LIC-00002\n  &columns=licenseNumber,label,quantity\n```\n\nOn the three transfer manifest reports the field is `transfer.licenseNumber`,\nbecause those rows are cross-joined from a transfer/delivery/package\nhierarchy.\n\nIt is not a default column, so a single-license report is unchanged.\n\n## Failures\n\nA report is all-or-nothing. If any requested license fails \u2014 most often\nbecause the authenticated user cannot access it \u2014 the whole request fails\nrather than returning a partial result that a spreadsheet has no way to\nnotice.\n\n## Notes\n\n- License numbers are case-sensitive\n- Use the licenses endpoint to retrieve available license numbers\n- Invalid or inaccessible license numbers will return an authorization error\n",
        "in": "query",
        "required": true,
        "schema": {
          "type": "array",
          "example": "LIC-00001",
          "minItems": 1,
          "maxItems": 20,
          "items": {
            "type": "string"
          }
        },
        "style": "form",
        "explode": true
      },
      "ManifestNumber": {
        "name": "manifestNumber",
        "description": "The unique identifier for the desired manifest.",
        "in": "query",
        "required": true,
        "schema": {
          "type": "integer",
          "example": 1234567
        }
      },
      "PrependCsvMetadata": {
        "name": "prependCsvMetadata",
        "description": "Controls if the report metadata preamble should be included in the output.\nWhen set to false, only the column headers and data will be returned.\nApplies to every tabular format -- `contentType=csv`, `xlsx` and `googleSheets` -- and produces the same eight rows in each. The parameter keeps its `Csv` name for backwards compatibility. JSON responses ignore it, carrying the same information in the response envelope instead.\n## The preamble\nWhen enabled, eight rows precede the column headers -- seven label/value pairs and one blank separator:\n```\nReport:,ACTIVE_PACKAGES_REPORT\nData model:,MetrcPackage\nGenerated at:,2024-01-01T00:00:00+00:00\nLicense number:,LIC-00001\nFilters:,quantity__gte:100\nFilter logic:,and\nSort:,label:asc\n\nLabel,Location Name,Item Name,Quantity,Unit Of Measure Abbreviation\n1A44...1234,Room A,Blue Dream,10,ea\n```\nSo the column headers land on **row 9** and the first data row on **row 10**.\nThe preamble is shown above as CSV, but `xlsx` and `googleSheets` place the same values in the same cells -- column A holds the labels, column B the values.\n## Spreadsheet use\nSet this to `false` when the output feeds a formula that expects headers on row 1 -- `IMPORTDATA` in Google Sheets, or a Power Query import in Excel. Leave it enabled when a person will read the file and needs to know which license, filters and sort produced it.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true",
            "false"
          ],
          "default": "true",
          "example": "true"
        }
      },
      "ReportTransform": {
        "name": "transform",
        "description": "Reshapes the report into a purpose-built spreadsheet instead of the endpoint's ordinary columns.\n\nA transform loads exactly the same data the report already loads -- same Metrc collection, same filters, same cost -- and changes only how it is presented. It is excluded from the report cache key, so asking for a transform right after asking for the plain report reuses the same load rather than repeating it.\n\nCurrently one transform is available: `scanSheet`.\n\n## scanSheet\n\nA reconciliation aid for receiving or shipping a manifest. Each row is one package. The `Package Tag` column holds the tag Metrc says is in the shipment; the `Scanned Tags` column next to it is left **empty** for a warehouse worker to fill in with a barcode scanner.\n\nConditional formatting colours the two columns live as tags are scanned:\n\n| Colour | Where | Meaning |\n| --- | --- | --- |\n| Red | Package Tag | Not scanned yet |\n| Green | Package Tag | Scanned exactly once -- matched |\n| Yellow | Package Tag | Scanned more than once |\n| Yellow | Scanned Tags | The same tag was entered twice |\n| Orange | Scanned Tags | Scanned a tag that is not on any manifest in this sheet |\n\nNothing is computed server-side. The colouring is `COUNTIF` formulas evaluated by the spreadsheet itself, so it updates as the worker types.\n\n### Columns\n\n`License`, `Transfer Type`, `Manifest Number`, `Origin`, `Destination`, `Package Contents`, `Package Tag`, `Scanned Tags`.\n\n`Transfer Type` is constant within a sheet -- `INCOMING`, `OUTGOING`, `REJECTED` or `HUB`, depending on the endpoint. To reconcile more than one direction, generate one sheet per direction.\n\n### Example\n\nA scan sheet for two specific inbound manifests:\n\n```\nGET /v2/transfers/incoming/manifest/report ?licenseNumber=LIC-001 &transform=scanSheet &contentType=googleSheets &filter=manifestNumber__eq:0000123456 &filter=manifestNumber__eq:0000123457 &filterLogic=or\n```\n\nRepeat `filter` once per manifest and set `filterLogic=or`, otherwise the two conditions are ANDed together and no transfer matches both.\n\n### Restrictions\n\n- **Spreadsheet formats only.** `contentType` must be `xlsx` or `googleSheets`. `json` and `csv` return 400: they cannot carry cell formatting, so the sheet would look correct and do nothing.\n- **`columns` cannot be combined with it.** The transform defines its own columns, and its formulas are anchored to their positions. Sending both returns 400 rather than silently ignoring your column list.\n- **`metadata` cannot be combined with it.** Metadata columns are appended to the right of a report's own, which is where the transform's last column sits \u2014 for a scan sheet, the `Scanned Tags` column its formatting is anchored to.\n- **`columnHeaderOverrides` cannot be combined with it.** A transform names its own columns as well as choosing them, and those names are what the sheet is read and trained against. Sending both returns 400.\n- **`prependCsvMetadata=true` cannot be combined with it.** The metadata preamble would move the header off the first row and break every formula anchor. The preamble is omitted automatically; only an explicit `true` is an error.\n- **Capped at 10,000 rows.** Rows are packages, not transfers. This limit is applied after the data is loaded, so it does not reduce the Metrc cost of the request -- it exists because a scan sheet that large is a forgotten filter rather than a real request. Filter by manifest number.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "scanSheet"
          ],
          "example": "scanSheet"
        }
      },
      "RowLimit": {
        "name": "rowLimit",
        "description": "Limits the number of records returned by this report.\nWhen omitted, the report returns every matching record. The minimum is 1, and values above the endpoint row cap are clamped to it rather than rejected, so an over-large value behaves exactly like omitting the parameter.\n## Row caps\n- **Reports** (`/report`): 50,000 records - **Super reports** (`/super/report`): 5,000 records\nA collection larger than the cap is **rejected**, not truncated \u2014 a report that quietly returned a partial dataset would look complete to a spreadsheet. Set `rowLimit` to ask for a prefix of it deliberately.\nSuper reports carry the lower cap because each requested `include` costs one additional Metrc request per record, and every report shares a budget of 10,000 Metrc requests.\n## Building and testing a request\nSet a small `rowLimit` while you are still working out the filters and columns. A limited report returns the same columns, formatting and envelope as the full one, so `rowLimit=10` is enough to confirm a filter matches what you expect or that a `columns` list is spelled correctly -- without loading the whole collection for each attempt. Remove it for the real run.\nNote that `rowLimit` is part of the report cache key, since it changes which records are fetched. `contentType`, `columns` and `prependCsvMetadata` are not: they are applied to already-loaded data, so re-requesting with different columns or a different format is served from cache.\n## Rescuing an over-large request\n`rowLimit` is the fastest way to bring a request that returns `Report Request Too Large` inside the limits. It is applied while loading rather than to a finished report: only the pages needed to cover the limit are fetched, and both the row cap and the request budget are checked against the limited count. Tightening filters or dropping an `include` has the same effect.\nWhich records are returned depends on the sort order, so pair this with the sort parameter for a predictable result.\nThe limit is applied to top-level records. Reports that expand a single record into multiple output rows may therefore return more rows than this limit.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 1,
          "example": "100"
        }
      },
      "SecretKey": {
        "name": "secretKey",
        "description": "Your secret key, if you wish to authenticate via query params. Secret keys can be manually generated [here](/v2/pages/secret-key).\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "example": "2616ec56-fa2a-4c5b-86c0-acacf23c9ef7"
        }
      },
      "SheetVisibility": {
        "name": "sheetVisibility",
        "description": "Who can open the Google Sheet a report creates. Only meaningful with `contentType=googleSheets`; supplying it with any other format is a 400, because those formats produce no sheet and the value would be silently ignored.\n## public (the default)\nThe sheet is created with an anyone-with-the-link grant, so **anyone holding the URL can read and edit the report**. The link is unguessable, but it is the only thing protecting the data -- treat it as a credential, and do not paste it anywhere you would not paste the report itself.\nThis is the default because an inline request has no Google account to grant access to. The response is a redirect, and a redirect to a document the arriving browser cannot open is not an answer.\n## private\nNo link grant. The sheet is reachable only through a named share, so `private` **requires an `email` parameter** naming the Google account to share it with. Without one the sheet would be openable by nobody and the request is rejected with a 400.\n``` # Anyone with the link can open this GET /v2/packages/active/report?licenseNumber=LIC-001&contentType=googleSheets\n# Only alice@example.com can open this GET /v2/packages/active/report?licenseNumber=LIC-001&contentType=googleSheets &sheetVisibility=private&email=alice@example.com ```\nBoth forms still return a `302` to the sheet. With `sheetVisibility=private` the caller only lands on it if their browser is signed into the account named in `email`; anyone else gets Google's request-access page.\n## With delivery=email\nThe parameter means the same thing and has the same default. A `delivery=email` request that does not set `sheetVisibility` produces a sheet anyone with the link can open, **and the link is emailed**. Set `sheetVisibility=private` to restrict it to the recipient.\n## Notes\n- `public` grants **write** access, not just read. Recipients can edit the sheet; edits do not propagate anywhere, since each request creates a new document. - Visibility and `email` are independent. A `public` sheet with an `email` gets both grants: the link works for anyone, and the named account also has it in their Drive. - Excluded from the report cache key, so changing it does not re-run the report.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "public",
            "private"
          ],
          "default": "public",
          "example": "private"
        }
      },
      "SkipDynamicValidationChecks": {
        "name": "skipDynamicValidationChecks",
        "in": "query",
        "required": false,
        "description": "Allows selectively skipping specific dynamic validation checks when `applyDynamicValidation=true`.\nEach value should be a valid dynamic check key. Unrecognized keys are silently ignored.\n\nUse this parameter multiple times to skip multiple checks:\n  - `?skipDynamicValidationChecks=CREATE_PACKAGES_TAG_IDS_EXIST&skipDynamicValidationChecks=CREATE_PACKAGES_LOCATION_IDS_EXIST`\n\nAvailable check keys per endpoint:\n\n**Create Packages from Packages:**\n  - `CREATE_PACKAGES_PACKAGE_IDS_EXIST` \u2014 Skip ingredient source package ID validation\n  - `CREATE_PACKAGES_UNIT_OF_MEASURE_IDS_EXIST` \u2014 Skip unit of measure ID validation\n  - `CREATE_PACKAGES_ITEM_IDS_EXIST` \u2014 Skip item ID validation\n  - `CREATE_PACKAGES_TAG_IDS_EXIST` \u2014 Skip tag ID validation\n  - `CREATE_PACKAGES_LOCATION_IDS_EXIST` \u2014 Skip location ID validation\n\n**Create Transfer Templates:**\n  - `PACKAGE_IDS_EXIST` \u2014 Skip package ID validation\n  - `TRANSFER_TYPE_IDS_EXIST` \u2014 Skip transfer type ID validation\n\n**Discontinue Item:**\n  - `DISCONTINUE_ITEM_ID_EXISTS` \u2014 Skip item ID validation against active items\n\n**Discontinue Strain:**\n  - `DISCONTINUE_STRAIN_ID_EXISTS` \u2014 Skip strain ID validation against active strains\n\n**Void Transfer:**\n  - `VOID_TRANSFER_ID_EXISTS` \u2014 Skip transfer ID validation against outgoing active transfers\n\n**Void Sales Receipt:**\n  - `VOID_SALES_RECEIPT_ID_EXISTS` \u2014 Skip sales receipt ID validation against active sales\n\n**Unfinalize Sales:**\n  - `UNFINALIZE_SALES_IDS_EXIST` \u2014 Skip sales receipt ID validation against inactive sales\n\n**Unfinish Packages:**\n  - `UNFINISH_PACKAGES_IDS_EXIST` \u2014 Skip package ID validation against inactive packages\n\n**Adjust Packages:**\n  - `ADJUST_PACKAGES_PACKAGE_IDS_EXIST` \u2014 Skip package ID validation against active packages\n  - `ADJUST_PACKAGES_UOM_IDS_EXIST` \u2014 Skip unit of measure ID validation\n  - `ADJUST_PACKAGES_REASON_IDS_EXIST` \u2014 Skip adjustment reason ID validation\n\n**Create Testing Packages:**\n  - Same checks as Create Packages from Packages (shared check functions)\n\n**Create Transfers:**\n  - `PACKAGE_IDS_EXIST` \u2014 Skip package ID validation\n  - `TRANSFER_TYPE_IDS_EXIST` \u2014 Skip transfer type ID validation\n\n**Create Items:**\n  - `CREATE_ITEMS_PRODUCT_CATEGORY_IDS_EXIST` \u2014 Skip product category ID validation\n  - `CREATE_ITEMS_STRAIN_IDS_EXIST` \u2014 Skip strain ID validation\n  - `CREATE_ITEMS_UOM_IDS_EXIST` \u2014 Skip unit of measure ID validation\n\n**Update Transfers:**\n  - `UPDATE_TRANSFER_ID_EXISTS` \u2014 Skip transfer ID validation against outgoing active transfers\n  - `PACKAGE_IDS_EXIST` \u2014 Skip package ID validation\n  - `TRANSFER_TYPE_IDS_EXIST` \u2014 Skip transfer type ID validation\n\n**Update Transfer Templates:**\n  - `UPDATE_TRANSFER_TEMPLATES_IDS_EXIST` \u2014 Skip template ID validation\n  - `PACKAGE_IDS_EXIST` \u2014 Skip package ID validation\n  - `TRANSFER_TYPE_IDS_EXIST` \u2014 Skip transfer type ID validation\n\n**Archive Transfer Template:**\n  - `ARCHIVE_TRANSFER_TEMPLATE_ID_EXISTS` \u2014 Skip template ID validation\n\n**Create Strains:**\n  - `CREATE_STRAINS_PERCENTAGES_VALID` \u2014 Skip indica/sativa percentage sum validation\n\n**Add Package Notes:**\n  - `ADD_PACKAGE_NOTES_PACKAGE_IDS_EXIST` \u2014 Skip package ID validation against active packages\n\n**Create Plant Harvest:**\n  - `HARVEST_PLANTS_PLANT_IDS_IN_FLOWERING` \u2014 Skip plant ID validation against flowering plants\n  - `HARVEST_PLANTS_DRYING_LOCATION_IDS_EXIST` \u2014 Skip drying location ID validation\n\n**Create Plant Manicure:**\n  - `HARVEST_PLANTS_PLANT_IDS_IN_FLOWERING` \u2014 Skip plant ID validation against flowering plants\n  - `HARVEST_PLANTS_DRYING_LOCATION_IDS_EXIST` \u2014 Skip drying location ID validation\n\nIf `applyDynamicValidation` is not set to `true`, this parameter has no effect.\n",
        "schema": {
          "type": "array",
          "example": "CREATE_PACKAGES_TAG_IDS_EXIST",
          "items": {
            "type": "string"
          }
        },
        "style": "form",
        "explode": true
      },
      "StrictPagination": {
        "name": "strictPagination",
        "description": "Toggles strict pagination. Defaults to `false` (disabled)\n\n  - If enabled, requesting an out of bounds page will throw a 400. \n  - If disabled, requesting an out of bounds page will return a 200 and an empty page.",
        "in": "query",
        "required": false,
        "schema": {
          "type": "boolean",
          "default": false,
          "example": true
        }
      },
      "Submit": {
        "name": "submit",
        "in": "query",
        "required": false,
        "description": "Controls whether this request should be forwarded to Metrc.\n- **If present and set to 'true'**: The request will be subjected to static validation and forwarded to Metrc if validation passes.\n- **If omitted or set to any value other than 'true'**: The request will only be subjected to static validation.\nExamples:\n  - \"true\": Forward the request to Metrc\n  - \"false\": Execute a dry run\n",
        "schema": {
          "type": "string",
          "example": "true"
        }
      },
      "SuperharvestInclude": {
        "name": "include",
        "description": "One or more superharvest mixins. Each mixin will attach the raw\ndata from Metrc to the harvest object.\n\n- history\n- plants\n- packages\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "history",
          "items": {
            "type": "string",
            "enum": [
              "history",
              "plants",
              "packages"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SuperitemInclude": {
        "name": "include",
        "description": "One or more superitem mixins. Each mixin will include the raw\ndata from Metrc, but also will populate the extracted metadata.\n\n- ingredients  \n  Extracted metadata: none\n\n- notes  \n  Extracted metadata: none\n\n- history  \n  Extracted metadata: none\n\n- images\n  Extracted metadata:\n    - itemImages\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "history,notes",
          "items": {
            "type": "string",
            "enum": [
              "notes",
              "history",
              "ingredients",
              "images"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SuperpackageInclude": {
        "name": "include",
        "description": "One or more superpackage mixins. Each mixin will include the raw\ndata from Metrc, but also will populate the extracted metadata.\n\n- labResults  \n  Extracted metadata:\n    - extractedLabResults\n    - testSamplePackageLabels\n    - labResultPdfs\n\n- labResultBatches  \n  Extracted metadata:\n    - extractedLabResults\n    - testSamplePackageLabels\n    - labResultPdfs\n\n- sourceHarvests  \n  Extracted metadata:\n    - harvestDates\n\n- history  \n  Extracted metadata:\n    - initialQuantity\n    - initialQuantityUnitOfMeasure\n    - manifestNumber\n    - destinationFacilityLicenseNumber\n    - destinationFacilityName\n    - transferType\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "sourceHarvests",
          "items": {
            "type": "string",
            "enum": [
              "labResults",
              "labResultBatches",
              "sourceHarvests",
              "history"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SuperplantInclude": {
        "name": "include",
        "description": "One or more superplant mixins. Each mixin will attach the raw\ndata from Metrc to the plant object.\n\n- history\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "history",
          "items": {
            "type": "string",
            "enum": [
              "history"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SuperplantbatchInclude": {
        "name": "include",
        "description": "One or more superplantbatch mixins. Each mixin will attach the raw\ndata from Metrc to the plant batch object.\n\n- history\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "history",
          "items": {
            "type": "string",
            "enum": [
              "history"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SupersalesInclude": {
        "name": "include",
        "description": "One or more supersales mixins. Each mixin will attach the raw\ndata from Metrc to the sales receipt object.\n\n- transactions\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "transactions",
          "items": {
            "type": "string",
            "enum": [
              "transactions"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "SupertransferInclude": {
        "name": "include",
        "description": "One or more supertransfer mixins.\n\n- packages\n- transporters\n\n## Cost\n\nOn a super report, each include costs one Metrc request per record. Every report\nshares a budget of 10,000 Metrc requests, and a request estimated to exceed it\nreturns `Report Request Too Large` before any data is loaded. Reduce the record\ncount with filters or `rowLimit`, or request fewer includes.\n\nWith `contentType=csv` at most one include is accepted: a flat grid cannot represent\ntwo independent child collections. `json` accepts as many as the budget allows.\n\n## Syntax\n\nRepeat the parameter to request several includes: `include=history&include=packages`.\nA comma-joined list is not supported. Any value outside the list above returns\n`400 Invalid Include`, naming the values this endpoint accepts.\n",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "example": "packages",
          "items": {
            "type": "string",
            "enum": [
              "packages",
              "transporters"
            ]
          }
        },
        "style": "form",
        "explode": true
      },
      "TemplateId": {
        "name": "templateId",
        "in": "query",
        "required": true,
        "schema": {
          "type": "integer",
          "example": 21
        },
        "description": "The ID of the data import template"
      }
    }
  },
  "openapi": "3.0.2",
  "servers": [
    {
      "url": "https://api.trackandtrace.tools"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    },
    {
      "SecretKeyHeader": []
    },
    {
      "SecretKeyQuery": []
    }
  ]
}