NAV

Distru API

Stay Up To Date

To stay up to date with the latest breaking changes to the Distru public API, please sign up for our email list.

Overview

Distru's public API allows you to easily access and manipulate your data in our system automatically.

Base URL

All API requests should be made to the base URL: https://app.distru.com

Getting Started

To integrate with Distru, you'll need to contact a representative that will can enable your account's API access. From there, have a look at the following information on how to authenticate with Distru.

Authentication

An admin user can generate API keys in the Distru app by following these steps.

Steps:

  1. Log in to Distru with your admin account.
  2. Navigate to the Settings page from the left menu.
  3. Click on Distru API under the Integrations section.
  4. Use the Create API Key option to generate your API token.

Using your API token

Example authenticated request

GET /public/v1/orders?page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN

Every request must include your token in the Authorization header using the Bearer scheme, along with JSON content-type and accept headers:

Header Value
Authorization Bearer YOUR_API_TOKEN
Content-Type application/json
Accept application/json

Treat your token like a password: it carries the same permissions as the admin who created it. Keep it server-side and never expose it in client-side code.

Webhooks

Distru can push changes to your systems in real time via webhooks. A webhook fires whenever a record is created, edited, or deleted. We support webhooks for:

To set up webhooks, reach out to Customer Support to find out more.

Webhook payload shape

Every webhook is a JSON POST with three top-level fields:

Field Description
type The entity type, e.g. ORDER, PURCHASE, INVOICE, PRODUCT.
id The public id of the entity the webhook is about (the same value as object.id).
object The full entity, in the same structure the GET /public/v1/<type>/<id> endpoint returns.

object is the current version of the entity, fetched fresh when the webhook is sent — not a snapshot from when the change was committed. If other changes were committed in between, they are reflected. On a hard-delete event the entity no longer exists, so object is null; use type and id.

To keep integrations simple, object matches the corresponding GET endpoint exactly, so you can parse it with the same code you already use for that endpoint.

Webhook nested entities

A change to a nested record triggers a webhook at its parent level — never as its own webhook — and object is always the full parent entity. The nested records that trigger each parent are:

Parent Nested records
Sales Orders items, charges
Purchase Orders items, charges
Invoices items, charges, payments
Assemblies inputs, outputs, costs
Returns items
Companies the related company, its locations, its licenses, and its contacts (each with its profile)
Products bills of materials (and each bill of materials' inputs and costs)

For example, adding an order item to a sales order does not send an "order item" webhook — it sends a Sales Order webhook whose object is the full order, including the new item.

Note: inventory changes (adding or removing quantity) do not currently trigger Product webhooks.

Webhook signing & verification

When Customer Support sets up your webhook, they provide a signing secret. Distru signs every request so you can confirm it came from us and was not tampered with.

Each request includes an x-distru-signature header:

x-distru-signature: sha256=<hex digest>

The digest is an HMAC-SHA256 of the raw request body using your signing secret. To verify a request:

  1. Read the raw request body exactly as received — do not re-serialize the JSON, since key order must match.
  2. Compute HMAC-SHA256(raw_body, your_secret) and hex-encode it.
  3. Compare sha256=<your digest> to the x-distru-signature header using a constant-time comparison.

Node.js example

const crypto = require('crypto');

function isValid(rawBody, signatureHeader, secret) {
  const expected =
    'sha256=' +
    crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signatureHeader),
    Buffer.from(expected)
  );
}

Webhook retries & ordering

If your endpoint is unreachable or returns a non-2xx status, Distru retries delivery with an increasing delay between attempts (up to ~10 attempts over roughly 4 hours) before giving up.

Webhooks are delivered in the order the underlying changes were committed.

Webhook payload examples

A sales order is created or edited (object is the full order, same as GET /public/v1/orders/:id)

{
  "type": "ORDER",
  "id": "8f3c9d2e-1a4b-4c7d-9e0f-2b6a1c3d4e5f",
  "object": {
    "id": "8f3c9d2e-1a4b-4c7d-9e0f-2b6a1c3d4e5f",
    "order_number": "SO-0001",
    "status": "PENDING",
    "total": "60.00",
    "order_datetime": "2025-05-04T04:40:21.817570Z",
    "company": {"id": "b7e2…", "name": "Acme Dispensary"},
    "items": [
      {
        "id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
        "product_id": "0c9e7f11-2a33-4b55-8c77-9d0e1f2a3b4c",
        "quantity": 5.0,
        "price": 10.0
      }
    ],
    "charges": []
  }
}

The same shape is sent when a nested record changes: adding an order item sends an ORDER webhook whose object is the full order (with the new item under items).

A sales order is hard-deleted (object is null)

{
  "type": "ORDER",
  "id": "8f3c9d2e-1a4b-4c7d-9e0f-2b6a1c3d4e5f",
  "object": null
}

Objects above are trimmed for readability; a real object includes the full set of fields returned by the matching GET endpoint.

Pagination

Use the page[number]= query parameter to request a specific page. When another page is available, the response body includes a next_page URL you can follow.

Page size limits for each endpoint are listed in the API documentation.

Endpoint query with page number example

https://app.distru.com/public/v1/products?page[number]=1

cURL example

curl --location --globoff 'https://app.distru.com/public/v1/products?page[number]=1' \
--header 'Authorization: Bearer ********* API KEY HERE *********'

Next page URL in the response body (if a next page exists)

"next_page": "https://app.distru.com/public/v1/products?page[number]=2"

Filtering by datetime parameters

Datetimes use the format YYYY-MM-DDTHH:MM:SS.MSZ.

The comma position controls the direction of the filter. All bounds are inclusive: a record matching the exact datetime in the query is returned.

Examples

products?updated_datetime=2025-05-04T04:40:21.817570Z,

Returns any record on or after May 4th, 2025.

products?updated_datetime=,2025-05-04T04:40:21.817570Z

Returns any record on or before May 4th, 2025.

products?updated_datetime=2025-05-04T04:40:21.817570Z,2025-09-18T16:27:44.946871Z

Returns records between May 4th, 2025 and Sept 18th, 2025, inclusive.

Endpoints

Assembly

Get an assembly

GET /public/v1/assemblies/:id returns a single assembly

GET /public/v1/assemblies/03c1193e-4dc9-40ba-a5ed-cc2638b4b79e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzg5YzZkMmUtNGZlNi00MWJjLTlmYjUtY2ViZmM0NzRhMGNlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA1MyIsInR5cCI6ImFjY2VzcyJ9.IzfobqGDNRLJSRAcahzFH72LejxoY4YyazZlDsRhqpY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4f386cc9ae42ce31820953aabfcc9c0e-2722a027b8cf6012-0
{
  "data": {
    "assembly_number": "ASM001",
    "completion_datetime": null,
    "compliance_type": "NONE",
    "creation_source": "MANUALLY_CREATED",
    "custom_data": [],
    "description": "A little more than kin, and less than kind.",
    "estimated_start_date": null,
    "estimated_work_hours": null,
    "estimated_work_minutes": null,
    "fulfilled": true,
    "id": "03c1193e-4dc9-40ba-a5ed-cc2638b4b79e",
    "is_metrc_processing_job": false,
    "license": null,
    "outputs": [],
    "owner_id": "00000000-0000-0000-0000-000000000421",
    "status": "PENDING"
  }
}

Get a single assembly given the ID.

Required permission: assemblies_permissions_view.

Request

GET /public/v1/assemblies/{id}

Parameters

Parameter Description In Type Required Default Example
id Assembly ID path string true

Responses

Status Description Schema
200 A single assembly Assembly
404 Not Found

Get assemblies

GET /public/v1/assemblies returns proper data for non-compliance assembly

GET /public/v1/assemblies?creation_source=MANUALLY_CREATED&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGMyYzQ5NDktMjc2Ny00NTNhLWJiMzUtMDM1YjVmNjJiNzgyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTI2MCIsInR5cCI6ImFjY2VzcyJ9.wBBbSj4gPSI0Hff9Z6Zdu0fhujacxXbOeKWTq_wwCNo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5d764dcd2b18d55b498341073f460719-295a7fdb2cc42224-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-08-14T11:20:59.572880Z",
      "compliance_type": "NONE",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [
        {
          "id": 46,
          "name": "Custom Field 23",
          "value": "Custom Field Value"
        }
      ],
      "description": null,
      "estimated_start_date": "2024-01-02T03:04:05.000000Z",
      "estimated_work_hours": 1,
      "estimated_work_minutes": 5,
      "fulfilled": true,
      "id": "7bfa077e-6117-4007-a9c1-ee2d5dd8f788",
      "is_metrc_processing_job": false,
      "license": null,
      "outputs": [
        {
          "additional_costs": [
            {
              "cost_per_unit": "-1",
              "description": null,
              "name": "CostType 15",
              "quantity": "1",
              "total_cost_actual": "-1",
              "total_cost_default": "0",
              "unit_type": {
                "id": "00000000-0000-0000-0000-00000000311c",
                "name": "Unit Type 19"
              }
            }
          ],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000000ed",
            "name": "B799"
          },
          "compliance_label": null,
          "compliance_quantity": null,
          "cost_per_unit": "-0.3",
          "cost_per_unit_default": "0.5",
          "expiration_datetime": null,
          "ingredients": [
            {
              "batch": {
                "batch_number": null,
                "id": "00000000-0000-0000-0000-0000000000ed",
                "name": "B799"
              },
              "compliance_quantity": null,
              "cost_per_unit": "0.2",
              "cost_per_unit_default": "1",
              "location": {
                "address": "123 Fake Street, Beverly Hills, CA 90210, US",
                "company_id": "00000000-0000-0000-0000-0000000003d3",
                "id": "00000000-0000-0000-0000-000000000141",
                "license_id": null,
                "name": "Place 320"
              },
              "package": null,
              "product": {
                "id": "19cf0f71-233c-4a27-b219-92d500b38799",
                "name": "Product 791",
                "sku": "sku 792",
                "updated_datetime": "2026-08-14T11:20:59.489314Z"
              },
              "quantity": "2",
              "total_cost_actual": "0.4",
              "total_cost_default": "2"
            }
          ],
          "is_finished_good": false,
          "is_production_batch": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000003d3",
            "id": "00000000-0000-0000-0000-000000000141",
            "license_id": null,
            "name": "Place 320"
          },
          "package": null,
          "package_datetime": null,
          "package_unit_type": null,
          "product": {
            "id": "19cf0f71-233c-4a27-b219-92d500b38799",
            "name": "Product 791",
            "sku": "sku 792",
            "updated_datetime": "2026-08-14T11:20:59.489314Z"
          },
          "quantity": "2",
          "total_cost_actual": "-0.6",
          "total_cost_default": "1"
        }
      ],
      "owner_id": "00000000-0000-0000-0000-0000000004ec",
      "status": "COMPLETED"
    }
  ],
  "next_page": null
}

GET /public/v1/assemblies returns proper data for pending metrc assembly

GET /public/v1/assemblies?creation_source=MANUALLY_CREATED&license_number=CDPH-00000080&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTEwZjU3OTMtMGM1NC00MDQzLThiMTQtNTQ0YjY2MGZkNzU5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTczMSIsInR5cCI6ImFjY2VzcyJ9.lPs-hNVoYPm0jkjjYVf_5NdmSbXv6zPZiC6iz_CzsXE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: dbfd74b41bd02738653c6ab20efa0b0c-77841c6d95a77248-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": null,
      "compliance_type": "METRC",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [
        {
          "id": 59,
          "name": "Custom Field 34",
          "value": null
        }
      ],
      "description": null,
      "estimated_start_date": null,
      "estimated_work_hours": null,
      "estimated_work_minutes": null,
      "fulfilled": true,
      "id": "d469c735-846a-427e-b5e5-3682779fc5f1",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-00000000004f",
        "license_number": "CDPH-00000080"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000018a",
            "name": "B1207"
          },
          "compliance_label": "1A4010200001234000000003",
          "compliance_quantity": "2",
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "expiration_datetime": null,
          "ingredients": [
            {
              "batch": {
                "batch_number": null,
                "id": "00000000-0000-0000-0000-00000000018a",
                "name": "B1207"
              },
              "compliance_quantity": "0.0353",
              "cost_per_unit": null,
              "cost_per_unit_default": null,
              "location": {
                "address": "123 Fake Street, Beverly Hills, CA 90210, US",
                "company_id": "00000000-0000-0000-0000-00000000050d",
                "id": "00000000-0000-0000-0000-000000000182",
                "license_id": "00000000-0000-0000-0000-00000000004f",
                "name": "Place 385"
              },
              "package": {
                "batch_number": "1234567890",
                "compliance_label": "ABCDEF012345670000000122",
                "id": "00000000-0000-0000-0000-000000000043",
                "metrc_label": "ABCDEF012345670000000122",
                "status": "active"
              },
              "product": {
                "id": "f816e75b-3e77-4907-b459-6f8f36f93a10",
                "name": "Product 1202",
                "sku": "sku 1203",
                "updated_datetime": "2026-08-14T11:21:00.757438Z"
              },
              "quantity": "1",
              "total_cost_actual": null,
              "total_cost_default": null
            }
          ],
          "is_finished_good": false,
          "is_production_batch": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-00000000050d",
            "id": "00000000-0000-0000-0000-000000000182",
            "license_id": "00000000-0000-0000-0000-00000000004f",
            "name": "Place 385"
          },
          "package": null,
          "package_datetime": "2026-08-14",
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-000000003f4a",
            "name": "Gram"
          },
          "product": {
            "id": "f816e75b-3e77-4907-b459-6f8f36f93a10",
            "name": "Product 1202",
            "sku": "sku 1203",
            "updated_datetime": "2026-08-14T11:21:00.757438Z"
          },
          "quantity": "2",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-0000000006c3",
      "status": "PENDING"
    }
  ],
  "next_page": null
}

GET /public/v1/assemblies returns proper data for completed metrc assembly

GET /public/v1/assemblies?completion_datetime=2026-08-14+10%3A20%3A58.669573Z%2C2026-08-14+12%3A20%3A58.669573Z&creation_source=MANUALLY_CREATED&license_number=CDPH-00000037&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzcyMzljNjQtNWVhNi00MmMwLTlkYjctYjVmNjU0MzEyZTA4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODc3IiwidHlwIjoiYWNjZXNzIn0.VAkJJjVApdC1FY4qwrdxLSWrx0IrKjtwQI1vKnZ5W3c

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 25c0409fe996977b7defe60bedc6c227-9e95b16e4910ad6b-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-08-14T11:20:58.669573Z",
      "compliance_type": "METRC",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [],
      "description": null,
      "estimated_start_date": null,
      "estimated_work_hours": null,
      "estimated_work_minutes": null,
      "fulfilled": true,
      "id": "6a2d39ca-b683-409a-ad7b-4e26250b1ac7",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-000000000024",
        "license_number": "CDPH-00000037"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000089",
            "name": "B469"
          },
          "compliance_label": "1A4010200001234000000002",
          "compliance_quantity": "2",
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "expiration_datetime": null,
          "ingredients": [
            {
              "batch": {
                "batch_number": null,
                "id": "00000000-0000-0000-0000-000000000089",
                "name": "B469"
              },
              "compliance_quantity": "0.0353",
              "cost_per_unit": null,
              "cost_per_unit_default": null,
              "location": {
                "address": "123 Fake Street, Beverly Hills, CA 90210, US",
                "company_id": "00000000-0000-0000-0000-0000000002a1",
                "id": "00000000-0000-0000-0000-000000000100",
                "license_id": "00000000-0000-0000-0000-000000000024",
                "name": "Place 255"
              },
              "package": {
                "batch_number": "1234567890",
                "compliance_label": "ABCDEF012345670000000052",
                "id": "00000000-0000-0000-0000-00000000001c",
                "metrc_label": "ABCDEF012345670000000052",
                "status": "active"
              },
              "product": {
                "id": "972f9c15-b523-45d4-9b73-34d166037a2d",
                "name": "Product 459",
                "sku": "sku 460",
                "updated_datetime": "2026-08-14T11:20:58.448730Z"
              },
              "quantity": "1",
              "total_cost_actual": null,
              "total_cost_default": null
            }
          ],
          "is_finished_good": false,
          "is_production_batch": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000002a1",
            "id": "00000000-0000-0000-0000-000000000100",
            "license_id": "00000000-0000-0000-0000-000000000024",
            "name": "Place 255"
          },
          "package": {
            "batch_number": null,
            "compliance_label": "1A4010200001234000000002",
            "id": "00000000-0000-0000-0000-00000000001f",
            "metrc_label": "1A4010200001234000000002",
            "status": "active"
          },
          "package_datetime": "2026-08-14",
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-0000000020cd",
            "name": "Gram"
          },
          "product": {
            "id": "972f9c15-b523-45d4-9b73-34d166037a2d",
            "name": "Product 459",
            "sku": "sku 460",
            "updated_datetime": "2026-08-14T11:20:58.448730Z"
          },
          "quantity": "2",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-00000000036d",
      "status": "COMPLETED"
    }
  ],
  "next_page": null
}

GET /public/v1/assemblies returns proper data for biotrack assembly

GET /public/v1/assemblies?completion_datetime=2026-08-14+10%3A21%3A00.456852Z%2C2026-08-14+12%3A21%3A00.456852Z&creation_source=MANUALLY_CREATED&license_number=CDPH-00000065&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjlkNGE0NjctMDZmYi00YjcxLTkxMWItYzkxYWRlODYyZjNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTUxNyIsInR5cCI6ImFjY2VzcyJ9.j_3QJIcdctNuSGCimGDRVyu403GLNIVfdWCdjkjoasU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 89c9ae3707b8a9c41abf009aa33cd465-d53c13d7aeec1cfe-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-08-14T11:21:00.456852Z",
      "compliance_type": "BIOTRACK",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [],
      "description": null,
      "estimated_start_date": null,
      "estimated_work_hours": null,
      "estimated_work_minutes": null,
      "fulfilled": true,
      "id": "b9b95da7-fe40-4e7f-8eb6-774a64a1f55a",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-000000000040",
        "license_number": "CDPH-00000065"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000156",
            "name": "B1043"
          },
          "compliance_label": null,
          "compliance_quantity": "1",
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "expiration_datetime": null,
          "ingredients": [
            {
              "batch": {
                "batch_number": null,
                "id": "00000000-0000-0000-0000-000000000156",
                "name": "B1043"
              },
              "compliance_quantity": "1",
              "cost_per_unit": null,
              "cost_per_unit_default": null,
              "location": {
                "address": "123 Fake Street, Beverly Hills, CA 90210, US",
                "company_id": "00000000-0000-0000-0000-000000000476",
                "id": "00000000-0000-0000-0000-000000000162",
                "license_id": "00000000-0000-0000-0000-000000000040",
                "name": "Place 353"
              },
              "package": {
                "batch_number": null,
                "compliance_label": "0000000000000001",
                "id": "00000000-0000-0000-0000-000000000037",
                "metrc_label": "0000000000000001",
                "status": "active"
              },
              "product": {
                "id": "9b365ebf-ac7e-46f5-9e1f-d96a7dcdac86",
                "name": "Product 1039",
                "sku": "sku 1040",
                "updated_datetime": "2026-08-14T11:21:00.118356Z"
              },
              "quantity": "1",
              "total_cost_actual": null,
              "total_cost_default": null
            }
          ],
          "is_finished_good": false,
          "is_production_batch": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000476",
            "id": "00000000-0000-0000-0000-000000000162",
            "license_id": "00000000-0000-0000-0000-000000000040",
            "name": "Place 353"
          },
          "package": {
            "batch_number": null,
            "compliance_label": null,
            "id": "00000000-0000-0000-0000-00000000003c",
            "metrc_label": null,
            "status": "active"
          },
          "package_datetime": null,
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-0000000037b2",
            "name": "Gram"
          },
          "product": {
            "id": "9b365ebf-ac7e-46f5-9e1f-d96a7dcdac86",
            "name": "Product 1039",
            "sku": "sku 1040",
            "updated_datetime": "2026-08-14T11:21:00.118356Z"
          },
          "quantity": "1",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-0000000005ed",
      "status": "COMPLETED"
    }
  ],
  "next_page": null
}

Get assemblies ordered from oldest to newest by their last modified date.

Note: The page size for this endpoint is 500 assemblies per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: assemblies_permissions_view. Results are filtered to only include assemblies the authenticated user can access under their team restrictions.

Request

GET /public/v1/assemblies

Parameters

Parameter Description In Type Required Default Example
completion_datetime Filter assemblies by their completion datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
creation_source Filter assemblies by their creation source. Options include MANUALLY_CREATED, SPLIT_PACKAGE, SALES_ORDER and LAB_TESTING query string false
license_number Filter assemblies by their license number query string false

Responses

Status Description Schema
200 A list of assemblies Assemblies

Batch

Create a batch

POST /public/v1/batches Errors from service messages are properly reflected in the response

POST /public/v1/batches
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzRkYjllYmYtYTRlNy00ZjZjLWEwOGYtM2I4ODNmODY2MzM3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU4IiwidHlwIjoiYWNjZXNzIn0.cmzkcrmZUlY2A2Gh5sqyBsvcd9IH27mqlldJSC7cMuI
{
  "owner_id": "264069c8-bdf0-4b84-bfe1-14cc03300ba2",
  "product_id": "e8961522-a6f8-4ce6-b6e0-52022e764cf6"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: b6687c0295cc68aa7d70e2784687d4b2-9b8b5e5dddff263d-0
{
  "errors": [
    {
      "context": {},
      "message": "Owner not found",
      "pointer": [
        "owner_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Product not found",
      "pointer": [
        "product_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Unable to verify inventory tracking method",
      "pointer": [
        "product_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/batches Can create batch with all optional fields missing

POST /public/v1/batches
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWNkOTRmZjctZTkxYi00ODdjLWE3MDctNzZmMTk2ZmFjY2E5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE5NiIsInR5cCI6ImFjY2VzcyJ9.wCwnEf2CfEtaWYKLFjlS1Os3-w3kkzDUj6Rrs1N3AcY
{
  "product_id": "96dedd27-9613-4ac8-b815-46238fb8bb34"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 461270d2468a8900f122551091dd589b-9a9d1e7d8dd7248f-0
{
  "data": {
    "batch_number": null,
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "expiration_date": null,
    "id": "00000000-0000-0000-0000-0000000000d4",
    "manufactured_datetime": "2026-08-14T11:20:59.323126Z",
    "name": "B1",
    "owner_id": null,
    "product_id": "96dedd27-9613-4ac8-b815-46238fb8bb34"
  }
}

POST /public/v1/batches Can create batch with all optional fields provided

POST /public/v1/batches
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzNhYzgyM2EtYjllZC00ZDJlLTkxMWMtMWRhZGJkNTMzODNjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjM1IiwidHlwIjoiYWNjZXNzIn0.kIwPymfmf2KXDypwLt-J1ZGXz-s9n4qgfp5T0Cgm9c0
{
  "batch_number": "B1",
  "custom_data": {
    "24": [
      "A",
      "B"
    ]
  },
  "description": "Test batch",
  "expiration_date": "2025-01-01T00:00:00.000000Z",
  "manufactured_datetime": "2025-01-02T03:04:05.000000Z",
  "name": "Custom Batch Name",
  "owner_id": "00000000-0000-0000-0000-000000000288",
  "product_id": "0d994725-3d37-48d3-ae1c-fc98db8f0048"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7ad76bfb52e6479921dd807b17a64adb-ada94002cf2e3443-0
{
  "data": {
    "batch_number": "B1",
    "custom_data": [
      {
        "id": 24,
        "name": "Custom Field 5",
        "value": "A,B"
      }
    ],
    "deleted_at": null,
    "description": "Test batch",
    "expiration_date": "2025-01-01T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000047",
    "manufactured_datetime": "2025-01-02T03:04:05.000000Z",
    "name": "Custom Batch Name",
    "owner_id": "00000000-0000-0000-0000-000000000288",
    "product_id": "0d994725-3d37-48d3-ae1c-fc98db8f0048"
  }
}

Create a single batch. Required permission: products_permissions_create.

Request

POST /public/v1/batches

Parameters

Parameter Description In Type Required Default Example
product_id The ID of the product that this batch belongs to. query string false
name The name of the batch. If omitted, a name is generated from the batch number. query string false
batch_number The batch number of the batch. query string false
expiration_date The expiration date of the batch. query string false
manufactured_datetime The manufactured datetime of the batch (ISO 8601 format). query string false
owner_id The ID of the user that is the designated owner of this batch. query string false
description The description of the batch. query string false
custom_data A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=batch to retrieve available custom fields and their IDs. body object false {"123":"Custom Value 1","456":"Custom Value 2"}

Responses

Status Description Schema
200 A single batch Batch

Get a batch

GET /public/v1/batches/:id returns a single batch

GET /public/v1/batches/00000000-0000-0000-0000-000000000044
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjUwNWI1MzQtOWNlZS00MTE0LWI1MmEtZjNkMTliYjFkMTUyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTg3IiwidHlwIjoiYWNjZXNzIn0.Hj_MMn8shaAI2B-Okah2qBn4gitSrlvTaaa-NLXZftI

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 162d8d16bba2ea000009187de69f2580-7e4901ece02437a2-0
{
  "data": {
    "batch_number": "B001",
    "custom_data": [],
    "deleted_at": null,
    "description": "Test batch",
    "expiration_date": null,
    "id": "00000000-0000-0000-0000-000000000044",
    "manufactured_datetime": "2026-08-14T11:20:57.319620Z",
    "name": "B237",
    "owner_id": "00000000-0000-0000-0000-000000000254",
    "primary_test_result": null,
    "product_id": "738b5d7e-77d5-4676-a343-0d2bb7a8bb34"
  }
}

Get a single batch given the ID.

Required permission: products_permissions_view.

Request

GET /public/v1/batches/{id}

Parameters

Parameter Description In Type Required Default Example
id Batch ID path string true

Responses

Status Description Schema
200 A single batch BatchFull
404 Not Found

Get batches

GET /public/v1/batches returns batches related to the company

GET /public/v1/batches
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTA5MDU0OTEtOWEwMC00YjBkLWFiYTAtYzA3NTBkNjFkMGU2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTMyOSIsInR5cCI6ImFjY2VzcyJ9.NVL0v6TS8HfJyFTz1qnUSy8TkBOCppmm_vAX_qYLsGU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6d61edbbde9398d7712f83559d6c97e5-2a9821fbe53e9301-0
{
  "data": [
    {
      "batch_number": null,
      "custom_data": [
        {
          "id": 49,
          "name": "Custom Field 24",
          "value": "Custom Data 1"
        }
      ],
      "deleted_at": null,
      "description": null,
      "expiration_date": "2024-01-01T00:00:00.000000Z",
      "id": "00000000-0000-0000-0000-000000000110",
      "manufactured_datetime": "2024-01-02T03:04:05.000000Z",
      "name": "B868",
      "owner_id": "00000000-0000-0000-0000-00000000053d",
      "primary_test_result": null,
      "product_id": "e35e6277-9213-4d47-b62c-95270a9d90ef"
    },
    {
      "batch_number": null,
      "custom_data": [
        {
          "id": 49,
          "name": "Custom Field 24",
          "value": null
        }
      ],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-000000000117",
      "manufactured_datetime": "2024-01-02T03:04:05.000000Z",
      "name": "B885",
      "owner_id": "00000000-0000-0000-0000-00000000054b",
      "primary_test_result": {
        "cbd_mg_per_unit": "1",
        "cbd_mg_per_unit_total": "2",
        "cbd_percentage": "3",
        "cbd_percentage_total": "4",
        "coa_url": null,
        "mg_per_unit_type": "mg/mL",
        "name": "File.pdf",
        "thc_mg_per_unit": "5",
        "thc_mg_per_unit_total": "6",
        "thc_percentage": "7",
        "thc_percentage_total": "8"
      },
      "product_id": "84245be6-e22a-4e96-8078-7183c694fbad"
    }
  ],
  "next_page": null
}

GET /public/v1/batches returns cost data when include_costs is true

GET /public/v1/batches?include_costs=true
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjk2MTY0ZDItOGM2NC00MTdjLTg2NGMtZmFjMzIyNTZkNzU2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NzQ1IiwidHlwIjoiYWNjZXNzIn0.Cs9l0IfAbr8JCay87Ps62reO61Qg_ax95lh7wWoNJH8

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 40b9b70a4abe714856d555b6a9ed4319-4d848a7d436883c3-0
{
  "data": [
    {
      "batch_number": null,
      "cost_per_unit_actual": "2.11",
      "cost_per_unit_default": "5",
      "custom_data": [],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-000000000057",
      "manufactured_datetime": "2026-08-14T11:20:57.871151Z",
      "name": "B307",
      "owner_id": "00000000-0000-0000-0000-0000000002f7",
      "primary_test_result": null,
      "product_id": "7708fa66-551d-4496-a5a1-0c067e6bcfac",
      "total_cost_actual": "21.1",
      "total_cost_default": "50"
    }
  ],
  "next_page": null
}

GET /public/v1/batches filters by batch_ids

GET /public/v1/batches?batch_ids[]=00000000-0000-0000-0000-00000000009d&batch_ids[]=00000000-0000-0000-0000-0000000000a0
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2E3YmZkZTAtYTI0ZC00YjhjLTkyN2QtZTkyM2I0ODIzODRjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTg3IiwidHlwIjoiYWNjZXNzIn0.BLtF84VwplLC97g837JPA5ra4EaeMc0RMEInJ8WUJOk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d4823628542722c2b72070493051d42f-9f942f078d429e21-0
{
  "data": [
    {
      "batch_number": null,
      "custom_data": [],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-00000000009d",
      "manufactured_datetime": "2026-08-14T11:20:58.689080Z",
      "name": "B538",
      "owner_id": "00000000-0000-0000-0000-0000000003de",
      "primary_test_result": null,
      "product_id": "7a00c15b-f5f1-4afe-837c-203805f5dd22"
    },
    {
      "batch_number": null,
      "custom_data": [],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-0000000000a0",
      "manufactured_datetime": "2026-08-14T11:20:58.689080Z",
      "name": "B549",
      "owner_id": "00000000-0000-0000-0000-0000000003e6",
      "primary_test_result": null,
      "product_id": "454471b9-6fc8-4a76-a945-f32584a9422e"
    }
  ],
  "next_page": null
}

Get batches sorted by their creation date and filtered by various attributes.

Note: The page size for this endpoint is 5000 batches per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view. Results are filtered to only include batches the authenticated user can access under their team restrictions.

Request

GET /public/v1/batches

Parameters

Parameter Description In Type Required Default Example
batch_ids Filter batches by batch IDs query array false ?batch_ids[]=00000000-0000-0000-0000-000000000001&batch_ids[]=00000000-0000-0000-0000-000000000002
product_id Filter batches by product ID query string false
batch_number Filter batches by batch number query string false
inserted_datetime Filter batches by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted batches. no returns non-deleted, only returns deleted, include returns both. query string false no
page Pagination information query number false ?page[number]=1
updated_datetime Filter batches by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of batches Batches

Company

Get a company

GET /public/v1/companies/:id returns a single company

GET /public/v1/companies/00000000-0000-0000-0000-0000000001d2
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTNmODY3NDEtMDBhZi00Mjc5LTkxYWItOTJiODQ3NGJmZmQ3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTIyNCIsInR5cCI6ImFjY2VzcyJ9.M8tG2Vr_MHJKwrypBFhIFyuULkvyAkBpZRzvaQcQ67w

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 10b9a47faa8217dd17ca87d0171cfd54-3dc07ee54745f3b4-0
{
  "data": {
    "category": "Retailer",
    "custom_data": [
      {
        "id": 44,
        "name": "Custom Field 21",
        "value": "Custom Value"
      }
    ],
    "default_email": "co@example.com",
    "default_payment_term": {
      "days": 15,
      "id": "00000000-0000-0000-0000-000000000006",
      "locked": false,
      "name": "Net 15",
      "time_of_day": "17:00:00"
    },
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": {
      "id": "00000000-0000-0000-0000-00000000000e",
      "name": "Comp Rel Group 12"
    },
    "id": "00000000-0000-0000-0000-0000000001d2",
    "invoice_email": "inv@example.com",
    "legal_business_name": "Legal Co",
    "licenses": [
      {
        "id": "00000000-0000-0000-0000-000000000034",
        "license_number": "CDPH-00000053"
      }
    ],
    "locations": [
      {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000003cb",
        "id": "00000000-0000-0000-0000-00000000013d",
        "license_id": null,
        "name": "Place 316"
      }
    ],
    "name": "Company 968",
    "order_shipment_email": null,
    "outstanding_balance": "0",
    "outstanding_balance_threshold": null,
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1248@example.com",
      "full_name": "FirstName2512 LastName2513",
      "id": "00000000-0000-0000-0000-0000000004e1",
      "role": {
        "id": "00000000-0000-0000-0000-000000000513",
        "name": "Admin 1298"
      }
    },
    "owner_id": "00000000-0000-0000-0000-0000000004e1",
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": {
      "id": "00000000-0000-0000-0000-000000000001",
      "name": "Supplier"
    },
    "sales_order_email": "order@example.com",
    "updated_datetime": "2026-08-14T11:20:59.441814Z",
    "website": null
  }
}

Get a single company given the ID.

Required permission: companies_permissions_view.

Request

GET /public/v1/companies/{id}

Parameters

Parameter Description In Type Required Default Example
id Company ID path string true

Responses

Status Description Schema
200 A single company Company
404 Not Found

Get companies

GET /public/companies returns companies related to the company

GET /public/v1/companies
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmFhMDFhNmEtNDRkYS00MWIzLTk0MmItMWVhMGY3MjcwOWFiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTU4NCIsInR5cCI6ImFjY2VzcyJ9.kM_oYHu3WthOL6XAMD3YtJqmraOxlNAgBLR8af8Y_gM

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fbc7fe6d897c88a9920c8c1a41527ac3-497208d19d215c43-0
{
  "data": [
    {
      "category": "Retailer",
      "custom_data": [
        {
          "id": 55,
          "name": "Custom Field 30",
          "value": "Custom Data 1"
        }
      ],
      "default_email": "company-1@example.com",
      "default_payment_term": null,
      "default_purchase_order_notes": "Default Purchase Order Notes 1",
      "default_sales_order_notes": "Default Order External Notes 1",
      "deleted_at": null,
      "group": {
        "id": "00000000-0000-0000-0000-00000000000f",
        "name": "Comp Rel Group 13"
      },
      "id": "00000000-0000-0000-0000-00000000026f",
      "invoice_email": "invoice email",
      "legal_business_name": "Company Legal Name 1",
      "licenses": [],
      "locations": [
        {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000004b2",
          "id": "00000000-0000-0000-0000-00000000016e",
          "license_id": null,
          "name": "Place 365"
        }
      ],
      "name": "Company 1199",
      "order_shipment_email": "order shipment email",
      "outstanding_balance": "0",
      "outstanding_balance_threshold": 1000,
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner@example.com",
        "full_name": "FirstName3212 LastName3213",
        "id": "00000000-0000-0000-0000-000000000634",
        "role": {
          "id": "00000000-0000-0000-0000-00000000066f",
          "name": "Admin 1646"
        }
      },
      "owner_id": "00000000-0000-0000-0000-000000000634",
      "phone_number": "1234567890",
      "purchase_order_email": "purchase email",
      "relationship_type": {
        "id": "00000000-0000-0000-0000-000000000002",
        "name": "Supplier"
      },
      "sales_order_email": "order email",
      "updated_datetime": "2023-11-03T00:00:00.000000Z",
      "website": "https://www.example.com"
    },
    {
      "category": "Other",
      "custom_data": [
        {
          "id": 55,
          "name": "Custom Field 30",
          "value": null
        }
      ],
      "default_email": "company-2804@example.com",
      "default_payment_term": null,
      "default_purchase_order_notes": null,
      "default_sales_order_notes": null,
      "deleted_at": null,
      "group": null,
      "id": "00000000-0000-0000-0000-000000000271",
      "invoice_email": null,
      "legal_business_name": "Company Legal Name 1204",
      "licenses": [
        {
          "id": "00000000-0000-0000-0000-000000000047",
          "license_number": "CDPH-00000072"
        }
      ],
      "locations": [],
      "name": "Company 1204",
      "order_shipment_email": null,
      "outstanding_balance": "0",
      "outstanding_balance_threshold": null,
      "owner": null,
      "owner_id": null,
      "phone_number": null,
      "purchase_order_email": null,
      "relationship_type": null,
      "sales_order_email": null,
      "updated_datetime": "2023-12-02T00:00:00.000000Z",
      "website": null
    }
  ],
  "next_page": null
}

Get companies sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 5000 companies per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: companies_permissions_view. Results are filtered to only include companies the authenticated user can access under their team restrictions.

Request

GET /public/v1/companies

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter companies by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted companies. no returns non-deleted, only returns deleted, include returns both. query string false no
page Pagination information query number false ?page[number]=1
updated_datetime Filter companies by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of companies Companies

Upsert a company

POST /public/v1/companies creates a new company relationship with minimal params and returns 201

POST /public/v1/companies
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGI2Yjc3MzktY2M2OS00NGIyLWIzNDctZmY5ZjAzMDlhMTM1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODM4IiwidHlwIjoiYWNjZXNzIn0.qCv4vZximY6KZqWnqXwGprayUKZTnkKerrGASbv0ywQ
{
  "name": "New Retailer"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f435331c0d79e1dc1da1f3761ce81287-778797f9d9d17e01-0
{
  "data": {
    "category": null,
    "custom_data": [],
    "default_email": null,
    "default_payment_term": null,
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": null,
    "id": "00000000-0000-0000-0000-000000000113",
    "invoice_email": null,
    "legal_business_name": "",
    "licenses": [],
    "locations": [],
    "name": "New Retailer",
    "order_shipment_email": null,
    "outstanding_balance": null,
    "outstanding_balance_threshold": null,
    "owner": null,
    "owner_id": null,
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": null,
    "sales_order_email": null,
    "updated_datetime": "2026-08-14T11:20:58.265241Z",
    "website": null
  }
}

POST /public/v1/companies creates a new company relationship with all optional fields and returns 201

POST /public/v1/companies
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODM3NWUxODctYmU4YS00OGFlLTk5NjMtYzA3NmM2Yzc2YmMzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTczMCIsInR5cCI6ImFjY2VzcyJ9.6kea1adbAmF1gT7uj8hIpohDkxYoIYo4nXA8w3YdPvk
{
  "category": "Retail",
  "custom_data": {
    "58": [
      "VIP",
      "Wholesale"
    ]
  },
  "default_email": "info@fullretailer.com",
  "default_payment_term_id": "00000000-0000-0000-0000-000000000007",
  "default_purchase_order_notes": "Purchase notes",
  "default_sales_order_notes": "Sales notes",
  "group_id": "00000000-0000-0000-0000-000000000010",
  "invoice_email": "invoice@fullretailer.com",
  "legal_business_name": "Full Retailer LLC",
  "name": "Full Retailer",
  "order_shipment_email": "shipping@fullretailer.com",
  "outstanding_balance_threshold": 5000,
  "owner_id": "00000000-0000-0000-0000-0000000006c4",
  "phone_number": "555-1234",
  "purchase_order_email": "purchasing@fullretailer.com",
  "relationship_type_id": "00000000-0000-0000-0000-000000000003",
  "sales_order_email": "orders@fullretailer.com",
  "website": "https://fullretailer.com"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 02b805cf745cee169907df07fd3b5a69-20170e80da275530-0
{
  "data": {
    "category": "Retail",
    "custom_data": [
      {
        "id": 58,
        "name": "Custom Field 33",
        "value": "VIP,Wholesale"
      }
    ],
    "default_email": "info@fullretailer.com",
    "default_payment_term": {
      "days": 30,
      "id": "00000000-0000-0000-0000-000000000007",
      "locked": false,
      "name": "Net 30",
      "time_of_day": "17:00:00"
    },
    "default_purchase_order_notes": "Purchase notes",
    "default_sales_order_notes": "Sales notes",
    "deleted_at": null,
    "group": {
      "id": "00000000-0000-0000-0000-000000000010",
      "name": "Comp Rel Group 14"
    },
    "id": "00000000-0000-0000-0000-0000000002ae",
    "invoice_email": "invoice@fullretailer.com",
    "legal_business_name": "Full Retailer LLC",
    "licenses": [],
    "locations": [],
    "name": "Full Retailer",
    "order_shipment_email": "shipping@fullretailer.com",
    "outstanding_balance": null,
    "outstanding_balance_threshold": 5000,
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1725@example.com",
      "full_name": "FirstName3502 LastName3503",
      "id": "00000000-0000-0000-0000-0000000006c4",
      "role": {
        "id": "00000000-0000-0000-0000-000000000704",
        "name": "Admin 1795"
      }
    },
    "owner_id": "00000000-0000-0000-0000-0000000006c4",
    "phone_number": "555-1234",
    "purchase_order_email": "purchasing@fullretailer.com",
    "relationship_type": {
      "id": "00000000-0000-0000-0000-000000000003",
      "name": "Supplier"
    },
    "sales_order_email": "orders@fullretailer.com",
    "updated_datetime": "2026-08-14T11:21:00.718263Z",
    "website": "https://fullretailer.com"
  }
}

POST /public/v1/companies updates an existing company relationship and returns 200

POST /public/v1/companies
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTEwMTc2YzQtNWE0Ni00M2JhLWJkYmMtOGYyNWZkNWYzZjgwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQ3OSIsInR5cCI6ImFjY2VzcyJ9.jDjFHuiBvd0cDXaBU1HQBWCv0q7Vd54m_JuL4k5BDJE
{
  "id": "00000000-0000-0000-0000-000000000239",
  "invoice_email": "newinvoice@example.com",
  "name": "Updated Name"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4a54f8ee7b67e6b2391d41688a02f25d-0ce818c0bf02f6b8-0
{
  "data": {
    "category": "Dispensary",
    "custom_data": [],
    "default_email": "company-2608@example.com",
    "default_payment_term": null,
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": null,
    "id": "00000000-0000-0000-0000-000000000239",
    "invoice_email": "newinvoice@example.com",
    "legal_business_name": "Company Legal Name 1123",
    "licenses": [],
    "locations": [],
    "name": "Updated Name",
    "order_shipment_email": null,
    "outstanding_balance": "0",
    "outstanding_balance_threshold": null,
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1486@example.com",
      "full_name": "FirstName3004 LastName3005",
      "id": "00000000-0000-0000-0000-0000000005d1",
      "role": {
        "id": "00000000-0000-0000-0000-000000000609",
        "name": "Admin 1544"
      }
    },
    "owner_id": "00000000-0000-0000-0000-0000000005d1",
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": null,
    "sales_order_email": null,
    "updated_datetime": "2026-08-14T11:20:59.993519Z",
    "website": null
  }
}

Upsert a single company. To update an existing company, pass in an existing company ID in the id field. If you do not pass in an ID, a new company and its associated company will be created. Required permission: companies_permissions_create to create a new company, companies_permissions_edit (and access to the company under team restrictions) to update an existing company.

Request

POST /public/v1/companies

Parameters

Parameter Description In Type Required Default Example
id Unique ID for this company. If given, the matching record will be updated. If not given, a new company will be created. query string false
name Name of the related company query string false Acme Dispensary
category Category of the related company query string false Retailer
legal_business_name Legal business name of the related company query string false
default_email Default email address for the related company query string false
phone_number Phone number for the related company query string false
website Website URL for the related company query string false
default_sales_order_notes Default notes included on sales orders for this company query string false
default_purchase_order_notes Default notes included on purchase orders for this company query string false
invoice_email Email address for invoices sent to this company query string false
sales_order_email Email address for sales orders sent to this company query string false
purchase_order_email Email address for purchase orders sent to this company query string false
order_shipment_email Email address for order shipment notifications sent to this company query string false
relationship_type_id The ID of the relationship type to assign to this company relationship query string false
group_id The ID of the group to assign to this company relationship query string false
owner_id The ID of the user that owns this company relationship query string false
default_payment_term_id The ID of the payment term to apply by default to this company relationship. Use GET /public/v1/payment-terms to look up available payment term IDs. query string false
outstanding_balance_threshold Threshold amount (in cents) above which an outstanding balance warning is triggered query integer false
custom_data Custom data for this company relationship body object false

Responses

Status Description Schema
200 An updated company relationship Company
201 A new company relationship Company
400 Bad request
404 Not found

CompanyGroup

Delete a company group

DELETE /public/v1/company-groups/:id deletes a company group

DELETE /public/v1/company-groups/00000000-0000-0000-0000-000000000001
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWVjZDQ2Y2MtODE0Mi00N2QzLWI5MGQtNWQ2ZTg5ZGJlNGVmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTAiLCJ0eXAiOiJhY2Nlc3MifQ.h0vOUEM07nglAuyuqOSOxIOcwAE18PmwB9qACyr_IbA

Response

204
cache-control: max-age=0, private, must-revalidate
b3: e0591abbada98ba3a0e91013a9568ba9-50657849fa56c588-0

Permanently deletes the company group. This is a hard delete: the record is removed from the database and cannot be recovered.

Required permission: settings_permissions_company_relationship_groups.

Request

DELETE /public/v1/company-groups/{id}

Parameters

Parameter Description In Type Required Default Example
id Company group ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a company group

GET /public/v1/company-groups/:id returns a single company group

GET /public/v1/company-groups/00000000-0000-0000-0000-000000000008
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDQ2Mjk3N2UtZWVlYS00ZjQxLWE3ZDYtZmUyYTRkNTE3MDU2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzIyIiwidHlwIjoiYWNjZXNzIn0.VdAZ362Sgb1Q6U1kWBkC5_B4bpm_MXY-Nxjz5zRub68

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1b78d1e315555b01e28af05b672fadda-daaee8fab2d01d85-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000008",
    "inserted_datetime": "2026-08-14T11:20:56.464054Z",
    "name": "Key Accounts",
    "updated_datetime": "2026-08-14T11:20:56.464054Z"
  }
}

Get a single company group given the ID.

Required permission: settings_permissions_company_relationship_groups.

Request

GET /public/v1/company-groups/{id}

Parameters

Parameter Description In Type Required Default Example
id Company group ID path string true

Responses

Status Description Schema
200 A single company group CompanyGroupFull
404 Not Found

Get company groups

GET /public/v1/company-groups returns paginated company groups for the company with next_page

GET /public/v1/company-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTJjOGViODMtZTM2NS00NzFhLWI3ZjUtNjk3MzcyYjg0NjVkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzYxIiwidHlwIjoiYWNjZXNzIn0.Mag2Vo2O7mgY-pgUohAb0IuQNDB9T8VbN4vKqe-7jnc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8d9360bf29b02a22f7032972f4667fee-474c05211df70573-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000009",
      "inserted_datetime": "2026-08-14T11:20:56.578723Z",
      "name": "CG1",
      "updated_datetime": "2026-08-14T11:20:56.578723Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000000a",
      "inserted_datetime": "2026-08-14T11:20:56.579575Z",
      "name": "CG2",
      "updated_datetime": "2026-08-14T11:20:56.579575Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000000b",
      "inserted_datetime": "2026-08-14T11:20:56.580007Z",
      "name": "CG3",
      "updated_datetime": "2026-08-14T11:20:56.580007Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/company-groups?page[number]=2"
}

List company groups for the authenticated company.

Required permission: settings_permissions_company_relationship_groups.

Request

GET /public/v1/company-groups

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of company groups CompanyGroups

Upsert a company group

POST /public/v1/company-groups creates a company group

POST /public/v1/company-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmY3ZTNjN2EtMjAxZS00MWNhLWI0MjktMTg3YzU0Yzk4MmRiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjkwIiwidHlwIjoiYWNjZXNzIn0.aJfrjtNB2qCgzWxOkhUNCIolLw-CZceyo4iPKyaZSSw
{
  "name": "Key Accounts"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6f75ee4c7ffb84b47992561301802f3c-ff4b61bfc60d8b3f-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000007",
    "inserted_datetime": "2026-08-14T11:20:56.361514Z",
    "name": "Key Accounts",
    "updated_datetime": "2026-08-14T11:20:56.361514Z"
  }
}

POST /public/v1/company-groups (update) updates a company group

POST /public/v1/company-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWU0MTM0OWItODFlZC00ZThjLTlmYTUtMTM1MzNiN2Y2MjBlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQ3IiwidHlwIjoiYWNjZXNzIn0.DY1Aa2P_DuQnLzXZ5f0AlGzJ7Qdj62Dmz2nS5jYzDcI
{
  "id": "00000000-0000-0000-0000-000000000003",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d06dd09197530346e6ee6366382bcf4e-f10d7fe68b2996bb-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000003",
    "inserted_datetime": "2026-08-14T11:20:55.870050Z",
    "name": "New",
    "updated_datetime": "2026-08-14T11:20:55.879086Z"
  }
}

Upsert a single company group. To update an existing company group, pass its ID in the id field. If you do not pass an ID, a new company group is created.

Required permission: settings_permissions_company_relationship_groups.

Request

POST /public/v1/company-groups

Parameters

Parameter Description In Type Required Default Example
id Company group ID. If given, the matching company group is updated; otherwise a new one is created. query string false
name The name of the company group query string true

Responses

Status Description Schema
200 The updated company group CompanyGroupFull
201 The created company group CompanyGroupFull
400 Invalid parameters
404 Not Found

Contact

Get a contact

GET /public/v1/contacts/:id returns a single contact

GET /public/v1/contacts/00000000-0000-0000-0000-000000000029
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmIyY2M3ZjQtNWQ0My00NWQ1LWJlNzctZTYwODMwNmRlZjQ1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTg2MCIsInR5cCI6ImFjY2VzcyJ9.UN_1dAGXffE0tyuTOr6n92tgFvCJRjsja8YUr79NUVA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b7b810cd49c6d6e519aa47839448dff8-8f1ac72e6d2590b1-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-0000000002e3"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "driver_license_issuing_state": null,
    "driver_license_number": null,
    "email": null,
    "first_name": "John",
    "full_name": "John Doe",
    "id": "00000000-0000-0000-0000-000000000029",
    "last_name": "Doe",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1856@example.com",
      "full_name": "FirstName3768 LastName3769",
      "id": "00000000-0000-0000-0000-000000000747",
      "role": {
        "id": "00000000-0000-0000-0000-000000000786",
        "name": "Admin 1925"
      }
    },
    "phone_number": null,
    "title": null,
    "work_phone_number": null
  }
}

Get a single contact given the ID.

Required permission: contacts_permissions_view.

Request

GET /public/v1/contacts/{id}

Parameters

Parameter Description In Type Required Default Example
id Contact ID path string true

Responses

Status Description Schema
200 A single contact Contact
404 Not Found

Get contacts

GET /public/v1/contacts returns contacts related to the company

GET /public/v1/contacts
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODU1ZWJmNDktY2QxMC00MjQ3LWJmZTAtMmIyZmRjM2EyNjZmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTcwNyIsInR5cCI6ImFjY2VzcyJ9.BRGKOmUAl_M15TEXaGySCyJA7oPPkg0UBAnPIey4CPk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 57d1755bb50d6eeba1038987dac84dc2-eb8b1e5a352b7d13-0
{
  "data": [
    {
      "company": {
        "id": "00000000-0000-0000-0000-0000000002a4"
      },
      "custom_data": [
        {
          "id": 57,
          "name": "Custom Field 32",
          "value": "Custom Data 1"
        }
      ],
      "deleted_at": null,
      "description": "Description 1",
      "driver_license_issuing_state": "CA",
      "driver_license_number": "1234567890",
      "email": "email1",
      "first_name": "first",
      "full_name": "first name1",
      "id": "00000000-0000-0000-0000-000000000021",
      "last_name": "name1",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "contact-owner@example.com",
        "full_name": "FirstName3464 LastName3465",
        "id": "00000000-0000-0000-0000-0000000006b2",
        "role": {
          "id": "00000000-0000-0000-0000-0000000006f3",
          "name": "Admin 1778"
        }
      },
      "phone_number": "1234567890",
      "title": null,
      "work_phone_number": "1234567891"
    },
    {
      "company": {
        "id": "00000000-0000-0000-0000-0000000002a5"
      },
      "custom_data": [
        {
          "id": 57,
          "name": "Custom Field 32",
          "value": null
        }
      ],
      "deleted_at": null,
      "description": "Description 2",
      "driver_license_issuing_state": "NV",
      "driver_license_number": "123456789",
      "email": "email2",
      "first_name": "first",
      "full_name": "first name2",
      "id": "00000000-0000-0000-0000-000000000022",
      "last_name": "name2",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "contact-owner@example.com",
        "full_name": "FirstName3464 LastName3465",
        "id": "00000000-0000-0000-0000-0000000006b2",
        "role": {
          "id": "00000000-0000-0000-0000-0000000006f3",
          "name": "Admin 1778"
        }
      },
      "phone_number": "1234567890",
      "title": null,
      "work_phone_number": "1234567892"
    }
  ],
  "next_page": null
}

Get contacts sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 1000 contacts per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: contacts_permissions_view. Results are filtered to only include contacts the authenticated user can access under their team restrictions.

Request

GET /public/v1/contacts

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter contacts by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted contacts. no returns non-deleted, only returns deleted, include returns both. query string false no
page Pagination information query number false ?page[number]=1
updated_datetime Filter contacts by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of contacts Contacts

Upsert a contact

POST /public/v1/contacts creating a contact with all optional fields succeeds with a 201 response containing the new contact

POST /public/v1/contacts
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWZiZTYwZDEtM2EwMi00MGUzLWEyM2QtM2U3NDJiYzkzZmE0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTgyMCIsInR5cCI6ImFjY2VzcyJ9.30tiDu-vkA2zRpOUI4QVyRtl9L0BxDCc3dPcIkaFIWA
{
  "company_id": "00000000-0000-0000-0000-0000000002d4",
  "custom_data": {
    "60": [
      "VIP",
      "Wholesale"
    ]
  },
  "description": "Notes",
  "driver_license_issuing_state": "CA",
  "driver_license_number": "D123",
  "email": "jane@example.com",
  "first_name": "Jane",
  "last_name": "Doe",
  "owner_id": "00000000-0000-0000-0000-00000000071f",
  "phone_number": "555-1111",
  "title": "Buyer",
  "work_phone_number": "555-2222"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a802a2d8774df286a5d7ca182d8fd027-bcc9cbda445cbb2e-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-0000000002d4"
    },
    "custom_data": [
      {
        "id": 60,
        "name": "Custom Field 35",
        "value": "VIP,Wholesale"
      }
    ],
    "deleted_at": null,
    "description": "Notes",
    "driver_license_issuing_state": "CA",
    "driver_license_number": "D123",
    "email": "jane@example.com",
    "first_name": "Jane",
    "full_name": "Jane Doe",
    "id": "00000000-0000-0000-0000-000000000028",
    "last_name": "Doe",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1816@example.com",
      "full_name": "FirstName3688 LastName3689",
      "id": "00000000-0000-0000-0000-00000000071f",
      "role": {
        "id": "00000000-0000-0000-0000-000000000761",
        "name": "Admin 1888"
      }
    },
    "phone_number": "555-1111",
    "title": "Buyer",
    "work_phone_number": "555-2222"
  }
}

Upsert a single contact. To update an existing contact, pass in an existing contact ID in the id field as well as the other fields you want to update. If you do not pass in an ID, a new contact will be created. Required permission: contacts_permissions_create to create a new contact, contacts_permissions_edit (and access to the contact under team restrictions) to update an existing contact.

Request

POST /public/v1/contacts

Parameters

Parameter Description In Type Required Default Example
id Unique ID for this contact. If given, the contact matching the ID will be updated. If not given, a new contact will be created. query string false
first_name First name for the contact query string true
last_name Last name for the contact query string false
title Job title for the contact query string false
email Email address for the contact query string false
phone_number Phone number for the contact query string false
work_phone_number Work phone number for the contact query string false
description Description for the contact query string false
company_id The ID of the company relationship (company) this contact belongs to query string false
driver_license_number Driver license number for shipping manifests query string false
driver_license_issuing_state Driver license issuing state for shipping manifests query string false
owner_id The ID of the user that owns this contact query string false
custom_data The custom data for this contact body object false

Responses

Status Description Schema
200 An updated contact Contact
201 A new contact Contact
400 Bad request
404 Not found

CostType

Delete a cost type

DELETE /public/v1/cost-types/:id soft-deletes a cost type

DELETE /public/v1/cost-types/00000000-0000-0000-0000-000000000001
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzYyN2FiMDQtYjY5ZS00YWYyLTlmODItZDVjODA1ZTViZTA2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQiLCJ0eXAiOiJhY2Nlc3MifQ.0yXEN0GDORsojv51JHGCM_s6RvuMPzM5ktADIZk4hLc

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 585929f6292d32af592657aeda59cfca-497fed8abd11d35c-0

Deletes the cost type. This is a soft delete: the record's deleted_at is set and it is no longer returned by the API, but it is retained in the database.

Required permission: costs_permissions_manage_cost_types.

Request

DELETE /public/v1/cost-types/{id}

Parameters

Parameter Description In Type Required Default Example
id Cost type ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a cost type

GET /public/v1/cost-types/:id returns a single cost type with a string cost_per_unit and embedded unit_type

GET /public/v1/cost-types/00000000-0000-0000-0000-000000000008
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmI1MjcyNmItMzkwOC00ODA5LTgzODQtMzU0NjFiMjAyNGY5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzA0IiwidHlwIjoiYWNjZXNzIn0.5FZk7on6CFIL2Mx10I0w_GNrWQQHA6SR9WxHRrwxhow

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 817f6b6db5c5975451f9cdb90a480634-961623faeb28a7e3-0
{
  "data": {
    "active": true,
    "allow_inline_edits": true,
    "cost_per_unit": "25.5",
    "description": null,
    "id": "00000000-0000-0000-0000-000000000008",
    "inserted_datetime": "2026-08-14T11:20:56.401642Z",
    "name": "Freight",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000000c9b",
      "name": "Unit Type 10"
    },
    "updated_datetime": "2026-08-14T11:20:56.401642Z"
  }
}

Get a single cost type given the ID.

Required permission: costs_permissions_manage_cost_types.

Request

GET /public/v1/cost-types/{id}

Parameters

Parameter Description In Type Required Default Example
id Cost type ID path string true

Responses

Status Description Schema
200 A single cost type CostType
404 Not Found

Get cost types

GET /public/v1/cost-types returns paginated cost types for the company with next_page

GET /public/v1/cost-types
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjQyNWMzNGYtNjViYS00ODQ4LWI4ZTktNGU3ZGQ1ZmQ0MTEzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzMzIiwidHlwIjoiYWNjZXNzIn0.1H_MUEQE8RQlsDvKtvYvxZu3Pj7ib7dzrdsIELLclDY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 86a3b3c49458ac3902153c961c6fb2f9-92701f1266c3bc74-0
{
  "data": [
    {
      "active": true,
      "allow_inline_edits": true,
      "cost_per_unit": "1",
      "description": null,
      "id": "00000000-0000-0000-0000-000000000009",
      "inserted_datetime": "2025-01-01T00:00:00.000000Z",
      "name": "CT1",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000000d68",
        "name": "Unit Type 11"
      },
      "updated_datetime": "2026-08-14T11:20:56.493119Z"
    },
    {
      "active": true,
      "allow_inline_edits": true,
      "cost_per_unit": "1",
      "description": null,
      "id": "00000000-0000-0000-0000-00000000000a",
      "inserted_datetime": "2025-01-02T00:00:00.000000Z",
      "name": "CT2",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000000d75",
        "name": "Unit Type 12"
      },
      "updated_datetime": "2026-08-14T11:20:56.495243Z"
    },
    {
      "active": true,
      "allow_inline_edits": true,
      "cost_per_unit": "1",
      "description": null,
      "id": "00000000-0000-0000-0000-00000000000b",
      "inserted_datetime": "2025-01-03T00:00:00.000000Z",
      "name": "CT3",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000000d76",
        "name": "Unit Type 13"
      },
      "updated_datetime": "2026-08-14T11:20:56.496597Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/cost-types?page[number]=2"
}

List cost types for the authenticated company.

Required permission: costs_permissions_manage_cost_types.

Request

GET /public/v1/cost-types

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of cost types CostTypes

Upsert a cost type

POST /public/v1/cost-types creates a cost type

POST /public/v1/cost-types
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODc3MmFhYTEtOGI3OS00YmZhLWFmYTgtYjc3NzFkNDU5NDQ3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjY1IiwidHlwIjoiYWNjZXNzIn0.lv1vYS3Fo0AFWn-DDKalrj1peDwEc3tKG8htELQPMmQ
{
  "active": true,
  "allow_inline_edits": true,
  "cost_per_unit": "25.5",
  "description": "Inbound shipping",
  "name": "Freight",
  "unit_type_id": "00000000-0000-0000-0000-000000000b62"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ab848a76827fb4e2ee3388ab2c67cdf8-060e40c3f562fd0b-0
{
  "data": {
    "active": true,
    "allow_inline_edits": true,
    "cost_per_unit": "25.5",
    "description": "Inbound shipping",
    "id": "00000000-0000-0000-0000-000000000007",
    "inserted_datetime": "2026-08-14T11:20:56.292624Z",
    "name": "Freight",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000000b62",
      "name": "Unit Type 9"
    },
    "updated_datetime": "2026-08-14T11:20:56.292624Z"
  }
}

POST /public/v1/cost-types (update) updates a cost type

POST /public/v1/cost-types
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWMzZmNjYjgtMTFhOS00MGIxLTg4ODAtN2M0YjExZGNkM2ExIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTIzIiwidHlwIjoiYWNjZXNzIn0.r-p4oQOLHNKGQ7uHgaUk5Vbn-tuyLxzMxoRUDqS2Kko
{
  "cost_per_unit": "30",
  "id": "00000000-0000-0000-0000-000000000003",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 04a3997176b2ac134d7ac6937dc11a05-b4e3b27b1b8252e7-0
{
  "data": {
    "active": true,
    "allow_inline_edits": true,
    "cost_per_unit": "30",
    "description": null,
    "id": "00000000-0000-0000-0000-000000000003",
    "inserted_datetime": "2026-08-14T11:20:55.800518Z",
    "name": "New",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000000580",
      "name": "Unit Type 3"
    },
    "updated_datetime": "2026-08-14T11:20:55.812852Z"
  }
}

Upsert a single cost type. To update an existing cost type, pass its ID in the id field. If you do not pass an ID, a new cost type is created. When creating, name, cost_per_unit, unit_type_id and allow_inline_edits are required. The unit type cannot be changed once set.

Required permission: costs_permissions_manage_cost_types.

Request

POST /public/v1/cost-types

Parameters

Parameter Description In Type Required Default Example
id Cost type ID. If given, the matching cost type is updated; otherwise a new one is created. query string false
name The name of the cost type query string true
description A description of the cost type query string false
cost_per_unit The cost per unit as a decimal string query string true
unit_type_id The ID of the unit type query string true
active Whether the cost type is active query boolean false
allow_inline_edits Whether inline edits are allowed query boolean true

Responses

Status Description Schema
200 The updated cost type CostType
201 The created cost type CostType
400 Invalid parameters
404 Not Found

Credit

Cancel a credit

POST /public/v1/credits/:id/cancel cancels a credit, idempotently, and can delete its credit uses

POST /public/v1/credits/879af9a4-7aec-4c68-8f9d-eab3a2e07aef/cancel
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOThkYzFjMTctOGEyMS00NTM5LThhYzQtM2QzYjVmMGQ2ZTM2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTMyIiwidHlwIjoiYWNjZXNzIn0.JohfK6YZ_rgJMQXs0AGSJKY_ywUvLaqbb3JdU_uKJj4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 00924d32d421b1083d4663bb756581ad-2d2d6c2644231e25-0
{
  "data": {
    "amount": "100",
    "canceled_datetime": "2026-08-14T11:20:58.646561Z",
    "company": {
      "id": "00000000-0000-0000-0000-00000000013c",
      "name": "Company 731",
      "updated_datetime": "2026-08-14T11:20:58.611053Z"
    },
    "credit_number": "CRT-00000023",
    "credit_uses": [
      {
        "amount": "40",
        "credit": {
          "amount": "100",
          "credit_number": "CRT-00000023",
          "id": "879af9a4-7aec-4c68-8f9d-eab3a2e07aef",
          "source": "USER"
        },
        "id": "383c4a65-7601-498f-9473-a57cddbc826e",
        "payment": null
      }
    ],
    "deleted_in_qbo": false,
    "external_note": "External note",
    "id": "879af9a4-7aec-4c68-8f9d-eab3a2e07aef",
    "inserted_datetime": "2026-08-14T11:20:58.620184Z",
    "internal_note": "Internal note",
    "original_amount": "100",
    "owner": null,
    "payment": null,
    "qb_credit_memo_id": null,
    "qb_payment_id": null,
    "qb_sync_status": null,
    "remaining_balance": "60",
    "return": null,
    "source": "USER",
    "status": "CANCELED",
    "updated_datetime": "2026-08-14T11:20:58.646570Z"
  }
}

Cancel (void) a credit. A canceled credit keeps its record and history, but its remaining balance can no longer be applied to invoices.

By default the credit's existing applications to invoices are left in place. Set should_delete_credit_uses to true to also remove those applications, returning the used amounts to the affected invoices.

Overpayment credits (created from an invoice overpayment or a QuickBooks payment) cannot be canceled — void the associated payment instead. Canceling an already-canceled credit is a no-op that returns the credit unchanged.

Required permission: credits_permissions_edit.

Request

POST /public/v1/credits/{id}/cancel

Parameters

Parameter Description In Type Required Default Example
id Credit ID path string true
cancel Cancel options body CancelCredit false

Responses

Status Description Schema
200 The canceled credit Credit
400 Bad Request
403 Forbidden
404 Not Found

Create or update a credit

POST /public/v1/credits creates a manually-created credit then updates it

POST /public/v1/credits
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzk5YmY1MWMtYTdkYS00ODNhLTk4MmMtY2FiMTZjMTI0OTNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODg0IiwidHlwIjoiYWNjZXNzIn0.0_qTLBd7qQbNQpoZmemNfM3w-9oO9e2dIlXY-CqbiAw
{
  "amount": 150,
  "company_id": "00000000-0000-0000-0000-000000000126",
  "external_note": "ext",
  "internal_note": "int"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8e53b6fa13e5aba11d3eeaed060c1cea-0d66d8bd53513441-0
{
  "data": {
    "amount": "150",
    "canceled_datetime": null,
    "company": {
      "id": "00000000-0000-0000-0000-000000000126",
      "name": "Company 687",
      "updated_datetime": "2026-08-14T11:20:58.410689Z"
    },
    "credit_number": "CRT-0000001",
    "credit_uses": [],
    "deleted_in_qbo": false,
    "external_note": "ext",
    "id": "4f6924d8-1a6a-4ef9-bad2-25e205505ac6",
    "inserted_datetime": "2026-08-14T11:20:58.446708Z",
    "internal_note": "int",
    "original_amount": "150",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-884@example.com",
      "full_name": "FirstName1780 LastName1781",
      "id": "00000000-0000-0000-0000-000000000374",
      "role": {
        "id": "00000000-0000-0000-0000-00000000038c",
        "name": "Admin 907"
      }
    },
    "payment": null,
    "qb_credit_memo_id": null,
    "qb_payment_id": null,
    "qb_sync_status": null,
    "remaining_balance": "150",
    "return": null,
    "source": "USER",
    "status": "ACTIVE",
    "updated_datetime": "2026-08-14T11:20:58.446708Z"
  }
}

Create a new credit or update an existing one.

Omit id to create a new credit; include the id of an existing credit to update it. Only the fields you send are changed; omitted fields keep their current value.

Credits created through the API are always manually-created (USER source) credits — the same as a credit you would add by hand in the Distru UI. Only these manually-created credits can be updated through the API. Credits generated automatically (from a return, an invoice overpayment, or QuickBooks) cannot be created or modified here.

On update the customer (company_id) cannot be changed. amount must be greater than 0 and, on update, cannot be set below the amount already used by the credit.

Required permission: credits_permissions_create to create, credits_permissions_edit to update.

Request

POST /public/v1/credits

Parameters

Parameter Description In Type Required Default Example
credit Credit data body UpsertCredit true

Responses

Status Description Schema
200 The updated credit Credit
201 The created credit Credit
400 Bad Request
403 Forbidden
404 Not Found

Delete a credit

DELETE /public/v1/credits/:id soft-deletes a credit

DELETE /public/v1/credits/6c283bcd-ca35-4aef-a4aa-ca9381fb0d27
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjAyNDdmYWEtMGFhZS00YTg1LWFhYzctMzcxMmZmODkxNGJkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE3NyIsInR5cCI6ImFjY2VzcyJ9.nhbyktmcDslyJNNZnAt8N4NTSIinWuMi1_dUnK9J9FE

Response

204
cache-control: max-age=0, private, must-revalidate
b3: c26d707d3074149b881a99844f4903f1-deeaf7744a97fa77-0

Soft-delete a credit. The credit is marked as deleted and stops appearing in the API and the Distru UI, but the record is retained rather than being permanently removed.

A credit cannot be deleted once it has been used (applied to an invoice). Overpayment credits (created from an invoice overpayment or a QuickBooks payment) cannot be deleted unless they have already been canceled — void the associated payment instead.

Required permission: credits_permissions_delete.

Request

DELETE /public/v1/credits/{id}

Parameters

Parameter Description In Type Required Default Example
id Credit ID path string true

Responses

Status Description Schema
204 No Content
400 Bad Request
403 Forbidden
404 Not Found

Get a credit

GET /public/v1/credits/:id returns a single credit with its active credit uses

GET /public/v1/credits/94f3eca5-4d6b-4db9-8e41-28178a32d406
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWY5NjNjYTUtMDZiMi00YWI4LWE1NzQtNWJhNmE4N2NmMGExIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTYxIiwidHlwIjoiYWNjZXNzIn0.yffym_lc32Deo-abd01HOKuF3ciWOOmhNf8OVIJYUrM

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e82904717432a893a2de4184ebcc72d7-dc81f56292f36555-0
{
  "data": {
    "amount": "100",
    "canceled_datetime": null,
    "company": {
      "id": "00000000-0000-0000-0000-0000000000a3",
      "name": "Company 456",
      "updated_datetime": "2026-08-14T11:20:57.351205Z"
    },
    "credit_number": "CRT-00000009",
    "credit_uses": [
      {
        "amount": "25",
        "credit": {
          "amount": "100",
          "credit_number": "CRT-00000009",
          "id": "94f3eca5-4d6b-4db9-8e41-28178a32d406",
          "source": "USER"
        },
        "id": "2beafc6b-f46f-42d0-ad08-ba285851a093",
        "payment": {
          "amount": "10",
          "company": {
            "id": "00000000-0000-0000-0000-000000000099",
            "name": "Company 445",
            "updated_datetime": "2026-08-14T11:20:57.296437Z"
          },
          "credit_uses": [
            {
              "amount": "25",
              "credit": {
                "amount": "100",
                "credit_number": "CRT-00000009",
                "id": "94f3eca5-4d6b-4db9-8e41-28178a32d406",
                "source": "USER"
              },
              "id": "2beafc6b-f46f-42d0-ad08-ba285851a093"
            }
          ],
          "description": null,
          "fully_paid_with_credits": false,
          "id": "00000000-0000-0000-0000-000000000012",
          "inserted_datetime": "2026-08-14T11:20:57.319263Z",
          "invoice": {
            "id": "00000000-0000-0000-0000-000000000015",
            "invoice_number": "Invoice #20",
            "status": "NOT_PAID",
            "total": "32.00"
          },
          "overpayment_credits": [],
          "payment_date": "2026-08-14T11:20:57.317708Z",
          "payment_method": {
            "deleted_at": null,
            "id": "00000000-0000-0000-0000-00000000001c",
            "name": "Payment Method 27"
          },
          "payment_number": "Payment #17",
          "payment_type": "INVOICE",
          "purchase": null,
          "quickbooks_deposit_account_id": null,
          "status": "POSTED",
          "updated_datetime": "2026-08-14T11:20:57.319263Z"
        }
      }
    ],
    "deleted_in_qbo": false,
    "external_note": "External note",
    "id": "94f3eca5-4d6b-4db9-8e41-28178a32d406",
    "inserted_datetime": "2026-08-14T11:20:57.358824Z",
    "internal_note": "Internal note",
    "original_amount": "150",
    "owner": null,
    "payment": null,
    "qb_credit_memo_id": null,
    "qb_payment_id": null,
    "qb_sync_status": null,
    "remaining_balance": "75",
    "return": null,
    "source": "USER",
    "status": "ACTIVE",
    "updated_datetime": "2026-08-14T11:20:57.360660Z"
  }
}

Get a single credit given the ID.

Required permission: credits_permissions_view.

Request

GET /public/v1/credits/{id}

Parameters

Parameter Description In Type Required Default Example
id Credit ID path string true

Responses

Status Description Schema
200 A single credit Credit
404 Not Found

Get credits

GET /public/v1/credits returns credits for the company with status and remaining balance

GET /public/v1/credits
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTBlYjQyYWEtZGI4NC00OGZiLTkzMzktYWVlYmIyZDVkYmJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTYzNiIsInR5cCI6ImFjY2VzcyJ9._IsqFHcbMjkATReoBjcDvwMHXxSKTycyphOo_grcL_8

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ec50a41f5de98541f2832025f500f884-69301106add9f8fa-0
{
  "data": [
    {
      "amount": "100",
      "canceled_datetime": null,
      "company": {
        "id": "00000000-0000-0000-0000-000000000283",
        "name": "Company 1236",
        "updated_datetime": "2026-08-14T11:21:00.420076Z"
      },
      "credit_number": "CRT-A",
      "credit_uses": [
        {
          "amount": "40",
          "credit": {
            "amount": "100",
            "credit_number": "CRT-A",
            "id": "e6ba0553-f4fb-4eb1-9915-3b17e4b0c93c",
            "source": "USER"
          },
          "id": "9a8e8720-1ec9-4c5a-aca4-936986d3ddd6",
          "payment": null
        }
      ],
      "deleted_in_qbo": false,
      "external_note": "ext",
      "id": "e6ba0553-f4fb-4eb1-9915-3b17e4b0c93c",
      "inserted_datetime": "2026-08-14T11:21:00.434236Z",
      "internal_note": "int",
      "original_amount": "150",
      "owner": null,
      "payment": null,
      "qb_credit_memo_id": null,
      "qb_payment_id": null,
      "qb_sync_status": null,
      "remaining_balance": "60",
      "return": null,
      "source": "USER",
      "status": "ACTIVE",
      "updated_datetime": "2026-08-14T11:21:00.436729Z"
    }
  ],
  "next_page": null
}

Get credits sorted by their creation date and filtered by various attributes.

Note: The page size for this endpoint is 1000 credits per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: credits_permissions_view.

Request

GET /public/v1/credits

Parameters

Parameter Description In Type Required Default Example
credit_number Filter credits whose credit number contains this value query string false
inserted_datetime Filter credits by their creation datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
source Filter credits by how they were created query string false
status Filter credits by their status query string false
updated_datetime Filter credits by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of credits Credits

CustomField

Create a custom field

POST /public/v1/custom-fields can create a custom field of type text

POST /public/v1/custom-fields
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2RhNGJjM2QtYzUwMi00N2MyLWE3YjEtMGE4Yjg4ZjMzMDgyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OCIsInR5cCI6ImFjY2VzcyJ9.ND50ZeLP18xikvdW5tQExtsdQVd1mnHfLArOqHXzTCM
{
  "description": "Notes",
  "field_type": "text",
  "filterable": false,
  "name": "Text Field",
  "parent_object": "product"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f8f4f22a83cc601dfa71e1200f29b59c-c6ef33d09e29660b-0
{
  "data": {
    "description": "Notes",
    "field_options": [],
    "field_type": "text",
    "filterable": false,
    "id": 1,
    "name": "Text Field",
    "parent_object": "product",
    "required": false
  }
}

POST /public/v1/custom-fields can create a custom field of type date

POST /public/v1/custom-fields
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODJhYTM1NzgtYTMyYi00MTgyLTk1NTctMTQ4YzNmYWY2NzBhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjEzIiwidHlwIjoiYWNjZXNzIn0.ZOU_rk0Y7AcXIFK-efMh-C-4Hw1jjr-sb_QZIKi_xfw
{
  "field_type": "date",
  "name": "Date Field",
  "parent_object": "product"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6047da008f0cc6adb5411b81da6dce77-aec20087d96175ab-0
{
  "data": {
    "description": null,
    "field_options": [],
    "field_type": "date",
    "filterable": false,
    "id": 4,
    "name": "Date Field",
    "parent_object": "product",
    "required": false
  }
}

POST /public/v1/custom-fields can create a custom field of type dropdown

POST /public/v1/custom-fields
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGFhZDAyYjgtMjIxNy00YmZkLTk5OGQtNTg2NjM1MDY0Y2NiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjM0IiwidHlwIjoiYWNjZXNzIn0.B225uzEj6K4YkaRv-7oFgKmqZJmcHLs8JqhIMDN96QQ
{
  "field_options": [
    "A",
    "B"
  ],
  "field_type": "dropdown",
  "filterable": true,
  "name": "Dropdown Field",
  "parent_object": "product"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d097c9c7c5ca5088c7e5894da0d868ab-9e07e50eadc5ae4c-0
{
  "data": {
    "description": null,
    "field_options": [
      "A",
      "B"
    ],
    "field_type": "dropdown",
    "filterable": true,
    "id": 5,
    "name": "Dropdown Field",
    "parent_object": "product",
    "required": false
  }
}

POST /public/v1/custom-fields can create a custom field of type checkbox

POST /public/v1/custom-fields
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODM4NmQ3OTEtNTBhMi00ZmRkLTg1ZjgtYzhiM2JiNmQzZWI2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTAxNiIsInR5cCI6ImFjY2VzcyJ9._iK5-AwPqrvMXlsxewSsjvP8R4zqPofoSY80UzMBOlM
{
  "field_options": [
    "Option 1"
  ],
  "field_type": "checkbox",
  "filterable": true,
  "name": "Checkbox Field",
  "parent_object": "product"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ddad73f749e2df614efb90effc91ec3f-1404623bc35a6379-0
{
  "data": {
    "description": null,
    "field_options": [
      "Option 1"
    ],
    "field_type": "checkbox",
    "filterable": true,
    "id": 36,
    "name": "Checkbox Field",
    "parent_object": "product",
    "required": false
  }
}

Create a custom field for the specified parent object. Updates are not supported for this endpoint.

Required permission: settings_permissions_custom_fields.

Request

POST /public/v1/custom-fields

Parameters

Parameter Description In Type Required Default Example
name Name of the custom field query string true
description Description of the custom field query string false
parent_object Parent object attached to the field query string true
field_type Field type query string true
filterable Whether the field is filterable query boolean false
required Whether a value for the field is required when saving a record query boolean false
field_options Field options query array false

Responses

Status Description Schema
201 Custom field created CustomFieldDefinition
400 Invalid parameters

Get a custom field definition

GET /public/v1/custom-fields/:id returns a single custom field

GET /public/v1/custom-fields/32
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDhhZjgyMmMtMzRmZC00NDIxLWFlMjctOWJjMGI1MjAwY2ZiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTE4IiwidHlwIjoiYWNjZXNzIn0.Q6IbHMuRf05DrE-ovspfbRt3_SQwmxtVTkXQfkTBPUM

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f1133a1ae9128601363c4cd81ddea219-d7355ee83c503973-0
{
  "data": {
    "description": "A test field",
    "field_options": [
      "A",
      "B",
      "C"
    ],
    "field_type": "dropdown",
    "filterable": true,
    "id": 32,
    "name": "Test Field",
    "parent_object": "product",
    "required": false
  }
}

Get a single custom field definition given the ID.

Required permission: settings_permissions_custom_fields.

Request

GET /public/v1/custom-fields/{id}

Parameters

Parameter Description In Type Required Default Example
id Custom field ID path integer true

Responses

Status Description Schema
200 A single custom field definition CustomFieldDefinition
404 Not Found

List custom field definitions

GET /public/v1/custom-fields returns custom fields for the company

GET /public/v1/custom-fields
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTlhYjZhM2MtNGJlZi00YWM0LWIwZGUtMzBkNDM3NmIxZTU2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA5OSIsInR5cCI6ImFjY2VzcyJ9.WB3QQosMkyALdW8xvq5y3eY2Sy0DQ-cKumsFVy5QEV0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 64f9d42d67b68d7229081cc1e04dc8a0-21f7af08c7347473-0
{
  "data": [
    {
      "description": null,
      "field_options": [],
      "field_type": "text",
      "filterable": false,
      "id": 38,
      "name": "Field 1",
      "parent_object": "product",
      "required": false
    },
    {
      "description": null,
      "field_options": [
        "A",
        "B"
      ],
      "field_type": "dropdown",
      "filterable": true,
      "id": 39,
      "name": "Field 2",
      "parent_object": "product",
      "required": false
    }
  ]
}

List all custom field definitions for the authenticated company. Optionally filter by parent_object to get fields for a specific entity type.

Required permission: settings_permissions_custom_fields.

Request

GET /public/v1/custom-fields

Parameters

Parameter Description In Type Required Default Example
parent_object Filter by parent object type (e.g., order, invoice, product) query string false

Responses

Status Description Schema
200 List of custom field definitions CustomFieldDefinitions

Update a custom field

POST /public/v1/custom-fields/:id can update a custom field name

POST /public/v1/custom-fields/35
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDhkNzZmNDItN2JmYi00MGUyLThhMDEtOWM2OWM5ZTYxZGVhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTk1IiwidHlwIjoiYWNjZXNzIn0.vCQzZFlioNWd9m__gqSrTF4K0gr3N0W-Jnr_3B5Ij7A
{
  "name": "Updated Name"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4d62f6dcb332e7157a86725d1463e4d3-6eecf2bdcddb0822-0
{
  "data": {
    "description": null,
    "field_options": [],
    "field_type": "text",
    "filterable": false,
    "id": 35,
    "name": "Updated Name",
    "parent_object": "product",
    "required": false
  }
}

Update an existing custom field. Only name, description, required, and field_options can be updated. Field type and parent object cannot be changed after creation.

Required permission: settings_permissions_custom_fields.

Request

POST /public/v1/custom-fields/{id}

Parameters

Parameter Description In Type Required Default Example
id Custom field ID path integer true
name Name of the custom field body string false
description Description of the custom field body string false
required Whether a value for the field is required when saving a record body boolean false
field_options Field options (replaces existing options) body array false

Responses

Status Description Schema
200 Custom field updated CustomFieldDefinition
400 Invalid parameters
404 Not Found

Driver

Delete a driver

DELETE /public/v1/drivers/:id soft-deletes a driver

DELETE /public/v1/drivers/00000000-0000-0000-0000-00000000000e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDBkYzAzMGUtYTYwOS00ZDM3LWJhZTYtN2JmMjFjMmM5MjE2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjgyIiwidHlwIjoiYWNjZXNzIn0.wP_afZ_wTr49sGMQwvL6BDEAbcxQunh0AV20dNagO7M

Response

204
cache-control: max-age=0, private, must-revalidate
b3: d6abf65add2f41fc3575fdc7e5ee61d0-b31e7fe6bfaeb8cc-0

Deletes the driver. This is a soft delete: the record's deleted_at is set and it is no longer returned by the API, but it is retained in the database.

Required permission: settings_permissions_drivers.

Request

DELETE /public/v1/drivers/{id}

Parameters

Parameter Description In Type Required Default Example
id Driver ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a driver

GET /public/v1/drivers/:id returns a single driver

GET /public/v1/drivers/00000000-0000-0000-0000-000000000007
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjE1ZDc1NDYtMWM1My00MGM1LTg3NTEtMWE2ZmM3OTgxZmEyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQwIiwidHlwIjoiYWNjZXNzIn0.B94OdC8iQJw7Nn1_FIncE7BTAuNareb1thiR-3uYvgU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5039edb0d5fe5f2de1759c82972809ba-c169cfe25a2600df-0
{
  "data": {
    "birth_date": "1990-01-01",
    "driver_license": "D1234567",
    "email": "test@example.com",
    "first_name": "Sam",
    "hire_date": "2020-01-01",
    "id": "00000000-0000-0000-0000-000000000007",
    "inserted_datetime": "2026-08-14T11:20:57.240301Z",
    "last_name": "Rivera",
    "occupational_license_number": null,
    "phone_number": null,
    "updated_datetime": "2026-08-14T11:20:57.240301Z",
    "us_state": "CA"
  }
}

Get a single driver given the ID.

Required permission: settings_permissions_drivers.

Request

GET /public/v1/drivers/{id}

Parameters

Parameter Description In Type Required Default Example
id Driver ID path string true

Responses

Status Description Schema
200 A single driver Driver
404 Not Found

Get drivers

GET /public/v1/drivers returns paginated drivers for the company with next_page

GET /public/v1/drivers
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjkxOTY2NzctMTQ5My00OTI0LTgwNTItNjY0MGI3MzJlZTkyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjExIiwidHlwIjoiYWNjZXNzIn0.5wXNDwQFOPh2mPTRuSjK63m2u_KAuye_7xJ9NLprdPc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 19c0fe1f719e56f703cdc25033b11dc1-b8f4d79dbee31db6-0
{
  "data": [
    {
      "birth_date": "1990-01-01",
      "driver_license": "D1234567",
      "email": "d1@example.com",
      "first_name": "Test",
      "hire_date": "2020-01-01",
      "id": "00000000-0000-0000-0000-000000000008",
      "inserted_datetime": "2025-01-01T00:00:00.000000Z",
      "last_name": "Driver",
      "occupational_license_number": null,
      "phone_number": null,
      "updated_datetime": "2026-08-14T11:20:57.442655Z",
      "us_state": "CA"
    },
    {
      "birth_date": "1990-01-01",
      "driver_license": "D1234567",
      "email": "d2@example.com",
      "first_name": "Test",
      "hire_date": "2020-01-01",
      "id": "00000000-0000-0000-0000-000000000009",
      "inserted_datetime": "2025-01-02T00:00:00.000000Z",
      "last_name": "Driver",
      "occupational_license_number": null,
      "phone_number": null,
      "updated_datetime": "2026-08-14T11:20:57.449244Z",
      "us_state": "CA"
    },
    {
      "birth_date": "1990-01-01",
      "driver_license": "D1234567",
      "email": "d3@example.com",
      "first_name": "Test",
      "hire_date": "2020-01-01",
      "id": "00000000-0000-0000-0000-00000000000a",
      "inserted_datetime": "2025-01-03T00:00:00.000000Z",
      "last_name": "Driver",
      "occupational_license_number": null,
      "phone_number": null,
      "updated_datetime": "2026-08-14T11:20:57.456792Z",
      "us_state": "CA"
    }
  ],
  "next_page": "https://www.example.com/public/v1/drivers?page[number]=2"
}

List drivers for the authenticated company.

Required permission: settings_permissions_drivers.

Request

GET /public/v1/drivers

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of drivers Drivers

Upsert a driver

POST /public/v1/drivers creates a driver for a METRC company

POST /public/v1/drivers
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmZiYmZkZDEtYzRlYy00NDNkLWIxY2ItYzg3NjQ3ODQwMThiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTA3IiwidHlwIjoiYWNjZXNzIn0.n8YiGA7LzCBeLijCxfREpdtJ-Vrjwxzmw74Vk81U4ac
{
  "driver_license": "D1234567",
  "first_name": "Sam",
  "last_name": "Rivera",
  "occupational_license_number": "OCC-889",
  "phone_number": "555-0100"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ec7c075a72201336fbd4269435221b16-6cea76824355d901-0
{
  "data": {
    "birth_date": null,
    "driver_license": "D1234567",
    "email": null,
    "first_name": "Sam",
    "hire_date": null,
    "id": "00000000-0000-0000-0000-000000000006",
    "inserted_datetime": "2026-08-14T11:20:57.079398Z",
    "last_name": "Rivera",
    "occupational_license_number": "OCC-889",
    "phone_number": "555-0100",
    "updated_datetime": "2026-08-14T11:20:57.079398Z",
    "us_state": null
  }
}

POST /public/v1/drivers (update) updates a driver, omitting a create-required field keeps its stored value

POST /public/v1/drivers
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjRlMTVmYzgtOTI3ZC00NjMxLThjZWEtZWIyNjM1NDcyNjRhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDE2IiwidHlwIjoiYWNjZXNzIn0.sCw5rfvqsfZMbO6pcZxqlAgj5RCToKwaMMv3tPRxdkM
{
  "first_name": "New",
  "id": "00000000-0000-0000-0000-000000000005"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3f70b5b4bb93c53a0d8973716d319b60-bbe6494626b332a4-0
{
  "data": {
    "birth_date": "1990-01-01",
    "driver_license": "D1234567",
    "email": "test@example.com",
    "first_name": "New",
    "hire_date": "2020-01-01",
    "id": "00000000-0000-0000-0000-000000000005",
    "inserted_datetime": "2026-08-14T11:20:56.766891Z",
    "last_name": "Driver",
    "occupational_license_number": "OCC-889",
    "phone_number": "555-0100",
    "updated_datetime": "2026-08-14T11:20:56.778577Z",
    "us_state": "CA"
  }
}

Upsert a single driver. To update an existing driver, pass its ID in the id field. If you do not pass an ID, a new driver is created.

Driver management is only available for companies with a METRC or BIOTRACK compliance type. Requests from companies with any other compliance type are rejected.

Required fields depend on the company's compliance type and apply only when CREATING a driver. On update (when an id is given) all fields are optional and only the fields you send are changed; omitted fields keep their stored value. - METRC: first_name, last_name, phone_number, driver_license, occupational_license_number. - BIOTRACK: first_name, last_name, birth_date, email, driver_license, us_state, hire_date.

Required permission: settings_permissions_drivers.

Request

POST /public/v1/drivers

Parameters

Parameter Description In Type Required Default Example
id Driver ID. If given, the matching driver is updated; otherwise a new one is created. query string false
first_name The driver's first name (required when creating a driver) query string false
last_name The driver's last name (required when creating a driver) query string false
email The driver's email (required when creating a driver for BIOTRACK companies) query string false
phone_number The driver's phone number (required when creating a driver for METRC companies) query string false
driver_license The driver's license number (required when creating a driver) query string false
us_state The driver's US state (required when creating a driver for BIOTRACK companies) query string false
birth_date The driver's birth date, ISO-8601 (required when creating a driver for BIOTRACK companies) query string false
hire_date The driver's hire date, ISO-8601 (required when creating a driver for BIOTRACK companies) query string false
occupational_license_number The driver's occupational license number (required when creating a driver for METRC companies) query string false

Responses

Status Description Schema
200 The updated driver Driver
201 The created driver Driver
400 Invalid parameters
404 Not Found

FileAttachment

Insert a file attachment

POST /public/v1/file-attachments uploads and creates a file attachment successfully with simplified reference

POST /public/v1/file-attachments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODYyNjU0ZmMtMjdjNC00MjhhLTk2ODktNzQ1MzU4NmZiMDAwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTU0IiwidHlwIjoiYWNjZXNzIn0.wEcUEx40osA32Cyg1uRzARTXDqf8Kd5DzelGx-H6XmA
{
  "file": {
    "filename": "test-image.png",
    "content_type": "image/png"
  },
  "name": "My Test Image",
  "product_id": "4702ddeb-4f4e-431e-8443-ef08e0d99f9a"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 10bbfed4018996953c7b7f10fa04695d-25d786156c94795c-0
{
  "data": {
    "assembly_id": null,
    "batch_id": null,
    "company_relationship_id": null,
    "contact_id": null,
    "id": "00000000-0000-0000-0000-00000000001a",
    "invoice_id": null,
    "license_id": null,
    "mime_type": "image/png",
    "name": "My Test Image",
    "order_id": null,
    "order_shipment_id": null,
    "product_id": "4702ddeb-4f4e-431e-8443-ef08e0d99f9a",
    "purchase_id": null,
    "request_id": null,
    "return_id": null,
    "size_in_bytes": 355974,
    "stock_transfer_id": null,
    "task_id": null,
    "upload_datetime": "2026-08-14T11:20:58.664856Z",
    "uploader": {
      "id": "00000000-0000-0000-0000-0000000003ba",
      "name": "FirstName1920 LastName1921"
    },
    "url": "/var/folders/2z/jg98hkm57rx18c_x3bnqbr8c0000gn/T/5cb1b3f7-c22e-4478-910a-70e4fd77cf3a/test-image.png"
  }
}

Insert a new file attachment. The file will be uploaded to S3 and associated with the specified entity. Exactly one reference ID must be provided (product_id, order_id, purchase_id, etc.).

Required permission: products_permissions_edit.

Request

POST /public/v1/file-attachments

Parameters

Parameter Description In Type Required Default Example
file The file to upload formData file true
name Display name for the attachment (defaults to filename if not provided) formData string false
product_id Product ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
order_id Order ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
purchase_id Purchase ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
invoice_id Invoice ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
batch_id Batch ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
contact_id Contact ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
company_relationship_id Company relationship ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
request_id Request ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
task_id Task ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
stock_transfer_id Stock transfer ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
assembly_id Assembly ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
return_id Return ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
order_shipment_id Order shipment ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000
license_id License ID to attach file to formData string false 550e8400-e29b-41d4-a716-446655440000

Responses

Status Description Schema
201 File attachment inserted successfully FileAttachment
400 Invalid parameters
422 Storage quota exceeded or other validation error

Inventory

Get inventory levels

GET /public/v1/inventory returns stock quantities filtered by product IDs

GET /public/v1/inventory?grouping[]=PRODUCT&product_ids[]=719620e0-5a62-478b-b372-6161c6bc7758
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjUsImlhdCI6MTc4NjcwNjQ2NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTdhZTc2ZmItZTViZC00MjU3LThiOGItNTllZGJmYWY2NzhjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjc1MSIsInR5cCI6ImFjY2VzcyJ9.IP0JLDKyD9Py8zN2UcSpNbyZ2FunSWix9Jl0fT_dhtA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1d4e8648ce1a3ccce5f6fb35fa166f91-e1ecb4f799eacda1-0
{
  "data": [
    {
      "active": "10.000000000",
      "available": "10.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "719620e0-5a62-478b-b372-6161c6bc7758",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:05.633188Z"
    }
  ],
  "next_page": null
}

GET /public/v1/inventory returns stock quantities and costs grouped by product

GET /public/v1/inventory?grouping[]=PRODUCT
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTUyZDk5NDQtYjJjZC00MzZjLWE5NTktY2UwNjFhZWI0ZGRkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjI1MiIsInR5cCI6ImFjY2VzcyJ9.xuPqV3gZRRS0OzD3792NZNPTSnccX5KstgUgZSLpWoo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 12d39e776a22149e88f6b9cc034f3843-dfd007763c9924c0-0
{
  "data": [
    {
      "active": "95.000000000",
      "available": "80.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "5c02ca79-2abf-4abf-b2dc-68e66c2e795a",
      "reserved": "15.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:03.352877Z"
    },
    {
      "active": "50.000000000",
      "available": "50.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "7aca68f4-a010-4ffb-96ce-ca137244fcbc",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:03.273050Z"
    },
    {
      "active": "100.000000000",
      "available": "90.000000000",
      "cost_default_per_unit": "2.06",
      "cost_per_unit_actual": "0.03",
      "product_id": "9a72281e-1df4-4f4e-b0af-b72e6036c32c",
      "reserved": "10.000000000",
      "total_cost_actual": "3",
      "total_cost_default": "206",
      "updated_datetime": "2026-08-14T11:21:03.352002Z"
    }
  ],
  "next_page": null
}

GET /public/v1/inventory returns stock quantities and costs grouped by product & location

GET /public/v1/inventory?grouping[]=PRODUCT&grouping[]=LOCATION
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2JlNTE1N2QtNDA4ZS00ODkwLTg3NDktOGYwZjZiNWVlMTA4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjQ5MCIsInR5cCI6ImFjY2VzcyJ9.pxtqZ4-ac9WriXJt2GBxBJchSarECXLRPZZVEwtebWk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: af30cce4be5849071186e6ef95fd7285-ea0ebc6603e9bf60-0
{
  "data": [
    {
      "active": "0.000000000",
      "available": "-15.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000234",
      "product_id": "033ccf26-74bb-49d9-a89d-c73e4c0d0b1f",
      "reserved": "15.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.769661Z"
    },
    {
      "active": "0.000000000",
      "available": "-8.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000235",
      "product_id": "033ccf26-74bb-49d9-a89d-c73e4c0d0b1f",
      "reserved": "8.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.770387Z"
    },
    {
      "active": "190.000000000",
      "available": "169.000000000",
      "cost_default_per_unit": "1",
      "cost_per_unit_actual": "0.5",
      "location_id": "00000000-0000-0000-0000-00000000023e",
      "product_id": "033ccf26-74bb-49d9-a89d-c73e4c0d0b1f",
      "reserved": "21.000000000",
      "total_cost_actual": "95",
      "total_cost_default": "190",
      "updated_datetime": "2026-08-14T11:21:04.771028Z"
    },
    {
      "active": "80.000000000",
      "available": "80.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-00000000023f",
      "product_id": "033ccf26-74bb-49d9-a89d-c73e4c0d0b1f",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.713873Z"
    },
    {
      "active": "0.000000000",
      "available": "-1.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": null,
      "product_id": "033ccf26-74bb-49d9-a89d-c73e4c0d0b1f",
      "reserved": "1.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.774675Z"
    },
    {
      "active": "100.000000000",
      "available": "90.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000234",
      "product_id": "2d3467d1-6b53-4b47-8045-1164b894192c",
      "reserved": "10.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.767778Z"
    },
    {
      "active": "0.000000000",
      "available": "-1.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000235",
      "product_id": "2d3467d1-6b53-4b47-8045-1164b894192c",
      "reserved": "1.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.768896Z"
    },
    {
      "active": "100.000000000",
      "available": "100.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000235",
      "product_id": "9d147ba7-6525-4f18-9e54-e452b92dd890",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.512726Z"
    },
    {
      "active": "30.000000000",
      "available": "26.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": null,
      "product_id": "9d147ba7-6525-4f18-9e54-e452b92dd890",
      "reserved": "4.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.773571Z"
    }
  ],
  "next_page": null
}

GET /public/v1/inventory returns stock quantities and costs grouped by product & batch number

GET /public/v1/inventory?grouping[]=PRODUCT&grouping[]=BATCH_NUMBER
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWNmMWU0MjMtOWVhNC00NjVhLWEzZTItZDMzZDI5ODZiYzk2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjczIiwidHlwIjoiYWNjZXNzIn0.cIIaCDiC9eOhZMVVHBr3dEr9ExpwH7Na56CGnDgeNmU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 37f3c56ed856b7a7e673e2154e549408-2bf4a446022d186b-0
{
  "data": [
    {
      "active": "8.000000000",
      "available": "8.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "2bf117a6-c0e1-4026-acee-663f917bf457",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.283069Z"
    },
    {
      "active": "26.000000000",
      "available": "26.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "9df0dcc4-cc79-4554-9e2b-41b09f232f1c",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.884291Z"
    },
    {
      "active": "27.000000000",
      "available": "27.000000000",
      "batch_number": "1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "9df0dcc4-cc79-4554-9e2b-41b09f232f1c",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.978088Z"
    },
    {
      "active": "19.000000000",
      "available": "19.000000000",
      "batch_number": null,
      "cost_default_per_unit": "2",
      "cost_per_unit_actual": "1",
      "product_id": "b4e649da-bbf8-4ac4-90ac-00a891b42203",
      "reserved": "0.000000000",
      "total_cost_actual": "19",
      "total_cost_default": "38",
      "updated_datetime": "2026-08-14T11:20:58.071030Z"
    },
    {
      "active": "13.000000000",
      "available": "13.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "b4e649da-bbf8-4ac4-90ac-00a891b42203",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.212656Z"
    },
    {
      "active": "43.000000000",
      "available": "43.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "e86c47cc-e899-4f64-b950-7afe0a9c9b91",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.501409Z"
    },
    {
      "active": "47.000000000",
      "available": "47.000000000",
      "batch_number": "1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "e86c47cc-e899-4f64-b950-7afe0a9c9b91",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.655185Z"
    },
    {
      "active": "25.000000000",
      "available": "25.000000000",
      "batch_number": "2",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "e86c47cc-e899-4f64-b950-7afe0a9c9b91",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:20:58.736047Z"
    }
  ],
  "next_page": null
}

GET /public/v1/inventory returns stock quantities grouped by product & location & batch number

GET /public/v1/inventory?grouping[]=PRODUCT&grouping[]=LOCATION&grouping[]=BATCH_NUMBER
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTdlN2MzNTAtMjQ3OS00MjdhLWJiMmMtOGZkMTdiODlkMmUyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjM3NiIsInR5cCI6ImFjY2VzcyJ9.YSSUWoQI-MD09AacGwbsuS1Pa3KVcOwPf5-CYE_wPXk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6584896e92f254fd96163e40c54ceef4-878e3f601ebe5697-0
{
  "data": [
    {
      "active": "41.000000000",
      "available": "41.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000215",
      "product_id": "3c8104f0-20db-4411-938a-411bb598676f",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.139490Z"
    },
    {
      "active": "49.000000000",
      "available": "49.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000215",
      "product_id": "3c8104f0-20db-4411-938a-411bb598676f",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.301346Z"
    },
    {
      "active": "45.000000000",
      "available": "45.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000216",
      "product_id": "3c8104f0-20db-4411-938a-411bb598676f",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.222879Z"
    },
    {
      "active": "53.000000000",
      "available": "53.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000216",
      "product_id": "3c8104f0-20db-4411-938a-411bb598676f",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.365595Z"
    },
    {
      "active": "21.000000000",
      "available": "21.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000215",
      "product_id": "5aaffe7a-aad7-45e0-bbee-340ba8c786ca",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:03.941739Z"
    },
    {
      "active": "29.000000000",
      "available": "29.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000215",
      "product_id": "5aaffe7a-aad7-45e0-bbee-340ba8c786ca",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.012660Z"
    },
    {
      "active": "25.000000000",
      "available": "25.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000216",
      "product_id": "5aaffe7a-aad7-45e0-bbee-340ba8c786ca",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:03.979334Z"
    },
    {
      "active": "33.000000000",
      "available": "33.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000216",
      "product_id": "5aaffe7a-aad7-45e0-bbee-340ba8c786ca",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-08-14T11:21:04.043082Z"
    }
  ],
  "next_page": null
}

Get active and available quantities grouped by a specified list of attributes. Groups with 0 active and 0 available quantity won't be returned. Groups are sorted by the IDs of the attributes they are grouped by. Note: The page size for this endpoint is 5000 groups per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view.

Request

GET /public/v1/inventory

Parameters

Parameter Description In Type Required Default Example
grouping Attributes to group inventory by. PRODUCT is required to be in the list. Accepted values are "BATCH_NUMBER", "LOCATION" and "PRODUCT". query array true ["PRODUCT","LOCATION"]
page Pagination information query number false ?page[number]=1
product_ids Filter inventory levels by product IDs query array false ["67ae9080-8dc2-4ab7-9704-19673f4d9f21","213c7080-8dc2-4ab7-9704-19673f4d9f22"]
location_ids Filter inventory levels by location IDs query array false ["00000000-0000-0000-0000-000000000001","00000000-0000-0000-0000-000000000002"]
batch_ids Filter inventory levels by batch IDs query array false ["00000000-0000-0000-0000-000000000101","00000000-0000-0000-0000-000000000102"]

Responses

Status Description Schema
200 A list of active and available quantity for each group Inventories

Invoice

Get an invoice

GET /invoices/:id returns the expected invoice

GET /public/v1/invoices/00000000-0000-0000-0000-000000000025
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2QyNmQxZmUtNDg1Yi00ZDgyLWI3MTEtMmI1MjgzZWY1OTY5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTkyNCIsInR5cCI6ImFjY2VzcyJ9.NizKnFrl4_E7H-tY_Y7VoohKpnNGBHgA0P6NNK-bb8A

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 070761954c02970b4853878c3dc78394-7b36970386a880a8-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000598",
      "id": "00000000-0000-0000-0000-0000000001ad",
      "license_id": "00000000-0000-0000-0000-000000000053",
      "license_number": "CDPH-00000084",
      "name": "Place 427"
    },
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000303",
      "name": "Company 1428",
      "updated_datetime": "2026-08-14T11:21:01.494539Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1919@example.com",
      "full_name": "FirstName3904 LastName3905",
      "id": "00000000-0000-0000-0000-000000000787",
      "role": {
        "id": "00000000-0000-0000-0000-0000000007c8",
        "name": "Admin 1991"
      }
    },
    "custom_data": [
      {
        "id": 63,
        "name": "Custom Field 38",
        "value": "Custom Field Value 1"
      }
    ],
    "due_datetime": "2026-08-14T11:21:01.594849Z",
    "external_notes": null,
    "id": "00000000-0000-0000-0000-000000000025",
    "inserted_datetime": "2026-08-14T11:21:01.595375Z",
    "internal_notes": null,
    "invoice_datetime": "2026-08-14T11:21:01.594849Z",
    "invoice_number": "Invoice #35",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001ba",
          "name": "B1357"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000012",
        "order_item_id": "58b0f719-88e1-4465-9ad1-7b52bf126739",
        "package": null,
        "price": "10.000000000",
        "product": {
          "id": "1b4323c2-b142-445b-950f-bb13ea936475",
          "name": "Product 1355",
          "sku": "sku 1356",
          "updated_datetime": "2026-08-14T11:21:01.509300Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001bc",
          "name": "B1363"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000013",
        "order_item_id": "de512cce-eba5-48cc-9d57-a0d4af32150b",
        "package": null,
        "price": "10.000000000",
        "product": {
          "id": "ef6f61aa-54ba-4949-9ad1-c86cea15c48c",
          "name": "Product 1361",
          "sku": "sku 1362",
          "updated_datetime": "2026-08-14T11:21:01.525046Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "ec7b90e9-0c01-4797-8189-17eea98ae652",
      "order_number": "SO-74",
      "status": "PENDING",
      "total": "320.00"
    },
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1919@example.com",
      "full_name": "FirstName3904 LastName3905",
      "id": "00000000-0000-0000-0000-000000000787",
      "role": {
        "id": "00000000-0000-0000-0000-0000000007c8",
        "name": "Admin 1991"
      }
    },
    "paid_amount": "0.0",
    "payments": [],
    "remaining_amount": null,
    "status": "NOT_PAID",
    "total": "200.00",
    "updated_datetime": "2026-08-14T11:21:01.595375Z"
  }
}

Get a single invoice given the ID. Required permission: invoices_permissions_view. The authenticated user must also have access to the requested invoice under their team restrictions.

Request

GET /public/v1/invoices/{id}

Parameters

Parameter Description In Type Required Default Example
id Unique ID for an invoice path string true

Responses

Status Description Schema
200 An invoice Invoice

Get invoices

GET /invoices/ returns invoices related to the access token's company

GET /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjUsImlhdCI6MTc4NjcwNjQ2NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTc2NWVjZWEtOTk3YS00MWYyLWJiZjAtNGRhODE5ODQxOGQyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjc2MiIsInR5cCI6ImFjY2VzcyJ9.fJzs3cM_ZSCt6W3dXpWUYr9lt5vCrEvWkEun6BvEII0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f4f92b9027661435a817e9b8fdb9659f-03130aef53184288-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000080a",
        "id": "00000000-0000-0000-0000-000000000291",
        "license_id": "00000000-0000-0000-0000-00000000008e",
        "license_number": "CDPH-00000143",
        "name": "Place 655"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000004f4",
        "name": "Company 2054",
        "updated_datetime": "2026-08-14T11:21:05.808493Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2757@example.com",
        "full_name": "FirstName5588 LastName5589",
        "id": "00000000-0000-0000-0000-000000000ade",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b12",
          "name": "Admin 2833"
        }
      },
      "custom_data": [
        {
          "id": 70,
          "name": "Custom Field 45",
          "value": null
        }
      ],
      "due_datetime": "2026-08-14T11:21:05.868976Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-000000000045",
      "inserted_datetime": "2026-08-14T11:21:05.869440Z",
      "internal_notes": null,
      "invoice_datetime": "2026-08-14T11:21:05.868976Z",
      "invoice_number": "Invoice #64",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000325",
            "name": "B2480"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000003c",
          "order_item_id": "fb9a8d95-04da-4ec8-91df-1dc8dd44fcb8",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "01d0c9e4-9015-45a6-b8bd-90cbf68e6af1",
            "name": "Product 2478",
            "sku": "sku 2479",
            "updated_datetime": "2026-08-14T11:21:05.817704Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000327",
            "name": "B2488"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000003d",
          "order_item_id": "28337ded-59e7-427f-9f3b-a69a5a093571",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "d2c74648-87ca-4b0c-b827-faf5ae43e466",
            "name": "Product 2484",
            "sku": "sku 2485",
            "updated_datetime": "2026-08-14T11:21:05.828575Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "47507d61-f9ef-49a4-b909-3774f3ec944e",
        "order_number": "SO-121",
        "status": "PENDING",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2757@example.com",
        "full_name": "FirstName5588 LastName5589",
        "id": "00000000-0000-0000-0000-000000000ade",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b12",
          "name": "Admin 2833"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "200.00",
      "status": "NOT_PAID",
      "total": "200.00",
      "updated_datetime": "2026-08-14T11:21:05.869440Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000007fa",
        "id": "00000000-0000-0000-0000-00000000028d",
        "license_id": "00000000-0000-0000-0000-00000000008d",
        "license_number": "CDPH-00000142",
        "name": "Place 651"
      },
      "charges": [
        {
          "id": "d4676a2a-a0c1-4e1b-91cb-d18292cbac85",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "tax": {
            "id": "00000000-0000-0000-0000-00000000000d",
            "name": "T1"
          },
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-0000000004e8",
        "name": "Company 2038",
        "updated_datetime": "2026-08-14T11:21:05.684580Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "user1@a.com",
        "full_name": "John Foo",
        "id": "00000000-0000-0000-0000-000000000ac6",
        "role": {
          "id": "00000000-0000-0000-0000-000000000afa",
          "name": "Admin 2809"
        }
      },
      "custom_data": [
        {
          "id": 70,
          "name": "Custom Field 45",
          "value": "Custom Field Value 1"
        }
      ],
      "due_datetime": "2020-01-01T00:00:01.000000Z",
      "external_notes": "Visible to the customer",
      "id": "00000000-0000-0000-0000-000000000044",
      "inserted_datetime": "2026-08-14T11:21:05.705126Z",
      "internal_notes": "Only visible internally",
      "invoice_datetime": "2020-01-01T00:00:02.000000Z",
      "invoice_number": "INV-123",
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-00000000031b",
            "name": "B1"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000003b",
          "order_item_id": "1451e27f-4325-4f3a-8ae8-ce6d5e9f456b",
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000177",
            "id": "00000000-0000-0000-0000-00000000005c",
            "metrc_label": "ABCDEF012345670000000177",
            "status": "active"
          },
          "price": "10.000000000",
          "product": {
            "id": "39af8d47-8493-4afc-85d1-35eeaeaa4132",
            "name": "P1",
            "sku": "SKU1",
            "updated_datetime": "2026-08-14T11:21:05.661460Z"
          },
          "quantity": "1.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "16583240-52f5-4b28-8977-c95420a2e778",
        "order_number": "SO-123",
        "status": "COMPLETED",
        "total": "10.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "user2@a.com",
        "full_name": "John Bar",
        "id": "00000000-0000-0000-0000-000000000ac7",
        "role": {
          "id": "00000000-0000-0000-0000-000000000afb",
          "name": "Admin 2810"
        }
      },
      "paid_amount": "5.00",
      "payments": [
        {
          "amount": "5",
          "company": {
            "id": "00000000-0000-0000-0000-0000000004e8",
            "name": "Company 2038",
            "updated_datetime": "2026-08-14T11:21:05.684580Z"
          },
          "credit_uses": [],
          "description": null,
          "fully_paid_with_credits": false,
          "id": "00000000-0000-0000-0000-00000000001f",
          "inserted_datetime": "2026-08-14T11:21:05.729078Z",
          "invoice": {
            "id": "00000000-0000-0000-0000-000000000044",
            "invoice_number": "INV-123",
            "status": "PARTIALLY_PAID",
            "total": "8.00"
          },
          "overpayment_credits": [],
          "payment_date": "2026-08-14T11:21:05.718021Z",
          "payment_method": {
            "deleted_at": null,
            "id": "00000000-0000-0000-0000-00000000002b",
            "name": "Payment Method 42"
          },
          "payment_number": "PYT-0000001",
          "payment_type": "INVOICE",
          "purchase": null,
          "quickbooks_deposit_account_id": null,
          "status": "POSTED",
          "updated_datetime": "2026-08-14T11:21:05.729078Z"
        }
      ],
      "remaining_amount": "3.00",
      "status": "PARTIALLY_PAID",
      "total": "8.00",
      "updated_datetime": "2026-08-14T11:21:05.731572Z"
    }
  ],
  "next_page": null
}

GET /invoices/ returns cost/returned_quantity data for invoice items

GET /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWI2ZTg3MjQtNTY5Yi00MTgyLTk5MTctYTRmZWJkNzhhYzU3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjI1MSIsInR5cCI6ImFjY2VzcyJ9.wVNv0yfjFO4ZzHbIU51qK4gyz5tAJlRpOag1KsOaoI0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1735485e722ec39da4effc8c7d41fedb-c1cad489e9c68ed0-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000674",
        "id": "00000000-0000-0000-0000-0000000001fa",
        "license_id": "00000000-0000-0000-0000-000000000066",
        "license_number": "CDPH-00000103",
        "name": "Place 504"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000003a7",
        "name": "Company 1648",
        "updated_datetime": "2026-08-14T11:21:03.065406Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2272@example.com",
        "full_name": "FirstName4616 LastName4617",
        "id": "00000000-0000-0000-0000-0000000008f1",
        "role": {
          "id": "00000000-0000-0000-0000-00000000092d",
          "name": "Admin 2348"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-08-14T11:21:03.217647Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-00000000002d",
      "inserted_datetime": "2026-08-14T11:21:03.217996Z",
      "internal_notes": null,
      "invoice_datetime": "2026-08-14T11:21:03.217647Z",
      "invoice_number": "Invoice #42",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000021e",
            "name": "B1702"
          },
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "00000000-0000-0000-0000-00000000001e",
          "order_item_id": "69ae3a0a-2b9c-446e-bac9-cf22e1e1ce59",
          "package": null,
          "price": "826751.000000000",
          "product": {
            "id": "b4ae2315-4044-4f32-8fa3-44cfa5f017ce",
            "name": "Product 1698",
            "sku": "sku 1699",
            "updated_datetime": "2026-08-14T11:21:02.998690Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "2",
          "total_cost_actual": "20.052",
          "total_cost_default": "10"
        }
      ],
      "order": {
        "id": "470fe753-fe57-4f9e-be11-cc4c98a4ea9d",
        "order_number": "SO-0000001",
        "status": "PROCESSING",
        "total": "1653502.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2272@example.com",
        "full_name": "FirstName4616 LastName4617",
        "id": "00000000-0000-0000-0000-0000000008f1",
        "role": {
          "id": "00000000-0000-0000-0000-00000000092d",
          "name": "Admin 2348"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "32.00",
      "status": "NOT_PAID",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:03.217996Z"
    }
  ],
  "next_page": null
}

GET /invoices/ allows filtering by one or several statuses

GET /public/v1/invoices?status[]=FULLY_PAID&status[]=NOT_PAID
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjcsImlhdCI6MTc4NjcwNjQ2NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWMyYmMxMzQtMDI5OC00OWY4LWJiNDItOWNlZGM0NzRjNmYyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg5MSIsInR5cCI6ImFjY2VzcyJ9.0Yrw4YGFuL4Bfc1qrC7IxkhRYei1THVVbD1wWrpL7xg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 05769c528174a657109874712ef5d34d-cbb76b0b069692e4-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000889",
        "id": "00000000-0000-0000-0000-0000000002c0",
        "license_id": "00000000-0000-0000-0000-00000000009b",
        "license_number": "CDPH-00000156",
        "name": "Place 702"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000055b",
        "name": "Company 2181",
        "updated_datetime": "2026-08-14T11:21:07.366649Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2888@example.com",
        "full_name": "FirstName5850 LastName5851",
        "id": "00000000-0000-0000-0000-000000000b66",
        "role": {
          "id": "00000000-0000-0000-0000-000000000ba0",
          "name": "Admin 2975"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-08-14T11:21:07.416114Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-000000000053",
      "inserted_datetime": "2026-08-14T11:21:07.416522Z",
      "internal_notes": null,
      "invoice_datetime": "2020-01-01T12:30:00.000000Z",
      "invoice_number": "Invoice #75",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000373",
            "name": "B2716"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000004d",
          "order_item_id": "6012e60a-7fc4-4bdd-8e80-ef33771e0cb2",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "4f456047-05c6-44cd-8197-beac80c8355e",
            "name": "Product 2714",
            "sku": "sku 2715",
            "updated_datetime": "2026-08-14T11:21:07.374255Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000374",
            "name": "B2719"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000004e",
          "order_item_id": "358c71a8-2c40-4a8d-8ca0-db3c1c23a797",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "5c972b4d-9022-4013-ae24-95e29a47a702",
            "name": "Product 2717",
            "sku": "sku 2718",
            "updated_datetime": "2026-08-14T11:21:07.381837Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "fe99d23e-cd6f-47cd-9567-8880ad968fba",
        "order_number": "SO-144",
        "status": "PENDING",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2888@example.com",
        "full_name": "FirstName5850 LastName5851",
        "id": "00000000-0000-0000-0000-000000000b66",
        "role": {
          "id": "00000000-0000-0000-0000-000000000ba0",
          "name": "Admin 2975"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "200.00",
      "status": "NOT_PAID",
      "total": "200.00",
      "updated_datetime": "2026-08-14T11:21:07.416522Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000087d",
        "id": "00000000-0000-0000-0000-0000000002bd",
        "license_id": "00000000-0000-0000-0000-00000000009a",
        "license_number": "CDPH-00000155",
        "name": "Place 699"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000054f",
        "name": "Company 2169",
        "updated_datetime": "2026-08-14T11:21:07.297151Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2879@example.com",
        "full_name": "FirstName5832 LastName5833",
        "id": "00000000-0000-0000-0000-000000000b5d",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b97",
          "name": "Admin 2966"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-08-14T11:21:07.345899Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-000000000052",
      "inserted_datetime": "2026-08-14T11:21:07.346345Z",
      "internal_notes": null,
      "invoice_datetime": "2020-01-01T12:20:00.000000Z",
      "invoice_number": "Invoice #74",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000368",
            "name": "B2685"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000004b",
          "order_item_id": "0ab8ccd1-9d96-4ded-9933-f7f33f4736e8",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "b47792b9-84de-43ff-ba82-d210c01fb4a9",
            "name": "Product 2681",
            "sku": "sku 2682",
            "updated_datetime": "2026-08-14T11:21:07.305147Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000036a",
            "name": "B2689"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000004c",
          "order_item_id": "fabc836e-7359-45c9-9b44-a0eb0d187caa",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "51b1dde3-0bbb-4add-afa7-8ffdef7c22b8",
            "name": "Product 2687",
            "sku": "sku 2688",
            "updated_datetime": "2026-08-14T11:21:07.312119Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "5b9b0a45-7d58-42f2-9e46-a61b1d4a3126",
        "order_number": "SO-142",
        "status": "PENDING",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2879@example.com",
        "full_name": "FirstName5832 LastName5833",
        "id": "00000000-0000-0000-0000-000000000b5d",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b97",
          "name": "Admin 2966"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "200.00",
      "status": "FULLY_PAID",
      "total": "200.00",
      "updated_datetime": "2026-08-14T11:21:07.346345Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000086b",
        "id": "00000000-0000-0000-0000-0000000002b6",
        "license_id": "00000000-0000-0000-0000-000000000098",
        "license_number": "CDPH-00000153",
        "name": "Place 692"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000053e",
        "name": "Company 2151",
        "updated_datetime": "2026-08-14T11:21:07.138330Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2862@example.com",
        "full_name": "FirstName5798 LastName5799",
        "id": "00000000-0000-0000-0000-000000000b4c",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b87",
          "name": "Admin 2950"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-08-14T11:21:07.192000Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-000000000050",
      "inserted_datetime": "2026-08-14T11:21:07.192485Z",
      "internal_notes": null,
      "invoice_datetime": "2020-01-01T12:00:00.000000Z",
      "invoice_number": "Invoice #72",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000035a",
            "name": "B2641"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-000000000047",
          "order_item_id": "d4b02a69-6c29-43af-b10d-907dfd99ec06",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "2b9f43a8-f256-49d1-aeb8-413759fece0c",
            "name": "Product 2639",
            "sku": "sku 2640",
            "updated_datetime": "2026-08-14T11:21:07.146641Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000035b",
            "name": "B2644"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-000000000048",
          "order_item_id": "1cc5201b-bb8f-4413-bdc3-b89021825d82",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "97cfb6c0-f4b2-4bc0-9583-508d4b577a53",
            "name": "Product 2642",
            "sku": "sku 2643",
            "updated_datetime": "2026-08-14T11:21:07.155601Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "ceb3b8e3-dec2-4d2f-868e-e4a9c9a65ee9",
        "order_number": "SO-139",
        "status": "PENDING",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2862@example.com",
        "full_name": "FirstName5798 LastName5799",
        "id": "00000000-0000-0000-0000-000000000b4c",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b87",
          "name": "Admin 2950"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "200.00",
      "status": "FULLY_PAID",
      "total": "200.00",
      "updated_datetime": "2026-08-14T11:21:07.192485Z"
    }
  ],
  "next_page": null
}

GET /invoices/:id returns cost/returned_quantity data for invoice items

GET /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzc4ZWNlMzgtNmYzZi00NzhjLTk2MzktOWU2MGVlNmM3MDZjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTc0MCIsInR5cCI6ImFjY2VzcyJ9.RHZlh8uCiD52z1Mp9gR08aJ0UwF5UFiKAI2XZlkb4CY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: cbbf94f02681e80d901c0f14c0715969-a45280aada252317-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000533",
        "id": "00000000-0000-0000-0000-000000000195",
        "license_id": "00000000-0000-0000-0000-000000000050",
        "license_number": "CDPH-00000081",
        "name": "Place 403"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000002c4",
        "name": "Company 1327",
        "updated_datetime": "2026-08-14T11:21:00.869830Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1843@example.com",
        "full_name": "FirstName3742 LastName3743",
        "id": "00000000-0000-0000-0000-00000000073a",
        "role": {
          "id": "00000000-0000-0000-0000-000000000779",
          "name": "Admin 1912"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-08-14T11:21:01.162326Z",
      "external_notes": null,
      "id": "00000000-0000-0000-0000-000000000023",
      "inserted_datetime": "2026-08-14T11:21:01.162706Z",
      "internal_notes": null,
      "invoice_datetime": "2026-08-14T11:21:01.162325Z",
      "invoice_number": "Invoice #34",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000018d",
            "name": "B1212"
          },
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "00000000-0000-0000-0000-000000000010",
          "order_item_id": "67986ab7-9bfe-478e-b6b4-9ffa635b75af",
          "package": null,
          "price": "8555.000000000",
          "product": {
            "id": "69f2d3be-ef5b-47be-bd87-a809264d7291",
            "name": "Product 1209",
            "sku": "sku 1210",
            "updated_datetime": "2026-08-14T11:21:00.767335Z"
          },
          "quantity": "1.000000000",
          "returned_quantity": "1",
          "total_cost_actual": "10.026",
          "total_cost_default": "5"
        }
      ],
      "order": {
        "id": "bd12d31f-c9bf-4f53-a45c-653fbfd67e0c",
        "order_number": "SO-0000001",
        "status": "PROCESSING",
        "total": "17110.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1843@example.com",
        "full_name": "FirstName3742 LastName3743",
        "id": "00000000-0000-0000-0000-00000000073a",
        "role": {
          "id": "00000000-0000-0000-0000-000000000779",
          "name": "Admin 1912"
        }
      },
      "paid_amount": "0.0",
      "payments": [],
      "remaining_amount": "32.00",
      "status": "NOT_PAID",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:01.162706Z"
    }
  ],
  "next_page": null
}

Get invoices sorted by Invoice Date descendingly date and filtered by various attributes

Note: The page size for this endpoint is 500 invoices per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: invoices_permissions_view. Results are filtered to only include invoices the authenticated user can access under their team restrictions.

Request

GET /public/v1/invoices

Parameters

Parameter Description In Type Required Default Example
due_datetime Filter invoices by the due datetime query string false ,2022-07-10T00:00:00Z
inserted_datetime Filter invoices by their creation datetime query string false 2022-07-10T00:00:00Z,2022-07-11T00:00:00Z
invoice_datetime Filter invoices by the invoice datetime query string false 2022-07-10T00:00:00Z,
invoice_number Filter invoices by whether their invoice number contains the given string query string false 001
order_id Filter invoices by order IDs query array false ["67ae9080-8dc2-4ab7-9704-19673f4d9f21","213c7080-8dc2-4ab7-9704-19673f4d9f22"]
page Pagination information query number false ?page[number]=1
status Filter invoices by their status. Accepted values are "NOT_PAID", "OVER_PAID", "FULLY_PAID" and "PARTIALLY_PAID". query array false ["NOT_PAID","OVER_PAID"]
updated_datetime Filter invoices by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of invoices Invoices

Insert a payment for an invoice

POST /invoices/:id/payments can create a payment for an invoice with both quickbooks id and name

POST /public/v1/invoices/00000000-0000-0000-0000-00000000004a/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWQ3ZTc1YzItMzcyMS00YTczLTkyMDQtMGYwY2M3YjE1ZWQ0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjgxOSIsInR5cCI6ImFjY2VzcyJ9.6Bsor-BW0WOrPaf09eTVO_WR1IXRLbqmRrcwlR4PJt4
{
  "amount": 100.01,
  "description": "Payment for invoice",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-00000000002c",
  "quickbooks_deposit_account_id": "QBD-123"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: aac7ec35baeaf519279267ef71d983f2-071a38df734c5410-0
{
  "data": {
    "amount": "100",
    "company": {
      "id": "00000000-0000-0000-0000-000000000515",
      "name": "Company 2092",
      "updated_datetime": "2026-08-14T11:21:06.292716Z"
    },
    "credit_uses": [],
    "description": "Payment for invoice",
    "fully_paid_with_credits": false,
    "id": "00000000-0000-0000-0000-000000000020",
    "inserted_datetime": "2026-08-14T11:21:06.328920Z",
    "invoice": {
      "id": "00000000-0000-0000-0000-00000000004a",
      "invoice_number": "Invoice #67",
      "status": "OVER_PAID",
      "total": "100.00"
    },
    "overpayment_credits": [
      {
        "amount": "0.01",
        "credit_number": "CRT-0000001",
        "id": "0353dc0d-5e0f-4e15-9619-3b7bf28820ef",
        "source": "INVOICE_PAYMENT"
      }
    ],
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-00000000002c",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000001",
    "payment_type": "INVOICE",
    "purchase": null,
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_deposit_account_name": "QBD-NAME",
    "quickbooks_sync_enqueued": true,
    "status": "POSTED",
    "updated_datetime": "2026-08-14T11:21:06.328920Z"
  }
}

POST /invoices/:id/payments can create a payment for an invoice with both quickbooks id and name

POST /public/v1/invoices/00000000-0000-0000-0000-00000000004a/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWQ3ZTc1YzItMzcyMS00YTczLTkyMDQtMGYwY2M3YjE1ZWQ0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjgxOSIsInR5cCI6ImFjY2VzcyJ9.6Bsor-BW0WOrPaf09eTVO_WR1IXRLbqmRrcwlR4PJt4
{
  "amount": 100.01,
  "description": "Payment for invoice",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-00000000002c",
  "quickbooks_deposit_account_name": "QBD-NAME"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: aac7ec35baeaf519279267ef71d983f2-4792856310c7680c-0
{
  "data": {
    "amount": "100",
    "company": {
      "id": "00000000-0000-0000-0000-000000000515",
      "name": "Company 2092",
      "updated_datetime": "2026-08-14T11:21:06.292716Z"
    },
    "credit_uses": [],
    "description": "Payment for invoice",
    "fully_paid_with_credits": false,
    "id": "00000000-0000-0000-0000-000000000021",
    "inserted_datetime": "2026-08-14T11:21:06.452542Z",
    "invoice": {
      "id": "00000000-0000-0000-0000-00000000004a",
      "invoice_number": "Invoice #67",
      "status": "OVER_PAID",
      "total": "100.00"
    },
    "overpayment_credits": [
      {
        "amount": "0.01",
        "credit_number": "CRT-0000002",
        "id": "ff98ee41-2840-4899-bbef-9f8f347d8378",
        "source": "INVOICE_PAYMENT"
      }
    ],
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-00000000002c",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000002",
    "payment_type": "INVOICE",
    "purchase": null,
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_deposit_account_name": "QBD-NAME",
    "quickbooks_sync_enqueued": true,
    "status": "POSTED",
    "updated_datetime": "2026-08-14T11:21:06.452542Z"
  }
}

Required permission: invoices_permissions_receive_payment. The authenticated user must also be allowed to view invoices under their team restrictions.

Request

POST /public/v1/invoices/{id}/payments

Parameters

Parameter Description In Type Required Default Example
payment_method_id Payment method ID query string true
amount Amount of the payment. Will round to 2 decimal places query decimal true
payment_datetime Payment date query string true
description Description of the payment query string true
quickbooks_deposit_account_id Quickbooks deposit account ID. Cannot include both this and quickbooks_deposit_account_name. If user's company is integrated with Quickbooks, either this or quickbooks_deposit_account_name must be provided. Account type must be "Bank" or "Other Current Asset" query string false
quickbooks_deposit_account_name Quickbooks deposit account name. Cannot include both this and quickbooks_deposit_account_id. If user's company is integrated with Quickbooks, either this or quickbooks_deposit_account_id must be provided. Account type must be "Bank" or "Other Current Asset" query string false

Responses

Status Description Schema
200 A single payment Payment

Upsert an invoice

POST /invoices creates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjhmZTY5ZDMtNGVjMi00Njc1LWExNTctYjczZWU1Mzg0NmE3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjM0MiIsInR5cCI6ImFjY2VzcyJ9.9pNnER-1fK0-33b-GX7hLKD7s5zHdNz-3Cfd80zMqto
{
  "billing_location_id": "00000000-0000-0000-0000-00000000020a",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "custom_data": {
    "67": [
      "A",
      "B"
    ]
  },
  "due_datetime": "2020-01-30T00:00:01.000000Z",
  "external_notes": "Visible to the customer",
  "internal_notes": "Only visible internally",
  "invoice_datetime": "2020-01-01T00:00:00.000000Z",
  "items": [
    {
      "order_item_id": "302575ae-9c76-4edc-a919-3582f8386e68",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "3e900dd8-5d5b-4d67-8b75-9a354a455a2b",
      "quantity": "10.000000000"
    }
  ],
  "order_id": "1fe08da1-7ee2-401f-98b4-966b81ae96a8",
  "owner_id": "00000000-0000-0000-0000-000000000926"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f07b8adefa983bb56e6444ce0f201171-e01fc6950d11bbdc-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000006b1",
      "id": "00000000-0000-0000-0000-00000000020a",
      "license_id": null,
      "license_number": null,
      "name": "Place 520"
    },
    "charges": [
      {
        "id": "33c953cb-e7f7-45e8-9e16-08ac3617072d",
        "name": "C1",
        "percent": "10.0000",
        "price": "5.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "a389b9cf-70a7-49dd-852c-2a88eee1957a",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-0000000003d7",
      "name": "Company 1709",
      "updated_datetime": "2026-08-14T11:21:03.542642Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000926",
      "role": {
        "id": "00000000-0000-0000-0000-00000000095d",
        "name": "Admin 2396"
      }
    },
    "custom_data": [
      {
        "id": 67,
        "name": "Custom Field 42",
        "value": "A,B"
      }
    ],
    "due_datetime": "2020-01-30T00:00:01.000000Z",
    "external_notes": "Visible to the customer",
    "id": "00000000-0000-0000-0000-00000000002f",
    "inserted_datetime": "2026-08-14T11:21:03.595303Z",
    "internal_notes": "Only visible internally",
    "invoice_datetime": "2020-01-01T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000249",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000022",
        "order_item_id": "302575ae-9c76-4edc-a919-3582f8386e68",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "c6761809-10bd-4bb9-9419-bd0c91444217",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:03.553657Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000024b",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000023",
        "order_item_id": "3e900dd8-5d5b-4d67-8b75-9a354a455a2b",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "51a9e904-7e14-4e8a-bb5b-1bdb9c134880",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:03.561521Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "1fe08da1-7ee2-401f-98b4-966b81ae96a8",
      "order_number": "SO-84",
      "status": "PROCESSING",
      "total": "0.00"
    },
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000926",
      "role": {
        "id": "00000000-0000-0000-0000-00000000095d",
        "name": "Admin 2396"
      }
    },
    "paid_amount": "0.0",
    "payments": [],
    "remaining_amount": "53.30",
    "status": "NOT_PAID",
    "total": "53.30",
    "updated_datetime": "2026-08-14T11:21:03.603203Z"
  }
}

POST /invoices updates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjQyZjNkZjItNjA1Mi00YTYzLTk5MTYtYWJjYTQ5NmEzYjM0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjMwMSIsInR5cCI6ImFjY2VzcyJ9.R0p5REEPOEzWyGzCp5WeFCKBcqQpGtpsocMzIFTvPek
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001fc",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "due_datetime": "2020-01-30T00:00:01.000000Z",
  "invoice_datetime": "2020-01-01T00:00:00.000000Z",
  "items": [
    {
      "order_item_id": "1faad7cd-c2ab-4df1-b3fe-9846f7d63ef6",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "510ac1d7-4f6f-4f39-8fad-10841d7b2edd",
      "quantity": "10.000000000"
    }
  ],
  "order_id": "59ad65d9-b1f6-4c89-ba6d-9a8c8a63f190"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 46d94df1125b6d21926552b73be0a6dc-29a20d027452bf11-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000068a",
      "id": "00000000-0000-0000-0000-0000000001fc",
      "license_id": null,
      "license_number": null,
      "name": "Place 506"
    },
    "charges": [
      {
        "id": "f0c4f1f9-d5d0-4f53-889f-fc657e0d4e33",
        "name": "C1",
        "percent": "10.0000",
        "price": "5.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "8d545138-3bdf-444f-83fa-09a93453c10f",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-0000000003b9",
      "name": "Company 1670",
      "updated_datetime": "2026-08-14T11:21:03.270311Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008fd",
      "role": {
        "id": "00000000-0000-0000-0000-000000000938",
        "name": "Admin 2359"
      }
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:01.000000Z",
    "external_notes": null,
    "id": "00000000-0000-0000-0000-00000000002e",
    "inserted_datetime": "2026-08-14T11:21:03.441307Z",
    "internal_notes": null,
    "invoice_datetime": "2020-01-01T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000023c",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-00000000001f",
        "order_item_id": "1faad7cd-c2ab-4df1-b3fe-9846f7d63ef6",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "f844c3b4-214b-4853-9a22-48c48541f17d",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:03.402574Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000023d",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000020",
        "order_item_id": "510ac1d7-4f6f-4f39-8fad-10841d7b2edd",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "1b43927e-4aab-46b7-b091-524bfcfd8c68",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:03.411313Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "59ad65d9-b1f6-4c89-ba6d-9a8c8a63f190",
      "order_number": "SO-83",
      "status": "PROCESSING",
      "total": "0.00"
    },
    "owner": null,
    "paid_amount": "0.0",
    "payments": [],
    "remaining_amount": "53.30",
    "status": "NOT_PAID",
    "total": "53.30",
    "updated_datetime": "2026-08-14T11:21:03.448231Z"
  }
}

POST /invoices updates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjQyZjNkZjItNjA1Mi00YTYzLTk5MTYtYWJjYTQ5NmEzYjM0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjMwMSIsInR5cCI6ImFjY2VzcyJ9.R0p5REEPOEzWyGzCp5WeFCKBcqQpGtpsocMzIFTvPek
{
  "billing_location_id": "00000000-0000-0000-0000-000000000206",
  "charges": [
    {
      "id": "f0c4f1f9-d5d0-4f53-889f-fc657e0d4e33",
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C3",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "due_datetime": "2020-01-28T00:00:01.000000Z",
  "id": "00000000-0000-0000-0000-00000000002e",
  "invoice_datetime": "2020-01-02T00:00:00.000000Z",
  "items": [
    {
      "id": "00000000-0000-0000-0000-00000000001f",
      "order_item_id": "1faad7cd-c2ab-4df1-b3fe-9846f7d63ef6",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "510ac1d7-4f6f-4f39-8fad-10841d7b2edd",
      "quantity": "8.000000000"
    }
  ],
  "order_id": "59ad65d9-b1f6-4c89-ba6d-9a8c8a63f190"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 46d94df1125b6d21926552b73be0a6dc-ed4ac19b54d01d73-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000068a",
      "id": "00000000-0000-0000-0000-000000000206",
      "license_id": null,
      "license_number": null,
      "name": "Place 516"
    },
    "charges": [
      {
        "id": "f0c4f1f9-d5d0-4f53-889f-fc657e0d4e33",
        "name": "C1",
        "percent": "10.0000",
        "price": "4.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "30803a19-8b9f-488e-8c0e-6ff8173b4109",
        "name": "C3",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-0000000003b9",
      "name": "Company 1670",
      "updated_datetime": "2026-08-14T11:21:03.270311Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008fd",
      "role": {
        "id": "00000000-0000-0000-0000-000000000938",
        "name": "Admin 2359"
      }
    },
    "custom_data": [],
    "due_datetime": "2020-01-28T00:00:01.000000Z",
    "external_notes": null,
    "id": "00000000-0000-0000-0000-00000000002e",
    "inserted_datetime": "2026-08-14T11:21:03.441307Z",
    "internal_notes": null,
    "invoice_datetime": "2020-01-02T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000023c",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-00000000001f",
        "order_item_id": "1faad7cd-c2ab-4df1-b3fe-9846f7d63ef6",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "f844c3b4-214b-4853-9a22-48c48541f17d",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:03.402574Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000023d",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-000000000021",
        "order_item_id": "510ac1d7-4f6f-4f39-8fad-10841d7b2edd",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "1b43927e-4aab-46b7-b091-524bfcfd8c68",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:03.411313Z"
        },
        "quantity": "8.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "59ad65d9-b1f6-4c89-ba6d-9a8c8a63f190",
      "order_number": "SO-83",
      "status": "PROCESSING",
      "total": "0.00"
    },
    "owner": null,
    "paid_amount": "0.0",
    "payments": [],
    "remaining_amount": "42.30",
    "status": "NOT_PAID",
    "total": "42.30",
    "updated_datetime": "2026-08-14T11:21:03.502747Z"
  }
}

POST /invoices reports various errors correctly on update

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzAyYjRkOGItMzVlNC00NjBmLWI3NDMtZDdmZTEyYzcwNjBjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjIxNCIsInR5cCI6ImFjY2VzcyJ9.vD8RhxBuwv9L2Y-pFUseV8JqqnaxMYOTVFHJLf4mdXw
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001e3",
  "charges": [
    {
      "name": "C1",
      "percent": "-1000.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    }
  ],
  "due_datetime": "2020-01-30T00:00:01.000000Z",
  "id": "00000000-0000-0000-0000-00000000002c",
  "invoice_datetime": "2020-01-01T00:00:00.000000Z",
  "items": [
    {
      "order_item_id": "00000000-0000-0000-0000-000000000000",
      "quantity": "15.000"
    },
    {
      "order_item_id": "e8f555e0-7e64-45c6-a7b8-8369edbd0fbd",
      "quantity": "19.000"
    }
  ],
  "order_id": "b85c34f5-33bf-4845-828f-8e7c7b63baec"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 451b06c77c48ff292ec0aeeb7607de76-83ad5352b8d836e3-0
{
  "errors": [
    {
      "context": {
        "id": "3e44f1f5-ab12-4d2c-8d35-c8b0e4169131"
      },
      "message": "Must be less than or equal to 100",
      "pointer": [
        "charges",
        0,
        "percent"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Order item not found",
      "pointer": [
        "items",
        2,
        "order_item_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Only 10 left uninvoiced",
      "pointer": [
        "items",
        3,
        "quantity"
      ],
      "section": "body"
    }
  ]
}

Upsert a single invoice. To update an existing invoice, pass in an existing invoice ID in the id field. When updating an invoice, you must pass in all fields (no sparse update currently supported). Any existing invoice item or charge you do not pass in to items and charges respectively will be deleted. Required permission: invoices_permissions_create to create a new invoice, invoices_permissions_edit (and access to the invoice under team restrictions) to update an existing invoice.

Request

POST /public/v1/invoices

Parameters

Parameter Description In Type Required Default Example
due_datetime The datetime at which the invoice is due query string false
id Unique ID for this invoice. If it exists, an update will be performed; otherwise, it will be used as the ID of a new invoice record query string false
invoice_datetime The datetime on which the invoice was placed query string false
charges The additional lines of Charge, Discount, or Tax added to this invoice body InvoiceChargesRequest false
items The invoice items present on this order body InvoiceItemsRequest false
billing_location_id The billing location's ID query string false
owner_id The ID of the Distru user that owns this invoice query string false
external_notes Notes on this invoice that are visible to the customer query string false
internal_notes Notes on this invoice that are only visible internally query string false
custom_data A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=invoice to retrieve available custom fields and their IDs. body object false {"123":"Custom Value 1","456":"Custom Value 2"}

Responses

Status Description Schema
200 A single invoice Invoice

Location

Get a location

GET /public/v1/locations/:id returns the expected location

GET /public/v1/locations/00000000-0000-0000-0000-00000000007f
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGNmZWQ2YTAtZGRiNi00ZTg1LTg5YWEtODU5YjI3YWZhOTBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzMwIiwidHlwIjoiYWNjZXNzIn0.7f9d7y110Py4x0KZujDkE4jE1thSfIJ11pXJsD3-os8

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a14e2b00578caa5e6ba214cf093e96ec-edbcbd63309710df-0
{
  "data": {
    "address": "123 Fake Street, Beverly Hills, CA 90210, US",
    "company_id": "00000000-0000-0000-0000-00000000010f",
    "deleted_at": null,
    "id": "00000000-0000-0000-0000-00000000007f",
    "license": {
      "id": "00000000-0000-0000-0000-000000000010",
      "license_number": "CDPH-00000015"
    },
    "license_id": "00000000-0000-0000-0000-000000000010",
    "name": "Place 126"
  }
}

Get a single location given the ID.

Required permission: companies_permissions_view.

Request

GET /public/v1/locations/{id}

Parameters

Parameter Description In Type Required Default Example
id Location ID path string true

Responses

Status Description Schema
200 A single location Location
404 Not Found

Get locations

GET /public/v1/locations returns locations related to the company

GET /public/v1/locations
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWExMzdmODUtMTcxYy00ZjdlLThlNTMtOTBkNmI2ODY0OTQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU2IiwidHlwIjoiYWNjZXNzIn0.4ye3HeUCETtzWgvESRYfxZFf6t5AXEVAyHBjwl05nrI

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8f7d19f54d21424cddeef9cbea7f9008-2e8ad6a8759105b5-0
{
  "data": [
    {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000001b1",
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-0000000000b7",
      "license": null,
      "license_id": null,
      "name": "Place 182"
    },
    {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000001b1",
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-0000000000b8",
      "license": {
        "id": "00000000-0000-0000-0000-00000000001b",
        "license_number": "CDPH-00000028"
      },
      "license_id": "00000000-0000-0000-0000-00000000001b",
      "name": "Place 183"
    }
  ],
  "next_page": null
}

Get locations sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 1000 locations per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: companies_permissions_view.

Request

GET /public/v1/locations

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter locations by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted locations. no returns non-deleted, only returns deleted, include returns both. query string false no
page Pagination information query number false ?page[number]=1
updated_datetime Filter locations by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of locations Locations

Get a menu

GET /public/v1/menus/:id returns the expected menu

GET /public/v1/menus/00000000-0000-0000-0000-000000000009
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODkyMTI5N2ItMWM5Yy00Njg4LWFlMDItMzgzYmVkMmRjNWQwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDYzIiwidHlwIjoiYWNjZXNzIn0.VS_pqcV3zNtMgI3VO3Oup0T9abNS9mPWGLgmvkwxjvI

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2294a53d440774bde1bb439025d94f8e-946bd42e2f0396ea-0
{
  "data": {
    "active": true,
    "external_name": "External Test Menu",
    "id": "00000000-0000-0000-0000-000000000009",
    "inserted_datetime": "2026-08-14T11:20:56.937848Z",
    "internal_name": "Test Menu",
    "product_count": 1,
    "updated_datetime": "2026-08-14T11:20:56.937848Z",
    "visibility": "PUBLIC"
  }
}

Get a single menu given the ID.

Required permission: products_permissions_view.

Request

GET /public/v1/menus/{id}

Parameters

Parameter Description In Type Required Default Example
id Menu ID path string true

Responses

Status Description Schema
200 A single menu Menu
404 Not Found

Get menus

GET /public/v1/menus returns menus for the company with default pagination

GET /public/v1/menus
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzEyMzM3YzItZGM2My00YjBmLTkyZTUtOGFkOTEyNzIzZWMxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA2NCIsInR5cCI6ImFjY2VzcyJ9.nYOrFWGqzbgz3xscsNoIAOQnLlN6v9ByEP8bVuoG-h0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9697bce9dfbd8191b3c73c085c61e124-51696a2508cef763-0
{
  "data": [
    {
      "active": true,
      "external_name": "Ext A",
      "id": "00000000-0000-0000-0000-000000000025",
      "inserted_datetime": "2026-08-14T11:20:59.064303Z",
      "internal_name": "Alpha",
      "product_count": 0,
      "updated_datetime": "2026-08-14T11:20:59.064303Z",
      "visibility": "PUBLIC"
    },
    {
      "active": true,
      "external_name": "Ext B",
      "id": "00000000-0000-0000-0000-000000000026",
      "inserted_datetime": "2026-08-14T11:20:59.079274Z",
      "internal_name": "Beta",
      "product_count": 0,
      "updated_datetime": "2026-08-14T11:20:59.079274Z",
      "visibility": "PUBLIC"
    }
  ],
  "next_page": null
}

List menus for the authenticated company with visibility, active state, and active product counts.

Note: The page size for this endpoint is 500 menus per page.

Required permission: products_permissions_view.

Request

GET /public/v1/menus

Parameters

Parameter Description In Type Required Default Example
active Filter by menu active flag: true, false, or true,false (both). query string false
visibility Comma-separated visibility: PUBLIC, PRIVATE, PASSCODE_PROTECTED. query string false
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 Menus index Menus

OfficialProductCategory

Get official product categories

GET /public/v1/official-product-categories returns the global official product categories with raw string ids

GET /public/v1/official-product-categories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTA0NzdhNmEtMzk2Yi00YTBkLWJhNmMtYmI0OGUwODk3YjBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDkiLCJ0eXAiOiJhY2Nlc3MifQ.wli1jy21bGvlmCEOAce6c5ol9ipbYMrtsBUN_Xn7Wkw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d68d951cf31cfdb9159afa276582b72e-edbbedb51400565d-0
{
  "data": [
    {
      "id": "CAPSULES",
      "name": "Capsules"
    },
    {
      "id": "CLONES",
      "name": "Clones & Seeds"
    },
    {
      "id": "CONCENTRATES",
      "name": "Concentrates"
    },
    {
      "id": "EDIBLES",
      "name": "Edibles"
    },
    {
      "id": "FLOWER",
      "name": "Flower"
    },
    {
      "id": "MERCH",
      "name": "Merch"
    },
    {
      "id": "OTHER",
      "name": "Other"
    },
    {
      "id": "PREROLLS",
      "name": "Pre-Rolls"
    },
    {
      "id": "TINCTURES",
      "name": "Tinctures"
    },
    {
      "id": "TOPICALS",
      "name": "Topicals"
    },
    {
      "id": "VAPES",
      "name": "Vapes"
    }
  ]
}

List the official product categories in Distru. These are global, system-defined reference records.

Request

GET /public/v1/official-product-categories

Responses

Status Description Schema
200 A list of official product categories OfficialProductCategories

Order

Get an order

GET /orders/:id returns the expected order

GET /public/v1/orders/6ed2641e-db32-493f-98ff-695429ceeba4
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTU1ODI3ZjctNjk2NC00NmQzLWIzM2ItNTkyNzUzNjMzMmU5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjgyOSIsInR5cCI6ImFjY2VzcyJ9._2Ijm0ZOgPmk6H-_P6d44EvSX8ChHWygKzND3AT1l8U

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d62cd0ea4fcf51851830c8e3980cfdbb-89c1588b3d3ac68c-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000051c",
      "name": "Company 2101",
      "updated_datetime": "2026-08-14T11:21:06.409871Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2803@example.com",
      "full_name": "FirstName5680 LastName5681",
      "id": "00000000-0000-0000-0000-000000000b0e",
      "role": {
        "id": "00000000-0000-0000-0000-000000000b44",
        "name": "Admin 2883"
      }
    },
    "custom_data": [
      {
        "id": 71,
        "name": "Custom Field 46",
        "value": "Custom Field Value 1"
      }
    ],
    "delivery_datetime": null,
    "due_datetime": "2026-08-14T11:21:06.427704Z",
    "external_notes": null,
    "id": "6ed2641e-db32-493f-98ff-695429ceeba4",
    "inserted_datetime": "2026-08-14T11:21:06.428042Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000838",
      "id": "00000000-0000-0000-0000-00000000029f",
      "license_id": null,
      "license_number": null,
      "name": "Place 669"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000345",
          "name": "B2576"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "a551ccca-1c0f-44b2-994c-fe2aa4e3e347",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "c604a720-b42f-4e3b-b5ea-ac48d4e43de3",
          "name": "Product 2574",
          "sku": "sku 2575",
          "updated_datetime": "2026-08-14T11:21:06.436521Z"
        },
        "quantity": "15.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000346",
          "name": "B2579"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "8311734d-033b-477f-9b1d-9032489dff15",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "32d0242c-2428-4acb-a0e4-e1922e633f63",
          "name": "Product 2577",
          "sku": "sku 2578",
          "updated_datetime": "2026-08-14T11:21:06.447474Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000347",
          "name": "B2582"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "3efb5e45-3393-4b8d-bea1-31c2cc9bf949",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "4bcd400c-6fa0-4b0a-8b44-4ce9532bb789",
          "name": "Product 2580",
          "sku": "sku 2581",
          "updated_datetime": "2026-08-14T11:21:06.457992Z"
        },
        "quantity": "5.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000348",
          "name": "B2585"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "a453bbd1-1c49-4249-aa9e-c9a47562e6c9",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "1358fea8-d96a-463e-8b98-bac889fcef72",
          "name": "Product 2583",
          "sku": "sku 2584",
          "updated_datetime": "2026-08-14T11:21:06.471259Z"
        },
        "quantity": "2.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2026-08-14T11:21:06.427704Z",
    "order_number": "SO-130",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2803@example.com",
      "full_name": "FirstName5680 LastName5681",
      "id": "00000000-0000-0000-0000-000000000b0e",
      "role": {
        "id": "00000000-0000-0000-0000-000000000b44",
        "name": "Admin 2883"
      }
    },
    "payment_term_name": null,
    "shipping_location": null,
    "status": "COMPLETED",
    "total": "320.00",
    "updated_datetime": "2026-08-14T11:21:06.487774Z"
  }
}

GET /orders/:id returns cost data for order items

GET /public/v1/orders/85476077-4a55-46ae-a43c-2a1489e405ab
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNzAsImlhdCI6MTc4NjcwNjQ3MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzA3ODMyZDMtN2UzYi00NmM5LWJiNDYtOTIxZWUzY2FjMTVhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzA3MiIsInR5cCI6ImFjY2VzcyJ9.bJgGmheNLyHtLJxvWjJdk41D5gGq1pQO2eJD3NRnhKU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7bfe33351e7da45a7772f7eabb7c34a9-fd0eeb8bc8492fcc-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-0000000005e8",
      "name": "Company 2344",
      "updated_datetime": "2026-08-14T11:21:10.826192Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-3043@example.com",
      "full_name": "FirstName6160 LastName6161",
      "id": "00000000-0000-0000-0000-000000000c05",
      "role": {
        "id": "00000000-0000-0000-0000-000000000c42",
        "name": "Admin 3137"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2026-08-14T11:21:10.827405Z",
    "external_notes": null,
    "id": "85476077-4a55-46ae-a43c-2a1489e405ab",
    "inserted_datetime": "2026-08-14T11:21:10.844859Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003d8",
          "name": "B3019"
        },
        "compliance_quantity": null,
        "cost_per_unit": "10.026",
        "cost_per_unit_default": "5",
        "id": "7b86ad37-931e-45a7-bb64-3e10909db843",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000092a",
          "id": "00000000-0000-0000-0000-0000000002ed",
          "license_id": null,
          "name": "Place 747"
        },
        "package": null,
        "price": "31828.000000000",
        "price_base": "31828",
        "product": {
          "id": "62ce9fc8-b634-4898-a279-dcc7eed4a55b",
          "name": "Product 3017",
          "sku": "sku 3018",
          "updated_datetime": "2026-08-14T11:21:10.763482Z"
        },
        "quantity": "2.000000000",
        "returned_quantity": "0",
        "total_cost_actual": "20.052",
        "total_cost_default": "10"
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2026-08-14T11:21:10.827407Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "63656.00",
    "updated_datetime": "2026-08-14T11:21:10.844859Z"
  }
}

Get a single order given the ID. Note: This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: orders_permissions_view. The authenticated user must also have access to the requested order under their team restrictions.

Request

GET /public/v1/orders/{id}

Parameters

Parameter Description In Type Required Default Example
id Order ID path string true

Responses

Status Description Schema
200 A single order Order

Get orders

GET /public/v1/orders returns orders related to the company

GET /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNzAsImlhdCI6MTc4NjcwNjQ3MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDBjZmY5ZTQtNWJlMy00MjkzLTg5YWQtYmIxZDFiMjcxMmJjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzA4MSIsInR5cCI6ImFjY2VzcyJ9.zhTuzPZ3n4NoAVJcT8EGshMwzXAtW3AFoe3xvsVTjUw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ef8af72543c9b762c9d5cb9dbd1462a4-75cad61a6f8bb1b5-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000092d",
        "id": "00000000-0000-0000-0000-0000000002ee",
        "license_id": null,
        "license_number": null,
        "name": "Place 748"
      },
      "biotrack_id": null,
      "blaze_payment_type": "CASH",
      "charges": [
        {
          "id": "0dc81647-babc-442e-a3ab-5ddc0abc8e19",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "tax": {
            "id": "00000000-0000-0000-0000-00000000000e",
            "name": "T1"
          },
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-0000000005ea",
        "name": "Company 2347",
        "updated_datetime": "2030-11-01T00:00:00.000000Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "user1@a.com",
        "full_name": "John Foo",
        "id": "00000000-0000-0000-0000-000000000c07",
        "role": {
          "id": "00000000-0000-0000-0000-000000000c44",
          "name": "Admin 3139"
        }
      },
      "custom_data": [
        {
          "id": 73,
          "name": "Custom Field 48",
          "value": "Custom Field Value 1"
        }
      ],
      "delivery_datetime": "2020-01-01T00:00:00.000000Z",
      "due_datetime": "2020-01-01T00:00:01.000000Z",
      "external_notes": null,
      "id": "62d725ca-d524-480a-94cf-2ad3bf573f76",
      "inserted_datetime": "2020-01-01T00:00:03.000000Z",
      "internal_notes": "Internal notes for this order",
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000092d",
        "id": "00000000-0000-0000-0000-0000000002ee",
        "license_id": null,
        "license_number": null,
        "name": "Place 748"
      },
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-0000000003d9",
            "name": "B1"
          },
          "compliance_quantity": "10.0000",
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "1492ead7-e92b-4bba-bc9f-2e49e9c8d1d3",
          "is_sample": true,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-00000000092d",
            "id": "00000000-0000-0000-0000-0000000002ee",
            "license_id": null,
            "name": "Place 748"
          },
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000183",
            "id": "00000000-0000-0000-0000-00000000005f",
            "metrc_label": "ABCDEF012345670000000183",
            "status": "active"
          },
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "3b52ac25-733f-432c-b1a0-759e138ab32c",
            "name": "P1",
            "sku": "SKU1",
            "updated_datetime": "2023-11-02T00:00:00.000000Z"
          },
          "quantity": "1.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "leaflink_order_number": "3dde2959-ed02-47fb-b338-5b48f5646d49",
      "metrc_transfer_id": 1,
      "order_datetime": "2020-01-01T00:00:02.000000Z",
      "order_number": "SO-123",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "user2@a.com",
        "full_name": "John Bar",
        "id": "00000000-0000-0000-0000-000000000c08",
        "role": {
          "id": "00000000-0000-0000-0000-000000000c45",
          "name": "Admin 3140"
        }
      },
      "payment_term_name": null,
      "shipping_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000092d",
        "id": "00000000-0000-0000-0000-0000000002ee",
        "license_id": null,
        "license_number": null,
        "name": "Place 748"
      },
      "status": "COMPLETED",
      "total": "11.00",
      "updated_datetime": "2020-01-01T00:00:04.000000Z"
    }
  ],
  "next_page": null
}

GET /public/v1/orders returns cost/returned_quantity data for order items

GET /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjcsImlhdCI6MTc4NjcwNjQ2NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWY4YzczYjktMGEzYy00OTZlLWExNWMtOGJjNWRhODBlYWZmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg4MyIsInR5cCI6ImFjY2VzcyJ9.GPIq1srnPToWSQzOutq8pi6aod4eVGj5-IBlDQb9CuU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b80f0dffc9877eb57e6d9ab5a9756cca-75f774a6fbfa03dc-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "blaze_payment_type": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000053c",
        "name": "Company 2149",
        "updated_datetime": "2026-08-14T11:21:07.123601Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2860@example.com",
        "full_name": "FirstName5794 LastName5795",
        "id": "00000000-0000-0000-0000-000000000b4a",
        "role": {
          "id": "00000000-0000-0000-0000-000000000b85",
          "name": "Admin 2948"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-08-14T11:21:07.124747Z",
      "external_notes": null,
      "id": "5185ce7b-b6d3-449c-92df-646961322759",
      "inserted_datetime": "2026-08-14T11:21:07.136370Z",
      "internal_notes": null,
      "inventory_source": null,
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000358",
            "name": "B2635"
          },
          "compliance_quantity": null,
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "1e95a3b4-d3ef-4034-9ccc-be3343c36405",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000866",
            "id": "00000000-0000-0000-0000-0000000002b3",
            "license_id": null,
            "name": "Place 689"
          },
          "package": null,
          "price": "132753.000000000",
          "price_base": "132753",
          "product": {
            "id": "c5e19d6f-c4ac-494f-9ebf-8e656037dc29",
            "name": "Product 2633",
            "sku": "sku 2634",
            "updated_datetime": "2026-08-14T11:21:07.067382Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "2",
          "total_cost_actual": "20.052",
          "total_cost_default": "10"
        }
      ],
      "leaflink_order_number": null,
      "metrc_transfer_id": null,
      "order_datetime": "2026-08-14T11:21:07.124747Z",
      "order_number": "SO-0000001",
      "owner": null,
      "payment_term_name": null,
      "shipping_location": null,
      "status": "PROCESSING",
      "total": "265506.00",
      "updated_datetime": "2026-08-14T11:21:07.136370Z"
    }
  ],
  "next_page": null
}

GET /public/v1/orders allows filtering by buyer company_id

GET /public/v1/orders?company_id=00000000-0000-0000-0000-0000000001c4
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjI0MjU1NWMtMjFhZi00ODQ2LWFmYzctOWE3ZmE5NmVlNGZkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE5OSIsInR5cCI6ImFjY2VzcyJ9.qs0SCeSsQAj1vaF4o06GIyzmnM9M9arNi-GUbFMcR3c

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 52bd6de7be855e3cf425b71445c1803d-2b069457eaae881f-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "blaze_payment_type": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000001c4",
        "name": "Company 952",
        "updated_datetime": "2026-08-14T11:20:59.367761Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1215@example.com",
        "full_name": "FirstName2443 LastName2445",
        "id": "00000000-0000-0000-0000-0000000004c0",
        "role": {
          "id": "00000000-0000-0000-0000-0000000004f0",
          "name": "Admin 1263"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-08-14T11:20:59.428650Z",
      "external_notes": null,
      "id": "d2aec243-4492-41ed-854a-58c4c89ba189",
      "inserted_datetime": "2026-08-14T11:20:59.429339Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000003b0",
        "id": "00000000-0000-0000-0000-00000000013b",
        "license_id": null,
        "license_number": null,
        "name": "Place 314"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000000e4",
            "name": "B774"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "771ecde8-4c44-4ba9-ba17-61de5d43b41a",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "251062f8-d9e1-4385-8272-a82770a22c20",
            "name": "Product 771",
            "sku": "sku 772",
            "updated_datetime": "2026-08-14T11:20:59.450258Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000000e8",
            "name": "B786"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "c1de4665-33a5-4460-8a4d-19f24aba4a13",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "6654ceb4-f2e8-47d0-8ab7-6bdee07dcc14",
            "name": "Product 781",
            "sku": "sku 782",
            "updated_datetime": "2026-08-14T11:20:59.475587Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000000ef",
            "name": "B803"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "a45274f4-645d-4f8c-b715-004bbe3689c4",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "fe7e92a1-a9f1-4940-86fa-4153be294281",
            "name": "Product 801",
            "sku": "sku 802",
            "updated_datetime": "2026-08-14T11:20:59.501764Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000000f4",
            "name": "B816"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "d9287b8e-b9bb-4bd8-81bd-45f6d30259f6",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "e44a9d07-be7e-4a37-8f5e-6a52dd2f2dcb",
            "name": "Product 813",
            "sku": "sku 814",
            "updated_datetime": "2026-08-14T11:20:59.525398Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "leaflink_order_number": null,
      "metrc_transfer_id": null,
      "order_datetime": "2020-01-01T12:00:00.000000Z",
      "order_number": "SO-61",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1215@example.com",
        "full_name": "FirstName2443 LastName2445",
        "id": "00000000-0000-0000-0000-0000000004c0",
        "role": {
          "id": "00000000-0000-0000-0000-0000000004f0",
          "name": "Admin 1263"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-08-14T11:20:59.571642Z"
    }
  ],
  "next_page": null
}

GET /public/v1/orders allows filtering by several statuses

GET /public/v1/orders?status[]=COMPLETED&status[]=CANCELED
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjcsImlhdCI6MTc4NjcwNjQ2NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTNkNmYzOWItOTE0My00ZTQyLWE4MDMtYjRlMjViOGI4ZjA5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk1MiIsInR5cCI6ImFjY2VzcyJ9.5HrJmmnRuFBS0Q_suvyc-Kecy5nAcUeVF_nvTRYqL-I

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e55fa1953a5c29ea7cd90d7643d18c57-ec4eed5e4960bcd2-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "blaze_payment_type": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000593",
        "name": "Company 2242",
        "updated_datetime": "2026-08-14T11:21:08.105773Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2935@example.com",
        "full_name": "FirstName5944 LastName5945",
        "id": "00000000-0000-0000-0000-000000000b95",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bcf",
          "name": "Admin 3022"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-08-14T11:21:08.119557Z",
      "external_notes": null,
      "id": "3e7b94d4-5161-48ee-be87-d043d920f70d",
      "inserted_datetime": "2026-08-14T11:21:08.119919Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000008b3",
        "id": "00000000-0000-0000-0000-0000000002ca",
        "license_id": null,
        "license_number": null,
        "name": "Place 712"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000003a2",
            "name": "B2855"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "175b6ad6-e9c1-40a8-b886-7a8139da2e6a",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f196b8cc-4277-497c-b87c-6cbeb3a4eba9",
            "name": "Product 2853",
            "sku": "sku 2854",
            "updated_datetime": "2026-08-14T11:21:08.127460Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000003a3",
            "name": "B2858"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "b5298906-c2a9-4f9b-94b4-1e669f62ce84",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "21e21d1d-8c51-461e-8f48-79fd9fc19331",
            "name": "Product 2856",
            "sku": "sku 2857",
            "updated_datetime": "2026-08-14T11:21:08.135130Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000003a4",
            "name": "B2861"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "6e3bf156-f4c5-497a-a3d2-523cd3a95039",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f09d5334-d6be-4f2c-866a-f960355db49b",
            "name": "Product 2859",
            "sku": "sku 2860",
            "updated_datetime": "2026-08-14T11:21:08.143226Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000003a5",
            "name": "B2864"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "77b5b8b0-da5b-4257-aebb-321b8af30161",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "1db506ab-762c-4ab3-abda-cf9ddc9ac438",
            "name": "Product 2862",
            "sku": "sku 2863",
            "updated_datetime": "2026-08-14T11:21:08.151023Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "leaflink_order_number": null,
      "metrc_transfer_id": null,
      "order_datetime": "2020-01-01T12:30:00.000000Z",
      "order_number": "SO-153",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2935@example.com",
        "full_name": "FirstName5944 LastName5945",
        "id": "00000000-0000-0000-0000-000000000b95",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bcf",
          "name": "Admin 3022"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "CANCELED",
      "total": "320.00",
      "updated_datetime": "2026-08-14T11:21:08.165647Z"
    },
    {
      "billing_location": null,
      "biotrack_id": null,
      "blaze_payment_type": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000058d",
        "name": "Company 2236",
        "updated_datetime": "2026-08-14T11:21:08.035658Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2931@example.com",
        "full_name": "FirstName5936 LastName5937",
        "id": "00000000-0000-0000-0000-000000000b91",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bcb",
          "name": "Admin 3018"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-08-14T11:21:08.048461Z",
      "external_notes": null,
      "id": "0eca1b1c-6f3f-4312-a247-76d08d170a04",
      "inserted_datetime": "2026-08-14T11:21:08.048738Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000008b3",
        "id": "00000000-0000-0000-0000-0000000002c9",
        "license_id": null,
        "license_number": null,
        "name": "Place 711"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000039d",
            "name": "B2840"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "17fa82f6-61b7-4d14-b160-6355287c1ae0",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "148b93d9-0785-4828-b390-4318a3c1e549",
            "name": "Product 2838",
            "sku": "sku 2839",
            "updated_datetime": "2026-08-14T11:21:08.055366Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000039e",
            "name": "B2843"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "71fba596-fcaf-42b0-a8ec-ff0225725c1a",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "bdf2624a-1877-4dbb-b116-7ab844ecc67b",
            "name": "Product 2841",
            "sku": "sku 2842",
            "updated_datetime": "2026-08-14T11:21:08.061747Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000039f",
            "name": "B2846"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "11ac4612-1976-4ac7-9ce3-7eee1132121c",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "154d20f1-a1ed-48b2-b97d-e1c01b215e6a",
            "name": "Product 2844",
            "sku": "sku 2845",
            "updated_datetime": "2026-08-14T11:21:08.079735Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000003a0",
            "name": "B2849"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "4947eb3a-21df-4a03-bd0a-f8323e576874",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f0d7e3a0-5fe5-45e8-a764-a4a7dddbcf0c",
            "name": "Product 2847",
            "sku": "sku 2848",
            "updated_datetime": "2026-08-14T11:21:08.086700Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "leaflink_order_number": null,
      "metrc_transfer_id": null,
      "order_datetime": "2020-01-01T12:20:00.000000Z",
      "order_number": "SO-152",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2931@example.com",
        "full_name": "FirstName5936 LastName5937",
        "id": "00000000-0000-0000-0000-000000000b91",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bcb",
          "name": "Admin 3018"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-08-14T11:21:08.098785Z"
    },
    {
      "billing_location": null,
      "biotrack_id": null,
      "blaze_payment_type": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000581",
        "name": "Company 2224",
        "updated_datetime": "2026-08-14T11:21:07.903721Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2923@example.com",
        "full_name": "FirstName5920 LastName5921",
        "id": "00000000-0000-0000-0000-000000000b89",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bc3",
          "name": "Admin 3010"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-08-14T11:21:07.920097Z",
      "external_notes": null,
      "id": "f65a6638-467e-4b12-9e6a-c29a19f11a6a",
      "inserted_datetime": "2026-08-14T11:21:07.920391Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000008b3",
        "id": "00000000-0000-0000-0000-0000000002c7",
        "license_id": null,
        "license_number": null,
        "name": "Place 709"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000393",
            "name": "B2810"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "6fd0a735-854c-4005-b830-16294f56a0b9",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f34d01c5-c89c-46e8-a5d1-d53464b5aa0c",
            "name": "Product 2808",
            "sku": "sku 2809",
            "updated_datetime": "2026-08-14T11:21:07.927955Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000394",
            "name": "B2813"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "ce54c663-0108-4f10-9d6d-4dc599c892ae",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f13f96b8-e837-4d28-ac05-ac26f59f3bd2",
            "name": "Product 2811",
            "sku": "sku 2812",
            "updated_datetime": "2026-08-14T11:21:07.937478Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000395",
            "name": "B2816"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "acc89867-6f84-4eab-a973-e3496c8b3823",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "63af20a8-0289-4057-936a-d28a4516a9a5",
            "name": "Product 2814",
            "sku": "sku 2815",
            "updated_datetime": "2026-08-14T11:21:07.945679Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000396",
            "name": "B2819"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "aa6ea18d-6b70-41f4-9c4e-b3b6091814cd",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "9b18ed14-c9d2-4220-80d1-944d0fd058c8",
            "name": "Product 2817",
            "sku": "sku 2818",
            "updated_datetime": "2026-08-14T11:21:07.953223Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "leaflink_order_number": null,
      "metrc_transfer_id": null,
      "order_datetime": "2020-01-01T12:00:00.000000Z",
      "order_number": "SO-150",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2923@example.com",
        "full_name": "FirstName5920 LastName5921",
        "id": "00000000-0000-0000-0000-000000000b89",
        "role": {
          "id": "00000000-0000-0000-0000-000000000bc3",
          "name": "Admin 3010"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-08-14T11:21:07.966389Z"
    }
  ],
  "next_page": null
}

Get orders sorted by Order Date descendingly date and filtered by various attributes

Note: The page size for this endpoint is 500 orders per page.

Required permission: orders_permissions_view. Results are filtered to only include orders the authenticated user can access under their team restrictions.

Request

GET /public/v1/orders

Parameters

Parameter Description In Type Required Default Example
delivery_datetime Filter orders by the delivery datetime query string false 2022-07-10T00:00:00Z,
due_datetime Filter orders by the due datetime query string false ,2022-07-10T00:00:00Z
inserted_datetime Filter orders by their creation datetime query string false 2022-07-10T00:00:00Z,
order_datetime Filter orders by the order datetime query string false 2022-07-10T00:00:00Z,2022-07-11T00:00:00Z
page Pagination information query number false ?page[number]=1
status Filter orders by their status. Accepted values are "PENDING", "PROCESSING", "READY_TO_SHIP", "DELIVERING", "DELIVERED", "COMPLETED" and "CANCELED". query array false ["PENDING","PROCESSING"]
updated_datetime Filter orders by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z
company_id Filter orders by buyer company (company relationship ID — same UUID as each order's company.id and GET /public/v1/companies).
query string false 550e8400-e29b-41d4-a716-446655440000

Responses

Status Description Schema
200 A list of orders Orders
404 Not Found

Upsert an order

POST /public/v1/orders creates an order (with product-tracked item)

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTYxNWM0MTQtMzAxOS00MGY4LTg1ZmYtYWM5NGE4MWVkMTQzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjIyMyIsInR5cCI6ImFjY2VzcyJ9.EDyFyrgIajovLfBHLrbuhcXCWPxkmUSl4RX9JdpyhHI
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001e6",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-00000000038c",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "external_notes": "Thank you for ordering!",
  "internal_notes": "Internal notes for this order",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001e4",
      "price_base": "10.000000000",
      "product_id": "0abcb54c-faa6-4eb8-a979-0ae5066ba89e",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "owner_id": "00000000-0000-0000-0000-0000000008af",
  "shipping_location_id": "00000000-0000-0000-0000-0000000001e6",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 24ae960713df16f4753a2c374d1d9502-16b3dfa01d7061ad-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000650",
      "id": "00000000-0000-0000-0000-0000000001e6",
      "license_id": null,
      "license_number": null,
      "name": "Place 484"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [
      {
        "id": "d6b54dab-ec04-4e4e-b520-1b74fa20d6d5",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "0829e1f9-b85b-4ad9-b6de-300f33f3e443",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-00000000038c",
      "name": "Company 1612",
      "updated_datetime": "2026-08-14T11:21:02.835403Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008af",
      "role": {
        "id": "00000000-0000-0000-0000-0000000008ee",
        "name": "Admin 2285"
      }
    },
    "custom_data": [
      {
        "id": 66,
        "name": "Custom Field 41",
        "value": null
      }
    ],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": "Thank you for ordering!",
    "id": "27ab9928-1c41-48b1-8313-b61c848a0d66",
    "inserted_datetime": "2026-08-14T11:21:03.012197Z",
    "internal_notes": "Internal notes for this order",
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000021c",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "5542b508-6769-4252-9d4e-0173eb471376",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000064b",
          "id": "00000000-0000-0000-0000-0000000001e4",
          "license_id": "00000000-0000-0000-0000-000000000062",
          "name": "Place 482"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "0abcb54c-faa6-4eb8-a979-0ae5066ba89e",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:02.973916Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008af",
      "role": {
        "id": "00000000-0000-0000-0000-0000000008ee",
        "name": "Admin 2285"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000650",
      "id": "00000000-0000-0000-0000-0000000001e6",
      "license_id": null,
      "license_number": null,
      "name": "Place 484"
    },
    "status": "PROCESSING",
    "total": "6.00",
    "updated_datetime": "2026-08-14T11:21:03.048451Z"
  }
}

POST /public/v1/orders creates an order (with product-tracked item) for a Blaze retailer, fails if payment type not specified

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjE4ZTlhYTMtNTE1Ny00OTM3LTgxZTYtMTE0NzhhZmMyODNhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg0MyIsInR5cCI6ImFjY2VzcyJ9.ANCA9ak5s_RchGo_MJxocukpNCR3hsni4lyrCigLsGE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000002a3",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000522",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000002a0",
      "price_base": "10.000000000",
      "product_id": "709ca693-deeb-43c6-bb00-1c3b81381a2b",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-0000000002a3",
  "status": "PROCESSING"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: bdda9ef1f9ca4e6028ee840606d7bffe-f87fe9bcd84c824a-0
{
  "errors": [
    {
      "context": {
        "id": "54eecb85-ed68-4b10-9278-6a507b53c243"
      },
      "message": "can't be blank",
      "pointer": [
        "blaze_payment_type"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/orders creates an order (with product-tracked item) for a Blaze retailer, fails if payment type not specified

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjE4ZTlhYTMtNTE1Ny00OTM3LTgxZTYtMTE0NzhhZmMyODNhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg0MyIsInR5cCI6ImFjY2VzcyJ9.ANCA9ak5s_RchGo_MJxocukpNCR3hsni4lyrCigLsGE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000002a3",
  "blaze_payment_type": "CASH",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000522",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000002a0",
      "price_base": "10.000000000",
      "product_id": "709ca693-deeb-43c6-bb00-1c3b81381a2b",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-0000000002a3",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: bdda9ef1f9ca4e6028ee840606d7bffe-8928f853ce032d41-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000842",
      "id": "00000000-0000-0000-0000-0000000002a3",
      "license_id": null,
      "license_number": null,
      "name": "Place 673"
    },
    "biotrack_id": null,
    "blaze_payment_type": "CASH",
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000522",
      "name": "Company 2110",
      "updated_datetime": "2026-08-14T11:21:06.546812Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2816@example.com",
      "full_name": "FirstName5706 LastName5707",
      "id": "00000000-0000-0000-0000-000000000b1b",
      "role": {
        "id": "00000000-0000-0000-0000-000000000b52",
        "name": "Admin 2897"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "7c63976c-661d-43ab-9305-ae58267fee69",
    "inserted_datetime": "2026-08-14T11:21:06.633375Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000034a",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "f107e781-d499-4277-bfaa-d9a04166c68f",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000840",
          "id": "00000000-0000-0000-0000-0000000002a0",
          "license_id": "00000000-0000-0000-0000-000000000092",
          "name": "Place 670"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "709ca693-deeb-43c6-bb00-1c3b81381a2b",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:06.585100Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000002",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000842",
      "id": "00000000-0000-0000-0000-0000000002a3",
      "license_id": null,
      "license_number": null,
      "name": "Place 673"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:06.633375Z"
  }
}

POST /public/v1/orders applies the best fit price tier items to order items

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNzMsImlhdCI6MTc4NjcwNjQ3MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTMwNTIyMzQtYjlkMC00MTc2LWE2NjYtNzc3NmU2NjY1NTFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDcyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzE3NiIsInR5cCI6ImFjY2VzcyJ9.uLQItqC5wYM-RFOwDeX6HjpDWAXNXPXdhVYGOPP2GOM
{
  "billing_location_id": "00000000-0000-0000-0000-00000000030c",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000062e",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000030b",
      "position": 1,
      "price_base": "100.000000000",
      "product_id": "d51ed719-945e-445f-aa37-0dcf228f4895",
      "quantity": "80.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-00000000030b",
      "position": 2,
      "price_base": "200.000000000",
      "product_id": "d51ed719-945e-445f-aa37-0dcf228f4895",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-00000000030b",
      "position": 3,
      "price_base": "300.000000000",
      "product_id": "7dfb4934-4575-4b23-b766-3884449271f2",
      "quantity": "20.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-00000000030c",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: cabc42435f64ba065cd5e17322c65c67-1268df82876f809c-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000985",
      "id": "00000000-0000-0000-0000-00000000030c",
      "license_id": null,
      "license_number": null,
      "name": "Place 778"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000062e",
      "name": "Company 2433",
      "updated_datetime": "2026-08-14T11:21:13.669225Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-3138@example.com",
      "full_name": "FirstName6350 LastName6351",
      "id": "00000000-0000-0000-0000-000000000c68",
      "role": {
        "id": "00000000-0000-0000-0000-000000000ca9",
        "name": "Admin 3240"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "af8c7015-a176-4b43-add4-8ea939cbb745",
    "inserted_datetime": "2026-08-14T11:21:13.763766Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000040a",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "c9c610e9-0dd0-41d3-90ca-de0cfe7a46df",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000984",
          "id": "00000000-0000-0000-0000-00000000030b",
          "license_id": "00000000-0000-0000-0000-0000000000b1",
          "name": "Place 777"
        },
        "package": null,
        "price": "80.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "d51ed719-945e-445f-aa37-0dcf228f4895",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:13.692593Z"
        },
        "quantity": "80.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000040a",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "6b486558-3ba6-4811-8ae0-2daa85a5d071",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000984",
          "id": "00000000-0000-0000-0000-00000000030b",
          "license_id": "00000000-0000-0000-0000-0000000000b1",
          "name": "Place 777"
        },
        "package": null,
        "price": "180.000000000",
        "price_base": "200.000000000",
        "product": {
          "id": "d51ed719-945e-445f-aa37-0dcf228f4895",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:13.692593Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000040b",
          "name": "B2"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "5b65c879-824a-4460-b88b-1a7486a81b51",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000984",
          "id": "00000000-0000-0000-0000-00000000030b",
          "license_id": "00000000-0000-0000-0000-0000000000b1",
          "name": "Place 777"
        },
        "package": null,
        "price": "270.000000000",
        "price_base": "300.000000000",
        "product": {
          "id": "7dfb4934-4575-4b23-b766-3884449271f2",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:13.710852Z"
        },
        "quantity": "20.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000985",
      "id": "00000000-0000-0000-0000-00000000030c",
      "license_id": null,
      "license_number": null,
      "name": "Place 778"
    },
    "status": "PROCESSING",
    "total": "13600.00",
    "updated_datetime": "2026-08-14T11:21:13.796934Z"
  }
}

POST /public/v1/orders creates an order (with batch-tracked item)

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjksImlhdCI6MTc4NjcwNjQ2OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODM4NTQ3OTktM2UwYy00ZGQzLTljMTMtMTViZDVjZjI1NjBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzA0NCIsInR5cCI6ImFjY2VzcyJ9.wvBM686Ltuksgs5EWSMaHXudTj7FqN3LfwWYIvf5Ers
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-0000000003d2",
      "location_id": "00000000-0000-0000-0000-0000000002e5",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b053c035f9527966b7181529d204a70c-0340ef23d86bba88-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000be4",
      "role": {
        "id": "00000000-0000-0000-0000-000000000c21",
        "name": "Admin 3104"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "fff7ab67-0b34-4b71-bb61-7e254de76a7f",
    "inserted_datetime": "2026-08-14T11:21:09.750233Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003d2",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "cc1ba665-b1fa-4414-9785-202e2eaf736e",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000091a",
          "id": "00000000-0000-0000-0000-0000000002e5",
          "license_id": "00000000-0000-0000-0000-0000000000a1",
          "name": "Place 739"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "a6dfd7a4-7ee0-480d-b3ea-a8ba165d2c97",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:09.730493Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:09.750233Z"
  }
}

POST /public/v1/orders creates an order (with batch-tracked item without batch set)

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNzEsImlhdCI6MTc4NjcwNjQ3MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGYxYjA4YzUtNjMwMy00ZGJhLWFkZGQtYzdmZTliNzEwY2JhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDcwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzEyNCIsInR5cCI6ImFjY2VzcyJ9.zBxhiB0GBoztKuoxYMRAm_6eOPGHLGlKCCsYZ9BMV6I
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000002fb",
      "price_base": "10.000000000",
      "product_id": "ee7e2208-a404-43d4-8e05-29ad14990c77",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 85824fa22d6e5ad9be0b3a694520c762-c7c46b518cd9d24c-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000c34",
      "role": {
        "id": "00000000-0000-0000-0000-000000000c74",
        "name": "Admin 3187"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "7acba7fc-41ff-49d4-95f7-5396ada08572",
    "inserted_datetime": "2026-08-14T11:21:11.883236Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": null,
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "ab6a4317-35db-4270-a2ec-49ea03f2c887",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000953",
          "id": "00000000-0000-0000-0000-0000000002fb",
          "license_id": "00000000-0000-0000-0000-0000000000ab",
          "name": "Place 761"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "ee7e2208-a404-43d4-8e05-29ad14990c77",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:11.870503Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:11.883236Z"
  }
}

POST /public/v1/orders creates an order (with package-tracked item)

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNzEsImlhdCI6MTc4NjcwNjQ3MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmY2Mjg5MTEtNzc3YS00YmE0LThhYWEtM2U2OWI0NGIyZjA1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDcwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzEwNSIsInR5cCI6ImFjY2VzcyJ9.Q9OHWWizC7hOzAeOIAS0ix5tzYTIzhyh-44tlRfdJAQ
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "compliance_quantity": "1.0000",
      "is_sample": true,
      "location_id": "00000000-0000-0000-0000-0000000002f4",
      "package_id": "00000000-0000-0000-0000-000000000060",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e9f3d114e6dac6498c78890715dc932f-560c481072f22e98-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-3069@example.com",
      "full_name": "FirstName6212 LastName6213",
      "id": "00000000-0000-0000-0000-000000000c21",
      "role": {
        "id": "00000000-0000-0000-0000-000000000c60",
        "name": "Admin 3167"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "f16cf24c-497d-41d9-8db8-a34143293580",
    "inserted_datetime": "2026-08-14T11:21:11.469298Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003e9",
          "name": "B1"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "1f7216e9-ac02-4d76-9185-426b6ae5b49f",
        "is_sample": true,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000946",
          "id": "00000000-0000-0000-0000-0000000002f4",
          "license_id": "00000000-0000-0000-0000-0000000000a8",
          "name": "Place 754"
        },
        "package": {
          "batch_number": "B1",
          "compliance_label": "ABCDEF012345670000000184",
          "id": "00000000-0000-0000-0000-000000000060",
          "metrc_label": "ABCDEF012345670000000184",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "0b886206-7b08-4e3b-9175-ed8b69764f2c",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:11.395615Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:11.469298Z"
  }
}

POST /public/v1/orders creates an order (with package-tracked item without package set)

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjYsImlhdCI6MTc4NjcwNjQ2NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDU3OWRlNjEtNjA5MS00OWVjLWEyMjUtMWM5YjNlYzM3YzA0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg1MyIsInR5cCI6ImFjY2VzcyJ9.lkXsmNi5H_3bbPx5CpT8-jjvmalPJq4qmYAAJ0xQyno
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000002a8",
      "price_base": "10.000000000",
      "product_id": "3c496d1c-019e-43c0-9474-50b7188d9939",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5487dd2781895503bb562cb4d4c6d23b-893a49651ec53b93-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000b25",
      "role": {
        "id": "00000000-0000-0000-0000-000000000b5c",
        "name": "Admin 2907"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "99aa983a-32cc-4411-b11a-6db0f2bd0de3",
    "inserted_datetime": "2026-08-14T11:21:06.778844Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": null,
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "025306ba-9806-4ce7-8ff2-5cf84e61f6e7",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000084b",
          "id": "00000000-0000-0000-0000-0000000002a8",
          "license_id": "00000000-0000-0000-0000-000000000094",
          "name": "Place 678"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "3c496d1c-019e-43c0-9474-50b7188d9939",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:06.766167Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:06.778844Z"
  }
}

POST /public/v1/orders creates an order with metrc transfer template

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDdmMjAzMjYtZTRmMS00NTg2LTg0YzMtZjhkZTliZTA5MmU1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjI3NiIsInR5cCI6ImFjY2VzcyJ9.CaGwZG9fpjlgKTjDJmj89zG7SizMlRBretcrmbUEIoc
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001f7",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000003ae",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "external_notes": null,
  "items": [
    {
      "compliance_quantity": "1.0000",
      "id": "b7e39aa2-d179-40a7-a769-13f06449c02b",
      "location_id": "00000000-0000-0000-0000-0000000001f6",
      "package_id": "00000000-0000-0000-0000-00000000004d",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001f6",
  "metrc_transfer_template_directions": "Go to the store around the corner",
  "metrc_transfer_template_recipient_license_number": "C12-0123458-LIC",
  "metrc_transfer_template_status": "PENDING",
  "metrc_transfer_template_transporter_info": [
    {
      "driver_license_number": "1234567890",
      "driver_name": "John Doe",
      "driver_occupational_license_number": "1234567890",
      "driver_phone_number": "1234567890",
      "estimated_arrival_datetime": "2020-01-01T10:30:00.000000Z",
      "estimated_departure_datetime": "2020-01-01T08:00:00.000000Z",
      "transporter_license_number": "C12-0123456-LIC",
      "vehicle_license_plate_number": "1234567890",
      "vehicle_make": "Toyota",
      "vehicle_model": "Prius"
    },
    {
      "driver_license_number": "1234567891",
      "driver_name": "Jane Doe",
      "driver_occupational_license_number": "1234567891",
      "estimated_arrival_datetime": "2020-01-01T16:45:00.000000Z",
      "estimated_departure_datetime": "2020-01-01T14:00:00.000000Z",
      "transporter_license_number": "C12-0123457-LIC",
      "vehicle_license_plate_number": "1234567891",
      "vehicle_make": "Toyota",
      "vehicle_model": "Corolla"
    }
  ],
  "metrc_transfer_template_type": "Transfer",
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "owner_id": "00000000-0000-0000-0000-0000000008e4",
  "shipping_location_id": "00000000-0000-0000-0000-0000000001f7",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d9b08a3a12b805e247207d3846a353b7-f0aebb7b565b5ca7-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000067d",
      "id": "00000000-0000-0000-0000-0000000001f7",
      "license_id": null,
      "license_number": null,
      "name": "Place 501"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-0000000003ae",
      "name": "Company 1657",
      "updated_datetime": "2026-08-14T11:21:03.151661Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008e4",
      "role": {
        "id": "00000000-0000-0000-0000-000000000921",
        "name": "Admin 2336"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "358efefa-04a4-4e04-bdff-8c51b665f5c9",
    "inserted_datetime": "2026-08-14T11:21:03.258940Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000067a",
      "id": "00000000-0000-0000-0000-0000000001f6",
      "license_id": "00000000-0000-0000-0000-000000000065",
      "license_number": "CDPH-00000102",
      "name": "Place 500"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000225",
          "name": "B2"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "b7e39aa2-d179-40a7-a769-13f06449c02b",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000067a",
          "id": "00000000-0000-0000-0000-0000000001f6",
          "license_id": "00000000-0000-0000-0000-000000000065",
          "name": "Place 500"
        },
        "package": {
          "batch_number": "B1",
          "compliance_label": "ABCDEF012345670000000144",
          "id": "00000000-0000-0000-0000-00000000004d",
          "metrc_label": "ABCDEF012345670000000144",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "df05bd62-879a-4d8f-b6d6-0f4326fdb59e",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:03.165953Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000008e4",
      "role": {
        "id": "00000000-0000-0000-0000-000000000921",
        "name": "Admin 2336"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000067d",
      "id": "00000000-0000-0000-0000-0000000001f7",
      "license_id": null,
      "license_number": null,
      "name": "Place 501"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:03.330977Z"
  }
}

POST /public/v1/orders updates an order

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjgsImlhdCI6MTc4NjcwNjQ2OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDI1YWZkZjYtMzk2ZC00ZWQ5LThiNjYtYWJmYWVjNTNlZGU3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzAwNiIsInR5cCI6ImFjY2VzcyJ9.KGUPqq5p7aM7K4HKtAr8bfsiHrnbpg8Bx9eF1tnj_ps
{
  "billing_location_id": "00000000-0000-0000-0000-0000000002da",
  "charges": [
    {
      "id": "5848565a-716d-44d5-8d96-a4374b17694b",
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "id": "4753db69-f7ac-46d4-9aba-f9356c544a0e",
      "name": "C2",
      "price": "-5.00",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-0000000005bb",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "external_notes": "gonna make you sweat",
  "id": "686943e5-239c-46fd-a980-8bb0fd44b649",
  "items": [
    {
      "id": "b3e1e085-dc58-43cb-a952-f8dc13f190e4",
      "is_sample": true,
      "location_id": "00000000-0000-0000-0000-0000000002d9",
      "price_base": "10.000000000",
      "product_id": "38ce7e99-f607-4ef6-aba8-73f69b70cdbc",
      "quantity": "2.000000000"
    },
    {
      "id": "178e7733-50ed-4b6d-b0d7-c2875cb608e5",
      "location_id": "00000000-0000-0000-0000-0000000002d9",
      "price_base": "100.000000000",
      "product_id": "38ce7e99-f607-4ef6-aba8-73f69b70cdbc",
      "quantity": "3.000000000"
    },
    {
      "compliance_quantity": "1.0000",
      "id": "dbe47562-0b04-4566-ad2e-40a93b60832c",
      "location_id": "00000000-0000-0000-0000-0000000002d9",
      "package_id": "00000000-0000-0000-0000-00000000005e",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000002d9",
  "metrc_transfer_template_directions": "Go to the store around the corner",
  "metrc_transfer_template_recipient_license_number": "C12-0123458-LIC",
  "metrc_transfer_template_status": "PENDING",
  "metrc_transfer_template_transporter_info": [
    {
      "driver_license_number": "1234567890",
      "driver_name": "John Doe",
      "driver_occupational_license_number": "1234567890",
      "driver_phone_number": "1234567890",
      "transporter_license_number": "C12-0123456-LIC",
      "vehicle_license_plate_number": "1234567890",
      "vehicle_make": "Toyota",
      "vehicle_model": "Prius"
    },
    {
      "driver_license_number": "1234567891",
      "driver_name": "Jane Doe",
      "driver_occupational_license_number": "1234567891",
      "driver_phone_number": "1234567891",
      "transporter_license_number": "C12-0123457-LIC",
      "vehicle_license_plate_number": "1234567891",
      "vehicle_make": "Toyota",
      "vehicle_model": "Corolla"
    }
  ],
  "metrc_transfer_template_type": "Transfer",
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "owner_id": "00000000-0000-0000-0000-000000000bc5",
  "shipping_location_id": "00000000-0000-0000-0000-0000000002da",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ffe45731bb76a81d7dcfbea6290de817-4d68b04e2610c4e5-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000008f4",
      "id": "00000000-0000-0000-0000-0000000002da",
      "license_id": null,
      "license_number": null,
      "name": "Place 728"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [
      {
        "id": "5848565a-716d-44d5-8d96-a4374b17694b",
        "name": "C1",
        "percent": "10.0000",
        "price": "33.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "4753db69-f7ac-46d4-9aba-f9356c544a0e",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-0000000005bb",
      "name": "Company 2288",
      "updated_datetime": "2026-08-14T11:21:08.874533Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000bbd",
      "role": {
        "id": "00000000-0000-0000-0000-000000000bf8",
        "name": "Admin 3063"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": "gonna make you sweat",
    "id": "686943e5-239c-46fd-a980-8bb0fd44b649",
    "inserted_datetime": "2026-08-14T11:21:08.907812Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000008f3",
      "id": "00000000-0000-0000-0000-0000000002d9",
      "license_id": "00000000-0000-0000-0000-00000000009f",
      "license_number": "CDPH-00000160",
      "name": "Place 727"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003bb",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "b3e1e085-dc58-43cb-a952-f8dc13f190e4",
        "is_sample": true,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000008f3",
          "id": "00000000-0000-0000-0000-0000000002d9",
          "license_id": "00000000-0000-0000-0000-00000000009f",
          "name": "Place 727"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "38ce7e99-f607-4ef6-aba8-73f69b70cdbc",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:08.892945Z"
        },
        "quantity": "2.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003bb",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "178e7733-50ed-4b6d-b0d7-c2875cb608e5",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000008f3",
          "id": "00000000-0000-0000-0000-0000000002d9",
          "license_id": "00000000-0000-0000-0000-00000000009f",
          "name": "Place 727"
        },
        "package": null,
        "price": "100.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "38ce7e99-f607-4ef6-aba8-73f69b70cdbc",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:08.892945Z"
        },
        "quantity": "3.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000003bc",
          "name": "B2"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "dbe47562-0b04-4566-ad2e-40a93b60832c",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000008f3",
          "id": "00000000-0000-0000-0000-0000000002d9",
          "license_id": "00000000-0000-0000-0000-00000000009f",
          "name": "Place 727"
        },
        "package": {
          "batch_number": "B2",
          "compliance_label": "ABCDEF012345670000000180",
          "id": "00000000-0000-0000-0000-00000000005e",
          "metrc_label": "ABCDEF012345670000000180",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "f6c2cc72-9036-4ad2-a305-14d3f7377e2c",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:08.922570Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-166",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2982@example.com",
      "full_name": "FirstName6038 LastName6039",
      "id": "00000000-0000-0000-0000-000000000bc5",
      "role": {
        "id": "00000000-0000-0000-0000-000000000c00",
        "name": "Admin 3071"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000008f4",
      "id": "00000000-0000-0000-0000-0000000002da",
      "license_id": null,
      "license_number": null,
      "name": "Place 728"
    },
    "status": "PROCESSING",
    "total": "358.00",
    "updated_datetime": "2026-08-14T11:21:09.120592Z"
  }
}

POST /public/v1/orders does not alter locked price tier items on update

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjNlNjViMzAtZmIzNC00ZTYwLTk3M2ItMWRlY2M4Yzc4MWIyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA3MiIsInR5cCI6ImFjY2VzcyJ9.Bt_R2ei7QPPPPJvPfO3nI9poQMAu2NyiDXhPTjcauPQ
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001ba",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000346",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001b9",
      "position": 1,
      "price_base": "100.000000000",
      "product_id": "f5f0baae-9dcf-427f-9b1d-6375fec5a281",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-0000000001b9",
      "position": 2,
      "price_base": "200.000000000",
      "product_id": "2f7d7fbf-c90e-4635-ad8f-f33258a7cb1c",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-0000000001b9",
      "position": 3,
      "price_base": "300.000000000",
      "product_id": "254322e3-56b8-4ffa-b0eb-3decefcfc8ff",
      "quantity": "10.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-0000000001ba",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b062b24d95db89c8118bc64dfe2c00cc-31ede473edf11c89-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005e9",
      "id": "00000000-0000-0000-0000-0000000001ba",
      "license_id": null,
      "license_number": null,
      "name": "Place 440"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000346",
      "name": "Company 1509",
      "updated_datetime": "2026-08-14T11:21:02.078230Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2062@example.com",
      "full_name": "FirstName4190 LastName4191",
      "id": "00000000-0000-0000-0000-000000000818",
      "role": {
        "id": "00000000-0000-0000-0000-00000000085d",
        "name": "Admin 2140"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "834c0e89-5ae0-43b5-b874-63b7eceec31a",
    "inserted_datetime": "2026-08-14T11:21:02.282198Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001e9",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "4ba5115b-aaf3-425e-86b3-0efd7b0735a1",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005e7",
          "id": "00000000-0000-0000-0000-0000000001b9",
          "license_id": "00000000-0000-0000-0000-000000000057",
          "name": "Place 439"
        },
        "package": null,
        "price": "90.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "f5f0baae-9dcf-427f-9b1d-6375fec5a281",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:02.122894Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001ea",
          "name": "B2"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "8fee2393-a9ce-45c5-a023-3eca3c42f1d9",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005e7",
          "id": "00000000-0000-0000-0000-0000000001b9",
          "license_id": "00000000-0000-0000-0000-000000000057",
          "name": "Place 439"
        },
        "package": null,
        "price": "200.000000000",
        "price_base": "200.000000000",
        "product": {
          "id": "2f7d7fbf-c90e-4635-ad8f-f33258a7cb1c",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:02.160671Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001eb",
          "name": "B3"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "92afb803-9dcd-491a-83fc-07132dad4a7e",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005e7",
          "id": "00000000-0000-0000-0000-0000000001b9",
          "license_id": "00000000-0000-0000-0000-000000000057",
          "name": "Place 439"
        },
        "package": null,
        "price": "290.000000000",
        "price_base": "300.000000000",
        "product": {
          "id": "254322e3-56b8-4ffa-b0eb-3decefcfc8ff",
          "name": "P3",
          "sku": "SKU3",
          "updated_datetime": "2026-08-14T11:21:02.178316Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005e9",
      "id": "00000000-0000-0000-0000-0000000001ba",
      "license_id": null,
      "license_number": null,
      "name": "Place 440"
    },
    "status": "PROCESSING",
    "total": "5800.00",
    "updated_datetime": "2026-08-14T11:21:02.395482Z"
  }
}

POST /public/v1/orders deleting order items & charges

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzllMzYwMTgtNWUwYy00NmY1LTk0ZjQtMWY2NGZmMzQ3NjM4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTU5MCIsInR5cCI6ImFjY2VzcyJ9.jWsYXOwDS0zaQfVcRLuBw5rSmCSxHbtbUd4t2tluY8o
{
  "billing_location_id": "00000000-0000-0000-0000-00000000016d",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000262",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "id": "94a717e1-dd9e-41cf-b3e2-9d36e3e65a47",
  "items": [
    {
      "id": "9cd10736-f99d-4aaf-b0c0-849f5edc3198",
      "location_id": "00000000-0000-0000-0000-000000000169",
      "price_base": "10.000000000",
      "product_id": "6a7077b2-0d7d-424a-a01c-cdf36933fcfd",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-00000000016d",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8b91c9448b64d0733eb0f7a64da10661-943d22d0a853c0b5-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000004a9",
      "id": "00000000-0000-0000-0000-00000000016d",
      "license_id": null,
      "license_number": null,
      "name": "Place 364"
    },
    "biotrack_id": null,
    "blaze_payment_type": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000262",
      "name": "Company 1190",
      "updated_datetime": "2026-08-14T11:21:00.245461Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000636",
      "role": {
        "id": "00000000-0000-0000-0000-000000000673",
        "name": "Admin 1650"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "94a717e1-dd9e-41cf-b3e2-9d36e3e65a47",
    "inserted_datetime": "2026-08-14T11:21:00.324694Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000049e",
      "id": "00000000-0000-0000-0000-00000000016f",
      "license_id": null,
      "license_number": null,
      "name": "Place 366"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000161",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "9cd10736-f99d-4aaf-b0c0-849f5edc3198",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000049e",
          "id": "00000000-0000-0000-0000-000000000169",
          "license_id": "00000000-0000-0000-0000-000000000046",
          "name": "Place 360"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "6a7077b2-0d7d-424a-a01c-cdf36933fcfd",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:00.293025Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "leaflink_order_number": null,
    "metrc_transfer_id": null,
    "order_datetime": "2020-01-01T00:00:02.000000Z",
    "order_number": "SO-69",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000004a9",
      "id": "00000000-0000-0000-0000-00000000016d",
      "license_id": null,
      "license_number": null,
      "name": "Place 364"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:00.547758Z"
  }
}

Upsert a single order. To update an existing order, pass in an existing order ID in the id field. When updating an order, you must pass in all fields (no sparse update currently supported). Any existing order item or charge you do not pass in to items and charges respectively will be deleted. Required permission: orders_permissions_create to create a new order, orders_permissions_edit (and access to the order under team restrictions) to update an existing order.

Request

POST /public/v1/orders

Parameters

Parameter Description In Type Required Default Example
biotrack_id The Biotrack ID for this order query string false
blaze_payment_type The payment type for an order shipping to a Blaze-associated company. Required when the company being used is mapped to a Blaze retailer via the Distru integration. query string false CASH
company_id Company ID query string false
delivery_datetime The datetime on which the order was / will be delivered query string false
due_datetime The datetime by which the order should be completed for the customer. Optional: when omitted, it is derived from the customer's default payment term, then the company default order payment term, then falls back to the order date (COD). query string false
external_notes This is a message that will be shown to the customer on order slips. This is the "Message to Customer" field in the Distru order form. query string false
upsert_invoice When true, create an invoice for this order if it doesn't have one yet, or update the existing invoice with the order's latest changes. query boolean false
email_invoice When true, email the order's invoice. No email is sent unless the order has an invoice (see upsert_invoice) and a recipient can be resolved from email_invoice_addresses or the buyer company relationship's invoice email. query boolean false
email_invoice_addresses Comma-separated list of email addresses to send the invoice to when email_invoice is true. Takes precedence over the company relationship's invoice email. Invalid addresses are rejected. query string false amy@distru.com,john@distru.com
id Unique ID for this order. If it exists, an update will be performed; otherwise, it will be used as the ID of a new order record query string false
order_datetime The datetime on which the order was placed query string false
charges The additional lines of Charge, Discount, or Tax added to this order body OrderChargesRequest false
items The order items present on this order body OrderItemsRequest false
internal_notes Internal notes for this order query string false
metrc_transfer_template_transporter_info The Metrc transfer template transporter(s) information about this order body OrderTransferTemplateTransporterInfosRequest false
metrc_transfer_template_directions The Metrc transfer template directions query string false
metrc_transfer_id The Metrc transfer ID for this order query integer false
metrc_transfer_template_recipient_license_number The Metrc transfer template recipient license number query string false
metrc_transfer_template_status The Metrc transfer template status query string false
metrc_transfer_template_type The Metrc transfer template type query string false
billing_location_id The billing location's ID query string false
shipping_location_id The shipping location's ID query string false
owner_id The ID of the Distru user that owns this order query string false
status Filter orders by their status. Accepted values are "PENDING", "PROCESSING", "READY_TO_SHIP", "DELIVERING", "DELIVERED", "COMPLETED" and "CANCELED". query string false PENDING
custom_data A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=order to retrieve available custom fields and their IDs. body object false {"123":"Custom Value 1","456":"Custom Value 2"}

Responses

Status Description Schema
200 A single order Order

Package

Get packages

GET /public/v1/packages returns packages related to the company

GET /public/v1/packages
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODY3YzdmZjctMTUwNy00ZWI4LTk0ZDMtYTQ0NjNhYTdkM2QzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQ1MiIsInR5cCI6ImFjY2VzcyJ9.TPkEK8BUsIZ5R5bjwYY7Wp4ABg96zGyfPT3TMpn7y2Q

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: bf2279a35c9b2afbfb1f7e61bde8683e-67551537d90860f1-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000098",
      "custom_data": [
        {
          "id": 54,
          "name": "Custom Field 29",
          "value": "Custom Field Value 1"
        }
      ],
      "expiration_date": "2024-01-01T00:00:00.000000Z",
      "harvest_date": "2024-06-15",
      "id": "00000000-0000-0000-0000-000000000034",
      "is_trade_sample": true,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-00000000003d",
        "license_number": "CDPH-00000062"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000159",
        "name": "Place 344"
      },
      "metrc_label": "ABCDEF012345670000000098",
      "packaged_date": "2024-07-01",
      "primary_test_result": null,
      "product_id": "4ff1c47f-d420-4c11-a7b9-0794a0940d66",
      "product_unit_quantity": "7.500000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000362d",
        "name": "3"
      },
      "quantity": "5.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "5.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000362e",
        "name": "2"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000102",
      "custom_data": [
        {
          "id": 54,
          "name": "Custom Field 29",
          "value": null
        }
      ],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000036",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-00000000003d",
        "license_number": "CDPH-00000062"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000163",
        "name": "Place 355"
      },
      "metrc_label": "ABCDEF012345670000000102",
      "packaged_date": null,
      "primary_test_result": {
        "cbd_mg_per_unit": "1",
        "cbd_mg_per_unit_total": "2",
        "cbd_percentage": "3",
        "cbd_percentage_total": "4",
        "coa_url": null,
        "mg_per_unit_type": "mg/mL",
        "name": "File.pdf",
        "thc_mg_per_unit": "5",
        "thc_mg_per_unit_total": "6",
        "thc_percentage": "7",
        "thc_percentage_total": "8"
      },
      "product_id": "4ff1c47f-d420-4c11-a7b9-0794a0940d66",
      "product_unit_quantity": "15.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000362d",
        "name": "3"
      },
      "quantity": "20.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "20.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000362f",
        "name": "4"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages returns cost data when include_costs is true

GET /public/v1/packages?include_costs=true
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzY2NTRjMjYtZjVkMS00Yzk0LTgzNTgtN2I4Y2IzMzU5NTg5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODQ5IiwidHlwIjoiYWNjZXNzIn0.VkMiQqM76cNfwJc8rUuvyWyFhvVqKyeKF8OUK4c0E0E

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6d49776492c97fc93cb7e0c306fe19da-48333dea0a5aa5c6-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000044",
      "cost_per_unit_actual": "0.4",
      "cost_per_unit_default": "0.2",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000019",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000022",
        "license_number": "CDPH-00000035"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000000fa",
        "name": "Place 249"
      },
      "metrc_label": "ABCDEF012345670000000044",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "0f2326c6-ebd5-4827-8527-7a8ece255da8",
      "product_unit_quantity": "141.747462720",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000001f95",
        "name": "Gram"
      },
      "quantity": "5.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "5.000000000",
      "status": "active",
      "total_cost_actual": "2",
      "total_cost_default": "1",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000001f97",
        "name": "Ounce"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by product_ids

GET /public/v1/packages?product_ids[]=4ca09910-2509-4890-9351-2407ecc8e3ae&product_ids[]=29d49a38-d66b-42e6-8c90-8020efd3f53e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDI1MDIzYmMtY2JiMS00OWEyLWI2YmEtZWFmYTdkYzM3N2ZhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTk3NCIsInR5cCI6ImFjY2VzcyJ9.RPN1TA9mblobQMBPiPws_t1v_m7qL3eCHVIOQpayEps

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f57b56526231bbcfd5f1fc3f9dfb181c-302178ed018321dd-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000133",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000047",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000054",
        "license_number": "CDPH-00000085"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000001af",
        "name": "Place 429"
      },
      "metrc_label": "ABCDEF012345670000000133",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "4ca09910-2509-4890-9351-2407ecc8e3ae",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000004714",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000004714",
        "name": "Gram"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000135",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000048",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000054",
        "license_number": "CDPH-00000085"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000001b0",
        "name": "Place 430"
      },
      "metrc_label": "ABCDEF012345670000000135",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "29d49a38-d66b-42e6-8c90-8020efd3f53e",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000004714",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000004714",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by ids

GET /public/v1/packages?ids[]=00000000-0000-0000-0000-000000000010
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2NkNjBjMTEtYjRkMi00ZTM1LTk0ZmYtZTAyZWRmNjM1YmQyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQ2IiwidHlwIjoiYWNjZXNzIn0.ikT7izEg0hx9eCaQlzC7CWJBEs419SOoo7CtdLnGU_Y

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 445ec68c19d16833f7d71d74bb2b64f8-d7cb17448f4c9020-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000031",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000010",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000019",
        "license_number": "CDPH-00000026"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000000b3",
        "name": "Place 178"
      },
      "metrc_label": "ABCDEF012345670000000031",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "deb040ba-b8aa-4529-a899-b51a1b15260a",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000149c",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000149c",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by location_ids

GET /public/v1/packages?location_ids[]=00000000-0000-0000-0000-00000000010e&location_ids[]=00000000-0000-0000-0000-00000000010f
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODY1NzRlNGQtOGQyNy00NWIzLTg1ZDMtMjA1MzM3NjYxZjAwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTY1IiwidHlwIjoiYWNjZXNzIn0.F3ToUBYrtdAIS-I4D7orIqD3mLZjgoZ1YsgOzBc9woQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 22c747df4a36aadcd45a03080e0be6b9-a535a7731654ef1f-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000061",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000020",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000026",
        "license_number": "CDPH-00000039"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000010e",
        "name": "Place 269"
      },
      "metrc_label": "ABCDEF012345670000000061",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "2be5f43e-f872-4a4c-80a0-ff9c5d3748ba",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000002422",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000002422",
        "name": "Gram"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000063",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000022",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000026",
        "license_number": "CDPH-00000039"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000010f",
        "name": "Place 270"
      },
      "metrc_label": "ABCDEF012345670000000063",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "54b80d3d-520e-4fa3-8f58-5f5291a6d513",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000002422",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000002422",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by status

GET /public/v1/packages?statuses[]=active&statuses[]=finished
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjhiYjE0ODktOTM1Zi00NzZiLTgyMTktMTkwYWJmMDFjOGEzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTcwMiIsInR5cCI6ImFjY2VzcyJ9.mtVk1DSCiaV-iUHDwtW6FYr7ESo2OjCnwhU3vPf-FJE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 39cb2f36ef6f9d119d90928bff037789-f8a7ea85a2ec0995-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000116",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-00000000003f",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-00000000004c",
        "license_number": "CDPH-00000077"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000017d",
        "name": "Place 380"
      },
      "metrc_label": "ABCDEF012345670000000116",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "0576cc0c-3333-45bc-b1d7-5d89119a766b",
      "product_unit_quantity": "1.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000003e20",
        "name": "Ounce"
      },
      "quantity": "1.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "1.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000003e20",
        "name": "Ounce"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000120",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000042",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-00000000004c",
        "license_number": "CDPH-00000077"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000185",
        "name": "Place 388"
      },
      "metrc_label": "ABCDEF012345670000000120",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "13eb1940-cfc8-406f-b188-87ba7664e1c8",
      "product_unit_quantity": "0.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000003e20",
        "name": "Ounce"
      },
      "quantity": "0.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "0.000000000",
      "status": "finished",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000003e20",
        "name": "Ounce"
      }
    }
  ],
  "next_page": null
}

Get packages sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 5000 packages per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view. Results are filtered to only include packages the authenticated user can access under their team restrictions.

Request

GET /public/v1/packages

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter packages by their creation datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
location_ids A list of location UUIDs to filter packages by. query array false ?location_ids[]=c40e87ce-0647-409b-89fa-620275d77fcc&location_ids[]=65ca530a-1ea2-439b-b4c2-598abb1fc6f3
license_number Filter packages by license number query string false 1234567890
ids Filter packages by package ID (same UUID string as each package's id in responses). Values that do not decode to an internal package id match no rows. query array false ?ids[]=00000000-0000-0000-0000-000000000001&ids[]=00000000-0000-0000-0000-000000000002
product_ids Filter packages by product ID query array false ?product_ids[]=c40e87ce-0647-409b-89fa-620275d77fcc&product_ids[]=65ca530a-1ea2-439b-b4c2-598abb1fc6f3
statuses Filter packages by their status query array false ?statuses[]=active&statuses[]=selling&statuses[]=sold
updated_datetime Filter packages by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of packages Packages

Payment

Get a payment

GET /public/v1/payments/:id returns a single payment

GET /public/v1/payments/00000000-0000-0000-0000-000000000001
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzE2OTdjODctZmZjZi00NWNiLWE5ODItYjQwMDIxOTQ0NGE5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTUiLCJ0eXAiOiJhY2Nlc3MifQ.H6rvTH9XtyXjLSG5-ZFpfIKJcoNgHJXv7T_tZPUgmrs

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2bb3c6c80c86c51e203f691610dcfa43-e40ddc842dfa412f-0
{
  "data": {
    "amount": "10",
    "company": {
      "id": "00000000-0000-0000-0000-000000000018",
      "name": "Company 54",
      "updated_datetime": "2026-08-14T11:20:55.382818Z"
    },
    "credit_uses": [],
    "description": null,
    "fully_paid_with_credits": false,
    "id": "00000000-0000-0000-0000-000000000001",
    "inserted_datetime": "2026-08-14T11:20:55.446729Z",
    "invoice": {
      "id": "00000000-0000-0000-0000-000000000004",
      "invoice_number": "Invoice #3",
      "status": "NOT_PAID",
      "total": "32.00"
    },
    "overpayment_credits": [],
    "payment_date": "2026-08-14T11:20:55.446246Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000001",
      "name": "Payment Method 0"
    },
    "payment_number": "Payment #0",
    "payment_type": "INVOICE",
    "purchase": null,
    "quickbooks_deposit_account_id": null,
    "quickbooks_deposit_account_name": null,
    "status": "POSTED",
    "updated_datetime": "2026-08-14T11:20:55.446729Z"
  }
}

Get a single payment given the ID.

Required permission: payments_permissions_view.

Request

GET /public/v1/payments/{id}

Parameters

Parameter Description In Type Required Default Example
id Payment ID path string true

Responses

Status Description Schema
200 A single payment Payment
404 Not Found

Get payments

GET /public/v1/payments returns invoice and purchase payments related to the company

GET /public/v1/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmNkM2U0M2YtYjk1MS00NDIyLTgwODMtYjE0N2NiNzMxZjI0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQ5IiwidHlwIjoiYWNjZXNzIn0.B_uP-Y30KWPKKGPgA2pYudDYdh3JdPwQghQReV4qgJQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: af3304dcacefa21eac0ca166938db9fc-50891e6a50bedf91-0
{
  "data": [
    {
      "amount": "75.25",
      "company": {
        "id": "00000000-0000-0000-0000-00000000009c",
        "name": "Company 447",
        "updated_datetime": "2026-08-14T11:20:57.313995Z"
      },
      "credit_uses": null,
      "description": "pur payment",
      "fully_paid_with_credits": false,
      "id": "00000000-0000-0000-0000-000000000013",
      "inserted_datetime": "2026-08-14T11:20:57.331367Z",
      "invoice": null,
      "overpayment_credits": null,
      "payment_date": "2026-08-14T11:20:57.330847Z",
      "payment_method": {
        "deleted_at": null,
        "id": "00000000-0000-0000-0000-00000000001d",
        "name": "Payment Method 28"
      },
      "payment_number": "Payment #18",
      "payment_type": "PURCHASE",
      "purchase": {
        "id": "00000000-0000-0000-0000-00000000000e",
        "purchase_number": "Purchase #13",
        "status": "PENDING",
        "total": "32.00"
      },
      "quickbooks_deposit_account_id": null,
      "status": "POSTED",
      "updated_datetime": "2026-08-14T11:20:57.331367Z"
    },
    {
      "amount": "150.5",
      "company": {
        "id": "00000000-0000-0000-0000-000000000095",
        "name": "Company 437",
        "updated_datetime": "2026-08-14T11:20:57.272346Z"
      },
      "credit_uses": [],
      "description": "inv payment",
      "fully_paid_with_credits": false,
      "id": "00000000-0000-0000-0000-000000000011",
      "inserted_datetime": "2026-08-14T11:20:57.293768Z",
      "invoice": {
        "id": "00000000-0000-0000-0000-000000000014",
        "invoice_number": "Invoice #19",
        "status": "NOT_PAID",
        "total": "32.00"
      },
      "overpayment_credits": [],
      "payment_date": "2026-08-14T11:20:57.292738Z",
      "payment_method": {
        "deleted_at": null,
        "id": "00000000-0000-0000-0000-00000000001b",
        "name": "Payment Method 26"
      },
      "payment_number": "Payment #16",
      "payment_type": "INVOICE",
      "purchase": null,
      "quickbooks_deposit_account_id": null,
      "status": "POSTED",
      "updated_datetime": "2026-08-14T11:20:57.293768Z"
    }
  ],
  "next_page": null
}

Get payments sorted by their creation date and filtered by various attributes. A payment is either an invoice payment (money received from a customer) or a purchase payment (money paid to a vendor), distinguished by the payment_type field.

Note: The page size for this endpoint is 1000 payments per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: payments_permissions_view.

Request

GET /public/v1/payments

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter payments by their creation datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
payment_date Filter payments by their payment datetime query string false 2022-07-10T00:00:00Z,
payment_number Filter payments whose payment number contains this value query string false
payment_status Filter payments by their status. Defaults to returning both posted and voided payments. query string false
payment_type Filter payments by whether they belong to an invoice or a purchase query string false
updated_datetime Filter payments by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of payments Payments

PaymentMethod

Get a payment method

GET /public/v1/payment-methods/:id returns a single payment method

GET /public/v1/payment-methods/00000000-0000-0000-0000-000000000011
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDZhYWFmZjYtNTRjMi00YzczLWE3MDQtOGZlYmI3NDJhNDM2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzk2IiwidHlwIjoiYWNjZXNzIn0.YIK_iNDH4tobAHsJMzJvQvO-VSP8WZHM3ifMahjV66k

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ba01188c0f25480e5a1e58bc0624541f-ef4b0945be5ae2b7-0
{
  "data": {
    "deleted_at": null,
    "id": "00000000-0000-0000-0000-000000000011",
    "name": "Cash"
  }
}

Get a single payment method given the ID.

Required permission: settings_permissions_payment_methods.

Request

GET /public/v1/payment-methods/{id}

Parameters

Parameter Description In Type Required Default Example
id Payment Method ID path string true

Responses

Status Description Schema
200 A single payment method PaymentMethod
404 Not Found

Get payment methods

GET /public/v1/payment-methods returns payment methods related to the user's company only

GET /public/v1/payment-methods
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZThiYzFiMzEtMWJhZC00OWQ3LWJkNmUtODgxMmM3OWE0MTgyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY5IiwidHlwIjoiYWNjZXNzIn0._VOJyG2w-YmxSXYS_CNLejx2MEtexnscC9hetihcEvI

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 95f87097292fe0ce208fc76b8f195803-9377c377f2304a29-0
{
  "data": [
    {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000014",
      "name": "Payment Method 19"
    }
  ],
  "next_page": null
}

Get payment methods. Note: This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: settings_permissions_payment_methods.

Request

GET /public/v1/payment-methods

Parameters

Parameter Description In Type Required Default Example
deleted Filter deleted payment methods. no returns non-deleted, only returns deleted, include returns both. query string false no

Responses

Status Description Schema
200 A list of payment methods PaymentMethods

PaymentTerm

Get payment terms

GET /public/v1/payment-terms returns payment terms related to the user's company only

GET /public/v1/payment-terms
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDJjMDY0YTItZTAzNi00YjI4LWEzNTktNGU3Y2I1ZTU5YzU4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA3IiwidHlwIjoiYWNjZXNzIn0.EksPNb2alwzddzzpASfzGNd0cBO4YFUTK13kIEDjpLg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c181acc82e7b08c5f2ca36c659542631-0e5effd1f898f11b-0
{
  "data": [
    {
      "days": 30,
      "id": "00000000-0000-0000-0000-000000000003",
      "locked": false,
      "name": "Net 30",
      "time_of_day": "17:00:00"
    }
  ],
  "next_page": null
}

Get payment terms. Note: This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: settings_permissions_payment_terms.

Request

GET /public/v1/payment-terms

Responses

Status Description Schema
200 A list of payment terms PaymentTerms

Product

Get a product

GET /public/v1/products/:id returns a single product

GET /public/v1/products/c82e0033-f971-460d-bfd6-6b21b414f98f
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWM2NWZjNmMtYTk4Yi00NDYwLTg0YWYtZGNmMmM0NzQ0ODM3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjE2OCIsInR5cCI6ImFjY2VzcyJ9.hCoo7PaAh19q_rBQtO_8UgIXnNuFiQAuimCRgTz7Uwk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4330ae6a54be53354a2a641667e3f3c3-b0db421f6a2e1aeb-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:21:02.612956Z",
    "bill_of_materials": null,
    "category": {
      "id": "00000000-0000-0000-0000-000000000242",
      "name": "Some category 576",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": {
      "id": "00000000-0000-0000-0000-000000000230",
      "name": "Product Group 558"
    },
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "SKU001",
    "deleted_at": null,
    "menus": [],
    "description": null,
    "name": "Test Product",
    "id": "c82e0033-f971-460d-bfd6-6b21b414f98f",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000004cd9",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2158@example.com",
      "full_name": "FirstName4386 LastName4387",
      "id": "00000000-0000-0000-0000-00000000087b",
      "role": {
        "id": "00000000-0000-0000-0000-0000000008c1",
        "name": "Admin 2240"
      }
    },
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-00000000036c",
      "name": "Company 1568",
      "updated_datetime": "2026-08-14T11:21:02.611246Z"
    },
    "quantity_available_threshold_max": null,
    "upc": null,
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": {
      "id": "00000000-0000-0000-0000-000000000232",
      "name": "Some subcategory 560"
    },
    "unit_price": "1",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

Get a single product given the ID. The response always includes the product's bill_of_materials (or null if it has none).

Required permission: products_permissions_view.

Request

GET /public/v1/products/{id}

Parameters

Parameter Description In Type Required Default Example
id Product ID path string true

Responses

Status Description Schema
200 A single product Product
404 Not Found

Get products

GET /public/products returns products related to the company

GET /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjVhNjNkZGItMzdhNC00NTU1LWJkMTktZTkxNTRlMjE3NzY3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA3NCIsInR5cCI6ImFjY2VzcyJ9.FuX0tWpxj-KXKgsoTDphY7NvobtEBVIv2X9VJ0k8YIE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: cde7b62bc6ed7ee5b813cdf47820fdaa-11963c770e6f96e5-0
{
  "data": [
    {
      "gross_weight": null,
      "total_cannabinoid_unit": "PERCENT",
      "updated_datetime": "2023-11-01T00:00:00.000000Z",
      "category": {
        "id": "00000000-0000-0000-0000-00000000022b",
        "name": "Some category 553",
        "official_product_category_id": "OTHER"
      },
      "unit_serving_size": "10",
      "msrp": null,
      "total_cbd": "3",
      "product_group": {
        "id": "00000000-0000-0000-0000-00000000021a",
        "name": "Product Group 536"
      },
      "description_markdown": "# test",
      "gross_weight_unit_type": null,
      "sku": "sku 1527",
      "deleted_at": null,
      "menus": [],
      "description": "test",
      "name": "Product 1526",
      "id": "3df938a2-fd0c-4f45-8851-b946ba80007c",
      "total_thc": "12",
      "unit_cost": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000004a21",
        "name": "Gram"
      },
      "tags": [
        {
          "id": "00000000-0000-0000-0000-000000000011",
          "name": "Tag 1"
        }
      ],
      "quantity_available_threshold_min": "5",
      "images": [
        {
          "id": "00000000-0000-0000-0000-00000000000a",
          "name": "Image Name 137",
          "rank": 0,
          "url": "https://google.com/original-5.jpg"
        },
        {
          "id": "00000000-0000-0000-0000-00000000000b",
          "name": "Image Name 140",
          "rank": 1,
          "url": "https://google.com/original-6.jpg"
        }
      ],
      "is_featured": true,
      "custom_data": [
        {
          "id": 64,
          "name": "Custom Field 39",
          "value": "Custom Field Value 1"
        }
      ],
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "product-owner@example.com",
        "full_name": "FirstName4220 LastName4221",
        "id": "00000000-0000-0000-0000-000000000827",
        "role": {
          "id": "00000000-0000-0000-0000-00000000086c",
          "name": "Admin 2155"
        }
      },
      "brand": {
        "id": "00000000-0000-0000-0000-000000000349",
        "name": "Company 1513",
        "updated_datetime": "2030-11-01T00:00:00.000000Z"
      },
      "wholesale_unit_price": 90.5,
      "external_name": "External Name",
      "vendor": {
        "id": "00000000-0000-0000-0000-00000000034b",
        "name": "Company 1515",
        "updated_datetime": "2030-11-03T00:00:00.000000Z"
      },
      "quantity_available_threshold_max": "50",
      "upc": "036000291452",
      "unit_net_weight": "20",
      "strain": {
        "id": "00000000-0000-0000-0000-000000000026",
        "name": "Strain 33",
        "strain_type": "INDICA"
      },
      "is_active": true,
      "subcategory": {
        "id": "00000000-0000-0000-0000-00000000021c",
        "name": "Some subcategory 538"
      },
      "unit_price": "1",
      "units_per_case": null,
      "unit_net_weight_serving_size_unit_type": {
        "id": "00000000-0000-0000-0000-000000004a23",
        "name": "Ounce"
      }
    },
    {
      "gross_weight": null,
      "total_cannabinoid_unit": null,
      "updated_datetime": "2023-11-02T00:00:00.000000Z",
      "category": {
        "id": "00000000-0000-0000-0000-00000000022d",
        "name": "Some category 555",
        "official_product_category_id": "OTHER"
      },
      "unit_serving_size": null,
      "msrp": "100",
      "total_cbd": null,
      "product_group": {
        "id": "00000000-0000-0000-0000-00000000021b",
        "name": "Product Group 537"
      },
      "description_markdown": null,
      "gross_weight_unit_type": null,
      "sku": "sku 1530",
      "deleted_at": null,
      "menus": [],
      "description": null,
      "name": "Product 1529",
      "id": "b31b6c7a-1a4a-411b-8372-792f99a1878f",
      "total_thc": null,
      "unit_cost": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000004a1f",
        "name": "Pound"
      },
      "tags": [],
      "quantity_available_threshold_min": null,
      "images": [],
      "is_featured": false,
      "custom_data": [
        {
          "id": 64,
          "name": "Custom Field 39",
          "value": null
        }
      ],
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "product-owner@example.com",
        "full_name": "FirstName4220 LastName4221",
        "id": "00000000-0000-0000-0000-000000000827",
        "role": {
          "id": "00000000-0000-0000-0000-00000000086c",
          "name": "Admin 2155"
        }
      },
      "brand": {
        "id": "00000000-0000-0000-0000-00000000034a",
        "name": "Company 1514",
        "updated_datetime": "2030-11-02T00:00:00.000000Z"
      },
      "wholesale_unit_price": null,
      "external_name": null,
      "vendor": {
        "id": "00000000-0000-0000-0000-00000000034c",
        "name": "Company 1517",
        "updated_datetime": "2030-11-04T00:00:00.000000Z"
      },
      "quantity_available_threshold_max": null,
      "upc": null,
      "unit_net_weight": null,
      "strain": null,
      "is_active": false,
      "subcategory": {
        "id": "00000000-0000-0000-0000-00000000021d",
        "name": "Some subcategory 539"
      },
      "unit_price": "1",
      "units_per_case": null,
      "unit_net_weight_serving_size_unit_type": null
    }
  ],
  "next_page": null
}

GET /public/products includes bill of materials when requested and gates cost_per_unit by permission

GET /public/v1/products?include_bill_of_materials=true
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWUzZTZiYzEtMzdhOS00YWEyLTk4MjMtNDZkNWY5OTQzY2EyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTc3MCIsInR5cCI6ImFjY2VzcyJ9.BYn9nwicUZvhuZ2u9QD2h3P3SVdLjj6VjTvx50AGWUY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 81460fddbcaf27c8a288ca9e3daefe55-b269c628e96724c2-0
{
  "data": [
    {
      "gross_weight": null,
      "total_cannabinoid_unit": null,
      "updated_datetime": "2026-08-14T11:21:00.836321Z",
      "bill_of_materials": null,
      "category": {
        "id": "00000000-0000-0000-0000-0000000001bd",
        "name": "Some category 443",
        "official_product_category_id": "OTHER"
      },
      "unit_serving_size": null,
      "msrp": null,
      "total_cbd": null,
      "product_group": {
        "id": "00000000-0000-0000-0000-0000000001ae",
        "name": "Product Group 428"
      },
      "description_markdown": null,
      "gross_weight_unit_type": null,
      "sku": "sku 1232",
      "deleted_at": null,
      "menus": [],
      "description": null,
      "name": "Product 1231",
      "id": "930a5043-755c-48c2-914b-07dbed8c095f",
      "total_thc": null,
      "unit_cost": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000408e",
        "name": "Gram"
      },
      "tags": [],
      "quantity_available_threshold_min": null,
      "images": [],
      "is_featured": false,
      "custom_data": [],
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1766@example.com",
        "full_name": "FirstName3586 LastName3587",
        "id": "00000000-0000-0000-0000-0000000006ed",
        "role": {
          "id": "00000000-0000-0000-0000-00000000072d",
          "name": "Admin 1836"
        }
      },
      "brand": null,
      "wholesale_unit_price": null,
      "external_name": null,
      "vendor": {
        "id": "00000000-0000-0000-0000-0000000002bd",
        "name": "Company 1322",
        "updated_datetime": "2026-08-14T11:21:00.832641Z"
      },
      "quantity_available_threshold_max": null,
      "upc": null,
      "unit_net_weight": null,
      "strain": null,
      "is_active": true,
      "subcategory": {
        "id": "00000000-0000-0000-0000-0000000001b0",
        "name": "Some subcategory 430"
      },
      "unit_price": "1",
      "units_per_case": null,
      "unit_net_weight_serving_size_unit_type": null
    },
    {
      "gross_weight": null,
      "total_cannabinoid_unit": null,
      "updated_datetime": "2026-08-14T11:21:00.854076Z",
      "bill_of_materials": {
        "costs": [
          {
            "cost_type": {
              "cost_per_unit": "1",
              "id": "00000000-0000-0000-0000-000000000012",
              "name": "CostType 16",
              "unit_type": {
                "id": "00000000-0000-0000-0000-000000004171",
                "name": "Unit Type 24"
              }
            },
            "description": "Labor",
            "id": "a6edb8c0-b988-4b1f-8745-fcaa5ea9ad5e",
            "quantity": "1"
          }
        ],
        "description": "Recipe desc",
        "id": "00000000-0000-0000-0000-000000000001",
        "inputs": [
          {
            "filter": null,
            "id": "00000000-0000-0000-0000-000000000001",
            "product": {
              "id": "1adacb87-2b42-4899-8f49-55cc5ee2397b",
              "name": "Product 1241",
              "sku": "sku 1242",
              "updated_datetime": "2026-08-14T11:21:00.867528Z"
            },
            "quantity": "2",
            "type": "product"
          },
          {
            "filter": {
              "criteria": [
                {
                  "type": "category",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-0000000001c2",
                      "name": "Some category 448"
                    }
                  ]
                },
                {
                  "type": "subcategory",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-0000000001b5",
                      "name": "Some subcategory 435"
                    }
                  ]
                },
                {
                  "type": "group",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-0000000001b3",
                      "name": "Product Group 433"
                    }
                  ]
                },
                {
                  "type": "unit_type",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-000000004170",
                      "name": "Unit Type 23"
                    }
                  ]
                },
                {
                  "type": "strain",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-000000000024",
                      "name": "Strain 31"
                    }
                  ]
                },
                {
                  "type": "tags",
                  "values": [
                    {
                      "id": "00000000-0000-0000-0000-00000000000f",
                      "name": "Some tag 12"
                    }
                  ]
                }
              ],
              "id": "00000000-0000-0000-0000-000000000001",
              "name": "Dynamic"
            },
            "id": "00000000-0000-0000-0000-000000000002",
            "product": null,
            "quantity": "1",
            "type": "filter"
          }
        ],
        "name": "Recipe"
      },
      "category": {
        "id": "00000000-0000-0000-0000-0000000001bf",
        "name": "Some category 445",
        "official_product_category_id": "OTHER"
      },
      "unit_serving_size": null,
      "msrp": null,
      "total_cbd": null,
      "product_group": {
        "id": "00000000-0000-0000-0000-0000000001b0",
        "name": "Product Group 430"
      },
      "description_markdown": null,
      "gross_weight_unit_type": null,
      "sku": "sku 1236",
      "deleted_at": null,
      "menus": [],
      "description": null,
      "name": "Product 1235",
      "id": "0f640d8b-ff98-4045-a34f-6b83c439e517",
      "total_thc": null,
      "unit_cost": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000408e",
        "name": "Gram"
      },
      "tags": [],
      "quantity_available_threshold_min": null,
      "images": [],
      "is_featured": false,
      "custom_data": [],
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1773@example.com",
        "full_name": "FirstName3600 LastName3601",
        "id": "00000000-0000-0000-0000-0000000006f5",
        "role": {
          "id": "00000000-0000-0000-0000-000000000735",
          "name": "Admin 1844"
        }
      },
      "brand": null,
      "wholesale_unit_price": null,
      "external_name": null,
      "vendor": {
        "id": "00000000-0000-0000-0000-0000000002c1",
        "name": "Company 1326",
        "updated_datetime": "2026-08-14T11:21:00.851771Z"
      },
      "quantity_available_threshold_max": null,
      "upc": null,
      "unit_net_weight": null,
      "strain": null,
      "is_active": true,
      "subcategory": {
        "id": "00000000-0000-0000-0000-0000000001b2",
        "name": "Some subcategory 432"
      },
      "unit_price": "1",
      "units_per_case": null,
      "unit_net_weight_serving_size_unit_type": null
    },
    {
      "gross_weight": null,
      "total_cannabinoid_unit": null,
      "updated_datetime": "2026-08-14T11:21:00.867528Z",
      "bill_of_materials": null,
      "category": {
        "id": "00000000-0000-0000-0000-0000000001c1",
        "name": "Some category 447",
        "official_product_category_id": "OTHER"
      },
      "unit_serving_size": null,
      "msrp": null,
      "total_cbd": null,
      "product_group": {
        "id": "00000000-0000-0000-0000-0000000001b2",
        "name": "Product Group 432"
      },
      "description_markdown": null,
      "gross_weight_unit_type": null,
      "sku": "sku 1242",
      "deleted_at": null,
      "menus": [],
      "description": null,
      "name": "Product 1241",
      "id": "1adacb87-2b42-4899-8f49-55cc5ee2397b",
      "total_thc": null,
      "unit_cost": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000408e",
        "name": "Gram"
      },
      "tags": [],
      "quantity_available_threshold_min": null,
      "images": [],
      "is_featured": false,
      "custom_data": [],
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1777@example.com",
        "full_name": "FirstName3608 LastName3609",
        "id": "00000000-0000-0000-0000-0000000006f9",
        "role": {
          "id": "00000000-0000-0000-0000-000000000739",
          "name": "Admin 1848"
        }
      },
      "brand": null,
      "wholesale_unit_price": null,
      "external_name": null,
      "vendor": {
        "id": "00000000-0000-0000-0000-0000000002c3",
        "name": "Company 1330",
        "updated_datetime": "2026-08-14T11:21:00.864440Z"
      },
      "quantity_available_threshold_max": null,
      "upc": null,
      "unit_net_weight": null,
      "strain": null,
      "is_active": true,
      "subcategory": {
        "id": "00000000-0000-0000-0000-0000000001b4",
        "name": "Some subcategory 434"
      },
      "unit_price": "1",
      "units_per_case": null,
      "unit_net_weight_serving_size_unit_type": null
    }
  ],
  "next_page": null
}

Get products sorted by their creation date and filtered by various attributes.

Note: The page size for this endpoint is 5000 products per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view. Results are filtered to only include products the authenticated user can access under their team restrictions.

Request

GET /public/v1/products

Parameters

Parameter Description In Type Required Default Example
product_name Filter products by name substring query string false
menu_id Comma-separated public menu IDs; products in any of these menus are returned. Invalid tokens are ignored; if none remain, data is empty. query string false
menu_name Case-insensitive substring match on menu name. When combined with menu_id, both conditions apply (AND). query string false
inserted_datetime Filter products by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted products. no returns non-deleted, only returns deleted, include returns both. query string false no
ids Filter products by product ID (same UUID as each product's id in responses). query array false ?ids[]=550e8400-e29b-41d4-a716-446655440000&ids[]=6ba7b810-9dad-11d1-80b4-00c04fd430c8
page Pagination information query number false ?page[number]=1
updated_datetime Filter products by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z
include_bill_of_materials When true, each product includes its bill_of_materials (or null if it has none). Defaults to false. query boolean false false

Responses

Status Description Schema
200 A list of products Products

Upsert a product

POST /public/v1/products Creates a product with all optional fields set

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjA1YThmYzktODI3NS00Mzc4LWFlNmEtMzQ5MjI0MGIzMWNiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTkwMSIsInR5cCI6ImFjY2VzcyJ9.ZgRMMwX-I5bFW1LEyhsJM3SHnQMDhV3446Jf1RxrgQY
{
  "vendor_id": "00000000-0000-0000-0000-0000000002f1",
  "group_id": "00000000-0000-0000-0000-0000000001d2",
  "gross_weight": "7.5",
  "total_cannabinoid_unit": "PERCENT",
  "strain_id": "00000000-0000-0000-0000-000000000025",
  "inventory_tracking_method": "PACKAGE",
  "unit_serving_size": "2.2",
  "msrp": "100.5",
  "menu_visibility": "INCLUDE_IN_ALL",
  "total_cbd": "5.2",
  "description_markdown": "# My Product Description Markdown",
  "sku": "12345",
  "menus": [
    "00000000-0000-0000-0000-000000000034"
  ],
  "gross_weight_unit_type_id": "00000000-0000-0000-0000-00000000448c",
  "description": "My Product Description",
  "name": "My Product",
  "owner_id": "00000000-0000-0000-0000-00000000076b",
  "total_thc": "10.4",
  "brand_id": "00000000-0000-0000-0000-0000000002f6",
  "unit_cost": "50.4",
  "category_id": "00000000-0000-0000-0000-0000000001e1",
  "tags": [
    "00000000-0000-0000-0000-000000000010"
  ],
  "quantity_available_threshold_min": "5.5",
  "is_featured": true,
  "custom_data": {
    "62": [
      "VIP",
      "Wholesale"
    ]
  },
  "is_inactive": true,
  "wholesale_unit_price": "90.50",
  "quantity_available_threshold_max": "10.5",
  "subcategory_id": "00000000-0000-0000-0000-0000000001d4",
  "upc": "036000291452",
  "unit_net_weight": "3.1",
  "unit_type_id": "00000000-0000-0000-0000-000000004495",
  "unit_price": "100",
  "units_per_case": "0.2",
  "unit_net_weight_and_serving_size_unit_type_id": "00000000-0000-0000-0000-00000000448e"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a0db622ca30081c38d1f51168c3c115c-0c40c1f7b8347f97-0
{
  "data": {
    "gross_weight": "7.5",
    "total_cannabinoid_unit": "PERCENT",
    "updated_datetime": "2026-08-14T11:21:01.409704Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000001e1",
      "name": "Some category 479",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": "2.2",
    "msrp": "100.5",
    "total_cbd": "5.2",
    "product_group": {
      "id": "00000000-0000-0000-0000-0000000001d2",
      "name": "Product Group 464"
    },
    "description_markdown": "# My Product Description Markdown",
    "gross_weight_unit_type": {
      "id": "00000000-0000-0000-0000-00000000448c",
      "name": "Gram"
    },
    "sku": "12345",
    "deleted_at": null,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000034",
        "menu_name": "Menu 155"
      }
    ],
    "description": "My Product Description",
    "name": "My Product",
    "id": "a3030798-c3cd-4668-9bb5-c618567efce7",
    "total_thc": "10.4",
    "unit_cost": "50.4",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000004495",
      "name": "Unit"
    },
    "tags": [
      {
        "id": "00000000-0000-0000-0000-000000000010",
        "name": "Some tag 13"
      }
    ],
    "quantity_available_threshold_min": "5.5",
    "images": [],
    "is_featured": true,
    "custom_data": [
      {
        "id": 62,
        "name": "Custom Field 37",
        "value": "VIP,Wholesale"
      }
    ],
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "FirstName3848 LastName3849",
      "id": "00000000-0000-0000-0000-00000000076b",
      "role": {
        "id": "00000000-0000-0000-0000-0000000007ab",
        "name": "Admin 1962"
      }
    },
    "brand": {
      "id": "00000000-0000-0000-0000-0000000002f6",
      "name": "Company 1408",
      "updated_datetime": "2026-08-14T11:21:01.351381Z"
    },
    "wholesale_unit_price": 90.5,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-0000000002f1",
      "name": "Company 1400",
      "updated_datetime": "2026-08-14T11:21:01.330548Z"
    },
    "quantity_available_threshold_max": "10.5",
    "upc": "036000291452",
    "unit_net_weight": "3.1",
    "strain": {
      "id": "00000000-0000-0000-0000-000000000025",
      "name": "Strain 32",
      "strain_type": null
    },
    "is_active": false,
    "subcategory": {
      "id": "00000000-0000-0000-0000-0000000001d4",
      "name": "Some subcategory 466"
    },
    "unit_price": "100",
    "units_per_case": "0.2",
    "unit_net_weight_serving_size_unit_type": {
      "id": "00000000-0000-0000-0000-00000000448e",
      "name": "Ounce"
    }
  }
}

POST /public/v1/products Updates a product with all optional fields set

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2NhM2EwMjUtZGZiZS00MDEzLTg3MGYtYjNmY2VhYzVkMmVlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjExNCIsInR5cCI6ImFjY2VzcyJ9.u0wGe_1O8vuwTLXynNY3Hy6ZTQ-svDFWqgsWA-i6Np0
{
  "category_id": "00000000-0000-0000-0000-000000000231",
  "inventory_tracking_method": "PACKAGE",
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000004b11",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000355"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 904b96d85f4f711182a0954e8557f7e1-6d82f47000961cac-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:21:02.317119Z",
    "category": {
      "id": "00000000-0000-0000-0000-000000000231",
      "name": "Some category 559",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [],
    "description": null,
    "name": "My Product",
    "id": "f3aa3ab5-a529-472e-9668-4fa8957ec322",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000004b11",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000355",
      "name": "Company 1534",
      "updated_datetime": "2026-08-14T11:21:02.277104Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Updates a product with all optional fields set

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2NhM2EwMjUtZGZiZS00MDEzLTg3MGYtYjNmY2VhYzVkMmVlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjExNCIsInR5cCI6ImFjY2VzcyJ9.u0wGe_1O8vuwTLXynNY3Hy6ZTQ-svDFWqgsWA-i6Np0
{
  "vendor_id": "00000000-0000-0000-0000-00000000035b",
  "group_id": "00000000-0000-0000-0000-000000000224",
  "gross_weight": "9.9",
  "total_cannabinoid_unit": "PERCENT",
  "strain_id": "00000000-0000-0000-0000-000000000027",
  "inventory_tracking_method": "PACKAGE",
  "unit_serving_size": "2.2",
  "msrp": "100.5",
  "menu_visibility": "INCLUDE_IN_ALL",
  "total_cbd": "5.2",
  "sku": "45678",
  "menus": [
    "00000000-0000-0000-0000-000000000037"
  ],
  "gross_weight_unit_type_id": "00000000-0000-0000-0000-000000004b11",
  "description": "My Product Description",
  "name": "Updated Name",
  "id": "f3aa3ab5-a529-472e-9668-4fa8957ec322",
  "owner_id": "00000000-0000-0000-0000-00000000085c",
  "total_thc": "10.4",
  "brand_id": "00000000-0000-0000-0000-00000000035c",
  "unit_cost": "50.4",
  "category_id": "00000000-0000-0000-0000-000000000236",
  "tags": [
    "00000000-0000-0000-0000-000000000012"
  ],
  "quantity_available_threshold_min": "5.5",
  "is_featured": true,
  "is_inactive": true,
  "wholesale_unit_price": "90.50",
  "external_name": "External Name",
  "quantity_available_threshold_max": "10.5",
  "subcategory_id": "00000000-0000-0000-0000-000000000226",
  "upc": "036000291453",
  "unit_net_weight": "3.1",
  "unit_type_id": "00000000-0000-0000-0000-000000004b1a",
  "unit_price": "200",
  "units_per_case": "0.2",
  "unit_net_weight_and_serving_size_unit_type_id": "00000000-0000-0000-0000-000000004b13"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 904b96d85f4f711182a0954e8557f7e1-139c25defd353ef4-0
{
  "data": {
    "gross_weight": "9.9",
    "total_cannabinoid_unit": "PERCENT",
    "updated_datetime": "2026-08-14T11:21:02.447867Z",
    "category": {
      "id": "00000000-0000-0000-0000-000000000236",
      "name": "Some category 564",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": "2.2",
    "msrp": "100.5",
    "total_cbd": "5.2",
    "product_group": {
      "id": "00000000-0000-0000-0000-000000000224",
      "name": "Product Group 546"
    },
    "description_markdown": "My Product Description",
    "gross_weight_unit_type": {
      "id": "00000000-0000-0000-0000-000000004b11",
      "name": "Gram"
    },
    "sku": "45678",
    "deleted_at": null,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000037",
        "menu_name": "Menu 164"
      }
    ],
    "description": "My Product Description",
    "name": "Updated Name",
    "id": "f3aa3ab5-a529-472e-9668-4fa8957ec322",
    "total_thc": "10.4",
    "unit_cost": "50.4",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000004b1a",
      "name": "Unit"
    },
    "tags": [
      {
        "id": "00000000-0000-0000-0000-000000000012",
        "name": "Some tag 15"
      }
    ],
    "quantity_available_threshold_min": "5.5",
    "images": [],
    "is_featured": true,
    "custom_data": [],
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user2@a.com",
      "full_name": "FirstName4324 LastName4325",
      "id": "00000000-0000-0000-0000-00000000085c",
      "role": {
        "id": "00000000-0000-0000-0000-0000000008a3",
        "name": "Admin 2210"
      }
    },
    "brand": {
      "id": "00000000-0000-0000-0000-00000000035c",
      "name": "Company 1544",
      "updated_datetime": "2026-08-14T11:21:02.413856Z"
    },
    "wholesale_unit_price": 90.5,
    "external_name": "External Name",
    "vendor": {
      "id": "00000000-0000-0000-0000-00000000035b",
      "name": "Company 1541",
      "updated_datetime": "2026-08-14T11:21:02.396472Z"
    },
    "quantity_available_threshold_max": "10.5",
    "upc": "036000291453",
    "unit_net_weight": "3.1",
    "strain": {
      "id": "00000000-0000-0000-0000-000000000027",
      "name": "Strain 34",
      "strain_type": null
    },
    "is_active": false,
    "subcategory": {
      "id": "00000000-0000-0000-0000-000000000226",
      "name": "Some subcategory 548"
    },
    "unit_price": "200",
    "units_per_case": "0.2",
    "unit_net_weight_serving_size_unit_type": {
      "id": "00000000-0000-0000-0000-000000004b13",
      "name": "Ounce"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGY4MzhlM2YtZGNlNy00YTQ4LWI0MWQtZWE0YTg1MjBiNjFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODUwIiwidHlwIjoiYWNjZXNzIn0.scgs9ZY7Em8x7ULqoggmNv4ySqowLvJ6OjAYOYnKsgM
{
  "category_id": "00000000-0000-0000-0000-0000000000b1",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_ALL",
  "menus": [
    "00000000-0000-0000-0000-000000000017"
  ],
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000001fc5",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000117"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 801b4249def9c2055a0fe2a91e4e36fe-43cf426368f078f6-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:20:58.517070Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000000b1",
      "name": "Some category 175",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000017",
        "menu_name": "Menu 68"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000018",
        "menu_name": "Menu 71"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000019",
        "menu_name": "Menu 74"
      }
    ],
    "description": null,
    "name": "My Product",
    "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001fc5",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000117",
      "name": "Company 663",
      "updated_datetime": "2026-08-14T11:20:58.282478Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGY4MzhlM2YtZGNlNy00YTQ4LWI0MWQtZWE0YTg1MjBiNjFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODUwIiwidHlwIjoiYWNjZXNzIn0.scgs9ZY7Em8x7ULqoggmNv4ySqowLvJ6OjAYOYnKsgM
{
  "category_id": "00000000-0000-0000-0000-0000000000b1",
  "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "DO_NOT_INCLUDE",
  "menus": [
    "00000000-0000-0000-0000-000000000017",
    "00000000-0000-0000-0000-000000000018"
  ],
  "name": "My Product",
  "sku": "12345",
  "tags": [],
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000001fc5",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000117"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 801b4249def9c2055a0fe2a91e4e36fe-5d598cbb5de8d116-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:20:58.683138Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000000b1",
      "name": "Some category 175",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [],
    "description": null,
    "name": "My Product",
    "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001fc5",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000117",
      "name": "Company 663",
      "updated_datetime": "2026-08-14T11:20:58.282478Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGY4MzhlM2YtZGNlNy00YTQ4LWI0MWQtZWE0YTg1MjBiNjFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODUwIiwidHlwIjoiYWNjZXNzIn0.scgs9ZY7Em8x7ULqoggmNv4ySqowLvJ6OjAYOYnKsgM
{
  "category_id": "00000000-0000-0000-0000-0000000000b1",
  "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_SELECT",
  "menus": [
    "00000000-0000-0000-0000-000000000017",
    "00000000-0000-0000-0000-000000000018"
  ],
  "name": "My Product",
  "sku": "12345",
  "tags": [],
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000001fc5",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000117"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 801b4249def9c2055a0fe2a91e4e36fe-52cbf389c84427ce-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:20:58.786439Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000000b1",
      "name": "Some category 175",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000017",
        "menu_name": "Menu 68"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000018",
        "menu_name": "Menu 71"
      }
    ],
    "description": null,
    "name": "My Product",
    "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001fc5",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000117",
      "name": "Company 663",
      "updated_datetime": "2026-08-14T11:20:58.282478Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGY4MzhlM2YtZGNlNy00YTQ4LWI0MWQtZWE0YTg1MjBiNjFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODUwIiwidHlwIjoiYWNjZXNzIn0.scgs9ZY7Em8x7ULqoggmNv4ySqowLvJ6OjAYOYnKsgM
{
  "category_id": "00000000-0000-0000-0000-0000000000b1",
  "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_SELECT",
  "menus": [
    "00000000-0000-0000-0000-000000000018"
  ],
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000001fc5",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000117"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 801b4249def9c2055a0fe2a91e4e36fe-a64ebc6bff187990-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:20:58.900287Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000000b1",
      "name": "Some category 175",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000018",
        "menu_name": "Menu 71"
      }
    ],
    "description": null,
    "name": "My Product",
    "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001fc5",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000117",
      "name": "Company 663",
      "updated_datetime": "2026-08-14T11:20:58.282478Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGY4MzhlM2YtZGNlNy00YTQ4LWI0MWQtZWE0YTg1MjBiNjFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODUwIiwidHlwIjoiYWNjZXNzIn0.scgs9ZY7Em8x7ULqoggmNv4ySqowLvJ6OjAYOYnKsgM
{
  "category_id": "00000000-0000-0000-0000-0000000000b1",
  "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_SELECT",
  "menus": [],
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000001fc5",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000117"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 801b4249def9c2055a0fe2a91e4e36fe-86f184de61cadc4c-0
{
  "data": {
    "gross_weight": null,
    "total_cannabinoid_unit": null,
    "updated_datetime": "2026-08-14T11:20:58.970200Z",
    "category": {
      "id": "00000000-0000-0000-0000-0000000000b1",
      "name": "Some category 175",
      "official_product_category_id": "OTHER"
    },
    "unit_serving_size": null,
    "msrp": null,
    "total_cbd": null,
    "product_group": null,
    "description_markdown": null,
    "gross_weight_unit_type": null,
    "sku": "12345",
    "deleted_at": null,
    "menus": [],
    "description": null,
    "name": "My Product",
    "id": "3dd96f16-2e10-48f6-a287-c9d72c489040",
    "total_thc": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001fc5",
      "name": "Gram"
    },
    "tags": [],
    "quantity_available_threshold_min": null,
    "images": [],
    "is_featured": false,
    "custom_data": [],
    "owner": null,
    "brand": null,
    "wholesale_unit_price": null,
    "external_name": null,
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000117",
      "name": "Company 663",
      "updated_datetime": "2026-08-14T11:20:58.282478Z"
    },
    "quantity_available_threshold_max": null,
    "upc": "036000291452",
    "unit_net_weight": null,
    "strain": null,
    "is_active": true,
    "subcategory": null,
    "unit_price": "100",
    "units_per_case": null,
    "unit_net_weight_serving_size_unit_type": null
  }
}

POST /public/v1/products Error pointers are properly transformed to reflect the field name that our api users expect

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGU4MjA1N2YtMTIzOC00ZTk4LTk2NjgtMDI3YWZkNzAxMTRlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTc0MiIsInR5cCI6ImFjY2VzcyJ9.ch568p0UWLfUhB7krGGg9wAxQ5pEQUpMvqSlfu7tDLc
{
  "id": "21955bdf-055a-446a-aebc-2d7cf4c759e4",
  "menu_visibility": "INCLUDE_IN_ALL",
  "quantity_available_threshold_max": "-4.5",
  "quantity_available_threshold_min": "-5.5",
  "unit_net_weight": "3.1",
  "unit_serving_size": "5.2"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 1724116a7f5b3d7d674d1074bf393a4f-cb5cbee27942f88c-0
{
  "errors": [
    {
      "context": {
        "id": "21955bdf-055a-446a-aebc-2d7cf4c759e4"
      },
      "message": "A unit type needs to be selected when setting Unit Net Weight/Volume or Unit Serving Size",
      "pointer": [
        "unit_net_weight_and_serving_size_unit_type_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "21955bdf-055a-446a-aebc-2d7cf4c759e4"
      },
      "message": "Unit Serving Size can't be greater than Unit Net Weight/Volume",
      "pointer": [
        "unit_serving_size"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "21955bdf-055a-446a-aebc-2d7cf4c759e4"
      },
      "message": "Cannot be negative",
      "pointer": [
        "quantity_available_threshold_max"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "21955bdf-055a-446a-aebc-2d7cf4c759e4"
      },
      "message": "Cannot be negative",
      "pointer": [
        "quantity_available_threshold_min"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/products Errors when threshold max is less than threshold min

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGM5YWE1Y2UtMTg5Ny00MzdlLWE0YmItMTQ3NjhjMmU1ZWYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA4MSIsInR5cCI6ImFjY2VzcyJ9.oqgu0HalV56h37ngm7aD2xX8mXykhZIHy16j_8ctP-k
{
  "id": "d0f474a9-5c21-48ee-8581-55fe787cf003",
  "quantity_available_threshold_max": "4.5",
  "quantity_available_threshold_min": "5.5"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 054a803644684175e23f64c729765791-c1b6f2d331c14a95-0
{
  "errors": [
    {
      "context": {
        "id": "d0f474a9-5c21-48ee-8581-55fe787cf003"
      },
      "message": "Must be greater than threshold min",
      "pointer": [
        "quantity_available_threshold_max"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "d0f474a9-5c21-48ee-8581-55fe787cf003"
      },
      "message": "Must be less than threshold max",
      "pointer": [
        "quantity_available_threshold_min"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/products Cannot use associations from another company

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGZjY2ZiZjEtYzhjOC00NjkwLThjOGMtYzlkMjBhODBmZjE5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjIxMSIsInR5cCI6ImFjY2VzcyJ9.OBY6y5bL7E1vhllj2rvP9Wr7dR07cdELJw1bE7QfaAk
{
  "brand_id": "00000000-0000-0000-0000-00000000038f",
  "category_id": "00000000-0000-0000-0000-000000000256",
  "cbd": "5.2",
  "description": "My Product Description",
  "description_markdown": "# My Product Description Markdown",
  "group_id": "00000000-0000-0000-0000-000000000247",
  "inventory_tracking_method": "PACKAGE",
  "is_featured": true,
  "is_inactive": true,
  "menu_visibility": "INCLUDE_IN_ALL",
  "menus": [
    "00000000-0000-0000-0000-00000000003b",
    "00000000-0000-0000-0000-00000000003c",
    "00000000-0000-0000-0000-00000000003d"
  ],
  "msrp": "100.5",
  "name": "My Product",
  "owner_id": "00000000-0000-0000-0000-0000000008a8",
  "quantity_available_threshold_max": "10.5",
  "quantity_available_threshold_min": "5.5555",
  "sku": "12345",
  "strain_id": "00000000-0000-0000-0000-000000000028",
  "subcategory_id": "00000000-0000-0000-0000-000000000249",
  "tags": [
    "00000000-0000-0000-0000-000000000013",
    "00000000-0000-0000-0000-000000000014",
    "00000000-0000-0000-0000-000000000015"
  ],
  "thc": "10.4",
  "unit_cost": "50.4",
  "unit_net_weight": "3.1",
  "unit_net_weight_and_serving_size_unit_type_id": "00000000-0000-0000-0000-000000004f03",
  "unit_price": "100",
  "unit_serving_size": "2.2",
  "unit_type_id": "00000000-0000-0000-0000-000000004f0a",
  "units_per_case": "0.2",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-00000000038b",
  "wholesale_unit_price": "90.50"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: c41a94210d72555ec368c50ef8e6bbc8-946b0a2956e17c58-0
{
  "errors": [
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Brand does not exist",
      "pointer": [
        "brand_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Category does not exist",
      "pointer": [
        "category_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Vendor does not exist",
      "pointer": [
        "vendor_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Group does not exist",
      "pointer": [
        "group_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Serving unit type does not exist",
      "pointer": [
        "unit_net_weight_and_serving_size_unit_type_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Owner does not exist",
      "pointer": [
        "owner_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Strain does not exist",
      "pointer": [
        "strain_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Subcategory does not belong to the product category",
      "pointer": [
        "subcategory_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "One or more of the provided tags do not exist",
      "pointer": [
        "tags"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "272060b0-ba25-49cc-b5e1-5ea6e1314132"
      },
      "message": "Unit type does not exist",
      "pointer": [
        "unit_type_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Menu does not exist",
      "pointer": [
        "menus",
        0,
        "00000000-0000-0000-0000-00000000003b"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Menu does not exist",
      "pointer": [
        "menus",
        1,
        "00000000-0000-0000-0000-00000000003c"
      ],
      "section": "body"
    }
  ]
}

Upsert a single product. To update an existing product, pass in an existing product ID in the id field. When updating a product, you must pass in all fields (no sparse update currently supported).Any existing tag you do not pass in to tags will be deleted. If the menu_visibility field isset to INCLUDE_IN_SELECT, any existing menu that you do not pass into menus will be deleted. Required permission: products_permissions_create to create a new product, products_permissions_edit (and access to the product under team restrictions) to update an existing product.

Request

POST /public/v1/products

Parameters

Parameter Description In Type Required Default Example
id Unique ID for this product. If it exists, an update will be performed; otherwise, it will be used as the ID of a new product record query string false
inventory_tracking_method Once the tracking method is set for a product, it cannot be changed. The tracking method can be one of the following: PACKAGE: The inventory will be defined by packages. PRODUCT: Not grouped in any manner. The inventory simply exists on your product that you can add or remove as you transact. BATCH: Grouped by batches. Batches share common traits such as expiration dates and test results. query string false PACKAGE
sku Stock Keeping Unit (SKU) for this product query string false SKU123
name Name of the product query string false King Size Pre-rolls
vendor_id The ID of the company_relationship association with the vendor (company) that supplies this product. query string false
category_id The ID of the product category of the product. query string false
external_name Customer-facing name for DistruCommerce menus and Order Tracker. Defaults to Product Name if left blank query string false
unit_type_id The ID of the unit type the product. query string false
unit_price The sale price of the product per unit. query number false
description Description of the product. If this field is provided and description_markdown is not, the description field will overwrite any existing description_markdown field. query string false A pack of 5 pre-rolls
description_markdown The description of the product in markdown format. If this field is provided, description must also be provided. The markdown display only supports italic, bold, strikethrough and links. Use any other markdown formatting at your own risk. query string false A pack of 5 pre-rolls
upc Universal Product Code (UPC) for this product query string false 123456789012
subcategory_id The ID of the product subcategory of the product. The provided subcategory must be a child of the provided category. query string false
group_id The ID of the product's group. query string false
brand_id The ID of the company_relationship association with the brand (company) that is associated with this product. query query false
quantity_available_threshold_min The minimum quantity of the product you'd like to maintain. When the product inventory count dips below this number, it will automatically be included in scheduled Low Inventory Reports. query number false
quantity_available_threshold_max The maximum quantity of the product you'd like to maintain. When the product inventory count exceeds this number, it will automatically be included in scheduled Inventory Reports. query number false
units_per_case The number of units in a case of the product. query number false
unit_cost The cost of the product per unit. query number false
msrp The Manufacturer's Suggested Retail Price (MSRP) of the product per unit. If you have POS integrations enabled in Distru, this may be synced to your POS query number false
wholesale_unit_price The wholesale price of the product per unit. query number false
is_featured Whether the product is featured. Featured products will be displayed at the top of menus. query boolean false
strain_id The ID of the strain associated with the product. query string false
owner_id The ID of the user that is deemed to be the owner of the product. query string false
is_inactive Whether the product is inactive from use. Inactive products can be set to active at any time. query boolean false
total_cannabinoid_unit The unit of the THC/CBD content of the product (MG or PERCENT). query string false
total_thc The THC content of the product in the unit specified by total_cannabinoid_unit. Must also include total_cannabinoid_unit. query string false
total_cbd The CBD content of the product in the unit specified by total_cannabinoid_unit. Must also include total_cannabinoid_unit. query string false
menu_visibility This key is responsible for which menus (if any) the product will be displayed in. DO_NOT_INCLUDE: The product will not be displayed in any menus. INCLUDE_IN_ALL: The product will be displayed in all menus. INCLUDE_IN_SELECT: The product will be displayed in menus that have been explicitly selected (passed into the menus list). query string false
unit_net_weight The net weight of the product per unit. query number false
unit_serving_size The serving size of the product per unit. query number false
unit_net_weight_and_serving_size_unit_type_id The ID of the unit type that the net quantity per unit and serving size are measured in. This field should be null unless the product's unit type is count-based. If this field is set, the act of changing the category from 'Unit' will throw an error. query string false
gross_weight The gross weight of the product. Must be set together with gross_weight_unit_type_id. query number false
gross_weight_unit_type_id The ID of the weight unit type the gross weight is measured in. Must be a weight-based unit type supported by Metrc, and set together with gross_weight. query string false
tags A list of tags associated with the product. query array false ["0ef8347c-b714-4cd9-ba0e-872488bc9244", "daa0294c-833c-42bd-a133-b4c9e7f64017"]
menus A list of menus you would like this product to be included in. This field will only be used if the menu_visibility key is set to INCLUDE_IN_SELECT. query array false ["0ef8347c-b714-4cd9-ba0e-872488bc9244", "daa0294c-833c-42bd-a133-b4c9e7f64017"]
custom_data Custom data for this product body object false

Responses

Status Description Schema
200 A single product Product

ProductCategory

Delete a product category

DELETE /public/v1/product-categories/:id soft-deletes a product category

DELETE /public/v1/product-categories/00000000-0000-0000-0000-00000000000e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzJhN2I5MzEtNTA2Zi00ZjQ2LWJhNzItMzRjN2NhZTgwMzllIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NzEiLCJ0eXAiOiJhY2Nlc3MifQ.uYhlZfv_6Ijhcjj3Svk24ESwM6-UE15irFI8pk8iY50

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 421b543108622cf82e56ee4c985db902-c9e28db392bcf288-0

Deletes the product category. This is a soft delete: the record's deleted_at is set and it is no longer returned by the API, but it is retained in the database.

Required permission: settings_permissions_product_categories.

Request

DELETE /public/v1/product-categories/{id}

Parameters

Parameter Description In Type Required Default Example
id Product category ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a product category

GET /public/v1/product-categories/:id returns a single product category with embedded subcategories

GET /public/v1/product-categories/00000000-0000-0000-0000-000000000042
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTExN2ViYjgtNzAzYi00OWVkLWEzOGQtMjMzYjZlNWQ5OTNiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0IiwidHlwIjoiYWNjZXNzIn0.R5xDkCbehioNq-rvgfZWjCft0TweiqmMXmOMvxn36k4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 36595df0a7db3154e6cdad3da8cdad12-b15fc10ec280339b-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000042",
    "inserted_datetime": "2026-08-14T11:20:56.536580Z",
    "name": "Edibles",
    "official_product_category_id": "OPC_5",
    "subcategories": [
      {
        "id": "00000000-0000-0000-0000-00000000003b",
        "name": "Gummies"
      }
    ],
    "updated_datetime": "2026-08-14T11:20:56.536580Z"
  }
}

Get a single product category given the ID.

Required permission: settings_permissions_product_categories.

Request

GET /public/v1/product-categories/{id}

Parameters

Parameter Description In Type Required Default Example
id Product category ID path string true

Responses

Status Description Schema
200 A single product category ProductCategory
404 Not Found

Get product categories

GET /public/v1/product-categories returns paginated product categories with embedded subcategories

GET /public/v1/product-categories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTA1ZGE2ZTctMDNhNi00MGIxLWE5Y2EtODA1YWY1YTg2MjBhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg2IiwidHlwIjoiYWNjZXNzIn0.yAvUOndhvND4W6-eZghkN9PSJjQN8cvHpQYS_OnnvxA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d64a85f7364e96331b5f3b33ef0cbe21-541e016d3c482722-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-00000000004a",
      "inserted_datetime": "2025-01-01T00:00:00.000000Z",
      "name": "PC1",
      "official_product_category_id": "OPC_6",
      "subcategories": [
        {
          "id": "00000000-0000-0000-0000-000000000046",
          "name": "SC1"
        }
      ],
      "updated_datetime": "2026-08-14T11:20:56.672455Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000004b",
      "inserted_datetime": "2025-01-02T00:00:00.000000Z",
      "name": "PC2",
      "official_product_category_id": "OPC_6",
      "subcategories": [],
      "updated_datetime": "2026-08-14T11:20:56.674512Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000004c",
      "inserted_datetime": "2025-01-03T00:00:00.000000Z",
      "name": "PC3",
      "official_product_category_id": "OPC_6",
      "subcategories": [],
      "updated_datetime": "2026-08-14T11:20:56.676052Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/product-categories?page[number]=2"
}

List product categories for the authenticated company.

Required permission: settings_permissions_product_categories.

Request

GET /public/v1/product-categories

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of product categories ProductCategories

Upsert a product category

POST /public/v1/product-categories creates a product category

POST /public/v1/product-categories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzJhMzUzOTItZjQ1Ni00MTQ1LWJkYWUtZjdhNjViYWM2ODliIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzEzIiwidHlwIjoiYWNjZXNzIn0.BINuCTV-X51VK5PbjhKeFFhvtNs8nYHKZFr3Yl_ZAQE
{
  "name": "Edibles",
  "official_product_category_id": "OPC_3"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: be32c4c3d8afb1003c8820db1a3a7324-b196e7c0f4c3fee6-0
{
  "data": {
    "id": "00000000-0000-0000-0000-00000000003c",
    "inserted_datetime": "2026-08-14T11:20:56.448188Z",
    "name": "Edibles",
    "official_product_category_id": "OPC_3",
    "subcategories": [],
    "updated_datetime": "2026-08-14T11:20:56.448188Z"
  }
}

POST /public/v1/product-categories (update) updates a product category

POST /public/v1/product-categories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzJlYjAxZjctNjQwMy00ODlmLTk2NGUtZjM1OWY3ZjBlMjdjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTcxIiwidHlwIjoiYWNjZXNzIn0.YYfDdiS1C-rgvH5cPpe_393dzjy1jhHlTNUuuijPdcg
{
  "id": "00000000-0000-0000-0000-000000000020",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b4e8e1e8d9f81bff56a816718f1a99b0-7ec56ae221acd391-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000020",
    "inserted_datetime": "2026-08-14T11:20:55.949338Z",
    "name": "New",
    "official_product_category_id": "OTHER",
    "subcategories": [],
    "updated_datetime": "2026-08-14T11:20:55.962318Z"
  }
}

Upsert a single product category. To update an existing product category, pass its ID in the id field. If you do not pass an ID, a new product category is created. When creating, name and official_product_category_id are required. The official_product_category_id cannot be changed once set.

Required permission: settings_permissions_product_categories.

Request

POST /public/v1/product-categories

Parameters

Parameter Description In Type Required Default Example
id Product category ID. If given, the matching product category is updated; otherwise a new one is created. query string false
name The name of the product category query string true
official_product_category_id The official product category ID this category maps to query string true

Responses

Status Description Schema
200 The updated product category ProductCategory
201 The created product category ProductCategory
400 Invalid parameters
404 Not Found

ProductGroup

Delete a product group

DELETE /public/v1/product-groups/:id deletes a product group

DELETE /public/v1/product-groups/00000000-0000-0000-0000-000000000001
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTJkMmYzOTUtMWU5My00OTJkLWE5NjktZjhkNTEwMjdkOWFlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NyIsInR5cCI6ImFjY2VzcyJ9.r37ETmJqHZR0FG3qEL82gG_HALrkIzAPin5qXrPDV6U

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 9f94b30ff9f8dac68aefdadec60aa885-4ea604ec48d417ff-0

Permanently deletes the product group. This is a hard delete: the record is removed from the database and cannot be recovered.

Required permission: settings_permissions_product_groups.

Request

DELETE /public/v1/product-groups/{id}

Parameters

Parameter Description In Type Required Default Example
id Product group ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a product group

GET /public/v1/product-groups/:id returns a single product group

GET /public/v1/product-groups/00000000-0000-0000-0000-000000000036
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmMxOTk3NGYtZjk0Mi00N2VhLWJkN2QtZGIwNWE2YzNiMzAyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzI0IiwidHlwIjoiYWNjZXNzIn0.azGHVm_ezjKSAyrSa-dUBKr18UZDKtqgS2QVBfknvVE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 31d6eef243bcae772c8f1727a22a4520-3e34c73a0edd5e16-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000036",
    "inserted_datetime": "2026-08-14T11:20:56.472432Z",
    "name": "Flower - Indoor",
    "updated_datetime": "2026-08-14T11:20:56.472432Z"
  }
}

Get a single product group given the ID.

Required permission: settings_permissions_product_groups.

Request

GET /public/v1/product-groups/{id}

Parameters

Parameter Description In Type Required Default Example
id Product group ID path string true

Responses

Status Description Schema
200 A single product group ProductGroup
404 Not Found

Get product groups

GET /public/v1/product-groups returns paginated product groups for the company with next_page

GET /public/v1/product-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzVhODM4NTQtZWM3Mi00YmQ1LWE2MzEtNjQxOTc1ODUyZDdkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY0IiwidHlwIjoiYWNjZXNzIn0.gGDfTkDaBLOn_G4Hfvd_T0PtRat4IgK7_1XK3mkQfWE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6f63bb4857c19500b81f7cff0218acd2-1fb9d6fd5dde21c9-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-00000000003d",
      "inserted_datetime": "2026-08-14T11:20:56.599229Z",
      "name": "PG1",
      "updated_datetime": "2026-08-14T11:20:56.599229Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000003e",
      "inserted_datetime": "2026-08-14T11:20:56.599690Z",
      "name": "PG2",
      "updated_datetime": "2026-08-14T11:20:56.599690Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000003f",
      "inserted_datetime": "2026-08-14T11:20:56.600046Z",
      "name": "PG3",
      "updated_datetime": "2026-08-14T11:20:56.600046Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/product-groups?page[number]=2"
}

List product groups for the authenticated company.

Required permission: settings_permissions_product_groups.

Request

GET /public/v1/product-groups

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of product groups ProductGroups

Upsert a product group

POST /public/v1/product-groups creates a product group

POST /public/v1/product-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2RkYWU4YzMtZGYzMS00ZTY1LTk3OGUtMWRkNDc2ZWRjYjIzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg5IiwidHlwIjoiYWNjZXNzIn0.UKNrM8In7OB_EpGlEqay2B1ed9oT13W7XP3kssDCp_c
{
  "name": "Flower - Indoor"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9c23ec9fd6b4aecccb0c6de4ec882c1e-ca6ce693443bf6bb-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000031",
    "inserted_datetime": "2026-08-14T11:20:56.362998Z",
    "name": "Flower - Indoor",
    "updated_datetime": "2026-08-14T11:20:56.362998Z"
  }
}

POST /public/v1/product-groups (update) updates a product group

POST /public/v1/product-groups
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODJiNDQ2MjUtYWFjZi00MzgxLTk3OTMtZjNkZDMwNDAzNGNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTUwIiwidHlwIjoiYWNjZXNzIn0.Ilp-KTEd0Z-VMZ-06Ry9hL4_8PPO-lRouJWvXPILxqw
{
  "id": "00000000-0000-0000-0000-000000000019",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 22b8ca2db0e610e131dcb90018ea8849-6396111fb85ac73a-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000019",
    "inserted_datetime": "2026-08-14T11:20:55.877878Z",
    "name": "New",
    "updated_datetime": "2026-08-14T11:20:55.885588Z"
  }
}

Upsert a single product group. To update an existing product group, pass its ID in the id field. If you do not pass an ID, a new product group is created.

Required permission: settings_permissions_product_groups.

Request

POST /public/v1/product-groups

Parameters

Parameter Description In Type Required Default Example
id Product group ID. If given, the matching product group is updated; otherwise a new one is created. query string false
name The name of the product group query string true

Responses

Status Description Schema
200 The updated product group ProductGroup
201 The created product group ProductGroup
400 Invalid parameters
404 Not Found

ProductPosMapping

Create or update a product POS mapping

POST /public/v1/product-pos-mappings (upsert) creates a new Blaze mapping

POST /public/v1/product-pos-mappings
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTE0MTk2ODktZjBkZi00MjYyLWIyY2EtMzk4NjY5NGRhYzk0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTI5OCIsInR5cCI6ImFjY2VzcyJ9.O6dDPdx_0DrL0XuCZXUmAFbHAUuD3wdCebtVM6uT1mM
{
  "blaze_product_id": "blaze_123",
  "blaze_retailer_id": "0c4e1aed-0215-4e3a-8d30-72db34ee94a2",
  "product_id": "d6caae54-61a0-48d7-81a4-081f684d15dc"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d336c6028cfcbe964d40609cb0f0fcfd-496624f3d8b62683-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_123",
    "blaze_retailer_id": "0c4e1aed-0215-4e3a-8d30-72db34ee94a2",
    "id": "00000000-0000-0000-0000-000000000007",
    "inserted_datetime": "2026-08-14T11:20:59.613486Z",
    "pos_type": "BLAZE",
    "product_id": "d6caae54-61a0-48d7-81a4-081f684d15dc",
    "updated_datetime": "2026-08-14T11:20:59.613486Z"
  }
}

POST /public/v1/product-pos-mappings (upsert) updates an existing mapping (upsert behavior)

POST /public/v1/product-pos-mappings
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjgxZGU0MDMtNWY2MS00ZmI5LWIyZTUtYzQzOTgyNzYwNDAwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjI5IiwidHlwIjoiYWNjZXNzIn0.tvD5tp0bqzWO3PglofopQvHRIJdDoFWmLFelvqwfl7I
{
  "blaze_product_id": "blaze_456",
  "blaze_retailer_id": "d18b92b5-9a00-4661-99c6-365c35adb464",
  "product_id": "341f9777-dc50-46f3-bb6d-dbcb1ec693ce"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8a9705357669b668728c8d05a9374f63-627f28a7152342f4-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_456",
    "blaze_retailer_id": "d18b92b5-9a00-4661-99c6-365c35adb464",
    "id": "00000000-0000-0000-0000-000000000001",
    "inserted_datetime": "2026-08-14T11:20:57.615698Z",
    "pos_type": "BLAZE",
    "product_id": "341f9777-dc50-46f3-bb6d-dbcb1ec693ce",
    "updated_datetime": "2026-08-14T11:20:57.654002Z"
  }
}

Upserts a POS mapping - creates if new, updates if exists.

The system determines if a mapping already exists by checking for an existing mapping with the same product_id and retailer_id combination. If found, it updates the existing mapping. If not found, it creates a new mapping.

Returns 201 for new mappings, 200 for updates.

Required permission: products_permissions_edit.

Request

POST /public/v1/product-pos-mappings

Parameters

Parameter Description In Type Required Default Example
mapping POS mapping data body UpsertProductPosMapping true

Responses

Status Description Schema
200 Updated existing mapping ProductPosMappingResponse
201 Created new mapping ProductPosMappingResponse
400 Bad Request
401 Unauthorized

Delete a product POS mapping

DELETE /public/v1/product-pos-mappings/:id deletes a POS mapping

DELETE /public/v1/product-pos-mappings/00000000-0000-0000-0000-000000000008
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTFkMGRiOWQtNjBkZC00MmE1LTg2NGUtZWU4Y2ZmNjJmYTk2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTM2OSIsInR5cCI6ImFjY2VzcyJ9.QRxeVfryGkFly9joI62f0LAj1OcL6hkVB2HDD8JcdL8

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 3edbedb131e0c90b1967fc62bd31e163-80e4be93e3ca3a13-0

Required permission: products_permissions_edit.

Request

DELETE /public/v1/product-pos-mappings/{id}

Parameters

Parameter Description In Type Required Default Example
id Mapping ID path string true

Responses

Status Description Schema
204 No Content
401 Unauthorized
404 Not Found

Get a product POS mapping

GET /public/v1/product-pos-mappings/:id returns a single product POS mapping

GET /public/v1/product-pos-mappings/00000000-0000-0000-0000-000000000004
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGZkYjJjMDAtMWY0MC00MjE3LWE3OGMtYWJmN2I4ZTNmYWZiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTAwOSIsInR5cCI6ImFjY2VzcyJ9.i6Kmdkc5x7_IszZsqFqaKtUhmdRRMnm9_Z3rImL58VA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b186d23237c58b5b988867f7b24f0972-02555ae9c2adc524-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_123",
    "blaze_retailer_id": "4d95eeb9-cf36-458b-89c0-e6ac071b08c7",
    "id": "00000000-0000-0000-0000-000000000004",
    "inserted_datetime": "2026-08-14T11:20:58.871647Z",
    "pos_type": "BLAZE",
    "product_id": "31242c3a-7ec3-4bee-b692-796c3957f2ff",
    "updated_datetime": "2026-08-14T11:20:58.871647Z"
  }
}

Get a single product POS mapping given the ID.

Required permission: products_permissions_view.

Request

GET /public/v1/product-pos-mappings/{id}

Parameters

Parameter Description In Type Required Default Example
id Product POS Mapping ID path string true

Responses

Status Description Schema
200 A single product POS mapping ProductPosMappingResponse
404 Not Found

List product POS mappings

GET /public/v1/product-pos-mappings returns all POS mappings for company products and supports filtering

GET /public/v1/product-pos-mappings
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWI0MjY5OTUtZTJjZC00ZDFhLTk0MWQtYWVjNzBlN2VmNjE4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQzMSIsInR5cCI6ImFjY2VzcyJ9.t9cqo2fIN3Ys4sLFgOfcv4ui12Dv7OuhofpcoqbQuJ0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 561177ded505886febba4f10b3741833-c2c797f68bdf1d2f-0
{
  "data": [
    {
      "blaze_asset_id": null,
      "blaze_product_id": "blaze_123",
      "blaze_retailer_id": "418de616-bda5-4c38-8759-291617aa9ba3",
      "id": "00000000-0000-0000-0000-000000000009",
      "inserted_datetime": "2026-08-14T11:20:59.905934Z",
      "pos_type": "BLAZE",
      "product_id": "47f3364b-3723-48da-b772-15de8d4f642b",
      "updated_datetime": "2026-08-14T11:20:59.905934Z"
    },
    {
      "dutchie_product_id": 456,
      "dutchie_retailer_id": "a72c2cc8-0d5f-48ac-9342-ae52c69fc395",
      "id": "00000000-0000-0000-0000-00000000000a",
      "inserted_datetime": "2026-08-14T11:20:59.930786Z",
      "pos_type": "DUTCHIE",
      "product_id": "c95a6ec1-fd2e-4b67-940e-3f30df3d750e",
      "updated_datetime": "2026-08-14T11:20:59.930786Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/product-pos-mappings?page[number]=2"
}

Get POS mappings with optional filtering by product_id or retailer_id. Required permission: products_permissions_view.

Request

GET /public/v1/product-pos-mappings

Parameters

Parameter Description In Type Required Default Example
product_id Filter by product ID query string false
blaze_retailer_id Filter by Blaze retailer ID query string false
dutchie_retailer_id Filter by Dutchie retailer ID query string false
treez_retailer_id Filter by Treez retailer ID query string false

Responses

Status Description Schema
200 Success ProductPosMappingsResponse
400 Bad Request
401 Unauthorized

ProductSubcategory

Delete a product subcategory

DELETE /public/v1/product-subcategories/:id deletes the subcategory while leaving its siblings intact

DELETE /public/v1/product-subcategories/00000000-0000-0000-0000-000000000024
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmVhZmU3OTEtYmE0NC00ZDFlLWJhOTYtN2ZkNDU0ODk0ZWMyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA1IiwidHlwIjoiYWNjZXNzIn0.Q0YXQvF9Q1wx71aYdoQYJAcmXjjFfJ2s1PcxXji7LvA

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 00324f1cdd0774d5bce2f0b95f07ec48-d9a135dbabdb5498-0

Permanently deletes the product subcategory. Unlike product categories, subcategories are hard deleted: the record is removed from the database and cannot be recovered.

Required permission: settings_permissions_product_categories.

Request

DELETE /public/v1/product-subcategories/{id}

Parameters

Parameter Description In Type Required Default Example
id Product subcategory ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a product subcategory

GET /public/v1/product-subcategories/:id returns a single subcategory with embedded compact category

GET /public/v1/product-subcategories/00000000-0000-0000-0000-000000000035
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzczNjY0ZGMtYzNlMC00ZjRjLTg1ODUtYTI1Y2E5ZjllYmIwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk2IiwidHlwIjoiYWNjZXNzIn0.qbyIBVIRGmY-K1j79rHqESm4-ouMVwdHTgciZfy98mA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f189752e1c9dbb8e4c628ff0156d6a8b-cf621f1b16c825eb-0
{
  "data": {
    "category": {
      "id": "00000000-0000-0000-0000-00000000003a",
      "name": "Edibles",
      "official_product_category_id": "OPC_2"
    },
    "id": "00000000-0000-0000-0000-000000000035",
    "inserted_datetime": "2026-08-14T11:20:56.411222Z",
    "name": "Gummies",
    "updated_datetime": "2026-08-14T11:20:56.411222Z"
  }
}

Get a single product subcategory given the ID.

Required permission: settings_permissions_product_categories.

Request

GET /public/v1/product-subcategories/{id}

Parameters

Parameter Description In Type Required Default Example
id Product subcategory ID path string true

Responses

Status Description Schema
200 A single product subcategory ProductSubcategory
404 Not Found

Get product subcategories

GET /public/v1/product-subcategories returns paginated subcategories for the company with next_page and category filter

GET /public/v1/product-subcategories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTM3YjBkZjYtYTQwOS00ZDkxLWJiZDYtNjI1MjM2MTg5YjIzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQwIiwidHlwIjoiYWNjZXNzIn0.NMbfgfSaSufz9qANpyeQ96O_fKZG656wP8-7EhlWMps

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 91cdac13fc4c3d9108c20424c3f44dff-95597a569b5f1829-0
{
  "data": [
    {
      "category": {
        "id": "00000000-0000-0000-0000-00000000003f",
        "name": "C1",
        "official_product_category_id": "OPC_4"
      },
      "id": "00000000-0000-0000-0000-000000000038",
      "inserted_datetime": "2025-01-01T00:00:00.000000Z",
      "name": "SC1",
      "updated_datetime": "2026-08-14T11:20:56.534086Z"
    },
    {
      "category": {
        "id": "00000000-0000-0000-0000-00000000003f",
        "name": "C1",
        "official_product_category_id": "OPC_4"
      },
      "id": "00000000-0000-0000-0000-000000000039",
      "inserted_datetime": "2025-01-02T00:00:00.000000Z",
      "name": "SC2",
      "updated_datetime": "2026-08-14T11:20:56.547243Z"
    },
    {
      "category": {
        "id": "00000000-0000-0000-0000-00000000003f",
        "name": "C1",
        "official_product_category_id": "OPC_4"
      },
      "id": "00000000-0000-0000-0000-00000000003c",
      "inserted_datetime": "2025-01-03T00:00:00.000000Z",
      "name": "SC3",
      "updated_datetime": "2026-08-14T11:20:56.561076Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/product-subcategories?page[number]=2"
}

List product subcategories for the authenticated company.

Optionally filter by parent category with ?category_id=.

Required permission: settings_permissions_product_categories.

Request

GET /public/v1/product-subcategories

Parameters

Parameter Description In Type Required Default Example
category_id Only return subcategories belonging to this product category ID query string false
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of product subcategories ProductSubcategories

Upsert a product subcategory

POST /public/v1/product-subcategories creates a subcategory and returns the embedded compact category

POST /public/v1/product-subcategories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjNmMzRjNjctMWI0My00NzU0LTg4NzQtNjg5ODIyZjUwMzA4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjQ2IiwidHlwIjoiYWNjZXNzIn0.lHcNmJkC2WvCXnh3HuVampAqoCqaWrIcf-GcXgrqo7w
{
  "name": "Gummies",
  "product_category_id": "00000000-0000-0000-0000-000000000031"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f6ea5d43d40701b6eab0f4f38f31f660-318e9d2d06b7b7bc-0
{
  "data": {
    "category": {
      "id": "00000000-0000-0000-0000-000000000031",
      "name": "Edibles",
      "official_product_category_id": "OPC_1"
    },
    "id": "00000000-0000-0000-0000-00000000002b",
    "inserted_datetime": "2026-08-14T11:20:56.246534Z",
    "name": "Gummies",
    "updated_datetime": "2026-08-14T11:20:56.246534Z"
  }
}

POST /public/v1/product-subcategories (update) updates a subcategory

POST /public/v1/product-subcategories
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGNmMDY0OTMtZGFkMS00OTQyLWIzZGYtNjQ5NGIzMmZlYWYyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQwIiwidHlwIjoiYWNjZXNzIn0.F5mwzPW7sDLgzMMxSqxrgvFxzrHaQUdk-zOaqjITO2U
{
  "id": "00000000-0000-0000-0000-00000000004f",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 90883021ef614211dbad722cc13bac6f-7d1af4651373244d-0
{
  "data": {
    "category": {
      "id": "00000000-0000-0000-0000-000000000059",
      "name": "Some category 87",
      "official_product_category_id": "OTHER"
    },
    "id": "00000000-0000-0000-0000-00000000004f",
    "inserted_datetime": "2026-08-14T11:20:56.841480Z",
    "name": "New",
    "updated_datetime": "2026-08-14T11:20:56.848245Z"
  }
}

Upsert a single product subcategory. To update an existing product subcategory, pass its ID in the id field. If you do not pass an ID, a new product subcategory is created. When creating, name and product_category_id are required. The parent category cannot be changed once set.

Required permission: settings_permissions_product_categories.

Request

POST /public/v1/product-subcategories

Parameters

Parameter Description In Type Required Default Example
id Product subcategory ID. If given, the matching product subcategory is updated; otherwise a new one is created. query string false
name The name of the product subcategory query string true
product_category_id The ID of the product category this subcategory belongs to query string true

Responses

Status Description Schema
200 The updated product subcategory ProductSubcategory
201 The created product subcategory ProductSubcategory
400 Invalid parameters
404 Not Found

Purchase

Get a purchase

GET /public/v1/purchases/:id returns a single purchase with its active payments

GET /public/v1/purchases/00000000-0000-0000-0000-000000000016
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmZhMGVhMGYtYmM3Ny00YWNkLWI5NGUtMGQzMmNmZDY1NmU3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTIxOCIsInR5cCI6ImFjY2VzcyJ9.R8dlcBWQGwEkuGbs_BjmWytXqH7OxgXKf025YNTAJB4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f28c8bb7397506309c5e804b46e82e5f-1aa4b2daecf40e74-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000003c0",
      "id": "00000000-0000-0000-0000-000000000142",
      "license_id": null,
      "license_number": null,
      "name": "Place 321"
    },
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-0000000001cb",
      "name": "Company 963",
      "updated_datetime": "2026-08-14T11:20:59.404125Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2026-08-14T11:20:59.472683Z",
    "id": "00000000-0000-0000-0000-000000000016",
    "inserted_datetime": "2026-08-14T11:20:59.473617Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000000f6",
          "name": "B822"
        },
        "compliance_quantity": null,
        "id": "2870c790-662f-4347-8a5f-c41fba971c32",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000003c0",
          "id": "00000000-0000-0000-0000-00000000013f",
          "license_id": null,
          "name": "Place 317"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "a5a6b782-1bfa-4bed-86fa-360bc06eae97",
          "name": "Product 789",
          "sku": "sku 790",
          "updated_datetime": "2026-08-14T11:20:59.487595Z"
        },
        "quantity": "15.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000000f7",
          "name": "B823"
        },
        "compliance_quantity": null,
        "id": "9af7e161-b5d9-4ac0-b41a-241288ffa2ae",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000003c0",
          "id": "00000000-0000-0000-0000-00000000013f",
          "license_id": null,
          "name": "Place 317"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "cfef764a-7b07-4623-8718-5179855e8600",
          "name": "Product 804",
          "sku": "sku 805",
          "updated_datetime": "2026-08-14T11:20:59.504500Z"
        },
        "quantity": "10.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000000f9",
          "name": "B825"
        },
        "compliance_quantity": null,
        "id": "0d668779-9c7e-4d8d-9adc-f0bc81a3e6ba",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000003c0",
          "id": "00000000-0000-0000-0000-00000000013f",
          "license_id": null,
          "name": "Place 317"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "c259daf9-e125-4747-ab7a-bfbaecc21e26",
          "name": "Product 810",
          "sku": "sku 811",
          "updated_datetime": "2026-08-14T11:20:59.521153Z"
        },
        "quantity": "5.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000000fa",
          "name": "B826"
        },
        "compliance_quantity": null,
        "id": "2bfad70f-4d5b-4256-8ebd-b3e7aa6e28fd",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000003c0",
          "id": "00000000-0000-0000-0000-00000000013f",
          "license_id": null,
          "name": "Place 317"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "c02dafb8-0a53-490a-a772-2cd9ac34c944",
          "name": "Product 817",
          "sku": "sku 818",
          "updated_datetime": "2026-08-14T11:20:59.534448Z"
        },
        "quantity": "2.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000003c0",
      "id": "00000000-0000-0000-0000-00000000013f",
      "license_id": null,
      "license_number": null,
      "name": "Place 317"
    },
    "order_datetime": "2026-08-14T11:20:59.472682Z",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1263@example.com",
      "full_name": "FirstName2542 LastName2543",
      "id": "00000000-0000-0000-0000-0000000004f0",
      "role": {
        "id": "00000000-0000-0000-0000-0000000004f4",
        "name": "Admin 1267"
      }
    },
    "payments": [
      {
        "amount": "100.01",
        "company": {
          "id": "00000000-0000-0000-0000-0000000001cb",
          "name": "Company 963",
          "updated_datetime": "2026-08-14T11:20:59.404125Z"
        },
        "credit_uses": null,
        "description": "Payment for purchase",
        "fully_paid_with_credits": false,
        "id": "00000000-0000-0000-0000-000000000015",
        "inserted_datetime": "2026-08-14T11:20:59.574395Z",
        "invoice": null,
        "overpayment_credits": null,
        "payment_date": "2020-01-01T00:00:00.000000Z",
        "payment_method": {
          "deleted_at": null,
          "id": "00000000-0000-0000-0000-00000000001f",
          "name": "Payment Method 30"
        },
        "payment_number": "PYT-1",
        "payment_type": "PURCHASE",
        "purchase": {
          "id": "00000000-0000-0000-0000-000000000016",
          "purchase_number": "Purchase #21",
          "status": "PENDING",
          "total": "32.00"
        },
        "quickbooks_deposit_account_id": null,
        "status": "POSTED",
        "updated_datetime": "2026-08-14T11:20:59.574395Z"
      }
    ],
    "purchase_number": "Purchase #21",
    "status": "PENDING",
    "total": "32.00",
    "updated_datetime": "2026-08-14T11:20:59.473617Z"
  }
}

Get a single purchase given the ID.

Required permission: purchases_permissions_view.

Request

GET /public/v1/purchases/{id}

Parameters

Parameter Description In Type Required Default Example
id Purchase ID path string true

Responses

Status Description Schema
200 A single purchase Purchase
404 Not Found

Get purchases

GET /public/v1/purchases returns purchases related to the company

GET /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzU4MGIyNjEtNGFiZS00YjNhLWFjY2EtOThjMWNlZDU1MzRkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjUwMyIsInR5cCI6ImFjY2VzcyJ9.wsvjgRcLjapbk8Qiw_ducLLgadEfWvaersVZ0xHsFmo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 36ba742ee4458271eaa586681015c118-8d0e269f31babf2e-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000733",
        "id": "00000000-0000-0000-0000-000000000243",
        "license_id": null,
        "license_number": null,
        "name": "Place 577"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000044f",
        "name": "Company 1849",
        "updated_datetime": "2026-08-14T11:21:04.586509Z"
      },
      "custom_data": [
        {
          "id": 68,
          "name": "Custom Field 43",
          "value": null
        }
      ],
      "description": null,
      "due_datetime": "2026-08-14T11:21:04.608961Z",
      "id": "00000000-0000-0000-0000-00000000004a",
      "inserted_datetime": "2026-08-14T11:21:04.609391Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000002b1",
            "name": "B2134"
          },
          "compliance_quantity": null,
          "id": "5693a517-5892-49c2-b514-524e6e98f31e",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000733",
            "id": "00000000-0000-0000-0000-000000000241",
            "license_id": null,
            "name": "Place 575"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "66d6af26-498d-4f54-82be-eae92b71d643",
            "name": "Product 2122",
            "sku": "sku 2123",
            "updated_datetime": "2026-08-14T11:21:04.615311Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000002b2",
            "name": "B2135"
          },
          "compliance_quantity": null,
          "id": "a3526925-96a9-4740-9d92-34d68ed6e4e4",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000733",
            "id": "00000000-0000-0000-0000-000000000241",
            "license_id": null,
            "name": "Place 575"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "cab8d7b6-90b7-4597-81cd-f2957539220c",
            "name": "Product 2125",
            "sku": "sku 2126",
            "updated_datetime": "2026-08-14T11:21:04.621034Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000002b3",
            "name": "B2138"
          },
          "compliance_quantity": null,
          "id": "5b8939d9-55cf-42b9-8bc8-5acc208a1ef8",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000733",
            "id": "00000000-0000-0000-0000-000000000241",
            "license_id": null,
            "name": "Place 575"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "d8012bf7-3e02-4240-be14-013db7b0c5f1",
            "name": "Product 2127",
            "sku": "sku 2128",
            "updated_datetime": "2026-08-14T11:21:04.626587Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000002b5",
            "name": "B2140"
          },
          "compliance_quantity": null,
          "id": "1971beff-4f44-4539-9eaf-8db9b544f319",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000733",
            "id": "00000000-0000-0000-0000-000000000241",
            "license_id": null,
            "name": "Place 575"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "099ed216-000b-4590-b842-dbd680fee10d",
            "name": "Product 2132",
            "sku": "sku 2133",
            "updated_datetime": "2026-08-14T11:21:04.632251Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "0.000000000"
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000733",
        "id": "00000000-0000-0000-0000-000000000241",
        "license_id": null,
        "license_number": null,
        "name": "Place 575"
      },
      "order_datetime": "2026-08-14T11:21:04.608961Z",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2512@example.com",
        "full_name": "FirstName5098 LastName5099",
        "id": "00000000-0000-0000-0000-0000000009e4",
        "role": {
          "id": "00000000-0000-0000-0000-0000000009fa",
          "name": "Admin 2553"
        }
      },
      "payments": [],
      "purchase_number": "Purchase #69",
      "status": "PENDING",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:04.609391Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000733",
        "id": "00000000-0000-0000-0000-00000000023c",
        "license_id": null,
        "license_number": null,
        "name": "Place 570"
      },
      "charges": [
        {
          "id": "daa838fc-ef73-4f00-bc59-5cc43db66891",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "tax": {
            "id": "00000000-0000-0000-0000-00000000000c",
            "name": "T1"
          },
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-00000000044d",
        "name": "Company 1845",
        "updated_datetime": "2030-11-01T00:00:00.000000Z"
      },
      "custom_data": [
        {
          "id": 68,
          "name": "Custom Field 43",
          "value": "Custom Field Value 1"
        }
      ],
      "description": "A description of this purchase",
      "due_datetime": "2020-01-01T00:00:01.000000Z",
      "id": "00000000-0000-0000-0000-000000000049",
      "inserted_datetime": "2020-01-01T00:00:03.000000Z",
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-0000000002a8",
            "name": "B1"
          },
          "compliance_quantity": "1.0000",
          "id": "02940690-924b-452b-bbb6-437f2a8d7eae",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000733",
            "id": "00000000-0000-0000-0000-000000000238",
            "license_id": "00000000-0000-0000-0000-000000000075",
            "name": "Place 566"
          },
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000169",
            "id": "00000000-0000-0000-0000-000000000058",
            "metrc_label": "ABCDEF012345670000000169",
            "status": "active"
          },
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "08ac02d0-efc3-4797-a0e0-fd28d89e0735",
            "name": "P1",
            "sku": "SKU1",
            "updated_datetime": "2023-11-02T00:00:00.000000Z"
          },
          "quantity": "1.000000000",
          "received_quantity": "1.000000000"
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000733",
        "id": "00000000-0000-0000-0000-00000000023b",
        "license_id": null,
        "license_number": null,
        "name": "Place 569"
      },
      "order_datetime": "2020-01-01T00:00:02.000000Z",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "purchase-owner@example.com",
        "full_name": "FirstName5042 LastName5043",
        "id": "00000000-0000-0000-0000-0000000009c8",
        "role": {
          "id": "00000000-0000-0000-0000-0000000009fb",
          "name": "Admin 2554"
        }
      },
      "payments": [],
      "purchase_number": "SO-123",
      "status": "COMPLETED",
      "total": "10.00",
      "updated_datetime": "2020-01-01T00:00:04.000000Z"
    }
  ],
  "next_page": null
}

GET /public/v1/purchases allows filtering by several statuses

GET /public/v1/purchases?status[]=COMPLETED&status[]=PENDING
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTk2MTdiZGUtY2ZlYS00YmMyLWE3NjItMWQzZjg3ZDQwZjFlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjMzMiIsInR5cCI6ImFjY2VzcyJ9.Szv0ZOxbpQIl5Eet3X4efiW43tRD31yLrHwW0axlzbU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 50abe8558d675b3576d6a548bfe79c34-604e5d7124990a80-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000214",
        "license_id": null,
        "license_number": null,
        "name": "Place 530"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000003eb",
        "name": "Company 1731",
        "updated_datetime": "2026-08-14T11:21:03.678817Z"
      },
      "custom_data": [],
      "description": null,
      "due_datetime": "2026-08-14T11:21:03.731234Z",
      "id": "00000000-0000-0000-0000-000000000041",
      "inserted_datetime": "2026-08-14T11:21:03.731629Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000025b",
            "name": "B1890"
          },
          "compliance_quantity": null,
          "id": "b796e7c7-23a7-40fa-bb68-f0baa59f710c",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000213",
            "license_id": null,
            "name": "Place 529"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "fd8c95a9-370c-42cb-8820-6bde21e696da",
            "name": "Product 1877",
            "sku": "sku 1878",
            "updated_datetime": "2026-08-14T11:21:03.736783Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000025d",
            "name": "B1892"
          },
          "compliance_quantity": null,
          "id": "e499842d-f951-44e1-9f66-5aef3fb742a3",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000213",
            "license_id": null,
            "name": "Place 529"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "a8a3fbc4-e7ad-460d-8303-e536b71221b3",
            "name": "Product 1880",
            "sku": "sku 1882",
            "updated_datetime": "2026-08-14T11:21:03.742169Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000025e",
            "name": "B1893"
          },
          "compliance_quantity": null,
          "id": "b8f53ff7-c7b2-4b18-8bc6-dbffaa0efe78",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000213",
            "license_id": null,
            "name": "Place 529"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "879512d1-7533-4312-a625-d87d0f7b35e2",
            "name": "Product 1884",
            "sku": "sku 1885",
            "updated_datetime": "2026-08-14T11:21:03.748410Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000025f",
            "name": "B1894"
          },
          "compliance_quantity": null,
          "id": "819a62ac-a6e2-43d0-a3c6-870037c3c517",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000213",
            "license_id": null,
            "name": "Place 529"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "29133d61-87ff-438b-9ba2-4c3c17d6ea13",
            "name": "Product 1886",
            "sku": "sku 1887",
            "updated_datetime": "2026-08-14T11:21:03.754148Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "0.000000000"
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000213",
        "license_id": null,
        "license_number": null,
        "name": "Place 529"
      },
      "order_datetime": "2020-01-01T12:30:00.000000Z",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2355@example.com",
        "full_name": "FirstName4782 LastName4783",
        "id": "00000000-0000-0000-0000-000000000946",
        "role": {
          "id": "00000000-0000-0000-0000-000000000954",
          "name": "Admin 2387"
        }
      },
      "payments": [],
      "purchase_number": "Purchase #61",
      "status": "PENDING",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:03.731629Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000211",
        "license_id": null,
        "license_number": null,
        "name": "Place 527"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000003e3",
        "name": "Company 1722",
        "updated_datetime": "2026-08-14T11:21:03.613445Z"
      },
      "custom_data": [],
      "description": null,
      "due_datetime": "2026-08-14T11:21:03.633341Z",
      "id": "00000000-0000-0000-0000-000000000040",
      "inserted_datetime": "2026-08-14T11:21:03.633753Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000253",
            "name": "B1864"
          },
          "compliance_quantity": null,
          "id": "773459c4-cf58-423f-8a0a-0dfaf11345db",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000210",
            "license_id": null,
            "name": "Place 526"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "c3ae6b33-2578-459f-ae45-20912218bab0",
            "name": "Product 1856",
            "sku": "sku 1857",
            "updated_datetime": "2026-08-14T11:21:03.640462Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "15.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000254",
            "name": "B1865"
          },
          "compliance_quantity": null,
          "id": "cf08a045-72d7-4793-81e9-ba57e3c11d56",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000210",
            "license_id": null,
            "name": "Place 526"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "75a5ac38-8283-43fd-8875-b6e7f261544a",
            "name": "Product 1858",
            "sku": "sku 1859",
            "updated_datetime": "2026-08-14T11:21:03.646189Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "10.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000255",
            "name": "B1866"
          },
          "compliance_quantity": null,
          "id": "b8738fc0-5ff3-45a4-a5aa-1db4f141a64e",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000210",
            "license_id": null,
            "name": "Place 526"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "fab5c0c6-5a9b-4804-9e23-0332b4933de0",
            "name": "Product 1860",
            "sku": "sku 1861",
            "updated_datetime": "2026-08-14T11:21:03.652074Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "5.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000256",
            "name": "B1867"
          },
          "compliance_quantity": null,
          "id": "e7fb4d84-4c42-4b74-b9cc-8bb6950d3ad2",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000210",
            "license_id": null,
            "name": "Place 526"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "a2854d4a-23e1-4917-a27e-18b691a08485",
            "name": "Product 1862",
            "sku": "sku 1863",
            "updated_datetime": "2026-08-14T11:21:03.662725Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "2.000000000"
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000210",
        "license_id": null,
        "license_number": null,
        "name": "Place 526"
      },
      "order_datetime": "2020-01-01T12:20:00.000000Z",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2344@example.com",
        "full_name": "FirstName4760 LastName4761",
        "id": "00000000-0000-0000-0000-00000000093b",
        "role": {
          "id": "00000000-0000-0000-0000-000000000954",
          "name": "Admin 2387"
        }
      },
      "payments": [],
      "purchase_number": "Purchase #60",
      "status": "COMPLETED",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:03.633753Z"
    },
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000209",
        "license_id": null,
        "license_number": null,
        "name": "Place 519"
      },
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000003d2",
        "name": "Company 1701",
        "updated_datetime": "2026-08-14T11:21:03.502384Z"
      },
      "custom_data": [],
      "description": null,
      "due_datetime": "2026-08-14T11:21:03.522983Z",
      "id": "00000000-0000-0000-0000-00000000003e",
      "inserted_datetime": "2026-08-14T11:21:03.523403Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000244",
            "name": "B1821"
          },
          "compliance_quantity": null,
          "id": "9a16b337-bef9-413a-a6fd-2cedca52d8f3",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000208",
            "license_id": null,
            "name": "Place 518"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "eb00675b-247c-4569-845b-06c7344cd765",
            "name": "Product 1813",
            "sku": "sku 1814",
            "updated_datetime": "2026-08-14T11:21:03.529038Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "15.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000245",
            "name": "B1822"
          },
          "compliance_quantity": null,
          "id": "5d6e9923-8ee8-479c-b730-b1ff26109e92",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000208",
            "license_id": null,
            "name": "Place 518"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "733efcbe-8e7a-42ae-916f-5e3c089f51a8",
            "name": "Product 1815",
            "sku": "sku 1816",
            "updated_datetime": "2026-08-14T11:21:03.534595Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "10.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000246",
            "name": "B1823"
          },
          "compliance_quantity": null,
          "id": "0d500af9-0053-4cfe-8e38-2b9256404584",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000208",
            "license_id": null,
            "name": "Place 518"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "d2a15fe1-61d7-44de-bf50-8494f973fabb",
            "name": "Product 1817",
            "sku": "sku 1818",
            "updated_datetime": "2026-08-14T11:21:03.540051Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "5.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000247",
            "name": "B1824"
          },
          "compliance_quantity": null,
          "id": "78278d46-f33b-455c-b7b4-863a505aebd3",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000006a8",
            "id": "00000000-0000-0000-0000-000000000208",
            "license_id": null,
            "name": "Place 518"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "bf9de6c0-a119-4478-b8e0-acfdf11c4038",
            "name": "Product 1819",
            "sku": "sku 1820",
            "updated_datetime": "2026-08-14T11:21:03.545489Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "2.000000000"
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000006a8",
        "id": "00000000-0000-0000-0000-000000000208",
        "license_id": null,
        "license_number": null,
        "name": "Place 518"
      },
      "order_datetime": "2020-01-01T12:00:00.000000Z",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2321@example.com",
        "full_name": "FirstName4714 LastName4715",
        "id": "00000000-0000-0000-0000-000000000923",
        "role": {
          "id": "00000000-0000-0000-0000-000000000954",
          "name": "Admin 2387"
        }
      },
      "payments": [],
      "purchase_number": "Purchase #58",
      "status": "COMPLETED",
      "total": "32.00",
      "updated_datetime": "2026-08-14T11:21:03.523403Z"
    }
  ],
  "next_page": null
}

Get purchases sorted by Order Date descendingly date and filtered by various attributes.

Note: The page size for this endpoint is 500 purchase orders per page.

Required permission: purchases_permissions_view. Results are filtered to only include purchases the authenticated user can access under their team restrictions.

Request

GET /public/v1/purchases

Parameters

Parameter Description In Type Required Default Example
due_datetime Filter purchases by the due datetime query string false ,2022-07-10T00:00:00Z
inserted_datetime Filter purchases by their creation datetime query string false 2022-07-10T00:00:00Z,
order_datetime Filter purchases by the order datetime query string false 2022-07-10T00:00:00Z,2022-07-11T00:00:00Z
page Pagination information query number false ?page[number]=1
status Filter purchases by their status. Accepted values are "COMPLETED", "DELIVERING", "PARTIALLY_RECEIVED", "PENDING", "PROCESSING". query array false ["PENDING","PROCESSING"]
updated_datetime Filter purchases by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of purchases Purchases

Insert a payment for a purchase

POST /purchases/:id/payments can create a payment for an purchase with both quickbooks id and name

POST /public/v1/purchases/00000000-0000-0000-0000-00000000002b/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWE2NDU4MmMtZWY0YS00ODc0LTlhYWMtNTI5NmViOTdmNDExIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA1MSIsInR5cCI6ImFjY2VzcyJ9.HIbwmPBKqk4JowCXJK5aJbx-3TTzpem-Aonk8u6AipQ
{
  "amount": 100.01,
  "description": "Payment for purchase",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-000000000025",
  "quickbooks_deposit_account_id": "QBD-123"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b06c8bc319a619269730d5c0fe8017d5-2f8664f99b76757f-0
{
  "data": {
    "amount": "100.01",
    "company": {
      "id": "00000000-0000-0000-0000-000000000343",
      "name": "Company 1503",
      "updated_datetime": "2026-08-14T11:21:01.981385Z"
    },
    "credit_uses": null,
    "description": "Payment for purchase",
    "fully_paid_with_credits": false,
    "id": "00000000-0000-0000-0000-00000000001b",
    "inserted_datetime": "2026-08-14T11:21:02.014746Z",
    "invoice": null,
    "overpayment_credits": null,
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000025",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000001",
    "payment_type": "PURCHASE",
    "purchase": {
      "id": "00000000-0000-0000-0000-00000000002b",
      "purchase_number": "Purchase #40",
      "status": "PENDING",
      "total": "32.00"
    },
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_deposit_account_name": "QBD-NAME",
    "status": "POSTED",
    "updated_datetime": "2026-08-14T11:21:02.014746Z"
  }
}

POST /purchases/:id/payments can create a payment for an purchase with both quickbooks id and name

POST /public/v1/purchases/00000000-0000-0000-0000-00000000002b/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWE2NDU4MmMtZWY0YS00ODc0LTlhYWMtNTI5NmViOTdmNDExIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA1MSIsInR5cCI6ImFjY2VzcyJ9.HIbwmPBKqk4JowCXJK5aJbx-3TTzpem-Aonk8u6AipQ
{
  "amount": 100.01,
  "description": "Payment for purchase",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-000000000025",
  "quickbooks_deposit_account_name": "QBD-NAME"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b06c8bc319a619269730d5c0fe8017d5-b06c6246332d513b-0
{
  "data": {
    "amount": "100.01",
    "company": {
      "id": "00000000-0000-0000-0000-000000000343",
      "name": "Company 1503",
      "updated_datetime": "2026-08-14T11:21:01.981385Z"
    },
    "credit_uses": null,
    "description": "Payment for purchase",
    "fully_paid_with_credits": false,
    "id": "00000000-0000-0000-0000-00000000001d",
    "inserted_datetime": "2026-08-14T11:21:02.094221Z",
    "invoice": null,
    "overpayment_credits": null,
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000025",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000002",
    "payment_type": "PURCHASE",
    "purchase": {
      "id": "00000000-0000-0000-0000-00000000002b",
      "purchase_number": "Purchase #40",
      "status": "PENDING",
      "total": "32.00"
    },
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_deposit_account_name": "QBD-NAME",
    "status": "POSTED",
    "updated_datetime": "2026-08-14T11:21:02.094221Z"
  }
}

Required permission: purchases_permissions_make_payments. The authenticated user must also be allowed to view purchases under their team restrictions.

Request

POST /public/v1/purchases/{id}/payments

Parameters

Parameter Description In Type Required Default Example
payment_method_id Payment method ID query string true
amount Amount of the payment. Will round to 2 decimal places query decimal true
payment_datetime Payment date query string true
description Description of the payment query string true
quickbooks_deposit_account_id Quickbooks deposit account ID. Cannot include both this and quickbooks_deposit_account_name. If user's company is integrated with Quickbooks, either this or quickbooks_deposit_account_name must be provided. Account type must be "Bank" or "Credit Card" query string false
quickbooks_deposit_account_name Quickbooks deposit account name. Cannot include both this and quickbooks_deposit_account_id. If user's company is integrated with Quickbooks, either this or quickbooks_deposit_account_id must be provided. Account type must be "Bank" or "Credit Card" query string false

Responses

Status Description Schema
200 A single payment Payment

Upsert a purchase order

POST /public/v1/purchases creates a purchase (with product-tracked item)

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGI2ODk4MDctYTAyZS00YTM2LTk3NmEtYjNhNjMwOTMxZDM5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjEyMSIsInR5cCI6ImFjY2VzcyJ9.rWrsLebFtcBfDziFdHrGmTP7G2qyM6_Ge_3rwJR0vlE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001c1",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-000000000356",
  "custom_data": {
    "65": [
      "A",
      "B"
    ]
  },
  "description": "A description of this purchase",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001c0",
      "price": "10.000000000",
      "product_id": "8bfa2f5c-9874-476f-8d7f-9869c40c69c4",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001c0",
  "order_datetime": "2020-01-01T00:00:00.000000Z",
  "owner_id": "00000000-0000-0000-0000-000000000849"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ee6da63bf2e54db25269130357bb6066-e6796c8f569d5a0a-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005fe",
      "id": "00000000-0000-0000-0000-0000000001c1",
      "license_id": null,
      "license_number": null,
      "name": "Place 447"
    },
    "charges": [
      {
        "id": "f225bc52-09e2-4517-b798-bcc2a9f4df3b",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "99f78397-3d0e-4f89-9dac-3155d7e52fee",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000356",
      "name": "Company 1533",
      "updated_datetime": "2026-08-14T11:21:02.283204Z"
    },
    "custom_data": [
      {
        "id": 65,
        "name": "Custom Field 40",
        "value": "A,B"
      }
    ],
    "description": "A description of this purchase",
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-00000000002d",
    "inserted_datetime": "2026-08-14T11:21:02.374665Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001f2",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "9ada4a0a-08da-4630-a67a-cf0948e3fbbd",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005fe",
          "id": "00000000-0000-0000-0000-0000000001c0",
          "license_id": "00000000-0000-0000-0000-000000000059",
          "name": "Place 446"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "8bfa2f5c-9874-476f-8d7f-9869c40c69c4",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:02.335443Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005fe",
      "id": "00000000-0000-0000-0000-0000000001c0",
      "license_id": "00000000-0000-0000-0000-000000000059",
      "license_number": "CDPH-00000090",
      "name": "Place 446"
    },
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000000849",
      "role": {
        "id": "00000000-0000-0000-0000-00000000088f",
        "name": "Admin 2190"
      }
    },
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-08-14T11:21:02.384232Z"
  }
}

POST /public/v1/purchases creates a purchase (with batch-tracked item)

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGZlYWUxY2QtZjUzNC00N2QwLTgyZTYtNDYzNzVkMzk0YmJhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjU3MiIsInR5cCI6ImFjY2VzcyJ9.ooXbeJIR9fxetQB6idkmZVzdLkkcMtH_4Q-U0G4IVtA
{
  "billing_location_id": "00000000-0000-0000-0000-000000000255",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-00000000046d",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-0000000002c1",
      "location_id": "00000000-0000-0000-0000-000000000255",
      "price": "10.000000000",
      "product_id": "673bd900-2ebf-4161-b5e7-9c51e685d0cb",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000255",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0c602058184ee1eae5e3af482c5a7930-26d44218469b39bf-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000075e",
      "id": "00000000-0000-0000-0000-000000000255",
      "license_id": "00000000-0000-0000-0000-000000000081",
      "license_number": "CDPH-00000130",
      "name": "Place 595"
    },
    "charges": [
      {
        "id": "446159a3-3e9f-4122-929f-c07aabe7b73e",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "6ab99cfb-2b78-4d28-814c-c9834f01bd6e",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-00000000046d",
      "name": "Company 1884",
      "updated_datetime": "2026-08-14T11:21:04.765199Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-00000000004c",
    "inserted_datetime": "2026-08-14T11:21:04.854793Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000002c1",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "ddf029dd-43d8-4bb0-b6eb-7eb639126fe5",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000075e",
          "id": "00000000-0000-0000-0000-000000000255",
          "license_id": "00000000-0000-0000-0000-000000000081",
          "name": "Place 595"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "673bd900-2ebf-4161-b5e7-9c51e685d0cb",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:04.838807Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000075e",
      "id": "00000000-0000-0000-0000-000000000255",
      "license_id": "00000000-0000-0000-0000-000000000081",
      "license_number": "CDPH-00000130",
      "name": "Place 595"
    },
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-08-14T11:21:04.861025Z"
  }
}

POST /public/v1/purchases creates a purchase (with package-tracked item)

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGNmNjU5YzAtZWY1Ny00Y2FlLWIzMWMtNmNmOTdlNmJmNmMyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTk0OSIsInR5cCI6ImFjY2VzcyJ9.SzPG0anBCQq2K5vyGID_dIqzayfgJuFEWKYbY3Uc76E
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001ac",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "price": "-5.0000",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-000000000307",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001ac",
      "price": "10.000000000",
      "product_id": "de9d4eeb-087a-4fdd-86ce-daf57fdaa4d7",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001ac",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6143058e746dad5e35cf61209371c219-4c82bc754223bf76-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000059a",
      "id": "00000000-0000-0000-0000-0000000001ac",
      "license_id": "00000000-0000-0000-0000-000000000052",
      "license_number": "CDPH-00000083",
      "name": "Place 426"
    },
    "charges": [
      {
        "id": "c5bf7530-e39b-4724-802c-5378a2ecbb8c",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "8757ca95-4c10-414a-8937-d4ad72dc564f",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000307",
      "name": "Company 1434",
      "updated_datetime": "2026-08-14T11:21:01.516692Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000029",
    "inserted_datetime": "2026-08-14T11:21:01.562375Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001c0",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "11679a9c-7486-44fa-a804-22eaa93b20f6",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000059a",
          "id": "00000000-0000-0000-0000-0000000001ac",
          "license_id": "00000000-0000-0000-0000-000000000052",
          "name": "Place 426"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "de9d4eeb-087a-4fdd-86ce-daf57fdaa4d7",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:01.545118Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000059a",
      "id": "00000000-0000-0000-0000-0000000001ac",
      "license_id": "00000000-0000-0000-0000-000000000052",
      "license_number": "CDPH-00000083",
      "name": "Place 426"
    },
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-08-14T11:21:01.585076Z"
  }
}

POST /public/v1/purchases updates a purchase

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGFhODczZjctZGU3OC00MDExLWFkYTgtYmE5MDk3ZGM5NWM4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjAwNyIsInR5cCI6ImFjY2VzcyJ9.xpLDlGMiHlLzprxnNp5dTG0KtMMWRQp7Yj5_eHeNrmE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001b2",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    }
  ],
  "company_id": "00000000-0000-0000-0000-00000000032a",
  "due_datetime": "2020-01-20T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001b2",
      "price": "10.000000000",
      "product_id": "c7ac03fe-2c98-429b-9e90-b53e13c24864",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001b2",
  "order_datetime": "2020-01-02T00:00:00.000000Z"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2d681b1c49e36bd869871298a2ba06aa-e9263dda4472071f-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005be",
      "id": "00000000-0000-0000-0000-0000000001b2",
      "license_id": "00000000-0000-0000-0000-000000000055",
      "license_number": "CDPH-00000086",
      "name": "Place 432"
    },
    "charges": [
      {
        "id": "3bc42c6d-773e-4056-a4bc-b7b0e72064e9",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-00000000032a",
      "name": "Company 1471",
      "updated_datetime": "2026-08-14T11:21:01.714040Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-00000000002a",
    "inserted_datetime": "2026-08-14T11:21:01.803765Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001d8",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "2a6cf2b4-da35-4a18-baad-cc2bfff4107d",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005be",
          "id": "00000000-0000-0000-0000-0000000001b2",
          "license_id": "00000000-0000-0000-0000-000000000055",
          "name": "Place 432"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "c7ac03fe-2c98-429b-9e90-b53e13c24864",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:01.766066Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005be",
      "id": "00000000-0000-0000-0000-0000000001b2",
      "license_id": "00000000-0000-0000-0000-000000000055",
      "license_number": "CDPH-00000086",
      "name": "Place 432"
    },
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "11.00",
    "updated_datetime": "2026-08-14T11:21:01.813739Z"
  }
}

POST /public/v1/purchases updates a purchase

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGFhODczZjctZGU3OC00MDExLWFkYTgtYmE5MDk3ZGM5NWM4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjAwNyIsInR5cCI6ImFjY2VzcyJ9.xpLDlGMiHlLzprxnNp5dTG0KtMMWRQp7Yj5_eHeNrmE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001b2",
  "charges": [
    {
      "id": "3bc42c6d-773e-4056-a4bc-b7b0e72064e9",
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "name": "C2",
      "percent": null,
      "price": "-5.00",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-00000000032a",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "id": "00000000-0000-0000-0000-00000000002a",
  "items": [
    {
      "id": "2a6cf2b4-da35-4a18-baad-cc2bfff4107d",
      "location_id": "00000000-0000-0000-0000-0000000001b2",
      "price": "10.000000000",
      "product_id": "c7ac03fe-2c98-429b-9e90-b53e13c24864",
      "quantity": "1.000000000"
    },
    {
      "batch_id": "00000000-0000-0000-0000-0000000001da",
      "location_id": "00000000-0000-0000-0000-0000000001b2",
      "price": "5.000000000",
      "product_id": "919c601e-d988-4412-b9a5-17b8f74e21b8",
      "quantity": "2.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001b2",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2d681b1c49e36bd869871298a2ba06aa-f4610016fe04c8be-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005be",
      "id": "00000000-0000-0000-0000-0000000001b2",
      "license_id": "00000000-0000-0000-0000-000000000055",
      "license_number": "CDPH-00000086",
      "name": "Place 432"
    },
    "charges": [
      {
        "id": "3bc42c6d-773e-4056-a4bc-b7b0e72064e9",
        "name": "C1",
        "percent": "10.0000",
        "price": "2.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "dbff6e25-2087-4443-9273-a801408c78c1",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-00000000032a",
      "name": "Company 1471",
      "updated_datetime": "2026-08-14T11:21:01.714040Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-00000000002a",
    "inserted_datetime": "2026-08-14T11:21:01.803765Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001d8",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "2a6cf2b4-da35-4a18-baad-cc2bfff4107d",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005be",
          "id": "00000000-0000-0000-0000-0000000001b2",
          "license_id": "00000000-0000-0000-0000-000000000055",
          "name": "Place 432"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "c7ac03fe-2c98-429b-9e90-b53e13c24864",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-08-14T11:21:01.766066Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000001da",
          "name": "B2"
        },
        "compliance_quantity": null,
        "id": "434d8fbe-8b53-46f5-bfbf-7c471890a60c",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000005be",
          "id": "00000000-0000-0000-0000-0000000001b2",
          "license_id": "00000000-0000-0000-0000-000000000055",
          "name": "Place 432"
        },
        "package": null,
        "price": "5.000000000",
        "price_base": "5.000000000",
        "product": {
          "id": "919c601e-d988-4412-b9a5-17b8f74e21b8",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-08-14T11:21:01.783777Z"
        },
        "quantity": "2.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000005be",
      "id": "00000000-0000-0000-0000-0000000001b2",
      "license_id": "00000000-0000-0000-0000-000000000055",
      "license_number": "CDPH-00000086",
      "name": "Place 432"
    },
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "17.00",
    "updated_datetime": "2026-08-14T11:21:01.907458Z"
  }
}

POST /public/v1/purchases updating a purchase removes line items that aren't included in the payload

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjQ0Y2NmNzItYjMyMy00ZjEwLThjYTctZGJhMDMwODk3ZGYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjQ2OCIsInR5cCI6ImFjY2VzcyJ9.xuRHFCRHNqmMNz9TCJodyDVi7pFhkJgE7R4rKzgZMYk
{
  "billing_location_id": "00000000-0000-0000-0000-00000000022e",
  "company_id": "00000000-0000-0000-0000-00000000042d",
  "due_datetime": "2020-01-20T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000022e",
      "price": "10",
      "product_id": "8534e221-0c23-4a5b-a2ee-7ba7b8e3a36f",
      "quantity": "1"
    }
  ],
  "location_id": "00000000-0000-0000-0000-00000000022e",
  "order_datetime": "2020-01-02T00:00:00.000000Z"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c7acb0aeebcf83e4aad113097f7d5962-d808d2fe208f2bbf-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000711",
      "id": "00000000-0000-0000-0000-00000000022e",
      "license_id": "00000000-0000-0000-0000-000000000072",
      "license_number": "CDPH-00000115",
      "name": "Place 556"
    },
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000042d",
      "name": "Company 1810",
      "updated_datetime": "2026-08-14T11:21:04.330864Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000048",
    "inserted_datetime": "2026-08-14T11:21:04.383577Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000293",
          "name": "B2038"
        },
        "compliance_quantity": null,
        "id": "a6edb926-ba31-477a-b391-f52530a5f7f9",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000711",
          "id": "00000000-0000-0000-0000-00000000022e",
          "license_id": "00000000-0000-0000-0000-000000000072",
          "name": "Place 556"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "8534e221-0c23-4a5b-a2ee-7ba7b8e3a36f",
          "name": "Product 2035",
          "sku": "sku 2036",
          "updated_datetime": "2026-08-14T11:21:04.362806Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000711",
      "id": "00000000-0000-0000-0000-00000000022e",
      "license_id": "00000000-0000-0000-0000-000000000072",
      "license_number": "CDPH-00000115",
      "name": "Place 556"
    },
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "10.00",
    "updated_datetime": "2026-08-14T11:21:04.383577Z"
  }
}

POST /public/v1/purchases updating a purchase removes line items that aren't included in the payload

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjQ0Y2NmNzItYjMyMy00ZjEwLThjYTctZGJhMDMwODk3ZGYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjQ2OCIsInR5cCI6ImFjY2VzcyJ9.xuRHFCRHNqmMNz9TCJodyDVi7pFhkJgE7R4rKzgZMYk
{
  "company_id": "00000000-0000-0000-0000-00000000042d",
  "id": "00000000-0000-0000-0000-000000000048",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000022e",
      "price": "2",
      "product_id": "8534e221-0c23-4a5b-a2ee-7ba7b8e3a36f",
      "quantity": "1"
    }
  ]
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c7acb0aeebcf83e4aad113097f7d5962-af6a5158309ae940-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000711",
      "id": "00000000-0000-0000-0000-00000000022e",
      "license_id": "00000000-0000-0000-0000-000000000072",
      "license_number": "CDPH-00000115",
      "name": "Place 556"
    },
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000042d",
      "name": "Company 1810",
      "updated_datetime": "2026-08-14T11:21:04.330864Z"
    },
    "custom_data": [],
    "description": null,
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000048",
    "inserted_datetime": "2026-08-14T11:21:04.383577Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000293",
          "name": "B2038"
        },
        "compliance_quantity": null,
        "id": "07e3609a-f6b3-4bc6-9a0a-15166dcee6d7",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000711",
          "id": "00000000-0000-0000-0000-00000000022e",
          "license_id": "00000000-0000-0000-0000-000000000072",
          "name": "Place 556"
        },
        "package": null,
        "price": "2.000000000",
        "price_base": "2.000000000",
        "product": {
          "id": "8534e221-0c23-4a5b-a2ee-7ba7b8e3a36f",
          "name": "Product 2035",
          "sku": "sku 2036",
          "updated_datetime": "2026-08-14T11:21:04.362806Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000711",
      "id": "00000000-0000-0000-0000-00000000022e",
      "license_id": "00000000-0000-0000-0000-000000000072",
      "license_number": "CDPH-00000115",
      "name": "Place 556"
    },
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "owner": null,
    "payments": [],
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "2.00",
    "updated_datetime": "2026-08-14T11:21:04.474802Z"
  }
}

POST /public/v1/purchases does not update a purchase that has moved beyond Pending status

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTNjMzYyNTMtZjc0Ny00OGE1LWIwZDgtZmVmN2ViMjQyODViIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjI2OSIsInR5cCI6ImFjY2VzcyJ9.xL3zWLdztJFWvh66ZcgM-VsQJIErGbUNPLcSZG42R_c
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001f4",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000003a8",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "id": "00000000-0000-0000-0000-000000000039",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-000000000220",
      "id": "fa286ddc-4b78-496b-8d55-c5e8526460ea",
      "location_id": "00000000-0000-0000-0000-0000000001f4",
      "price": "10.000000000",
      "product_id": "3da4fd8a-a924-4474-954f-0f049c4e5e17",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001f4",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: de61fdf0291bcc7fc5385a6209b14dbf-9fe30afa66feb95c-0
{
  "errors": [
    {
      "context": {},
      "message": "Cannot change this PO through the Distru API because it's beyond Pending status",
      "pointer": [
        "status"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a company relationship that belongs to another company

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjMsImlhdCI6MTc4NjcwNjQ2MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTY3N2M5ZDEtMmZhNC00OTdhLWE0YTEtOGE1ZWNlMGRlN2YzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjI2MSIsInR5cCI6ImFjY2VzcyJ9.E0JmZx6U9DB6WxqjsyoA02zj2QTHmqVPaOqjwJIl87M
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001f3",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000003a5",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001f3",
      "price": "10.000000000",
      "product_id": "6a6f50eb-704a-41d8-af0e-a64eaeac3f04",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001f3",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: fce55c183957d56cf2493b6c0b1cdec8-43f8d871c049ad73-0
{
  "errors": [
    {
      "context": {},
      "message": "The provided supplier does not exist",
      "pointer": [
        "company_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a product that belongs to another company

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjQsImlhdCI6MTc4NjcwNjQ2NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODBmYjY5MTAtYTQ5Ny00ZjUzLTllZTktMWJjMmEyZjMzMzJlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjU2MSIsInR5cCI6ImFjY2VzcyJ9.GDIj5wk7XIoL52OdcHN3rlpjSaGLBy2khr1O0gafkSo
{
  "billing_location_id": "00000000-0000-0000-0000-000000000253",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000466",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-000000000253",
      "price": "10.000000000",
      "product_id": "10be6a39-921f-4d79-bbce-dfc442fb3302",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000253",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 2196d485a8b369d2c219e390f7def639-56af8c3014a48d9c-0
{
  "errors": [
    {
      "context": {
        "id": "e3432cb2-cbe5-4b48-ad0d-703e63b296cd"
      },
      "message": "This record does not belong to your company.",
      "pointer": [
        "items",
        0,
        "product_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a batch that belongs to another company

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjk2MmNlNmYtYjk3ZS00ZThkLTliMGYtNzMzNTIxN2E4Yjk2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA0OSIsInR5cCI6ImFjY2VzcyJ9.ZpXte6buFAU-Q0wL4yeJcDnrZhW_cZq_Oyk6F-9e68I
{
  "billing_location_id": "00000000-0000-0000-0000-000000000122",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000016c",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-0000000000b4",
      "location_id": "00000000-0000-0000-0000-000000000122",
      "price": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000122",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: c47ab66cd7a7b9885d8e1504b8527835-348b732ddbedbe10-0
{
  "errors": [
    {
      "context": {
        "id": "852b09e5-ef2f-4c07-94da-f832239e6ab9"
      },
      "message": "This record does not belong to your company.",
      "pointer": [
        "items",
        0,
        "product_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a location that belongs to another company

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjIsImlhdCI6MTc4NjcwNjQ2MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzU2OTBlMzktZTIxOC00NzgwLWE1YjYtOWIwNjZlNTg5ZjJjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjE1MCIsInR5cCI6ImFjY2VzcyJ9.uD5xWEwVMVr574Mk8xO4-rFXf9vgJxr2o7O5F0D71H0
{
  "billing_location_id": "00000000-0000-0000-0000-0000000001c6",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000362",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000001c7",
      "price": "10.000000000",
      "product_id": "b4a2c29d-7cc8-4963-a29e-6cd26079ecd9",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000001c7",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 46fc2e13803013b10a87164a47aa5d2b-22fc564434db31f5-0
{
  "errors": [
    {
      "context": {
        "id": "e37bf9de-05d9-433b-a19b-6cf5b0efe2ba"
      },
      "message": "This record does not belong to your company.",
      "pointer": [
        "items",
        0,
        "location_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a location different from the order items

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjUsImlhdCI6MTc4NjcwNjQ2NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWUzYjNmYWMtNzc2NS00Y2Q3LTgzZTQtNjY3ODAzOWQyMWM5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDY0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjY0OCIsInR5cCI6ImFjY2VzcyJ9.8H21RPGwvI4lkRPmAdEgmd5iv-_k2LVj1C5NhIZZPHQ
{
  "billing_location_id": "00000000-0000-0000-0000-000000000268",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000049a",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-000000000268",
      "price": "10.000000000",
      "product_id": "8a6612ed-9a17-4a02-b2a7-11215144a0f8",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000269",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 82ff47590cdf46516c4bdf837e2eeb8f-27d0aadc3089378a-0
{
  "errors": [
    {
      "context": {
        "id": "29ab1287-96f8-46fa-bef8-38d2cc848531"
      },
      "message": "Purchase item delivery location must be the same as purchase delivery location.",
      "pointer": [
        "items",
        0,
        "location_id"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/purchases does not create a purchase with a billing location that belongs to another company

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmU4YmE3MDAtMWEyMy00OTljLTlmYTctMTZmM2I2MGU4M2YxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE3MiIsInR5cCI6ImFjY2VzcyJ9.L4rtjYmf2Yk4iGOXr6iUmwUwHBnEF2DltFDsX-H7ZRs
{
  "billing_location_id": "00000000-0000-0000-0000-000000000131",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000001a9",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000012e",
      "price": "10.000000000",
      "product_id": "113c9c1f-3db3-45c8-a345-6825486d8908",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-00000000012e",
  "order_datetime": "2020-01-01T00:00:00.000000Z"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: fe9283b11fc4043fe43bea7d633d92a4-c2e12b487977e78c-0
{
  "errors": [
    {
      "context": {},
      "message": "The provided billing address does not exist",
      "pointer": [
        "billing_location_id"
      ],
      "section": "body"
    }
  ]
}

Upsert a single purchase order. To update an existing purchase order, pass in an existing purchase order ID in the id field. When updating a purchase order, you must pass in all fields (no sparse update currently supported). Any existing order item or charge you do not pass in to items and charges respectively will be deleted. Required permission: purchases_permissions_create to create a new purchase order, purchases_permissions_edit (and access to the purchase under team restrictions) to update an existing purchase order.

Request

POST /public/v1/purchases

Parameters

Parameter Description In Type Required Default Example
id Unique ID for this purchase order. If it exists, an update will be performed; otherwise, it will be used as the ID of a new purchase order record query string false
description A description of the purchase order query string false
location_id The location into which the inventory in this purchase will be received query string true
billing_location_id The billing address for this purchase order query string true
company_id The company that is the supplier for this purchase order query string true
order_datetime The datetime on which the purchase order was placed query string true
due_datetime The datetime by which the purchase order should be paid query string true
owner_id The ID of the Distru user that owns this purchase order query string false
charges The additional lines of Charge, Discount, or Tax added to this purchase order body PurchaseChargesRequest false
items The items present on this purchase order body PurchaseItemsRequest true
custom_data A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=purchase to retrieve available custom fields and their IDs. body object false {"123":"Custom Value 1","456":"Custom Value 2"}

Responses

Status Description Schema
200 A single purchase orders Purchase

Reports

Get the Cost of Goods Sold report

GET /public/v1/reports/cogs returns one Final row per completed order line item as {data, meta}, narrowed by order date

GET /public/v1/reports/cogs?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWU2NGUwY2ItYjQ2NS00N2VmLTg4YjctNjhiN2IwMDcyZjQzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTAwIiwidHlwIjoiYWNjZXNzIn0.r4C_x5K5sDlYT_TDI5zY9m0vkM-01OCOxkjJImmbPzc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a832442fe735ccda8986df3d0a2ef6b8-1fa94c554e2d73db-0
{
  "data": [
    {
      "batch": "",
      "cost_origin": "",
      "final_input": "Final",
      "margin_actual": "",
      "margin_default": "",
      "metrc_production_batch_number": "",
      "order_number": "SO-1",
      "package": "",
      "product_brand": "",
      "product_category": "Some category 19",
      "product_name": "Alpha",
      "profit_unit_actual": "",
      "profit_unit_default": "",
      "quantity": 4,
      "sku": "SKU-A",
      "total_cost_actual": "",
      "total_cost_default": "",
      "total_price": 40,
      "total_profits_actual": "",
      "total_profits_default": "",
      "unit_cost_actual": "",
      "unit_cost_default": "",
      "unit_price": 10,
      "unit_type": "Gram"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "final_input",
        "label": "Final/Input"
      },
      {
        "key": "cost_origin",
        "label": "Cost Origin"
      },
      {
        "key": "product_name",
        "label": "Product Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "product_brand",
        "label": "Product Brand"
      },
      {
        "key": "product_category",
        "label": "Product Category"
      },
      {
        "key": "package",
        "label": "Package"
      },
      {
        "key": "metrc_production_batch_number",
        "label": "Metrc Production Batch Number"
      },
      {
        "key": "batch",
        "label": "Batch"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "total_price",
        "label": "Total Price"
      },
      {
        "key": "unit_cost_actual",
        "label": "Unit Cost (Actual)"
      },
      {
        "key": "unit_cost_default",
        "label": "Unit Cost (Default)"
      },
      {
        "key": "total_cost_actual",
        "label": "Total Cost (Actual)"
      },
      {
        "key": "total_cost_default",
        "label": "Total Cost (Default)"
      },
      {
        "key": "total_profits_actual",
        "label": "Total Profits (Actual)"
      },
      {
        "key": "total_profits_default",
        "label": "Total Profits (Default)"
      },
      {
        "key": "profit_unit_actual",
        "label": "Profit/Unit (Actual)"
      },
      {
        "key": "profit_unit_default",
        "label": "Profit/Unit (Default)"
      },
      {
        "key": "margin_actual",
        "label": "Margin (Actual)"
      },
      {
        "key": "margin_default",
        "label": "Margin (Default)"
      }
    ],
    "date_range": "Aug 14, 2026",
    "report": "cogs"
  }
}

Returns one row per completed sales order line item over the reported date range, with the product's descriptive attributes (name, SKU, brand, category), its package, batch, and Metrc production batch, plus the item's quantity, unit type, unit and total price, and both actual and default cost figures (unit cost, total cost, total profit, profit per unit, and margin). Only line items on Completed orders that have not been fully returned are included. When neither order_datetime nor delivery_datetime is provided, the report defaults to orders from the last 30 days (by order date) to avoid scanning your entire order history.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Companies on the BioTrack compliance integration do not get the metrc_production_batch_number column. Report-level information (the resolved date and column definitions) is returned under meta.

Required permission: reports_permissions_cogs.

Request

GET /public/v1/reports/cogs

Parameters

Parameter Description In Type Required Default Example
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
delivery_datetime Filter by delivery date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z

Responses

Status Description Schema
200 The Cost of Goods Sold report CogsReport

Get the Cultivation Transaction History report

GET /public/v1/reports/cultivation-transaction-history returns one row per cultivation transaction as {data, meta}, filtered by strain and type

GET /public/v1/reports/cultivation-transaction-history?datetime=2000-01-01T00%3A00%3A00Z%2C2999-01-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmRiODZjZDMtMTVkNC00Njg4LTkyNjUtMWE2YWYyMjA4N2Q4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDYxIiwidHlwIjoiYWNjZXNzIn0.dSjIbemKugnOMQyfqPygjIyhSDlRdue6PHkuoM1_v1U

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 22abb35e318b46413f7bf3ad6663072b-24b6df903a0e750a-0
{
  "data": [
    {
      "amount": 1,
      "batch_name": "Plant Group 5571",
      "date": "08/14/2026",
      "description": null,
      "package_label_s": null,
      "plant_tag_s": null,
      "product_name": null,
      "related_entity": null,
      "related_entity_status": null,
      "strain": "Blue Dream",
      "type": "Plant Batch Creation",
      "unit": "Unit"
    },
    {
      "amount": 1,
      "batch_name": "Plant Group 4935",
      "date": "08/14/2026",
      "description": null,
      "package_label_s": null,
      "plant_tag_s": null,
      "product_name": null,
      "related_entity": null,
      "related_entity_status": null,
      "strain": "OG Kush",
      "type": "Plant Batch Creation",
      "unit": "Unit"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "date",
        "label": "Date"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "batch_name",
        "label": "Batch Name"
      },
      {
        "key": "plant_tag_s",
        "label": "Plant Tag(s)"
      },
      {
        "key": "product_name",
        "label": "Product Name"
      },
      {
        "key": "package_label_s",
        "label": "Package Label(s)"
      },
      {
        "key": "type",
        "label": "Type"
      },
      {
        "key": "related_entity",
        "label": "Related Entity"
      },
      {
        "key": "related_entity_status",
        "label": "Related Entity Status"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "unit",
        "label": "Unit"
      },
      {
        "key": "description",
        "label": "Description"
      }
    ],
    "date_range": "Dec 31, 1999 to Dec 31, 2998",
    "report": "cultivation_transaction_history"
  }
}

Returns one row per cultivation transaction over the reported date range, covering the full plant lifecycle: plant batch creations, adjustments and splits, growth phase changes, plant moves, destructions, additive applications, teardowns, harvests, waste, and packaging. Each row carries the transaction's date, strain, batch name, plant tag(s), product name, package label(s), type, the related entity (teardown or harvest) and its status, the signed amount and unit, and the transaction's description. When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. The total_cost column is omitted for users without permission to view costs. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_cultivation_transaction_history.

Request

GET /public/v1/reports/cultivation-transaction-history

Parameters

Parameter Description In Type Required Default Example
datetime Filter by transaction date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
transaction_type Filter by a single transaction type query string false Move Plant(s)
strain Filter by an exact strain name query string false
plant_batch_ids Filter by plant batch (plant group) IDs query array false
license_ids Filter by license IDs query array false

Responses

Status Description Schema
200 The Cultivation Transaction History report CultivationTransactionHistoryReport

Get the Harvest Outputs report

GET /public/v1/reports/harvest-outputs returns one row per assembly line item as {data, meta}, filtered by status

GET /public/v1/reports/harvest-outputs
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTJlMGFjM2QtOTczZi00YTAyLTgxMzMtYzhkZTM4MzY4MTMxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTM0IiwidHlwIjoiYWNjZXNzIn0.bG5X3a0V29y2TpwANzw3zVRIHPTaCXjg3_tUCJknaak

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 56a6e16cf9a8b0e9de7c73bad827a345-5fd4fb034802a805-0
{
  "data": [
    {
      "cost_input_output": "Output",
      "distru_product": "Product 206",
      "harvest_assembly_date": "08/14/2026",
      "harvest_assembly_number": "HAS-0000001",
      "harvest_name": "Spring-Hill-Kush-#0-08/14/2026",
      "line_item_id": "1299aeae-3143-41e9-81d0-f52137e59c1a",
      "location": "Place 171",
      "output_batch_number": null,
      "output_package_number": "1A4010200001234000000000",
      "output_reference_id": null,
      "product_category": "Some category 98",
      "quantity": 10,
      "status": "PENDING",
      "strain": "Spring Hill Kush #0",
      "unit_type": "Gram"
    },
    {
      "cost_input_output": "Input",
      "distru_product": "Spring-Hill-Kush-#0-08/14/2026",
      "harvest_assembly_date": "08/14/2026",
      "harvest_assembly_number": "HAS-0000001",
      "harvest_name": "Spring-Hill-Kush-#0-08/14/2026",
      "line_item_id": "5ed1914f-d42f-4b84-9b0c-bfd4fcb4de73",
      "location": "Place 118",
      "output_batch_number": null,
      "output_package_number": null,
      "output_reference_id": null,
      "product_category": null,
      "quantity": 10,
      "status": "PENDING",
      "strain": "Spring Hill Kush #0",
      "unit_type": "Gram"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "harvest_assembly_date",
        "label": "Harvest Assembly Date"
      },
      {
        "key": "harvest_assembly_number",
        "label": "Harvest Assembly Number"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "harvest_name",
        "label": "Harvest Name"
      },
      {
        "key": "output_batch_number",
        "label": "Output Batch Number"
      },
      {
        "key": "output_package_number",
        "label": "Output Package Number"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "location",
        "label": "Location"
      },
      {
        "key": "cost_input_output",
        "label": "Cost/Input/Output"
      },
      {
        "key": "distru_product",
        "label": "Distru Product"
      },
      {
        "key": "product_category",
        "label": "Product Category"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "line_item_id",
        "label": "Line Item ID"
      },
      {
        "key": "output_reference_id",
        "label": "Output Reference ID"
      }
    ],
    "date_range": "Aug  7, 2026 to Aug 14, 2026",
    "report": "harvest_outputs"
  }
}

Returns one row per line item of every harvest assembly over the reported date range. Each assembly expands into its inputs (the harvested material consumed), its outputs (the products produced, with their batch and package numbers), and its cost line items — the cost_input_output column identifies which. Every row carries the assembly's date, number, and status, plus the harvest name, strain, location, product, product category, quantity, and unit type. When no date filter is provided, the report defaults to the last 7 days.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. The cost columns (unit_cost_actual, unit_cost_default, total_cost_actual, total_cost_default, cost_type, cost_type_description) are omitted for users without permission to view costs. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_harvest_outputs.

Request

GET /public/v1/reports/harvest-outputs

Parameters

Parameter Description In Type Required Default Example
datetime Filter by harvest harvest assembly date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
status Filter by harvest assembly status query string false COMPLETED
harvest_name Filter by harvest name (partial match) query string false
strain Filter by strain (partial match) query string false
location_id Filter by a single input location ID query string false
output_product_name Filter by output product name (partial match) query string false
output_product_category_id Filter by a single output product category ID query string false

Responses

Status Description Schema
200 The Harvest Outputs report HarvestOutputsReport

Get the Inventory Assets report

GET /public/v1/reports/inventory-assets returns one row per on-hand asset as {data, meta}, filtered by location

GET /public/v1/reports/inventory-assets
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjA2OTNmMWQtYWM1MC00NjIzLWFkNTgtZjAxYzgwNTEwYTQ4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg1IiwidHlwIjoiYWNjZXNzIn0.LGeu3FwgOtw6WrFmp4OQaQUMwVUVJYTJZDwFEcZtPQo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c67c1ed80d41689696d067b405d11c92-87b2f20f3ea12ea6-0
{
  "data": [
    {
      "active_quantity": 100,
      "assembling_quantity": 0,
      "batch_number": "B1",
      "category": "Some category 56",
      "expiration_date": null,
      "harvest_date": null,
      "license": null,
      "location": "L1",
      "owner": "FirstName580 LastName581",
      "package_number": null,
      "product": "Widget",
      "selling_quantity": 0,
      "sku": "sku 123",
      "subcategory": "Some subcategory 49",
      "tracking_method": "BATCH",
      "unit_price": 1.0,
      "unit_type": "Gram",
      "vendor": "Company 255"
    },
    {
      "active_quantity": 50,
      "assembling_quantity": 0,
      "batch_number": "B1",
      "category": "Some category 56",
      "expiration_date": null,
      "harvest_date": null,
      "license": null,
      "location": "L2",
      "owner": "FirstName580 LastName581",
      "package_number": null,
      "product": "Widget",
      "selling_quantity": 0,
      "sku": "sku 123",
      "subcategory": "Some subcategory 49",
      "tracking_method": "BATCH",
      "unit_price": 1.0,
      "unit_type": "Gram",
      "vendor": "Company 255"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "license",
        "label": "License"
      },
      {
        "key": "location",
        "label": "Location"
      },
      {
        "key": "package_number",
        "label": "Package Number"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "active_quantity",
        "label": "Active Quantity"
      },
      {
        "key": "assembling_quantity",
        "label": "Assembling Quantity"
      },
      {
        "key": "selling_quantity",
        "label": "Selling Quantity"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "expiration_date",
        "label": "Expiration Date"
      },
      {
        "key": "tracking_method",
        "label": "Tracking Method"
      },
      {
        "key": "harvest_date",
        "label": "Harvest Date"
      }
    ],
    "date_range": "Aug 14, 2026 - 4:20AM",
    "report": "inventory_assets"
  }
}

Returns one row per on-hand inventory asset (a product at a location, batch, or package) with its descriptive attributes (product, SKU, vendor, owner, unit type, category, subcategory, license, location, package number, batch number), its active, assembling, and selling quantities, its unit price, and its actual and default unit and total costs. Quantities and costs are point-in-time: pass datetime to snapshot the position at a past moment (defaults to now).

Pass style=granular to expand each asset into its underlying cost inputs — this adds the final_input, cost_origin, and cost_quantity columns and requires permission to view cost details. Cost columns are omitted for users without permission to view costs.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Report-level information (the resolved date and column definitions) is returned under meta.

Required permission: reports_permissions_inventory_assets.

Request

GET /public/v1/reports/inventory-assets

Parameters

Parameter Description In Type Required Default Example
style Row granularity (defaults to collapsed) query string false granular
location_id Filter by a single location ID query string false
datetime Point-in-time snapshot as an ISO8601 datetime (defaults to now) query string false 2026-07-01T00:00:00Z

Responses

Status Description Schema
200 The Inventory Assets report InventoryAssetsReport

Get the Inventory Transaction History report

GET /public/v1/reports/inventory-transaction-history returns one row per inventory transaction as {data, meta}, honoring the date filter

GET /public/v1/reports/inventory-transaction-history
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWFiNGEzN2MtOWE5ZS00ZWUzLTk0OGEtZmNiMDFiNzc3MGRiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjQxIiwidHlwIjoiYWNjZXNzIn0.YsiD2vbpot-lv5IDjgwSEr6Ib-GGU6-YFhuzhuJUPJE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2b802610d54a1aa09cf80291919972fc-23113b5e4c0d5646-0
{
  "data": [
    {
      "amount": 100,
      "batch_id": "00000000-0000-0000-0000-00000000001c",
      "batch_number": null,
      "cbd": null,
      "cbd_mg_g": null,
      "cbd_mg_ml": null,
      "company_relationship_id": null,
      "date": "2026-08-14T11:20:56.355280Z",
      "description": "FirstName514 LastName515 moved 100 g of Batch B1 of Widget from gain to active in Place 92 with reason 'revaluation'",
      "metrc_production_batch_number": null,
      "metrc_unit_name": null,
      "package_batch_number_or_batch_name": "B1",
      "package_label": null,
      "product": "Widget",
      "product_id": "a2160bb0-23db-41fe-b142-44971715ff5c",
      "related_entity": "Stock Adjustment",
      "related_entity_customer_vendor": null,
      "related_entity_status": null,
      "thc": null,
      "thc_mg_g": null,
      "thc_mg_ml": null,
      "total_cbd": null,
      "total_cbd_mg_g": null,
      "total_cbd_mg_ml": null,
      "total_cost": null,
      "total_thc": null,
      "total_thc_mg_g": null,
      "total_thc_mg_ml": null,
      "type": "adjustment",
      "unit_type": "Gram"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "date",
        "label": "Date"
      },
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "package_batch_number_or_batch_name",
        "label": "Package Batch Number or Batch Name"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      },
      {
        "key": "package_label",
        "label": "Package Label"
      },
      {
        "key": "metrc_production_batch_number",
        "label": "Metrc Production Batch Number"
      },
      {
        "key": "type",
        "label": "Type"
      },
      {
        "key": "related_entity",
        "label": "Related Entity"
      },
      {
        "key": "related_entity_status",
        "label": "Related Entity Status"
      },
      {
        "key": "related_entity_customer_vendor",
        "label": "Related Entity Customer/Vendor"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "metrc_unit_name",
        "label": "Metrc Unit Name"
      },
      {
        "key": "product_id",
        "label": "Product Id"
      },
      {
        "key": "batch_id",
        "label": "Batch Id"
      },
      {
        "key": "company_relationship_id",
        "label": "Company Relationship Id"
      },
      {
        "key": "description",
        "label": "Description"
      },
      {
        "key": "thc",
        "label": "THC %"
      },
      {
        "key": "total_thc",
        "label": "Total THC %"
      },
      {
        "key": "thc_mg_g",
        "label": "THC mg/g"
      },
      {
        "key": "thc_mg_ml",
        "label": "THC mg/mL"
      },
      {
        "key": "total_thc_mg_g",
        "label": "Total THC mg/g"
      },
      {
        "key": "total_thc_mg_ml",
        "label": "Total THC mg/mL"
      },
      {
        "key": "cbd",
        "label": "CBD %"
      },
      {
        "key": "total_cbd",
        "label": "Total CBD %"
      },
      {
        "key": "cbd_mg_g",
        "label": "CBD mg/g"
      },
      {
        "key": "cbd_mg_ml",
        "label": "CBD mg/mL"
      },
      {
        "key": "total_cbd_mg_g",
        "label": "Total CBD mg/g"
      },
      {
        "key": "total_cbd_mg_ml",
        "label": "Total CBD mg/mL"
      },
      {
        "key": "total_cost",
        "label": "Total Cost"
      }
    ],
    "date_range": "Jul 15, 2026 to Aug 14, 2026",
    "report": "inventory_transaction_history"
  }
}

Returns one row per inventory transaction over the reported date range, with the transaction's date, product, package and batch identifiers, Metrc production batch number, type, related entity (order, return, assembly, stock adjustment, etc.) and its status and customer/vendor, the amount and unit type, package potency figures (THC/CBD), and the transaction's total cost. When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Companies on the BioTrack compliance integration do not get the metrc_unit_name and metrc_production_batch_number columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_inventory_transaction_history.

Request

GET /public/v1/reports/inventory-transaction-history

Parameters

Parameter Description In Type Required Default Example
datetime Filter by transaction date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
product_ids Filter by product IDs query array false
batch_ids Filter by batch IDs query array false
package_id Filter by a single package ID query string false

Responses

Status Description Schema
200 The Inventory Transaction History report InventoryTransactionHistoryReport

Get the Inventory Valuation report

GET /public/v1/reports/inventory-valuation returns one row per product as {data, meta}, valued and filtered per params

GET /public/v1/reports/inventory-valuation
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2IyYjZlNDctYzkxZC00NzAyLWIzMTQtYzAxZDc0M2M5YTM0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTEiLCJ0eXAiOiJhY2Nlc3MifQ.0QldL76A0bALKV3lQG1quqMSGFliFqHkfTMEapjbZ4E

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 116da4f8874cefd71ccda806f971e771-3bdea302cbbaa20d-0
{
  "data": [
    {
      "active_quantity": 5.0,
      "active_value_price": 50.0,
      "assembling_quantity": 0.0,
      "available_quantity": 5.0,
      "brand": null,
      "category": "Some category 6",
      "group": "Product Group 6",
      "image_url": null,
      "incoming_quantity": 0.0,
      "inventory_threshold_max": null,
      "inventory_threshold_min": null,
      "name": "Alpha",
      "owner": "FirstName100 LastName101",
      "pending_output_quantity": 0.0,
      "reserved_quantity": 0.0,
      "sku": "sku 15",
      "subcategory": "Some subcategory 6",
      "unit_cost": 4.0,
      "unit_price": 10.0,
      "unit_type": "Gram",
      "vendor": "Company 44"
    },
    {
      "active_quantity": 0.0,
      "active_value_price": 0.0,
      "assembling_quantity": 0.0,
      "available_quantity": 0.0,
      "brand": null,
      "category": "Some category 8",
      "group": "Product Group 7",
      "image_url": null,
      "incoming_quantity": 0.0,
      "inventory_threshold_max": null,
      "inventory_threshold_min": null,
      "name": "Beta",
      "owner": "FirstName100 LastName101",
      "pending_output_quantity": 0.0,
      "reserved_quantity": 0.0,
      "sku": "sku 17",
      "subcategory": "Some subcategory 7",
      "unit_cost": 4.0,
      "unit_price": 10.0,
      "unit_type": "Gram",
      "vendor": "Company 47"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "active_quantity",
        "label": "Active Quantity"
      },
      {
        "key": "assembling_quantity",
        "label": "Assembling Quantity"
      },
      {
        "key": "reserved_quantity",
        "label": "Reserved Quantity"
      },
      {
        "key": "available_quantity",
        "label": "Available Quantity"
      },
      {
        "key": "incoming_quantity",
        "label": "Incoming Quantity"
      },
      {
        "key": "pending_output_quantity",
        "label": "Pending Output Quantity"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "inventory_threshold_max",
        "label": "Inventory Threshold Max"
      },
      {
        "key": "inventory_threshold_min",
        "label": "Inventory Threshold Min"
      },
      {
        "key": "active_value_price",
        "label": "Active Value (Price)"
      },
      {
        "key": "image_url",
        "label": "Image URL"
      },
      {
        "key": "brand",
        "label": "Brand"
      }
    ],
    "date_range": "Aug 14, 2026",
    "report": "inventory_valuation"
  }
}

Returns one row per product with its current on-hand position — active, assembling, reserved, available, incoming, and pending-output quantities — alongside the product's descriptive attributes (SKU, vendor, brand, unit type, category, subcategory, group, owner), its unit cost and price, its inventory alert thresholds, and its active inventory value. The active value is priced by unit price by default; pass calculation_method=cost to value it by unit cost instead, which also renames the value column (active_value_price becomes active_value_cost).

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Any Product custom fields configured for the company are appended as extra columns. Report-level information (the resolved date and column definitions) is returned under meta.

Required permission: reports_permissions_inventory_valuation.

Request

GET /public/v1/reports/inventory-valuation

Parameters

Parameter Description In Type Required Default Example
search Search by product name or SKU query string false
calculation_method How to value active inventory (defaults to price) query string false cost
location_ids Filter by location IDs query array false
user_ids Filter by user IDs query array false
vendor_ids Filter by vendor (company relationship) IDs query array false
brand_ids Filter by brand (company relationship) IDs query array false

Responses

Status Description Schema
200 The Inventory Valuation report InventoryValuationReport

Get the Invoice History report

GET /public/v1/reports/invoice-history returns one row per invoice as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/invoice-history?invoice_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDI3YjVjN2ItOTVmNy00MWMwLWJhYWItMGE2OTRlODgyOTlhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTMiLCJ0eXAiOiJhY2Nlc3MifQ.Vhg4gey3PcQkMTndOjk6c31wKs31bzXjk48rDaG1z5s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6ce65a30f042800057b057838abf8a9b-dffb65ab01cdbaef-0
{
  "data": [
    {
      "charge_summary": null,
      "customer": "Company 36",
      "discount_summary": null,
      "due_date": "2026-08-14",
      "invoice_date": "2026-07-01",
      "invoice_number": "INV-2",
      "line_item_subtotal": 0.0,
      "outstanding": 500.0,
      "owner": "FirstName76 LastName77",
      "paid": 0.0,
      "sales_order": "SO-20",
      "status": "NOT_PAID",
      "tax_summary": null,
      "total": "500.00",
      "total_charges": 0.0,
      "total_discounts": 0.0,
      "total_taxes": 0.0
    },
    {
      "charge_summary": null,
      "customer": "Company 23",
      "discount_summary": null,
      "due_date": "2026-08-14",
      "invoice_date": "2026-07-01",
      "invoice_number": "INV-1",
      "line_item_subtotal": 0.0,
      "outstanding": 1.0e3,
      "owner": "FirstName32 LastName33",
      "paid": 0.0,
      "sales_order": "SO-0",
      "status": "FULLY_PAID",
      "tax_summary": null,
      "total": "1000.00",
      "total_charges": 0.0,
      "total_discounts": 0.0,
      "total_taxes": 0.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "invoice_date",
        "label": "Invoice Date"
      },
      {
        "key": "invoice_number",
        "label": "Invoice Number"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "sales_order",
        "label": "Sales Order"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "outstanding",
        "label": "Outstanding"
      },
      {
        "key": "line_item_subtotal",
        "label": "Line Item Subtotal"
      },
      {
        "key": "total_taxes",
        "label": "Total Taxes"
      },
      {
        "key": "tax_summary",
        "label": "Tax Summary"
      },
      {
        "key": "total_charges",
        "label": "Total Charges"
      },
      {
        "key": "charge_summary",
        "label": "Charge Summary"
      },
      {
        "key": "total_discounts",
        "label": "Total Discounts"
      },
      {
        "key": "discount_summary",
        "label": "Discount Summary"
      },
      {
        "key": "total",
        "label": "Total"
      },
      {
        "key": "owner",
        "label": "Owner"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "invoice_history"
  }
}

Returns one row per invoice with its dates, sales order, customer, status, and monetary totals (paid, outstanding, line item subtotal, taxes, charges, discounts, total) along with the tax, charge, and discount summaries. When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells (monetary amounts) parsed into numbers. Companies on a compliance integration (Metrc or BioTrack) get additional manifest and shipped-from-license columns, and any Invoice custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_invoice_history.

Request

GET /public/v1/reports/invoice-history

Parameters

Parameter Description In Type Required Default Example
status Filter by invoice payment status query array false ["FULLY_PAID"]
order_status Filter by the invoice's sales order status query array false ["COMPLETED"]
invoice_datetime Filter by invoice date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
due_datetime Filter by due date range query string false
total Filter by invoice total range (comma-separated min,max) query string false 100,500
paid Filter by paid amount range (comma-separated min,max) query string false
search Search by invoice number query string false
company_relationship_ids Filter by customer (company relationship) IDs query array false
shipped_from_license_ids Filter by the shipped-from license IDs query array false
batch_ids Filter by batch IDs query array false
product_ids Filter by product IDs query array false

Responses

Status Description Schema
200 The Invoice History report InvoiceHistoryReport

Get the Order Fulfillment report

GET /public/v1/reports/order-fulfillment returns one row per product pivoted across orders as {data, meta}, narrowed by filters

GET /public/v1/reports/order-fulfillment?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWQ1OWFhYjEtNmJiNC00NjMxLWE2YjUtMTQyY2I4NTQxNzhmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MiIsInR5cCI6ImFjY2VzcyJ9.sBNy303gywQbiZZiIVkEvYSwRGkWv0QWTKZ9i9yI5tg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 36340f26bdb36ad6fd003243fa2d96d4-3467c555604e6e3b-0
{
  "data": [
    {
      "category": "Some category 1",
      "group": "Product Group 3",
      "product": "A1",
      "so_1": 3,
      "so_2": "",
      "subcategory": "Some subcategory 2",
      "total_units": 3,
      "total_value": 30.0,
      "unit_price": 10.0
    },
    {
      "category": "Some category 4",
      "group": "Product Group 5",
      "product": "B2",
      "so_1": 1,
      "so_2": 4,
      "subcategory": "Some subcategory 5",
      "total_units": 5,
      "total_value": 100.0,
      "unit_price": 20.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "so_1",
        "label": "SO-1"
      },
      {
        "key": "so_2",
        "label": "SO-2"
      },
      {
        "key": "total_units",
        "label": "Total Units"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "total_value",
        "label": "Total Value"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "order_fulfillment"
  }
}

Returns one row per product sold over the reported date range, pivoted across the matching sales orders: alongside the product's group, category, and subcategory, each row carries one dynamic column per order (keyed by the slugified order number, e.g. so_1042) holding the quantity of that product on that order, plus the product's total units, unit price, and total value. When no date filter is provided, the report defaults to the last 30 days. Canceled and merged orders are always excluded.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Because the per-order columns are dynamic, the exact set of keys on each row and in meta.columns depends on which orders match the filters. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_order_fulfillment.

Request

GET /public/v1/reports/order-fulfillment

Parameters

Parameter Description In Type Required Default Example
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
search Search by order number, customer name, or LeafLink short ID query string false
company_relationship_ids Filter by customer (company relationship) IDs query array false
product_ids Filter by product IDs query array false
location_ids Filter by the order item location IDs query array false
user_ids Filter by the order item user IDs query array false
owner_ids Filter by order owner (sales rep) IDs query array false

Responses

Status Description Schema
200 The Order Fulfillment report OrderFulfillmentReport

Get the Plant Lifecycle report

GET /public/v1/reports/plant-lifecycle returns one row per plant batch as {data, meta}, filtered by strain

GET /public/v1/reports/plant-lifecycle?datetime=2000-01-01T00%3A00%3A00Z%2C2999-01-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDM4YWRmNzUtYjA5ZS00YWI4LWE5MGQtYTM5NWUwZGIxY2EwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDU2IiwidHlwIjoiYWNjZXNzIn0.NqEDUC0GqTSShmPwVtBomXvvss7Z-qIP908c6hhOsYc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ff4d03c3f85071a7b2013807f25a55f0-cfab5df1e22cbaf4-0
{
  "data": [
    {
      "batch_creation_date": "08/14/2026",
      "days_as_batch": 0,
      "days_veg_to_last_harvest": null,
      "first_harvest_date": null,
      "harvest_name_s": null,
      "last_harvest_date": null,
      "plant_batch_name": "Plant Group 4996",
      "plants_destroyed": 0,
      "plants_harvested": 0,
      "plants_promoted_to_veg": 0,
      "plants_started": 3,
      "promoted_to_veg_date": null,
      "strain": "OG Kush",
      "total_lifecycle_days": 0
    },
    {
      "batch_creation_date": "08/14/2026",
      "days_as_batch": 0,
      "days_veg_to_last_harvest": null,
      "first_harvest_date": null,
      "harvest_name_s": null,
      "last_harvest_date": null,
      "plant_batch_name": "Plant Group 5637",
      "plants_destroyed": 0,
      "plants_harvested": 0,
      "plants_promoted_to_veg": 0,
      "plants_started": 2,
      "promoted_to_veg_date": null,
      "strain": "Blue Dream",
      "total_lifecycle_days": 0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "plant_batch_name",
        "label": "Plant Batch Name"
      },
      {
        "key": "batch_creation_date",
        "label": "Batch Creation Date"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "plants_started",
        "label": "Plants Started"
      },
      {
        "key": "plants_promoted_to_veg",
        "label": "Plants Promoted to Veg"
      },
      {
        "key": "plants_destroyed",
        "label": "Plants Destroyed"
      },
      {
        "key": "plants_harvested",
        "label": "Plants Harvested"
      },
      {
        "key": "promoted_to_veg_date",
        "label": "Promoted to Veg Date"
      },
      {
        "key": "first_harvest_date",
        "label": "First Harvest Date"
      },
      {
        "key": "last_harvest_date",
        "label": "Last Harvest Date"
      },
      {
        "key": "days_as_batch",
        "label": "Days as Batch"
      },
      {
        "key": "days_veg_to_last_harvest",
        "label": "Days Veg to Last Harvest"
      },
      {
        "key": "total_lifecycle_days",
        "label": "Total Lifecycle Days"
      },
      {
        "key": "harvest_name_s",
        "label": "Harvest Name(s)"
      }
    ],
    "date_range": "Dec 31, 1999 to Dec 31, 2998",
    "report": "plant_lifecycle"
  }
}

Returns one row per plant batch (plant group) whose creation date falls in the reported range, summarizing its lifecycle: the batch name, creation date, strain, and the counts of plants started, promoted to vegetative, destroyed, and harvested. Each row also carries the promotion-to-veg date, first and last harvest dates, the durations spent as a batch, from veg to last harvest, and over the total lifecycle (in days), and the names of the harvests the batch produced.

Only plant batches on active Metrc licenses that can track vegetative plants are included. When no date filter is provided, the report defaults to the last 30 days (by batch creation date). Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. The cost columns (total_cost_batch_stage, total_cost_veg_to_last_harvest, destroyed_plant_cost, total_lifecycle_cost) are omitted for users without permission to view costs. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_plant_lifecycle.

Request

GET /public/v1/reports/plant-lifecycle

Parameters

Parameter Description In Type Required Default Example
datetime Filter by plant batch creation date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
strain Filter by strain (partial match) query string false

Responses

Status Description Schema
200 The Plant Lifecycle report PlantLifecycleReport

Get the Purchase Order History report

GET /public/v1/reports/purchase-order-history returns one row per purchase as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/purchase-order-history?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjU1MWJmMjktOTM1MC00YmNlLWJjMDQtYzBjZjU3NWI2Y2NjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE3IiwidHlwIjoiYWNjZXNzIn0.DHgSfukMpnnw-4BwW8yh4-GwhFA2jH2WsdifS4nZ-7s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0eeabd522c1923fca9804b17aa50af83-99d52b29fd6167eb-0
{
  "data": [
    {
      "amount": "500.00",
      "due_date": "2026-08-14T04:20:55.861080",
      "owner": "FirstName268 LastName269",
      "paid": "0.0",
      "purchase_date": "2026-07-01T05:00:00.000000",
      "purchase_number": "PO-2",
      "status": "PENDING",
      "vendor": "Company 128"
    },
    {
      "amount": "1000.00",
      "due_date": "2026-08-14T04:20:55.825744",
      "owner": "FirstName236 LastName239",
      "paid": "0.0",
      "purchase_date": "2026-07-01T05:00:00.000000",
      "purchase_number": "PO-1",
      "status": "COMPLETED",
      "vendor": "Company 114"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "purchase_date",
        "label": "Purchase Date"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "purchase_number",
        "label": "Purchase Number"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "owner",
        "label": "Owner"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "purchase_order_history"
  }
}

Returns one row per purchase with its dates, vendor, status, and monetary totals (paid, amount). When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells (monetary amounts) parsed into numbers. Companies on a compliance integration (Metrc or BioTrack) get an additional manifest number column, and any Purchase custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_purchase_order_history.

Request

GET /public/v1/reports/purchase-order-history

Parameters

Parameter Description In Type Required Default Example
status Filter by purchase status query array false ["COMPLETED","DELIVERING"]
order_datetime Filter by purchase date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
due_datetime Filter by due date range query string false
created_datetime Filter by the datetime the purchase was created query string false
updated_datetime Filter by the datetime the purchase was last modified query string false
total Filter by purchase total range (comma-separated min,max) query string false 100,500
paid Filter by paid amount range (comma-separated min,max) query string false
search Search by purchase number query string false
company_relationship_ids Filter by vendor (company relationship) IDs query array false
location_ids Filter by receiving warehouse (location) IDs query array false
owner_ids Filter by purchase owner (user) IDs query array false
creator_ids Filter by purchase creator (user) IDs query array false
batch_ids Filter by batch IDs query array false
product_ids Filter by product IDs query array false

Responses

Status Description Schema
200 The Purchase Order History report PurchaseOrderHistoryReport

Get the Purchases By Company report

GET /public/v1/reports/purchases-by-company returns one row per vendor as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/purchases-by-company?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTEwZjZlNDQtNDBhYy00YzA2LWIyYzMtYjE3MDg4OWNmMWY2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE2IiwidHlwIjoiYWNjZXNzIn0.hyrWwJAePqX8Wu6tGehMG9a0KetgLmMqCfwmhQEok0E

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fb81c9f3f420b35e5c7db9bfb9128e99-26d4c07227580315-0
{
  "data": [
    {
      "category": "Lab",
      "last_purchase_date": "7/15/2026",
      "name": "Alpha",
      "product_owner": "FirstName271 LastName273",
      "purchase_order_count": 2,
      "relationship_type": null,
      "total_purchases": 1.5e3
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "last_purchase_date",
        "label": "Last Purchase Date"
      },
      {
        "key": "purchase_order_count",
        "label": "Purchase Order Count"
      },
      {
        "key": "total_purchases",
        "label": "Total Purchases"
      },
      {
        "key": "product_owner",
        "label": "Product Owner"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "relationship_type",
        "label": "Relationship Type"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "purchases_by_company"
  }
}

Returns one row per vendor (company relationship) with its last purchase date, purchase order count, and total purchases over the reported date range. When no date filter is provided, the report defaults to the last 30 days. Draft purchases are excluded.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Any CompanyRelationship custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_purchases_by_company.

Request

GET /public/v1/reports/purchases-by-company

Parameters

Parameter Description In Type Required Default Example
order_datetime Filter by purchase date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
search Search by vendor (related company) name query string false
company_relationship_group_ids Filter by vendor group IDs query array false
owner_ids Filter by purchase owner (sales rep) IDs query array false

Responses

Status Description Schema
200 The Purchases By Company report PurchasesByCompanyReport

Get the Purchases By Product report

GET /public/v1/reports/purchases-by-product returns one row per purchased product as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/purchases-by-product?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTgzNDM3YjktZWU3YS00YmE0LWIyZDAtODgwZmY4ZjE0NTU5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTc1IiwidHlwIjoiYWNjZXNzIn0.shRLsAt7g8Zyup0GLVs9X1SAgMqWVvnc3PvatkwhCpQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 10f19883af26ffbab6fead3b8fa75904-c7447bdb5c704bf4-0
{
  "data": [
    {
      "category": "Some category 33",
      "group": "Product Group 29",
      "name": "Alpha",
      "owner": "FirstName352 LastName353",
      "quantity_purchased": 4,
      "sale_price": 1.0,
      "sku": "sku 73",
      "subcategory": "Some subcategory 29",
      "total_purchased": 40.0,
      "unit_cost": null,
      "unit_type": "Gram",
      "vendor": "Company 159",
      "wholesale_price": null
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "quantity_purchased",
        "label": "Quantity Purchased"
      },
      {
        "key": "total_purchased",
        "label": "Total Purchased"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "sale_price",
        "label": "Sale Price"
      },
      {
        "key": "wholesale_price",
        "label": "Wholesale Price"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "purchases_by_product"
  }
}

Returns one row per purchased product with its quantity purchased and total purchased (purchase item quantities times price) over the reported date range, alongside the product's descriptive attributes (SKU, unit type, category, subcategory, group, vendor, owner, unit cost, sale price, and wholesale price). When no date filter is provided, the report defaults to the last 30 days. Draft purchases are excluded.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Any Product custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_purchases_by_product.

Request

GET /public/v1/reports/purchases-by-product

Parameters

Parameter Description In Type Required Default Example
order_datetime Filter by purchase date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
search Search by product name or SKU query string false
owner_ids Filter by purchase owner (sales rep) IDs query array false
location_ids Filter by the purchase location IDs query array false

Responses

Status Description Schema
200 The Purchases By Product report PurchasesByProductReport

Get the Sales By Company report

GET /public/v1/reports/sales-by-company returns one row per customer as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/sales-by-company?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjY5MzUyMTQtZjQ3Yy00ZTNjLWJlYjMtYjEzYzMxMWQ2MTIyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MSIsInR5cCI6ImFjY2VzcyJ9.KnoE_JxLuK_4chrrHhDu2xRsTPU7UKhwKWili2WdR-M

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 19a253be60c40aae3dfd49178d484d4d-9b980469b7287641-0
{
  "data": [
    {
      "category": "Microbusiness",
      "last_order_date": "7/15/2026",
      "name": "Alpha",
      "order_count": 3,
      "owner": "FirstName44 LastName45",
      "relationship_type": null,
      "total_received": 0.0,
      "total_sales": 1.8e3
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "last_order_date",
        "label": "Last Order Date"
      },
      {
        "key": "order_count",
        "label": "Order Count"
      },
      {
        "key": "total_received",
        "label": "Total Received"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "relationship_type",
        "label": "Relationship Type"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_by_company"
  }
}

Returns one row per customer (company relationship) with its last order date, order count, total received (payments), and total sales (order totals net of returns) over the reported date range. When no date filter is provided, the report defaults to the last 30 days. Canceled orders are excluded unless the status filter explicitly requests them.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Any CompanyRelationship custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_by_company.

Request

GET /public/v1/reports/sales-by-company

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
search Search by customer (related company) name query string false
company_relationship_group_ids Filter by customer group IDs query array false
owner_ids Filter by order owner (sales rep) IDs query array false

Responses

Status Description Schema
200 The Sales By Company report SalesByCompanyReport

Get the Sales By Product report

GET /public/v1/reports/sales-by-product returns one row per product as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/sales-by-product?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGJmNTQxNjgtNjc2NS00N2ZjLWFjZmYtZTNhYTY2Mzk2OGRkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTEiLCJ0eXAiOiJhY2Nlc3MifQ.AEkwFP8OxxKsewLC_fXGeKbxxsozUgZP4Ol0_mzHQsw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3952038c2bf6b4ec1275832500c95380-6a885b77af156586-0
{
  "data": [
    {
      "category": "Some category 5",
      "group": "Product Group 4",
      "name": "Beta",
      "product_owner": "FirstName72 LastName75",
      "quantity_sold": 3,
      "sale_price": 1.0,
      "shipped_from_license": null,
      "sku": "sku 7",
      "subcategory": "Some subcategory 4",
      "total_sales": 60.0,
      "unit_cost": null,
      "unit_type": "Gram",
      "upc": null,
      "vendor": "Company 35",
      "wholesale_price": null
    },
    {
      "category": "Some category 2",
      "group": "Product Group 1",
      "name": "Alpha",
      "product_owner": "FirstName50 LastName51",
      "quantity_sold": 4,
      "sale_price": 1.0,
      "shipped_from_license": null,
      "sku": "sku 3",
      "subcategory": "Some subcategory 0",
      "total_sales": 40.0,
      "unit_cost": null,
      "unit_type": "Gram",
      "upc": null,
      "vendor": "Company 26",
      "wholesale_price": null
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "quantity_sold",
        "label": "Quantity Sold"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "product_owner",
        "label": "Product Owner"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "sale_price",
        "label": "Sale Price"
      },
      {
        "key": "wholesale_price",
        "label": "Wholesale Price"
      },
      {
        "key": "shipped_from_license",
        "label": "Shipped From License"
      },
      {
        "key": "upc",
        "label": "UPC"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_by_product"
  }
}

Returns one row per product with its quantity sold and total sales (order item quantities times price, net of returns) over the reported date range, alongside the product's descriptive attributes (SKU, unit type, category, subcategory, group, vendor, owner, unit cost, sale price, wholesale price, shipped-from license, and UPC). When no date filter is provided, the report defaults to the last 30 days. Canceled orders are excluded unless the status filter explicitly requests them.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Any Product custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_by_product.

Request

GET /public/v1/reports/sales-by-product

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
search Search by product name or SKU query string false
customer_ids Filter by customer (company relationship) IDs query array false
exclude_customer_ids Exclude sales to these customer (company relationship) IDs query array false
owner_ids Filter by order owner (sales rep) IDs query array false
location_ids Filter by the order item location IDs query array false
user_ids Filter by the order item user IDs query array false
shipped_from_license_ids Filter by the shipped-from license IDs query array false

Responses

Status Description Schema
200 The Sales By Product report SalesByProductReport

Get the Sales By User report

GET /public/v1/reports/sales-by-user returns one row per user as {data, meta}, ranked by sales and narrowed by filters

GET /public/v1/reports/sales-by-user?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z&user_ids[]=00000000-0000-0000-0000-000000000011&user_ids[]=00000000-0000-0000-0000-000000000016
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDkyMjkyYmUtNDRhOC00ZmZiLWEzZTktYWRkMzkzYWM5ZGFhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTYiLCJ0eXAiOiJhY2Nlc3MifQ.T8s3JTDsfF-mkFc6MfnfiN-BaMyN42to4VK0MYevWsg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d685967b705d19b467827a2b7cf643bd-7bc47eb1377d75fc-0
{
  "data": [
    {
      "leaderboard_rank": 1,
      "order_count": 2,
      "sales_pre_tax": 50.0,
      "total_sales": 150.0,
      "user": "Alice Rep"
    },
    {
      "leaderboard_rank": 2,
      "order_count": 1,
      "sales_pre_tax": 30.0,
      "total_sales": 30.0,
      "user": "Bob Rep"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "leaderboard_rank",
        "label": "Leaderboard Rank"
      },
      {
        "key": "user",
        "label": "User"
      },
      {
        "key": "order_count",
        "label": "Order Count"
      },
      {
        "key": "sales_pre_tax",
        "label": "Sales (Pre-Tax)"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_by_user"
  }
}

Returns one row per user (sales rep) with its leaderboard rank, order count, pre-tax sales, and total sales (order totals net of returns) over the reported date range. Users are ranked by total sales, with the top seller at rank 1. When no date filter is provided, the report defaults to the last 30 days. Canceled orders are excluded unless the status filter explicitly requests them.

Every value is returned as it appears in the report's CSV export, with numeric cells parsed into numbers. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_by_user.

Request

GET /public/v1/reports/sales-by-user

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
search Search by order number or customer name query string false
user_ids Filter by user (sales rep) IDs query array false

Responses

Status Description Schema
200 The Sales By User report SalesByUserReport

Get the Sales Order History report

GET /public/v1/reports/sales-order-history returns one row per order as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/sales-order-history?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDI0MThkZjAtYzg2Ni00N2U3LWE5YWUtMTU0Y2VhZDMwMjEwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NiIsInR5cCI6ImFjY2VzcyJ9.1oqbwzAWmoubzvo6vprTJ7LUnvvjRqFPF3xCWWkUHqo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e2b651105a0af61b7a5231e8c92306df-e4a164f06139eab4-0
{
  "data": [
    {
      "charges_taxes_not_included": 0.0,
      "customer": "Company 24",
      "delivery_date": null,
      "delivery_date_utc": null,
      "discounts_taxes_not_included": 0.0,
      "due_date": "2026-08-14T04:20:54.969112",
      "due_date_utc": "2026-08-14T11:20:54.969112Z",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_number": "SO-1",
      "outstanding": 1.0e3,
      "owner": null,
      "paid": 0.0,
      "returns": 0.0,
      "status": "COMPLETED",
      "subtotal": 0.0,
      "taxes": 0.0,
      "total": 1.0e3
    },
    {
      "charges_taxes_not_included": 0.0,
      "customer": "Company 30",
      "delivery_date": null,
      "delivery_date_utc": null,
      "discounts_taxes_not_included": 0.0,
      "due_date": "2026-08-14T04:20:55.024042",
      "due_date_utc": "2026-08-14T11:20:55.024042Z",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_number": "SO-2",
      "outstanding": 500.0,
      "owner": null,
      "paid": 0.0,
      "returns": 0.0,
      "status": "PENDING",
      "subtotal": 0.0,
      "taxes": 0.0,
      "total": 500.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "order_date",
        "label": "Order Date"
      },
      {
        "key": "order_date_utc",
        "label": "Order Date (UTC)"
      },
      {
        "key": "delivery_date",
        "label": "Delivery Date"
      },
      {
        "key": "delivery_date_utc",
        "label": "Delivery Date (UTC)"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "due_date_utc",
        "label": "Due Date (UTC)"
      },
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "outstanding",
        "label": "Outstanding"
      },
      {
        "key": "subtotal",
        "label": "Subtotal"
      },
      {
        "key": "taxes",
        "label": "Taxes"
      },
      {
        "key": "discounts_taxes_not_included",
        "label": "Discounts (taxes not included)"
      },
      {
        "key": "charges_taxes_not_included",
        "label": "Charges (taxes not included)"
      },
      {
        "key": "returns",
        "label": "Returns"
      },
      {
        "key": "total",
        "label": "Total"
      },
      {
        "key": "owner",
        "label": "Owner"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_order_history"
  }
}

Returns one row per sales order with its dates, customer, status, and monetary totals (paid, outstanding, subtotal, taxes, discounts, charges, returns, total). When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells (monetary amounts) parsed into numbers. Companies on a compliance integration (Metrc or BioTrack) get additional manifest and shipped-from-license columns, and any Order custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_order_history.

Request

GET /public/v1/reports/sales-order-history

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
payment_status Filter by payment status query array false ["FULLY_PAID"]
order_source Filter by the source that created the order query array false
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
delivery_datetime Filter by delivery date range query string false
due_datetime Filter by due date range query string false
created_datetime Filter by the datetime the order was created query string false
updated_datetime Filter by the datetime the order was last modified query string false
total Filter by order total range (comma-separated min,max) query string false 100,500
matched_with_compliance_transfer Filter by whether the order is matched with a compliance transfer query boolean false
search Search by order number, customer name, or LeafLink short ID query string false
company_relationship_ids Filter by customer (company relationship) IDs query array false
company_relationship_group_ids Filter by customer group IDs query array false
shipped_from_license_ids Filter by the shipped-from license IDs query array false
menu_ids Filter by menu IDs query array false
brand_ids Filter by brand IDs query array false
owner_ids Filter by order owner (user) IDs query array false
creator_ids Filter by order creator (user) IDs query array false
batch_ids Filter by batch IDs query array false
product_ids Filter by product IDs query array false

Responses

Status Description Schema
200 The Sales Order History report SalesOrderHistoryReport

Get the Sales Order Item History report

GET /public/v1/reports/sales-order-item-history returns one row per line item as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/sales-order-item-history?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODFhNzNkZjMtNDEzOC00NGExLTk1ZTgtMzFiNWM1Yzg5MTBkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzgwIiwidHlwIjoiYWNjZXNzIn0.fP5M7W7ABlRuXkXzyQLJ7viU2O2wAEBnfOpCLAKgEZE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 99dfed97b88704373a9c030d028c61c9-7bb113d928a4073a-0
{
  "data": [
    {
      "batch_number": null,
      "brand": null,
      "brand_id": null,
      "category": "Some category 71",
      "customer": "Company 341",
      "customer_id": "00000000-0000-0000-0000-000000000156",
      "default_unit_cost": null,
      "default_unit_price": 1.0,
      "default_wholesale_price": null,
      "delivery_date": null,
      "delivery_date_utc": null,
      "due_date": "2026-08-14T04:20:56.756983",
      "due_date_utc": "2026-08-14T11:20:56.756983Z",
      "group": "Product Group 66",
      "invoice_numbers": null,
      "line_item_id": "aded43fc-9037-4d58-ba7e-9a36e842c407",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_id": "ba81b4d2-69cd-4f4d-8f51-45f8723d6855",
      "order_item_price": 10.0,
      "order_number": "SO-2",
      "product": "P1",
      "product_id": "2b6ea7bb-6ee8-4490-bbc4-285c936d5ffd",
      "product_sku": "sku 150",
      "quantity": 2,
      "returned_quantity": 0,
      "sales_rep": null,
      "status": "PENDING",
      "subcategory": "Some subcategory 66",
      "upc": null,
      "vendor": "Acme Vendor",
      "vendor_id": "00000000-0000-0000-0000-000000000069"
    },
    {
      "batch_number": null,
      "brand": null,
      "brand_id": null,
      "category": "Some category 76",
      "customer": "Company 341",
      "customer_id": "00000000-0000-0000-0000-000000000156",
      "default_unit_cost": null,
      "default_unit_price": 1.0,
      "default_wholesale_price": null,
      "delivery_date": null,
      "delivery_date_utc": null,
      "due_date": "2026-08-14T04:20:56.756983",
      "due_date_utc": "2026-08-14T11:20:56.756983Z",
      "group": "Product Group 67",
      "invoice_numbers": null,
      "line_item_id": "a38bf9f3-ef9d-4584-97ae-200752dbfc7d",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_id": "ba81b4d2-69cd-4f4d-8f51-45f8723d6855",
      "order_item_price": 10.0,
      "order_number": "SO-2",
      "product": "P2",
      "product_id": "c552e621-20f8-48c2-ba24-9faaac735be2",
      "product_sku": "sku 153",
      "quantity": 1,
      "returned_quantity": 0,
      "sales_rep": null,
      "status": "PENDING",
      "subcategory": "Some subcategory 67",
      "upc": null,
      "vendor": "Acme Vendor",
      "vendor_id": "00000000-0000-0000-0000-000000000069"
    },
    {
      "batch_number": null,
      "brand": null,
      "brand_id": null,
      "category": "Some category 71",
      "customer": "Company 331",
      "customer_id": "00000000-0000-0000-0000-00000000014c",
      "default_unit_cost": null,
      "default_unit_price": 1.0,
      "default_wholesale_price": null,
      "delivery_date": null,
      "delivery_date_utc": null,
      "due_date": "2026-08-14T04:20:56.729977",
      "due_date_utc": "2026-08-14T11:20:56.729977Z",
      "group": "Product Group 66",
      "invoice_numbers": null,
      "line_item_id": "8be7a863-fdd3-438b-aa39-940fa9ab16f4",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_id": "78db6a8c-9dfb-4436-90b8-39c80582c006",
      "order_item_price": 10.0,
      "order_number": "SO-1",
      "product": "P1",
      "product_id": "2b6ea7bb-6ee8-4490-bbc4-285c936d5ffd",
      "product_sku": "sku 150",
      "quantity": 3,
      "returned_quantity": 0,
      "sales_rep": null,
      "status": "COMPLETED",
      "subcategory": "Some subcategory 66",
      "upc": null,
      "vendor": "Acme Vendor",
      "vendor_id": "00000000-0000-0000-0000-000000000069"
    },
    {
      "batch_number": null,
      "brand": null,
      "brand_id": null,
      "category": "Some category 76",
      "customer": "Company 331",
      "customer_id": "00000000-0000-0000-0000-00000000014c",
      "default_unit_cost": null,
      "default_unit_price": 1.0,
      "default_wholesale_price": null,
      "delivery_date": null,
      "delivery_date_utc": null,
      "due_date": "2026-08-14T04:20:56.729977",
      "due_date_utc": "2026-08-14T11:20:56.729977Z",
      "group": "Product Group 67",
      "invoice_numbers": null,
      "line_item_id": "19fa7d26-2a22-4fcc-98a2-b861d8016bf4",
      "order_date": "2026-07-01T05:00:00.000000",
      "order_date_utc": "2026-07-01T12:00:00.000000Z",
      "order_id": "78db6a8c-9dfb-4436-90b8-39c80582c006",
      "order_item_price": 10.0,
      "order_number": "SO-1",
      "product": "P2",
      "product_id": "c552e621-20f8-48c2-ba24-9faaac735be2",
      "product_sku": "sku 153",
      "quantity": 5,
      "returned_quantity": 0,
      "sales_rep": null,
      "status": "COMPLETED",
      "subcategory": "Some subcategory 67",
      "upc": null,
      "vendor": "Acme Vendor",
      "vendor_id": "00000000-0000-0000-0000-000000000069"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "line_item_id",
        "label": "Line Item Id"
      },
      {
        "key": "order_id",
        "label": "Order Id"
      },
      {
        "key": "order_date",
        "label": "Order Date"
      },
      {
        "key": "order_date_utc",
        "label": "Order Date (UTC)"
      },
      {
        "key": "delivery_date",
        "label": "Delivery Date"
      },
      {
        "key": "delivery_date_utc",
        "label": "Delivery Date (UTC)"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "due_date_utc",
        "label": "Due Date (UTC)"
      },
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "product_id",
        "label": "Product Id"
      },
      {
        "key": "product_sku",
        "label": "Product SKU"
      },
      {
        "key": "default_unit_cost",
        "label": "Default Unit Cost"
      },
      {
        "key": "default_unit_price",
        "label": "Default Unit Price"
      },
      {
        "key": "default_wholesale_price",
        "label": "Default Wholesale Price"
      },
      {
        "key": "brand",
        "label": "Brand"
      },
      {
        "key": "brand_id",
        "label": "Brand Id"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "vendor_id",
        "label": "Vendor Id"
      },
      {
        "key": "order_item_price",
        "label": "Order Item Price"
      },
      {
        "key": "returned_quantity",
        "label": "Returned Quantity"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "customer_id",
        "label": "Customer Id"
      },
      {
        "key": "sales_rep",
        "label": "Sales Rep"
      },
      {
        "key": "invoice_numbers",
        "label": "Invoice Numbers"
      },
      {
        "key": "upc",
        "label": "UPC"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_order_item_history"
  }
}

Returns one row per sales order line item with its order dates, product, brand, vendor, customer, status, quantities, and prices. When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells (quantities, prices) parsed into numbers. Companies on a compliance integration (Metrc or BioTrack) get additional package, potency, manifest, and shipped-from-license columns, and any Order custom fields configured for the company are appended as extra columns. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_order_item_history.

Request

GET /public/v1/reports/sales-order-item-history

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
payment_status Filter by payment status query array false ["FULLY_PAID"]
order_source Filter by the source that created the order query array false
sample Filter line items by whether they are samples query string false
trade_sample_packages Filter line items by whether their package is a trade sample query string false
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
delivery_datetime Filter by delivery date range query string false
due_datetime Filter by due date range query string false
created_datetime Filter by the datetime the order was created query string false
updated_datetime Filter by the datetime the order was last modified query string false
total Filter by order total range (comma-separated min,max) query string false 100,500
matched_with_compliance_transfer Filter by whether the order is matched with a compliance transfer query boolean false
search Search by order number, customer name, or LeafLink short ID query string false
company_relationship_ids Filter by customer (company relationship) IDs query array false
company_relationship_group_ids Filter by customer group IDs query array false
shipped_from_license_ids Filter by the shipped-from license IDs query array false
menu_ids Filter by menu IDs query array false
brand_ids Filter by brand IDs query array false
owner_ids Filter by order owner (user) IDs query array false
creator_ids Filter by order creator (user) IDs query array false
batch_ids Filter by batch IDs query array false
product_ids Filter by product IDs query array false
product_group_ids Filter line items by product group IDs query array false

Responses

Status Description Schema
200 The Sales Order Item History report SalesOrderItemHistoryReport

Get the Sales Order Tax report

GET /public/v1/reports/sales-order-tax returns tax totals as {data, meta}, narrowed by the applied filters

GET /public/v1/reports/sales-order-tax?order_datetime=2026-06-01T00%3A00%3A00Z%2C2026-08-01T00%3A00%3A00Z
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTQsImlhdCI6MTc4NjcwNjQ1NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDVkMDMxNzEtMGQ1YS00MDc1LTg2YTAtMjJjMmRmNjIwMDk4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDUzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTUiLCJ0eXAiOiJhY2Nlc3MifQ.YQOKwUFboILEh4iYYKbKHuO9ji9hNUQ7UnWdEpkF628

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4d606ce37587e7bec833e2d11deedb67-75552fb17df9e745-0
{
  "data": [
    {
      "tax_rate": 5.0,
      "tax_type": "City Tax",
      "total_tax": 20.0
    },
    {
      "tax_rate": 27.0,
      "tax_type": "Excise Tax",
      "total_tax": 1099.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "tax_type",
        "label": "Tax Type"
      },
      {
        "key": "tax_rate",
        "label": "Tax Rate"
      },
      {
        "key": "total_tax",
        "label": "Total Tax"
      }
    ],
    "date_range": "May 31, 2026 to Jul 31, 2026",
    "report": "sales_order_tax"
  }
}

Returns total tax collected on sales orders, grouped by tax type and rate. When no date filter is provided, the report defaults to the last 30 days.

Every value is returned as it appears in the report's CSV export, with numeric cells (rates, amounts) parsed into numbers. Report-level information (the resolved date range and column definitions) is returned under meta.

Required permission: reports_permissions_sales_order_tax.

Request

GET /public/v1/reports/sales-order-tax

Parameters

Parameter Description In Type Required Default Example
status Filter by sales order status query array false ["COMPLETED","DELIVERED"]
payment_status Filter by payment status query array false ["FULLY_PAID"]
order_source Filter by the source that created the order query array false
order_datetime Filter by order date range (comma-separated ISO8601 range) query string false 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
delivery_datetime Filter by delivery date range query string false
due_datetime Filter by due date range query string false
created_datetime Filter by the datetime the order was created query string false
updated_datetime Filter by the datetime the order was last modified query string false
total Filter by order total range (comma-separated min,max) query string false 100,500
matched_with_compliance_transfer Filter by whether the order is matched with a compliance transfer query boolean false
search Search by order number, customer name, or LeafLink short ID query string false
company_relationship_ids Filter by customer (company relationship) IDs query array false
company_relationship_group_ids Filter by customer group IDs query array false
shipped_from_license_ids Filter by the shipped-from license IDs query array false
menu_ids Filter by menu IDs query array false
brand_ids Filter by brand IDs query array false
owner_ids Filter by order owner (user) IDs query array false
creator_ids Filter by order creator (user) IDs query array false
batch_ids Filter by batch IDs query array false
product_ids Filter by product IDs query array false
tax_ids Filter by tax IDs query array false

Responses

Status Description Schema
200 The Sales Order Tax report SalesOrderTaxReport

Returns

Get a return

GET /public/v1/returns/:id returns a single return

GET /public/v1/returns/00000000-0000-0000-0000-000000000012
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmU4YmVkZmUtNmUzYi00NjZjLWFkYjUtZWVjMjVkZjI5NWQyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDcwIiwidHlwIjoiYWNjZXNzIn0.TZexXIVs33CfViBS-PB05GhKwiVgBD4UDh08ebQKKFY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7524550ccd44ceab27882207397bed9f-cdbb8c4d38271b90-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-000000000084",
      "name": "Company 388",
      "updated_datetime": "2026-08-14T11:20:56.983143Z"
    },
    "custom_data": {},
    "description": null,
    "id": "00000000-0000-0000-0000-000000000012",
    "inserted_datetime": "2026-08-14T11:20:56.989981Z",
    "invoice_numbers": [],
    "items": [
      {
        "id": "00000000-0000-0000-0000-000000000013",
        "price": 30.1,
        "product": {
          "id": "c022b4c0-736e-45e3-b392-d1c91baaf60a",
          "name": "Product 188",
          "sku": "sku 189",
          "updated_datetime": "2026-08-14T11:20:56.974133Z"
        },
        "quantity": 5.0,
        "waste": false
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000017c",
      "id": "00000000-0000-0000-0000-0000000000a4",
      "license_id": null,
      "name": "Place 163"
    },
    "order_id": null,
    "order_number": null,
    "order_quantity": null,
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-473@example.com",
      "full_name": "FirstName940 LastName941",
      "id": "00000000-0000-0000-0000-0000000001d9",
      "role": {
        "id": "00000000-0000-0000-0000-0000000001e5",
        "name": "Admin 484"
      }
    },
    "return_datetime": "2026-08-14T11:20:56.989625Z",
    "return_number": "RN-17",
    "return_quantity": null,
    "return_type": null,
    "status": "PROCESSING",
    "total": 32.0,
    "updated_datetime": "2026-08-14T11:20:56.989981Z"
  }
}

Get a single return given the ID.

Required permission: returns_permissions_view.

Request

GET /public/v1/returns/{id}

Parameters

Parameter Description In Type Required Default Example
id Return ID path string true

Responses

Status Description Schema
200 A single return Return
404 Not Found

Get returns

GET /public/v1/returns returns returns related to the company

GET /public/v1/returns
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiODA4NDA4ZTktYWRlNS00NDQ5LTk0MzktNzhhOGY1MDdlMzRmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NzEzIiwidHlwIjoiYWNjZXNzIn0.1NkGa1_usF0H-s84PH6vfMyq1GlE8wAqKF2PriNbrAo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fc8afd79f929956a3a10ed6348a0872a-555ef5c0ecb2ae15-0
{
  "data": [
    {
      "company": {
        "id": "00000000-0000-0000-0000-0000000000ce",
        "name": "Company 562",
        "updated_datetime": "2026-08-14T11:20:57.887604Z"
      },
      "custom_data": {
        "28": "Custom Field Value"
      },
      "description": null,
      "id": "00000000-0000-0000-0000-000000000018",
      "inserted_datetime": "2026-08-14T11:20:57.895034Z",
      "invoice_numbers": [],
      "items": [
        {
          "id": "00000000-0000-0000-0000-000000000019",
          "price": 30.1,
          "product": {
            "id": "83b2830b-3fcd-461c-b66b-7ce0d7e5ebe5",
            "name": "Product 277",
            "sku": "sku 278",
            "updated_datetime": "2026-08-14T11:20:57.877411Z"
          },
          "quantity": 5.0,
          "waste": false
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-00000000021d",
        "id": "00000000-0000-0000-0000-0000000000d6",
        "license_id": null,
        "name": "Place 213"
      },
      "order_id": null,
      "order_number": null,
      "order_quantity": null,
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-717@example.com",
        "full_name": "FirstName1434 LastName1435",
        "id": "00000000-0000-0000-0000-0000000002cd",
        "role": {
          "id": "00000000-0000-0000-0000-0000000002e6",
          "name": "Admin 741"
        }
      },
      "return_datetime": "2024-12-12T20:26:19.297537Z",
      "return_number": "RN-23",
      "return_quantity": null,
      "return_type": null,
      "status": "PROCESSING",
      "total": 150.5,
      "updated_datetime": "2026-08-14T11:20:57.895034Z"
    }
  ],
  "next_page": null
}

Get returns sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 1000 returns per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: returns_permissions_view.

Request

GET /public/v1/returns

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter returns by their creation datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
return_datetime Filter returns by their return datetime query string false 2022-07-10T00:00:00Z,
updated_datetime Filter returns by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of returns Returns

StockAdjustment

Get a stock adjustment

GET /public/v1/adjustments/:id returns a single stock adjustment

GET /public/v1/adjustments/00000000-0000-0000-0000-000000000006
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTc1Y2Q4NTItYTc3NC00NTc2LWE3ZDEtNjFhOTU3ZGE0NjEyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Njg4IiwidHlwIjoiYWNjZXNzIn0.ljCHc74734esVtzLMrO0vUMtODRiDBfvdx4Gb-q1-Sg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fcac7bc5984c2c79f508803619e4f32b-e9b74c318da31c21-0
{
  "data": {
    "batch_id": "00000000-0000-0000-0000-00000000004a",
    "completion_datetime": "2026-08-14T11:20:57.786626Z",
    "compliance_quantity": null,
    "compliance_unit_type": null,
    "description": null,
    "id": "00000000-0000-0000-0000-000000000006",
    "inserted_datetime": "2026-08-14T11:20:57.788760Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-0000000000d1",
    "owner_id": null,
    "package_id": null,
    "product_id": "10615e1c-d0bd-4431-9680-b261d671a716",
    "quantity": "10",
    "reason": "revaluation",
    "total_cost": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000001995",
      "name": "Gram"
    }
  }
}

Get a single stock adjustment given the ID.

Required permission: products_permissions_view.

Request

GET /public/v1/adjustments/{id}

Parameters

Parameter Description In Type Required Default Example
id Stock Adjustment ID path string true

Responses

Status Description Schema
200 A single stock adjustment StockAdjustment
404 Not Found

Get adjustments

GET /public/v1/adjustments returns proper data for stock adjustments of product/batch/package tracked

GET /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODM5MGNkZTUtODljZS00YWM1LTk5YzgtNWNkZGRlYzMyZTcxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE4NSIsInR5cCI6ImFjY2VzcyJ9.dLhvsdQOd_vvQDpXCRj7TtIb8QPa57NMxahT5meYSbo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 59bbe966d2fb6e364b9f2b8b67242600-12165063d7bbf4b8-0
{
  "data": [
    {
      "batch_id": null,
      "completion_datetime": "2026-08-14T11:20:59.425365Z",
      "compliance_quantity": null,
      "compliance_unit_type": null,
      "description": null,
      "id": "00000000-0000-0000-0000-000000000010",
      "inserted_datetime": "2026-08-14T11:20:59.427111Z",
      "license_id": null,
      "location_id": null,
      "owner_id": "00000000-0000-0000-0000-0000000004a1",
      "package_id": null,
      "product_id": "92101a96-85a6-41ea-85d7-ddeef6fd983d",
      "quantity": "10",
      "reason": "revaluation",
      "total_cost": "10000",
      "unit_cost": "1000",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000002d3a",
        "name": "Gram"
      }
    },
    {
      "batch_id": null,
      "completion_datetime": "2026-08-14T11:20:59.644554Z",
      "compliance_quantity": "1",
      "compliance_unit_type": {
        "id": "00000000-0000-0000-0000-000000002d3c",
        "name": "Ounce"
      },
      "description": "A default note describing this transaction",
      "id": "00000000-0000-0000-0000-000000000011",
      "inserted_datetime": "2026-08-14T11:20:59.650347Z",
      "license_id": "00000000-0000-0000-0000-000000000032",
      "location_id": "00000000-0000-0000-0000-000000000144",
      "owner_id": null,
      "package_id": "00000000-0000-0000-0000-00000000002e",
      "product_id": "fe0554ce-f126-4116-afa5-baddfb1a33cf",
      "quantity": "1",
      "reason": "Voluntary Surrender",
      "total_cost": "900",
      "unit_cost": "900",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000002d3c",
        "name": "Ounce"
      }
    },
    {
      "batch_id": "00000000-0000-0000-0000-00000000011e",
      "completion_datetime": "2026-08-14T11:20:59.762223Z",
      "compliance_quantity": null,
      "compliance_unit_type": null,
      "description": null,
      "id": "00000000-0000-0000-0000-000000000012",
      "inserted_datetime": "2026-08-14T11:20:59.763585Z",
      "license_id": null,
      "location_id": "00000000-0000-0000-0000-000000000135",
      "owner_id": null,
      "package_id": null,
      "product_id": "acffae75-edb4-4bda-990a-632a07ceb058",
      "quantity": "1",
      "reason": "revaluation",
      "total_cost": "-800",
      "unit_cost": "-800",
      "unit_type": {
        "id": "00000000-0000-0000-0000-000000002d3a",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

Get stock adjustments sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 5000 stock adjustments per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view.

Request

GET /public/v1/adjustments

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter stock adjustments by their creation datetime query string false 2022-07-10T00:00:00Z,
completion_datetime Filter stock adjustments by their completion datetime (adjustment date) query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of stock adjustments StockAdjustments

Insert a stock adjustment

POST /public/v1/adjustments creates an adjustment for a product tracked product

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWQzODViMGMtYjUxMS00NmIxLWExYzEtMzg2OTYzMWRlMTk1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTIyIiwidHlwIjoiYWNjZXNzIn0._ZW1rzreBfPnhALXKL6sF2LHRuF_iJbFmLWDZl22JKw
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-00000000010a",
  "product_id": "7b87a4aa-e4f3-438d-ad8d-615ff2c8e897",
  "quantity": 10,
  "reason": "expired"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 084c86015930d3b469953ba7e93fecd6-03de9f7508061405-0
{
  "data": {
    "batch_id": null,
    "completion_datetime": "2020-01-03T12:20:00.000000Z",
    "compliance_quantity": null,
    "compliance_unit_type": null,
    "description": "test",
    "id": "00000000-0000-0000-0000-00000000000e",
    "inserted_datetime": "2026-08-14T11:20:58.629001Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-00000000010a",
    "owner_id": null,
    "package_id": null,
    "product_id": "7b87a4aa-e4f3-438d-ad8d-615ff2c8e897",
    "quantity": "10",
    "reason": "expired",
    "total_cost": null,
    "unit_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-0000000022d2",
      "name": "Gram"
    }
  }
}

POST /public/v1/adjustments creates an adjustment for a batch tracked product

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2I2NWU1MTItMGUxYS00Y2ZkLTlhNjEtNGJmNWE3NmE4NmNhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTYzMyIsInR5cCI6ImFjY2VzcyJ9.bxxv9pbovmgWyS02fMHze4L8KBAFEW_D1TebbtNtPCA
{
  "batch_id": "00000000-0000-0000-0000-00000000016c",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-000000000174",
  "quantity": 10,
  "reason": "expired",
  "unit_cost": 1000
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 005369ec17c75d3290e6e21b0487b04d-4842d34b798148ee-0
{
  "data": {
    "batch_id": "00000000-0000-0000-0000-00000000016c",
    "completion_datetime": "2020-01-03T12:20:00.000000Z",
    "compliance_quantity": null,
    "compliance_unit_type": null,
    "description": "test",
    "id": "00000000-0000-0000-0000-000000000023",
    "inserted_datetime": "2026-08-14T11:21:00.456373Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-000000000174",
    "owner_id": null,
    "package_id": null,
    "product_id": "c5c8e4f2-cda6-4a23-88e0-14bd64f21d56",
    "quantity": "10",
    "reason": "expired",
    "total_cost": "10000",
    "unit_cost": "1000",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000003c0e",
      "name": "Gram"
    }
  }
}

POST /public/v1/adjustments creates an adjustment for a package tracked product

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODQ2NDc0MjktODY5YS00ZDM0LTkwOWEtNGFlNWFhZGQ5NmY1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk0IiwidHlwIjoiYWNjZXNzIn0.EQ0kcIWsgS_400dPsnPqs2RFA9oqVd0TUv5HVLaBxuc
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "package_id": "00000000-0000-0000-0000-00000000000d",
  "reason": "Damage (BCC)",
  "unit_cost": 1000
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c36b627c27796c63e6748155ceae6961-205ec5a23fea4a20-0
{
  "data": {
    "batch_id": null,
    "completion_datetime": "2020-01-03T12:20:00.000000Z",
    "compliance_quantity": "10",
    "compliance_unit_type": {
      "id": "00000000-0000-0000-0000-000000000b7f",
      "name": "Ounce"
    },
    "description": "test",
    "id": "00000000-0000-0000-0000-000000000004",
    "inserted_datetime": "2026-08-14T11:20:57.277802Z",
    "license_id": "00000000-0000-0000-0000-00000000000e",
    "location_id": "00000000-0000-0000-0000-000000000074",
    "owner_id": null,
    "package_id": "00000000-0000-0000-0000-00000000000d",
    "product_id": "df15d15c-ab3a-48cc-bc84-0322125a89b8",
    "quantity": "0.35274",
    "reason": "Damage (BCC)",
    "total_cost": "10000.000000005834",
    "unit_cost": "1000.0000000005834",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000000b7d",
      "name": "Gram"
    }
  }
}

POST /public/v1/adjustments pointer translation works as intended

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2JlYTc0YWUtZjUxMS00N2IyLWFjMmQtZmZkZjY1YWJkZTUxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTQ5NyIsInR5cCI6ImFjY2VzcyJ9.lgnrfvcWqaEhJNmBNssN64KZBcxRtg4azTk-XjwMZfs
{
  "description": "test",
  "package_id": "00000000-0000-0000-0000-000000000035",
  "quantity": 10,
  "reason": "Damage (BCC)"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 8532eb7bcabb652fce03afbc964c3044-1a8a6611881a446d-0
{
  "errors": [
    {
      "context": {},
      "message": "can't be blank",
      "pointer": [
        "completion_datetime"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Required for adjustments of package tracked products",
      "pointer": [
        "compliance_quantity"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Cannot be set for adjustments of package tracked products",
      "pointer": [
        "quantity"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/adjustments pointer translation works for cost accounting as well

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWFkZDFhODUtMTA3MC00ZDY3LWI0ZDgtOGJmODczNWJmYWEzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODQxIiwidHlwIjoiYWNjZXNzIn0.GEVkvz7txsFOLCsdX2DrpVtkG6gpzIjLc0WgyOHIjiw
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000000f4",
  "product_id": "4ff75447-0a4e-4b61-bf80-6dc59cc5166d",
  "quantity": 10,
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: f7af40aada0f965e9272322bf37a4931-63b01b4da68a37be-0
{
  "errors": [
    {
      "context": {},
      "message": "Your company cost settings require a cost to be set when adding quantity",
      "pointer": [
        "unit_cost"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/adjustments validates quantity for non-compliance adjustments

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2IyMjYwNzYtMmNkZS00YzczLTkwZmEtY2EzNmJkYWZiZTkyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTkxOSIsInR5cCI6ImFjY2VzcyJ9.Nb3d6-sUzijJUpzIKox22qm7Bj0I__f65GQ2Dizmu6g
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000001a6",
  "product_id": "ab24f6f1-eb72-49b7-9d9a-ca28f00ecc30",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: e7cda0bb77ad6fb66743bbc05df060e6-792169b8808e3c7d-0
{
  "errors": [
    {
      "context": {},
      "message": "Cannot be set for adjustments of non-package tracked products",
      "pointer": [
        "compliance_quantity"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Required for adjustments of non-package tracked products",
      "pointer": [
        "quantity"
      ],
      "section": "body"
    }
  ]
}

validates only one id can be passed

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzY5NGEwMWQtOTViYy00YjYwLTljNzktYmViOTVhODllZjRlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTgyOCIsInR5cCI6ImFjY2VzcyJ9.0Q__ph5o8GMdElpTLJiLEwDbm7x-rd9xjVsVCBZ_fdQ
{
  "batch_id": "339a3052-6cc3-47bf-957d-611c20fa4d76",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "a5e07ff5-77b2-4499-a343-dd3e5f16f107",
  "package_id": "64f83bc0-5e4f-4ab9-bfe4-4efccd1d12a4",
  "product_id": "f55c345a-0ecd-4adc-a93a-a27fb02abaf8",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 979bac8aeab311eb80ad7014c8e294cc-2c69f63bb4e0af97-0
{
  "errors": [
    {
      "context": {},
      "message": "Only one of batch_id, package_id, or product_id can be set",
      "pointer": [
        "batch_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Required for adjustments of package tracked products",
      "pointer": [
        "compliance_quantity"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Cannot be set for adjustments of package tracked products because the source will automatically be set to the location of the package",
      "pointer": [
        "location_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Only one of batch_id, package_id, or product_id can be set",
      "pointer": [
        "package_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Only one of batch_id, package_id, or product_id can be set",
      "pointer": [
        "product_id"
      ],
      "section": "body"
    }
  ]
}

validates at least one id is passed

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmY5YTFjYmYtMGI5OS00YmVjLTg2NTEtMDBlMzI5YTM3NmViIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTEyMyIsInR5cCI6ImFjY2VzcyJ9.PrpDNcoErn7iOiJU2gNo3G-9raZBmrmIlEoCubbiidA
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "102ec022-f542-4ee7-98dc-58838d8d3fa8",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 4cfe4b12307f4f3d24e1d30c58e4dd58-820cac995f235231-0
{
  "errors": [
    {
      "context": {},
      "message": "At least one of batch_id, package_id, or product_id must be set",
      "pointer": [
        "batch_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "At least one of batch_id, package_id, or product_id must be set",
      "pointer": [
        "package_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "At least one of batch_id, package_id, or product_id must be set",
      "pointer": [
        "product_id"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Required for adjustments of non-package tracked products",
      "pointer": [
        "quantity"
      ],
      "section": "body"
    }
  ]
}

validate waste must be negative

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDkxOTY5ZjAtZjE3Yy00MzJkLTk0NGMtNjkxMTJjNzVkOWM1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTkxNyIsInR5cCI6ImFjY2VzcyJ9.SaVDGo_v8mm8Fta-rkfHO4pnYsPN7OxRrPQdh7kLglo
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "38b92430-f61f-4d2f-b480-5db392983290",
  "product_id": "6ad1b255-92bf-45a5-82c2-dbaa98e8d61e",
  "quantity": 10,
  "reason": "waste"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 517fda80c8ea8e5dd79da83254a21181-50eaa9310a0a070c-0
{
  "errors": [
    {
      "context": {},
      "message": "Quantity must be negative for waste adjustments",
      "pointer": [
        "quantity"
      ],
      "section": "body"
    }
  ]
}

validate compliance adjustments must not include location_id

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzgzOWZmZTItODY4Yy00MjdmLTg1MDgtNjE0NTMzZDE1NWFhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA1MCIsInR5cCI6ImFjY2VzcyJ9.IWEdhM0uoFbsJuk0NkiV6g_T2x3hKIG_rXBpQLK52-E
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "location_id": "f2f9ecba-0940-4040-b175-3a845a6a981d",
  "package_id": "4b8dce0c-081f-4bc4-b74e-55d5a4dd7235",
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 4a49963bf052803adc29626dc5a6e39b-1db1a1ddda46f938-0
{
  "errors": [
    {
      "context": {},
      "message": "Cannot be set for adjustments of package tracked products because the source will automatically be set to the location of the package",
      "pointer": [
        "location_id"
      ],
      "section": "body"
    }
  ]
}

validate compliance adjustments must include location_id

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2JjZTRlZjEtMjY3Yy00NGIxLTg1YzMtZTRlZjExYjg0OTMwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA4NCIsInR5cCI6ImFjY2VzcyJ9.Ew4Ce7tiTeoNosePg3J67hAPtUN6JjALoD7xMsVB1ag
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "product_id": "18668bee-5f72-443d-b729-e68d2ece5853",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: a04bc85aeebc4d7f96815aa2a77632c7-eba435bde0dd7ae2-0
{
  "errors": [
    {
      "context": {},
      "message": "Source location is required for non-compliance adjustments",
      "pointer": [
        "location_id"
      ],
      "section": "body"
    }
  ]
}

validates product exists

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODA5ZTAxYTAtMjNlYy00OGRkLTgxYWMtNmI1MWFlMDA0ZjhjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTgzMiIsInR5cCI6ImFjY2VzcyJ9.Hx-dWMkbBhs9U5wo8NKudpRc_Jmlbj3TWBWBMMmRgbo
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "a3d02ebb-4e46-450c-810b-4589fcfaf93d",
  "product_id": "eeaa2331-36db-4835-b024-89fba031ad57",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 878e563bc69b40c2f2e89f82643a1183-91245fe5005cf778-0
{
  "errors": [
    {
      "context": {},
      "message": "Product not found",
      "pointer": [
        "product_id"
      ],
      "section": "body"
    }
  ]
}

validates batch exists

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODViZDA5N2EtNjU4Yy00NTQ1LTg1ODQtM2Y5NTIzZDliN2NhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTYwNyIsInR5cCI6ImFjY2VzcyJ9.SVmIdTvY-SlNqFgajZ_k5u_yZKZBxCNDR2Lfl2p_L4w
{
  "batch_id": "00000000-0000-0000-0000-000000000167",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "1c9932d5-a12f-4525-9414-d64555234337",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 971a009014d953915afe61735c09ba84-4e3308f3b7af2c04-0
{
  "errors": [
    {
      "context": {},
      "message": "Batch not found",
      "pointer": [
        "batch_id"
      ],
      "section": "body"
    }
  ]
}

validates package exists

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGU0Y2ZjNTUtMzVlZi00ODgxLTk2MzMtOGQ1ZmNhYWVmMTcyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTU2MyIsInR5cCI6ImFjY2VzcyJ9.8AGFXr-I3lwzqxidiB-wu4cdE9p0EF14qyRfTpkismQ
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "package_id": "00000000-0000-0000-0000-000000000038",
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: b7668f0348a773706594050fb2718004-6656e50d753c073c-0
{
  "errors": [
    {
      "context": {},
      "message": "Package not found",
      "pointer": [
        "package_id"
      ],
      "section": "body"
    }
  ]
}

validates location exists

POST /public/v1/adjustments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjEsImlhdCI6MTc4NjcwNjQ2MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmI5ZGNiNDMtMjhmMi00NGI1LWI3N2UtOWRlM2Q4NGI3OTYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDYwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTg5OCIsInR5cCI6ImFjY2VzcyJ9.oNkun4c1rvziGbtjkF0ersy9YHfIqn8hfqwLn13YcZM
{
  "batch_id": "00000000-0000-0000-0000-0000000001af",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000001a0",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 08586b8b25b2297c8fd2faf78d7b84b7-0c3001b0742262ed-0
{
  "errors": [
    {
      "context": {},
      "message": "Location not found",
      "pointer": [
        "location_id"
      ],
      "section": "body"
    }
  ]
}

Required permission: products_permissions_adjust_inventory.

Request

POST /public/v1/adjustments

Parameters

Parameter Description In Type Required Default Example
product_id The ID of the product to adjust. Must only be provided if the product is product-tracked. query string false
batch_id The ID of the batch to adjust. Must only be provided if the batch's associated product is batch-tracked. query string false
package_id The ID of the package to adjust. Must only be provided if the package's associated product is package-tracked. query string false
quantity The quantity to adjust the stock by. Must only be provided for non-compliance adjustments. Must be negative if the adjustment reason is 'waste'. query number false
compliance_quantity The quantity to adjust the stock by. Must only be provided for compliance adjustments. query number false
description The description of the stock adjustment. Required for compliance adjustmenst. Has a max length of 800 characters for non-compliance adjustments, and 250 characters for compliance adjustments. query string false
unit_cost The cost per unit of the stock adjustment. Can only be provided for companies with cost accounting enabled. Must be empty when the quantity is negative. Must be provided if the company setting 'Require Cost on Intake and Quantity Adjustments' is true. query number false
completion_datetime The datetime of the stock adjustment. Must only be provided for compliance adjustments. query string false
reason The reason for the stock adjustment. For non-compliance adjustments, must be one of the following: 'waste', 'stolen', 'damaged', 'fire', 'write-off', 'expired', 'lab-testing', 'revaluation', 'other.' For compliance adjustments, must be a reason that is accepted by the the compliance API query string false
location_id The ID of the source location of the stock adjustment. Must only be provided for non-compliance adjustments. query string false

Responses

Status Description Schema
200 The stock adjustment was inserted successfully StockAdjustment

Strain

Create a strain

POST /public/v1/strains creates a strain

POST /public/v1/strains
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWIzZWIwYjItNmFkMS00Mjg1LTgyMmYtYzFkMDAxYTI0MWIwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjA4IiwidHlwIjoiYWNjZXNzIn0.MN5_-l_3QgjBQVwxbLIchDFLODOgA2yBLLpgwHOd3vI
{
  "name": "Blue Dream",
  "strain_type": "hybrid"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7745d70d2423cffca7a697c64fde9aa1-9d31f5876baaa936-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000012",
    "name": "Blue Dream",
    "strain_type": "HYBRID"
  }
}

Create a new strain.

Required permission: settings_permissions_strains.

Request

POST /public/v1/strains

Parameters

Parameter Description In Type Required Default Example
name Name of the strain query string true
strain_type Type of strain (indica, indica_dominant, sativa, sativa_dominant, hybrid, high_cbd) query string false

Responses

Status Description Schema
201 Strain created Strain
400 Invalid parameters

Get a strain

GET /public/v1/strains/:id returns a single strain

GET /public/v1/strains/00000000-0000-0000-0000-000000000018
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGFlOWYxZmItYjQzYS00OWZhLWI0MWUtMGIwNTEyOTRlOTVmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NzE5IiwidHlwIjoiYWNjZXNzIn0.a9JNURj3Ry2JkDSJVDOgdYYWePoAcr55YiXFHk0Gr4Y

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7a91b79bfe1c450809fa148741d4da96-acd683c19f9e37ef-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000018",
    "name": "Blue Dream",
    "strain_type": "HYBRID"
  }
}

Get a single strain given the ID.

Required permission: settings_permissions_strains.

Request

GET /public/v1/strains/{id}

Parameters

Parameter Description In Type Required Default Example
id Strain ID path string true

Responses

Status Description Schema
200 A single strain Strain
404 Not Found

Get strains

GET /public/v1/strains returns strains related to the company

GET /public/v1/strains
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjgzMWQwMDctMGVhYS00OWVjLWJiMDAtZWViZGVkZjI2NjBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODE2IiwidHlwIjoiYWNjZXNzIn0.ZzTf9DSaHalJE5yiqKwgokZ0_kj7NJISUQw6vlI7Vlk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a90256a4d64ac492b791de55573e587c-7408183113520777-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-00000000001a",
      "name": "Strain 22",
      "strain_type": "INDICA"
    },
    {
      "id": "00000000-0000-0000-0000-00000000001b",
      "name": "Strain 23",
      "strain_type": null
    }
  ],
  "next_page": null
}

Get strains filtered by various attributes

Note: The page size for this endpoint is 50k strains per page.

Required permission: settings_permissions_strains.

Request

GET /public/v1/strains

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter strains by their creation datetime query string false 2022-07-10T00:00:00Z,
page Pagination information query number false ?page[number]=1
updated_datetime Filter strains by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of strains Strains

Update a strain

POST /public/v1/strains/:id updates a strain

POST /public/v1/strains/00000000-0000-0000-0000-000000000009
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2Q1NDQ3ZWQtOTE3NS00NmY3LTg3NTYtMmI2MDcyMWExODA4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzE0IiwidHlwIjoiYWNjZXNzIn0.95_atE3XaWNOnk4vlcbix3ovzLYkO0FxWYapDipJOGc
{
  "name": "New Name",
  "strain_type": "sativa"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: dd60484bad2ed05125060003d98e9bde-e86aad5d7e2ed59b-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000009",
    "name": "New Name",
    "strain_type": "SATIVA"
  }
}

Update an existing strain.

Required permission: settings_permissions_strains.

Request

POST /public/v1/strains/{id}

Parameters

Parameter Description In Type Required Default Example
id Strain ID path string true
name Name of the strain query string false
strain_type Type of strain (indica, indica_dominant, sativa, sativa_dominant, hybrid, high_cbd) query string false

Responses

Status Description Schema
200 Strain updated Strain
400 Invalid parameters
404 Not Found

Tag

Delete a tag

DELETE /public/v1/tags/:id deletes a tag

DELETE /public/v1/tags/00000000-0000-0000-0000-000000000007
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGMxZWI2YWUtYTdiNC00NjA5LWJiZjMtYTU3Yjc1MDNkMjUwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Njk5IiwidHlwIjoiYWNjZXNzIn0.367SLET6_QXbVqrKw55oqg3Fv9LhcQK4h7jV1sKhqyo

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 287483c1159815256cd21c078b80d92f-33b6fda1c9b407a8-0

Permanently deletes the tag. This is a hard delete: the record is removed from the database and cannot be recovered.

Any authenticated API key for the company may manage tags; no additional settings permission is required.

Request

DELETE /public/v1/tags/{id}

Parameters

Parameter Description In Type Required Default Example
id Tag ID path string true

Responses

Status Description Schema
204 No Content
404 Not Found

Get a tag

GET /public/v1/tags/:id returns a single tag

GET /public/v1/tags/00000000-0000-0000-0000-000000000006
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGViMzZhNjAtOGVjOS00YzY3LWI0ZGQtY2NkMWEyNjI2ZTRmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjY2IiwidHlwIjoiYWNjZXNzIn0.vF0MEIWmbGcccapKl5Q92eRdqEilFjD6pB0_7INKoKw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: cdcb6cfb6b11936e84eb94e1c9007a37-706e19f3b2aa7804-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000006",
    "inserted_datetime": "2026-08-14T11:20:57.669975Z",
    "name": "Top Shelf",
    "updated_datetime": "2026-08-14T11:20:57.669975Z"
  }
}

Get a single tag given the ID.

Any authenticated API key for the company may manage tags; no additional settings permission is required.

Request

GET /public/v1/tags/{id}

Parameters

Parameter Description In Type Required Default Example
id Tag ID path string true

Responses

Status Description Schema
200 A single tag Tag
404 Not Found

Get tags

GET /public/v1/tags returns paginated tags for the company with next_page

GET /public/v1/tags
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjQ0NTYzMzItZTRmNi00ZDM2LTgzZTktMTU2MGU5M2M5ZjJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODcxIiwidHlwIjoiYWNjZXNzIn0.aF4tyrtcpPjiRLUip1hu5tqhD8nSgQ91mP5UZEXOp7A

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6e6531c83540db0ff9dc6b41b8cc5bc9-dc98c0944b70fb16-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000009",
      "inserted_datetime": "2026-08-14T11:20:58.365216Z",
      "name": "T1",
      "updated_datetime": "2026-08-14T11:20:58.365216Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000000a",
      "inserted_datetime": "2026-08-14T11:20:58.366072Z",
      "name": "T2",
      "updated_datetime": "2026-08-14T11:20:58.366072Z"
    },
    {
      "id": "00000000-0000-0000-0000-00000000000b",
      "inserted_datetime": "2026-08-14T11:20:58.366306Z",
      "name": "T3",
      "updated_datetime": "2026-08-14T11:20:58.366306Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/tags?page[number]=2"
}

List tags for the authenticated company.

Any authenticated API key for the company may manage tags; no additional settings permission is required.

Request

GET /public/v1/tags

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of tags Tags

Upsert a tag

POST /public/v1/tags creates a tag

POST /public/v1/tags
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDZjZmRlMTMtMWQ2MS00ZDYzLTkzYTEtYmJjZGY1NjUzMjNhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTk4IiwidHlwIjoiYWNjZXNzIn0.ryb8WA6Zw2dpx32zt9YcgBcTS0A_qWq2zAmNeNYvgik
{
  "name": "Top Shelf"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e1e9f86dc6a8b202b8f8bdf83fab14a4-6fa931a1a6409055-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000004",
    "inserted_datetime": "2026-08-14T11:20:57.387189Z",
    "name": "Top Shelf",
    "updated_datetime": "2026-08-14T11:20:57.387189Z"
  }
}

POST /public/v1/tags (update) updates a tag

POST /public/v1/tags
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTU2MDNmMmQtYzI5NS00ZWM4LTgxYTctMTE3ZWIyZjQzZWFhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTE1IiwidHlwIjoiYWNjZXNzIn0.7xPsZ_garc2g1r3Z5UKBBO8VCV5lWowRnLdotrgoYXo
{
  "id": "00000000-0000-0000-0000-00000000000e",
  "name": "New"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 89c01df61a7c47be0019825cd6629abc-29b49ac76c1f211e-0
{
  "data": {
    "id": "00000000-0000-0000-0000-00000000000e",
    "inserted_datetime": "2026-08-14T11:20:58.528439Z",
    "name": "New",
    "updated_datetime": "2026-08-14T11:20:58.535688Z"
  }
}

Upsert a single tag. To update an existing tag, pass its ID in the id field. If you do not pass an ID, a new tag is created.

Any authenticated API key for the company may manage tags; no additional settings permission is required.

Request

POST /public/v1/tags

Parameters

Parameter Description In Type Required Default Example
id Tag ID. If given, the matching tag is updated; otherwise a new one is created. query string false
name The name of the tag query string true

Responses

Status Description Schema
200 The updated tag Tag
201 The created tag Tag
400 Invalid parameters
404 Not Found

Tax

Get a tax

GET /public/v1/taxes renders the full tax fields without michigan fields

GET /public/v1/taxes/00000000-0000-0000-0000-000000000004
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWQ1YzQ3ZDItZWRjNS00MmRhLWIzZDItNGRkZWYxZWM2ZjZlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjEiLCJ0eXAiOiJhY2Nlc3MifQ.hpN4ktUypDLIUKkxXx3l8-8Pux09vv3JN9zZKV4CjZs

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6f74fde6c73118982db95b93db41a164-83d403bfb8c7ebf8-0
{
  "data": {
    "description": null,
    "id": "00000000-0000-0000-0000-000000000004",
    "inserted_datetime": "2026-08-14T11:20:55.379433Z",
    "name": "CA Excise",
    "qb_account_id": "84",
    "qb_product_id": "12",
    "tags": [],
    "tax_applied_after_charges": true,
    "tax_applied_after_price_tiers": true,
    "tax_code": "EXCISE",
    "tax_rate_percent": 15.0,
    "updated_datetime": "2026-08-14T11:20:55.380525Z"
  }
}

Get a single tax given the ID.

Required permission: settings_permissions_taxes.

Request

GET /public/v1/taxes/{id}

Parameters

Parameter Description In Type Required Default Example
id Tax ID path string true

Responses

Status Description Schema
200 A single tax Tax
404 Not Found

Get taxes

GET /public/v1/taxes returns paginated taxes for the company with tags and next_page

GET /public/v1/taxes
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDE4YjczM2UtOGIxYS00MGEwLWJmMDAtMTNkNjRkM2UzNTFkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTEwIiwidHlwIjoiYWNjZXNzIn0.WCjE691rQq9Afko8Afl8-2Z_EEs1-ljNCBUs67zpKEY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: af5b9219da06279863291cb94287a266-a47fa64568e7af28-0
{
  "data": [
    {
      "description": null,
      "id": "00000000-0000-0000-0000-000000000006",
      "inserted_datetime": "2026-08-14T11:20:55.768631Z",
      "name": "T1",
      "qb_account_id": null,
      "qb_product_id": null,
      "tags": [
        {
          "id": "00000000-0000-0000-0000-000000000001",
          "name": "Cannabis"
        }
      ],
      "tax_applied_after_charges": false,
      "tax_applied_after_price_tiers": true,
      "tax_code": "Tax Code 11",
      "tax_rate_percent": 15.0,
      "updated_datetime": "2026-08-14T11:20:55.768631Z"
    },
    {
      "description": null,
      "id": "00000000-0000-0000-0000-000000000007",
      "inserted_datetime": "2026-08-14T11:20:55.781017Z",
      "name": "T2",
      "qb_account_id": null,
      "qb_product_id": null,
      "tags": [],
      "tax_applied_after_charges": false,
      "tax_applied_after_price_tiers": true,
      "tax_code": "Tax Code 13",
      "tax_rate_percent": 15.0,
      "updated_datetime": "2026-08-14T11:20:55.781017Z"
    },
    {
      "description": null,
      "id": "00000000-0000-0000-0000-000000000008",
      "inserted_datetime": "2026-08-14T11:20:55.791220Z",
      "name": "T3",
      "qb_account_id": null,
      "qb_product_id": null,
      "tags": [],
      "tax_applied_after_charges": false,
      "tax_applied_after_price_tiers": true,
      "tax_code": "Tax Code 15",
      "tax_rate_percent": 15.0,
      "updated_datetime": "2026-08-14T11:20:55.791220Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/taxes?page[number]=2"
}

List taxes for the authenticated company.

Required permission: settings_permissions_taxes.

Request

GET /public/v1/taxes

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of taxes Taxes

TestResult

Get a test result

GET /public/v1/test-results/:id returns a single test result

GET /public/v1/test-results/00000000-0000-0000-0000-000000000005
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGIwNmM5OTAtNzFmNi00NzgyLWJkMjYtYTRkZGM1MTdjNTJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTA2NSIsInR5cCI6ImFjY2VzcyJ9.jksOln2ZFt2rLifo_wdms3Qe10QT0pIxyDHqeJKiXYo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3b232c20d76710868e0736c9875da1de-65c0510b1fc2a879-0
{
  "data": {
    "additional_test_results": {},
    "batch_id": "00000000-0000-0000-0000-0000000000b7",
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "coa_url": null,
    "id": "00000000-0000-0000-0000-000000000005",
    "is_primary": false,
    "lab_license_number": null,
    "lab_name": null,
    "mg_per_unit_type": "mg/g",
    "name": "TR001",
    "package_id": null,
    "release_date": null,
    "thc_mg_per_unit": null,
    "thc_percentage": null,
    "total_cbd_mg_per_unit": null,
    "total_cbd_percentage": null,
    "total_thc_mg_per_unit": null,
    "total_thc_percentage": null,
    "updated_datetime": "2026-08-14T11:20:59.076934Z"
  }
}

Get a single test result given the ID.

Required permission: products_permissions_view.

Request

GET /public/v1/test-results/{id}

Parameters

Parameter Description In Type Required Default Example
id Test Result ID path string true

Responses

Status Description Schema
200 A single test result TestResult
404 Not Found

Get test results

GET /public/v1/test-results returns test results

GET /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNjAsImlhdCI6MTc4NjcwNjQ2MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWJkOTk0NTAtNjRiYS00NzU1LThiYWQtNDgyMTg5ZGIyZmZjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTY2OSIsInR5cCI6ImFjY2VzcyJ9.CCrfg7MhCVX3Gc0ZkuQb_kwI7HUQsLFpfaMs9t_IQ3E

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 91a14a62fb81dc51a36fad2fa88182a1-606759bba9fbe1d9-0
{
  "data": [
    {
      "additional_test_results": {
        "thca_percentage": "12"
      },
      "batch_id": null,
      "cbd_mg_per_unit": "1.12345",
      "cbd_percentage": "60.1234",
      "coa_url": null,
      "id": "00000000-0000-0000-0000-00000000001b",
      "is_primary": false,
      "lab_license_number": "1234567890",
      "lab_name": "Test Lab",
      "mg_per_unit_type": "mg/g",
      "name": "Test result 1",
      "package_id": "00000000-0000-0000-0000-00000000003d",
      "release_date": "2026-08-14",
      "thc_mg_per_unit": "2.12345",
      "thc_percentage": "20.1234",
      "total_cbd_mg_per_unit": "3.12345",
      "total_cbd_percentage": "80.1234",
      "total_thc_mg_per_unit": "4.12345",
      "total_thc_percentage": "40.1234",
      "updated_datetime": "2026-08-14T11:21:00.629394Z"
    },
    {
      "additional_test_results": {
        "thca_percentage": "12"
      },
      "batch_id": "00000000-0000-0000-0000-000000000182",
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "coa_url": null,
      "id": "00000000-0000-0000-0000-00000000001c",
      "is_primary": false,
      "lab_license_number": null,
      "lab_name": null,
      "mg_per_unit_type": "mg/g",
      "name": "File.pdf",
      "package_id": null,
      "release_date": null,
      "thc_mg_per_unit": null,
      "thc_percentage": null,
      "total_cbd_mg_per_unit": null,
      "total_cbd_percentage": null,
      "total_thc_mg_per_unit": null,
      "total_thc_percentage": null,
      "updated_datetime": "2026-08-14T11:21:00.646001Z"
    },
    {
      "additional_test_results": {},
      "batch_id": null,
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "coa_url": null,
      "id": "00000000-0000-0000-0000-00000000001d",
      "is_primary": false,
      "lab_license_number": null,
      "lab_name": null,
      "mg_per_unit_type": "mg/g",
      "name": "File.pdf",
      "package_id": "00000000-0000-0000-0000-00000000003e",
      "release_date": null,
      "thc_mg_per_unit": null,
      "thc_percentage": null,
      "total_cbd_mg_per_unit": null,
      "total_cbd_percentage": null,
      "total_thc_mg_per_unit": null,
      "total_thc_percentage": null,
      "updated_datetime": "2026-08-14T11:21:00.734569Z"
    }
  ],
  "next_page": null
}

GET /public/v1/test-results returns only the additional test results that are present in the test result settings

GET /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGQyZGVmZDctYWYyMi00ZWZhLTljODItMjFmMDc5M2U2NzcyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTE1OSIsInR5cCI6ImFjY2VzcyJ9.pwO4H6TSPkuM4YtyulFirn1w1U6eq5yeFexPWyvl2dM

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4b069ed55f78ee7ee27455054ea99db0-d542efa7a09d5ed8-0
{
  "data": [
    {
      "additional_test_results": {
        "spiroxamine_a_ug_per_g": "13",
        "thiacloprid_ug_per_g": "14"
      },
      "batch_id": "00000000-0000-0000-0000-0000000000cf",
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "coa_url": null,
      "id": "00000000-0000-0000-0000-000000000007",
      "is_primary": false,
      "lab_license_number": null,
      "lab_name": null,
      "mg_per_unit_type": "mg/g",
      "name": "File.pdf",
      "package_id": null,
      "release_date": null,
      "thc_mg_per_unit": null,
      "thc_percentage": null,
      "total_cbd_mg_per_unit": null,
      "total_cbd_percentage": null,
      "total_thc_mg_per_unit": null,
      "total_thc_percentage": null,
      "updated_datetime": "2026-08-14T11:20:59.303601Z"
    }
  ],
  "next_page": null
}

Get test results filtered by various attributes.

Note: The page size for this endpoint is 5000 test results per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: products_permissions_view.

Request

GET /public/v1/test-results

Parameters

Parameter Description In Type Required Default Example
updated_datetime Filter test results by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of test results TestResults

Upsert a test result

POST /public/v1/test-results creates a test result for a batch tracked product

POST /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzU2ZDk5NGEtZjcyMC00N2E2LThkMDQtZDI2NzljNGM3YTA1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTM0NCIsInR5cCI6ImFjY2VzcyJ9.oyWOsYlKFxsh9qO8Lzvr-SCtd0iTtg5R445tPZ4ow3k
{
  "additional_test_results": {
    "delta_8_thc_mg_per_unit": "17.3333",
    "delta_8_thc_percentage": "12.55",
    "thcva_percentage": "100"
  },
  "batch_id": "00000000-0000-0000-0000-000000000113",
  "cbd_mg_per_unit": "1.1",
  "cbd_percentage": "2.2",
  "is_primary": true,
  "lab_license_number": "1234567890",
  "lab_name": "Test Lab",
  "mg_per_unit_type": "mg/g",
  "name": "Name",
  "release_date": "2025-05-22",
  "thc_mg_per_unit": "3.3",
  "thc_percentage": "4.4",
  "total_cbd_mg_per_unit": "5.5",
  "total_cbd_percentage": "6.6",
  "total_thc_mg_per_unit": "7.7",
  "total_thc_percentage": "8.8"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 10ad995f15e12844246e204021eb7b70-c3c4ac5468776fbf-0
{
  "data": {
    "additional_test_results": {
      "delta_8_thc_mg_per_unit": "17.3333",
      "delta_8_thc_percentage": "12.55",
      "thcva_percentage": "100"
    },
    "batch_id": "00000000-0000-0000-0000-000000000113",
    "cbd_mg_per_unit": "1.1",
    "cbd_percentage": "2.2",
    "coa_url": null,
    "id": "00000000-0000-0000-0000-00000000000a",
    "is_primary": true,
    "lab_license_number": "1234567890",
    "lab_name": "Test Lab",
    "mg_per_unit_type": "mg/g",
    "name": "Name",
    "package_id": null,
    "release_date": "2025-05-22",
    "thc_mg_per_unit": "3.3",
    "thc_percentage": "4.4",
    "total_cbd_mg_per_unit": "5.5",
    "total_cbd_percentage": "6.6",
    "total_thc_mg_per_unit": "7.7",
    "total_thc_percentage": "8.8",
    "updated_datetime": "2026-08-14T11:20:59.696405Z"
  }
}

POST /public/v1/test-results creates a test result for a package tracked product

POST /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmExZjNjOTQtOTg3ZC00NDRkLThmYmQtYTE2ZDkyZjMwM2ZkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU5IiwidHlwIjoiYWNjZXNzIn0.qXzXPFcGer9DnAE4q3f2FgILSBVaMs5nhyaq1Wn4reU
{
  "additional_test_results": {},
  "is_primary": false,
  "lab_license_number": "1234567890",
  "lab_name": "Test Lab",
  "mg_per_unit_type": "mg/mL",
  "name": "Name",
  "package_id": "00000000-0000-0000-0000-000000000013"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8043d62920b5abfb054cda8305b98c56-9dab25ebda50fb20-0
{
  "data": {
    "additional_test_results": {},
    "batch_id": null,
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "coa_url": null,
    "id": "00000000-0000-0000-0000-000000000001",
    "is_primary": true,
    "lab_license_number": "1234567890",
    "lab_name": "Test Lab",
    "mg_per_unit_type": "mg/mL",
    "name": "Name",
    "package_id": "00000000-0000-0000-0000-000000000013",
    "release_date": null,
    "thc_mg_per_unit": null,
    "thc_percentage": null,
    "total_cbd_mg_per_unit": null,
    "total_cbd_percentage": null,
    "total_thc_mg_per_unit": null,
    "total_thc_percentage": null,
    "updated_datetime": "2026-08-14T11:20:57.451713Z"
  }
}

POST /public/v1/test-results properly transforms pointer on error

POST /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTksImlhdCI6MTc4NjcwNjQ1OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTI3ZmFiZWMtODQyZS00MDcxLWE1YmUtNDM5OGMwNTU4NzI5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTIwMCIsInR5cCI6ImFjY2VzcyJ9.KcHJE_hB5GKmLpu-L5GLM8X15fr2OWZ19nkfsAdNI80
{
  "batch_id": "00000000-0000-0000-0000-0000000000d3",
  "mg_per_unit_type": "mg/g",
  "name": "Name"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 9a00b7638b003a16657894a50d427876-c683f4c18298285f-0
{
  "errors": [
    {
      "context": {},
      "message": "can't be blank",
      "pointer": [
        "additional_test_results"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "can't be blank",
      "pointer": [
        "is_primary"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/test-results properly transforms pointer on service function error

POST /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzdkNGUxNTAtYTZlNi00NDU3LTkwNDEtNGE3MmUxZGEzYjExIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODcyIiwidHlwIjoiYWNjZXNzIn0.spmmOqyGlbTY41_o1cLwV4S_ZuDALhHcDgmZ0xYYBoY
{
  "additional_test_results": {},
  "batch_id": "00000000-0000-0000-0000-00000000007f",
  "is_primary": false,
  "mg_per_unit_type": "mg/g",
  "name": "Name",
  "total_cbd_mg_per_unit": "-3.3456",
  "total_cbd_percentage": "2.234567",
  "total_thc_mg_per_unit": "-4.4567",
  "total_thc_percentage": "1.123456"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 2eaf83f50914e54f1312f05d43c88fb9-f903edcbd99deb4b-0
{
  "errors": [
    {
      "context": {},
      "message": "must be greater than or equal to 0",
      "pointer": [
        "total_cbd_mg_per_unit"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Must have at most 4 decimal digits",
      "pointer": [
        "total_cbd_percentage"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "must be greater than or equal to 0",
      "pointer": [
        "total_thc_mg_per_unit"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Must have at most 4 decimal digits",
      "pointer": [
        "total_thc_percentage"
      ],
      "section": "body"
    }
  ]
}

POST /public/v1/test-results properly updates a test result

POST /public/v1/test-results
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWNiNWYyNDQtOWMyOS00MmYzLWI0YmEtNDgzZGQ1M2IyNDkwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6OTE0IiwidHlwIjoiYWNjZXNzIn0.RKj7Tu0xhLLCS8pR1tWz6X6gHdB4zr-PP9zxJfqhGnk
{
  "additional_test_results": {
    "thca_percentage": "15"
  },
  "id": "00000000-0000-0000-0000-000000000004",
  "is_primary": true,
  "lab_name": "after lab name",
  "mg_per_unit_type": "mg/mL",
  "name": "after name",
  "release_date": "2025-05-23",
  "total_thc_percentage": "14"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3a3cbb8d299428ce98f00ece21a09cff-f3aebd492bf372cb-0
{
  "data": {
    "additional_test_results": {
      "thca_percentage": "15"
    },
    "batch_id": "00000000-0000-0000-0000-00000000008d",
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "coa_url": null,
    "id": "00000000-0000-0000-0000-000000000004",
    "is_primary": true,
    "lab_license_number": null,
    "lab_name": "after lab name",
    "mg_per_unit_type": "mg/mL",
    "name": "after name",
    "package_id": null,
    "release_date": "2025-05-23",
    "thc_mg_per_unit": null,
    "thc_percentage": null,
    "total_cbd_mg_per_unit": null,
    "total_cbd_percentage": null,
    "total_thc_mg_per_unit": null,
    "total_thc_percentage": "14",
    "updated_datetime": "2026-08-14T11:20:58.577391Z"
  }
}

Upsert a single test result. To update an existing test result, pass in an existing test result ID in the id field. When updating a test result, you must pass in all fields including all additional test results (no sparse update currently supported). Result percentage values can have no more than 4 decimal places. Required permission: products_permissions_edit.

Request

POST /public/v1/test-results

Parameters

Parameter Description In Type Required Default Example
id Unique ID for this test result. If it exists, an update will be performed, and will otherwise throw an error. Only non-compliance tracked test results can be updated. query string false
package_id The ID of the package this test result belongs to. Cannot be provided if either id or batch_id is provided. query string false 123e4567-e89b-12d3-a456-426614174000
batch_id The ID of the batch this test result belongs to. Cannot be provided if either id or package_id is provided. query string false 123e4567-e89b-12d3-a456-426614174000
additional_test_results The additional tests results for this test result. Check here for the valid options. body object false
mg_per_unit_type The unit type for the mg per unit fields query string false mg/g
is_primary Setting a test result to is_primary: true will propagate the test result to child packages if applicable. Cannot update a test_result from is_primary: true to is_primary: false. If you want to do this, you must set a different test result on the same package/batch to is_primary: true. Once done, this test_result will be set to is_primary: false automatically. query boolean false true
release_date The release date for this test result query string false 2022-07-10
lab_license_number The license number of this test result's lab query string false 1234567890
lab_name The name of this test result's lab query string false Lab Name
name The name of this test result query string false Test Result Name
thc_percentage The THC percentage for this test result. Max precision is 4 decimal places. query decimal false 1.5
total_thc_percentage The total THC percentage for this test result. Max precision is 4 decimal places. query decimal false 1.5
thc_mg_per_unit The THC mg per unit for this test result. query decimal false 1.5
total_thc_mg_per_unit The total THC mg per unit for this test result. query decimal false 1.5
cbd_percentage The CBD percentage for this test result. Max precision is 4 decimal places. query decimal false 1.5
total_cbd_percentage The total CBD percentage for this test result. Max precision is 4 decimal places. query decimal false 1.5
cbd_mg_per_unit The CBD mg per unit for this test result. query decimal false 1.5
total_cbd_mg_per_unit The total CBD mg per unit for this test result. query decimal false 1.5

Responses

Status Description Schema
200 A single test result TestResult

UnitType

Get a unit type

GET /public/v1/unit-types/:id returns the full unit type fields

GET /public/v1/unit-types/00000000-0000-0000-0000-0000000005b1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTUsImlhdCI6MTc4NjcwNjQ1NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2M0ODNjYjEtODE2My00ZmIxLWI5ZmQtNzYzMzJlNDNjMWE2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MTI4IiwidHlwIjoiYWNjZXNzIn0.glcKKU7JLOx0AK1Wo32v2OVAi61pht4anK1uGbEgfF0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 730e60a0c8d3f8b7cee4e8e05b647447-c2650e6f9a56d007-0
{
  "data": {
    "active": true,
    "category": "WEIGHT",
    "id": "00000000-0000-0000-0000-0000000005b1",
    "inserted_datetime": "2026-08-14T11:20:55.815753Z",
    "locked": true,
    "name": "Big Bag",
    "qty_per_si_unit": "453.592",
    "updated_datetime": "2026-08-14T11:20:55.815753Z"
  }
}

Get a single unit type given the ID.

Request

GET /public/v1/unit-types/{id}

Parameters

Parameter Description In Type Required Default Example
id Unit type ID path string true

Responses

Status Description Schema
200 A single unit type UnitTypeFull
404 Not Found

Get unit types

GET /public/v1/unit-types returns paginated unit types with next_page

GET /public/v1/unit-types
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTA1ODVhYTktZjdjOS00NzNmLTllNGMtNzM1NTU2ZTk1NzhjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjA3IiwidHlwIjoiYWNjZXNzIn0.-RxhgyExMEc-2Z3w6cpzGlw20kdAKjNKjTBATFQMP8g

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 74f59480498f57db3c4aafa203cfeddf-a56735ba2b93f45c-0
{
  "data": [
    {
      "active": false,
      "category": "WEIGHT",
      "id": "00000000-0000-0000-0000-00000000084a",
      "inserted_datetime": "2026-08-14T11:20:56.024595Z",
      "locked": true,
      "name": "Kilogram",
      "qty_per_si_unit": "1",
      "updated_datetime": "2026-08-14T11:20:56.024595Z"
    },
    {
      "active": true,
      "category": "WEIGHT",
      "id": "00000000-0000-0000-0000-00000000084b",
      "inserted_datetime": "2026-08-14T11:20:56.024595Z",
      "locked": true,
      "name": "Gram",
      "qty_per_si_unit": "1000",
      "updated_datetime": "2026-08-14T11:20:56.024595Z"
    },
    {
      "active": false,
      "category": "WEIGHT",
      "id": "00000000-0000-0000-0000-00000000084c",
      "inserted_datetime": "2026-08-14T11:20:56.024595Z",
      "locked": true,
      "name": "Milligram",
      "qty_per_si_unit": "1000000",
      "updated_datetime": "2026-08-14T11:20:56.024595Z"
    }
  ],
  "next_page": "https://www.example.com/public/v1/unit-types?page[number]=2"
}

List unit types for the authenticated company.

Request

GET /public/v1/unit-types

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of unit types UnitTypes

User

Get a user

GET /public/v1/users/:id returns a single user

GET /public/v1/users/00000000-0000-0000-0000-000000000195
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTYsImlhdCI6MTc4NjcwNjQ1NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2QyOWY5MjEtMzg3YS00ZTc3LTg1Y2YtYmMxNTYzZWNlYjViIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzk5IiwidHlwIjoiYWNjZXNzIn0.VrMPdBZSc3AEI346inxdGSDkzsK2J3SJuwyvPQyUMxo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 562db1f83372b1dd8d2d702951b3ea5d-cd70b32dcaf1adaa-0
{
  "data": {
    "banned": false,
    "deleted_at": null,
    "email": "owner-404@example.com",
    "full_name": "FirstName802 LastName803",
    "id": "00000000-0000-0000-0000-000000000195",
    "role": {
      "id": "00000000-0000-0000-0000-00000000019a",
      "name": "Admin 409"
    }
  }
}

Get a single user given the ID.

Required permission: settings_permissions_manage_team.

Request

GET /public/v1/users/{id}

Parameters

Parameter Description In Type Required Default Example
id User ID path string true

Responses

Status Description Schema
200 A single user User
404 Not Found

Get users

GET /public/v1/users returns users related to the company

GET /public/v1/users
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjhiYTBhMzctZjJkYy00YTc1LWIwOGEtYzJjMGEwZjI3NTNkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTUxIiwidHlwIjoiYWNjZXNzIn0.k_U7IGAJZzDWgl_FcHTYtbAgnPIVWTKU5NW7FdGVL2E

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 56571247d5e7bcc078bb3639723322e8-5fbd0ab1c10cca9b-0
{
  "data": [
    {
      "banned": false,
      "deleted_at": null,
      "email": "owner-551@example.com",
      "full_name": "FirstName1096 LastName1097",
      "id": "00000000-0000-0000-0000-000000000227",
      "role": {
        "id": "00000000-0000-0000-0000-00000000023c",
        "name": "Admin 571"
      }
    },
    {
      "banned": false,
      "deleted_at": null,
      "email": "owner-557@example.com",
      "full_name": "FirstName1108 LastName1109",
      "id": "00000000-0000-0000-0000-00000000022d",
      "role": {
        "id": "00000000-0000-0000-0000-000000000242",
        "name": "Admin 577"
      }
    }
  ],
  "next_page": null
}

Get users sorted by their creation date and filtered by various attributes

Note: The page size for this endpoint is 1000 users per page. This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Required permission: settings_permissions_manage_team.

Request

GET /public/v1/users

Parameters

Parameter Description In Type Required Default Example
inserted_datetime Filter users by their creation datetime query string false 2022-07-10T00:00:00Z,
deleted Filter deleted users. no returns non-deleted, only returns deleted, include returns both. query string false no
page Pagination information query number false ?page[number]=1
updated_datetime Filter users by the datetime they were most recently modified query string false ,2022-07-10T00:00:00Z

Responses

Status Description Schema
200 A list of users Users

Vehicle

Create a vehicle

POST /public/v1/vehicles creates a vehicle

POST /public/v1/vehicles
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDA3NTA5YzctMmM4Yi00NjljLWFiMmEtZGViZDhjZDc2Y2JmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjMyIiwidHlwIjoiYWNjZXNzIn0.Hq7PGG6v4aDlOaaiBysSVbsOnwIm6I_wa7BlEK6010w
{
  "color": "Red",
  "description": "Delivery truck",
  "license_plate_number": "XYZ789",
  "license_plate_state": "TX",
  "make": "Ford",
  "model": "F-150",
  "vin": "ABCDEFGHIJ1234567",
  "year": "2024"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ecd013a610451fa1abf31b4ff8344c95-3dc7eaf1ad723b36-0
{
  "data": {
    "color": "Red",
    "description": "Delivery truck",
    "id": "00000000-0000-0000-0000-000000000008",
    "inserted_datetime": "2026-08-14T11:20:57.505587Z",
    "license_plate_number": "XYZ789",
    "license_plate_state": "TX",
    "make": "Ford",
    "model": "F-150",
    "updated_datetime": "2026-08-14T11:20:57.505587Z",
    "vin": "ABCDEFGHIJ1234567",
    "year": "2024"
  }
}

Create a new vehicle.

Required permission: settings_permissions_vehicles.

Request

POST /public/v1/vehicles

Parameters

Parameter Description In Type Required Default Example
make The make of the vehicle query string true
model The model of the vehicle query string true
year The year of the vehicle query string false
color The color of the vehicle query string false
license_plate_number The license plate number query string true
license_plate_state The license plate state query string false
vin The vehicle identification number (VIN) query string false
description A description or name for the vehicle query string false

Responses

Status Description Schema
201 The created vehicle Vehicle
400 Invalid parameters

Get a vehicle

GET /public/v1/vehicles/:id returns a single vehicle

GET /public/v1/vehicles/00000000-0000-0000-0000-000000000009
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTcsImlhdCI6MTc4NjcwNjQ1NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDRmZjRhMWEtM2QwZS00Nzg5LWJkZWEtNzQzNjg2YzcwNmYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NjY3IiwidHlwIjoiYWNjZXNzIn0.AcIQi9bGyPkTRN5SFPkoByBVHitmZb4zVRJ6xdkKb5s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7d197be058aa866b19d02dcbb4560159-8ff995ec1a68e8ca-0
{
  "data": {
    "color": "Blue",
    "description": "Company car",
    "id": "00000000-0000-0000-0000-000000000009",
    "inserted_datetime": "2026-08-14T11:20:57.678865Z",
    "license_plate_number": "ABC123",
    "license_plate_state": "CA",
    "make": "Toyota",
    "model": "Camry",
    "updated_datetime": "2026-08-14T11:20:57.678865Z",
    "vin": "1234567890",
    "year": "2023"
  }
}

Get a single vehicle given the ID.

Required permission: settings_permissions_vehicles.

Request

GET /public/v1/vehicles/{id}

Parameters

Parameter Description In Type Required Default Example
id Vehicle ID path string true

Responses

Status Description Schema
200 A single vehicle Vehicle
404 Not Found

Get vehicles

GET /public/v1/vehicles returns vehicles related to the company

GET /public/v1/vehicles
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzE3YjJmODYtYTRiMi00YjIyLThmY2ItNDA5OTFlZTBmNzJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODEyIiwidHlwIjoiYWNjZXNzIn0.lkLMEIIOiNUPT0Ivs5sdIAvtE3_Js3e9unDmjw5_DjQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3ae9c4cee26a4b0ffba82da01e6056e0-e16d74263a56d79e-0
{
  "data": [
    {
      "color": "Red",
      "description": "Test Vehicle",
      "id": "00000000-0000-0000-0000-00000000000c",
      "inserted_datetime": "2026-08-14T11:20:58.155633Z",
      "license_plate_number": "1234567890ABCDEFG",
      "license_plate_state": "CA",
      "make": "Toyota",
      "model": "Camry",
      "updated_datetime": "2026-08-14T11:20:58.155633Z",
      "vin": "1234567890ABCDEFG",
      "year": "2020"
    },
    {
      "color": "Red",
      "description": "Test Vehicle",
      "id": "00000000-0000-0000-0000-00000000000d",
      "inserted_datetime": "2026-08-14T11:20:58.164576Z",
      "license_plate_number": "1234567890ABCDEFG",
      "license_plate_state": "CA",
      "make": "Honda",
      "model": "Civic",
      "updated_datetime": "2026-08-14T11:20:58.164576Z",
      "vin": "1234567890ABCDEFG",
      "year": "2020"
    }
  ],
  "next_page": null
}

List vehicles for the authenticated company.

Note: The page size for this endpoint is 500 vehicles per page.

Required permission: settings_permissions_vehicles.

Request

GET /public/v1/vehicles

Parameters

Parameter Description In Type Required Default Example
page Pagination information query number false ?page[number]=1

Responses

Status Description Schema
200 A list of vehicles Vehicles

Update a vehicle

POST /public/v1/vehicles/:id updates a vehicle

POST /public/v1/vehicles/00000000-0000-0000-0000-00000000000f
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTgxNTYwNTgsImlhdCI6MTc4NjcwNjQ1OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMThmZDE2ZmYtY2E0NC00ZjEzLTg2YTAtZDc2YmQ2ODAzMzZiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg2NzA2NDU3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6ODgxIiwidHlwIjoiYWNjZXNzIn0.SxlAq-31sEmaJpOJ64IMWyMIxPH3ibErAn-SleIFApM
{
  "color": "Red",
  "make": "Honda",
  "model": "Accord",
  "year": "2023"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 56cc433b5dd2358d5bd3233c8690fdc3-1c2cf22ca90aadc4-0
{
  "data": {
    "color": "Red",
    "description": "Test Vehicle",
    "id": "00000000-0000-0000-0000-00000000000f",
    "inserted_datetime": "2026-08-14T11:20:58.400849Z",
    "license_plate_number": "1234567890ABCDEFG",
    "license_plate_state": "CA",
    "make": "Honda",
    "model": "Accord",
    "updated_datetime": "2026-08-14T11:20:58.409658Z",
    "vin": "1234567890ABCDEFG",
    "year": "2023"
  }
}

Update an existing vehicle.

Required permission: settings_permissions_vehicles.

Request

POST /public/v1/vehicles/{id}

Parameters

Parameter Description In Type Required Default Example
id Vehicle ID path string true
make The make of the vehicle query string false
model The model of the vehicle query string false
year The year of the vehicle query string false
color The color of the vehicle query string false
license_plate_number The license plate number query string false
license_plate_state The license plate state query string false
vin The vehicle identification number (VIN) query string false
description A description or name for the vehicle query string false

Responses

Status Description Schema
200 The updated vehicle Vehicle
400 Invalid parameters
404 Not Found

Models

AdditionalCost

An additional cost for an assembly as shown in Distru

Property Description Type Required
cost_per_unit The cost per unit of the additional cost number false
description The description of the additional cost string false
name The name of the additional cost string false
quantity The quantity of the additional cost number false
total_cost_actual The total actual cost of the additional cost number false
total_cost_default The total default cost (from the configured cost type) of the additional cost number false
unit_type A unit type as shown in Distru UnitType false

AdditionalTestResult

An additional test result object for a test result as shown in Distru

Property Description Type Required
dimethoxyethane_ug_per_g Solvent string false
delta_8_thc_percentage Cannabinoid string false
aspergillus_cfu_per_g Microbial string false
limonene_mg_per_unit Terpene string false
etofenprox_ug_per_g Pesticide string false
pyrethrins_pyrethrin_ii_ug_per_g Pesticide string false
xylene_ug_per_g_total Solvent string false
ethoprophos_ug_per_g Pesticide string false
enterobacteriacaea_cfu_per_g Microbial string false
chloroform_ug_per_g Solvent string false
copper_ug_per_g Heavy Metal string false
myclobutanil_ug_per_g Pesticide string false
caryophyllene_oxide_mg_per_unit Terpene string false
thiamethoxam_ug_per_g Pesticide string false
delta_8_thc_mg_per_unit Cannabinoid string false
cbda_percentage Cannabinoid string false
n_methylpyrrolidone_ug_per_g Solvent string false
propiconazole_trans_ug_per_g Pesticide string false
pyrethrins_pyrethrin_i_ug_per_g Pesticide string false
thcva_percentage Cannabinoid string false
pyriproxyfen_ug_per_g Pesticide string false
cbc_percentage Cannabinoid string false
alpha_bisabolol_mg_per_unit Terpene string false
spiroxamine_a_ug_per_g Pesticide string false
alpha_bisabolol_percentage Terpene string false
methyl_ethyl_ketone_ug_per_g Solvent string false
tetralin_ug_per_g Solvent string false
beta_cypermethrin_ug_per_g Pesticide string false
phytol_mg_per_unit Terpene string false
fenpyroximate_ug_per_g Pesticide string false
alpha_cypermethrin_ug_per_g Pesticide string false
cbg_mg_per_unit Cannabinoid string false
fenchol_mg_per_unit Terpene string false
zinc_ug_per_g Heavy Metal string false
butanol_ug_per_g Solvent string false
phytol_percentage Terpene string false
fipronil_ug_per_g Pesticide string false
cymene_mg_per_unit Terpene string false
trifloxystrobin_ug_per_g Pesticide string false
dimethylformamide_ug_per_g Solvent string false
flonicamid_ug_per_g Pesticide string false
alpha_myrcene_mg_per_unit Terpene string false
thiabendazole_ug_per_g Pesticide string false
aflatoxin_g1_ug_per_kg Mycotoxin string false
formic_acid_ug_per_g Other string false
cannabinoids_percentage_total Cannabinoid string false
pyridine_ug_per_g Solvent string false
pyrethrins_jasmolin_ii_ug_per_g Pesticide string false
geraniol_percentage Terpene string false
ethylene_glycol_percentage Other string false
other_terpenes_percentage Terpene string false
aspergillus_flavus_cfu_per_g Microbial string false
carbaryl_ug_per_g Pesticide string false
spinosad_d_ug_per_g Pesticide string false
alpha_phellandrene_percentage Terpene string false
alpha_terpinene_mg_per_unit Terpene string false
dimethomorph_z_ug_per_g Pesticide string false
dimethomorph_e_ug_per_g Pesticide string false
formamide_ug_per_g Pesticide string false
candida_albicans_cfu_per_g Microbial string false
tebuconazole_ug_per_g Pesticide string false
nerolidol_percentage Terpene string false
aflatoxins_ug_per_kg Mycotoxin string false
mevinphos_i_ug_per_g Pesticide string false
pulegone_mg_per_unit Terpene string false
gamma_terpinene_mg_per_unit Terpene string false
mercury_ug_per_g Heavy Metal string false
alpha_humulene_mg_per_unit Terpene string false
farnesene_percentage Terpene string false
l_monocytogenes_cfu_per_g Microbial string false
propane_ug_per_g Solvent string false
heptane_ug_per_g Solvent string false
butyl_acetate_ug_per_g Solvent string false
chlordane_cis_ug_per_g Pesticide string false
camphene_mg_per_unit Terpene string false
propanol_ug_per_g Solvent string false
geraniol_mg_per_unit Terpene string false
beta_myrcene_mg_per_unit Terpene string false
aflatoxin_b1_ug_per_kg Mycotoxin string false
fenhexamid_ug_per_g Pesticide string false
sulfolane_ug_per_g Solvent string false
spiroxamine_b_ug_per_g Pesticide string false
aldicarb_ug_per_g Pesticide string false
spiromesifen_ug_per_g Pesticide string false
m_and_p_xylene_ug_per_g Solvent string false
captan_ug_per_g Pesticide string false
bifenthrin_ug_per_g Pesticide string false
terpenes_percentage_total Terpene string false
other_heavy_metals_ug_per_g Heavy Metal string false
aflatoxin_b2_ug_per_kg Mycotoxin string false
pyridaben_ug_per_g Pesticide string false
thca_percentage Cannabinoid string false
acetone_ug_per_g Solvent string false
spinetoram_ug_per_g Pesticide string false
ethylene_glycol_ug_per_g Other string false
valencene_mg_per_unit Terpene string false
diuron_ug_per_g Pesticide string false
permethrin_cis_ug_per_g Pesticide string false
cymene_percentage Terpene string false
cbl_mg_per_unit Cannabinoid string false
methanol_ug_per_g Solvent string false
cbca_mg_per_unit Cannabinoid string false
thiacloprid_ug_per_g Pesticide string false
methyl_butyl_ketone_ug_per_g Solvent string false
vitamin_e_acetate_ug_per_g Other string false
thca_mg_per_unit Cannabinoid string false
spiroxamine_ug_per_g Pesticide string false
camphor_percentage Terpene string false
clofentezine_ug_per_g Pesticide string false
hexythiazox_ug_per_g Pesticide string false
ethoxyethanol_ug_per_g Solvent string false
imidacloprid_ug_per_g Pesticide string false
chlorpyrifos_ug_per_g Pesticide string false
prallethrin_ug_per_g Pesticide string false
mgk_264_ug_per_g Pesticide string false
isopulegol_percentage Terpene string false
vitamin_e_acetate_percentage Other string false
prallethrin_trans_ug_per_g Pesticide string false
phosmet_ug_per_g Pesticide string false
alpha_terpinene_percentage Terpene string false
acetamiprid_ug_per_g Pesticide string false
thcv_mg_per_unit Cannabinoid string false
cypermethrin_ug_per_g Pesticide string false
aflatoxin_g2_ug_per_kg Mycotoxin string false
camphor_mg_per_unit Terpene string false
acetic_acid_ug_per_g Other string false
aspergillus_terreus_cfu_per_g Microbial string false
cbca_percentage Cannabinoid string false
sabinene_mg_per_unit Terpene string false
methoxyethanol_ug_per_g Solvent string false
tert_butyl_methyl_ether_ug_per_g Solvent string false
cbn_mg_per_unit Cannabinoid string false
oxamyl_ug_per_g Pesticide string false
chlorobenzene_ug_per_g Solvent string false
acetic_acid_percentage Other string false
beta_humulene_mg_per_unit Terpene string false
alpha_pinene_percentage Terpene string false
beta_pinene_percentage Terpene string false
chlorantraniliprole_ug_per_g Pesticide string false
e_coli_cfu_per_g Microbial string false
daminozide_ug_per_g Pesticide string false
alpha_humulene_percentage Terpene string false
cannabinoids_mg_per_unit_total Cannabinoid string false
propoxur_ug_per_g Pesticide string false
benzene_ug_per_g Solvent string false
methomyl_ug_per_g Pesticide string false
etoxazole_ug_per_g Pesticide string false
lead_ug_per_g Heavy Metal string false
dichlorvos_ug_per_g Pesticide string false
filth_and_foreign_material_percentage Other string false
beta_humulene_percentage Terpene string false
acephate_ug_per_g Pesticide string false
fludioxonil_ug_per_g Pesticide string false
pentanol_ug_per_g Solvent string false
dimethyl_sulfoxide_ug_per_g Solvent string false
acetonitrile_ug_per_g Solvent string false
pyrethrins_cinerin_ii_ug_per_g Pesticide string false
isopropyl_acetate_ug_per_g Solvent string false
methiocarb_ug_per_g Pesticide string false
boscalid_ug_per_g Pesticide string false
dichloroethane_ug_per_g Solvent string false
bifenazate_ug_per_g Pesticide string false
azoxystrobin_ug_per_g Pesticide string false
camphene_percentage Terpene string false
spirotetramat_ug_per_g Pesticide string false
borneol_percentage Terpene string false
propyl_acetate_ug_per_g Solvent string false
other_solvents_ug_per_g Solvent string false
beta_caryophyllene_percentage Terpene string false
cbda_mg_per_unit Cannabinoid string false
isopulegol_mg_per_unit Terpene string false
fenchol_percentage Terpene string false
pentachloronitrobenzene_ug_per_g Pesticide string false
valencene_percentage Terpene string false
water_activity_aw Water Activity string false
dimethoate_ug_per_g Pesticide string false
ethyl_formate_percentage Other string false
cbg_percentage Cannabinoid string false
mevinphos_ug_per_g Pesticide string false
flurprimidol_ug_per_g Pesticide string false
cbga_percentage Cannabinoid string false
metalaxyl_ug_per_g Pesticide string false
terpenes_mg_per_unit_total Terpene string false
lambda_cyhalothrin_ug_per_g Pesticide string false
tetrahydrofuran_ug_per_g Solvent string false
eucalyptol_mg_per_unit Terpene string false
sand_and_soil_and_cinders_and_dirt_percentage Other string false
mevinphos_ii_ug_per_g Pesticide string false
eucalyptol_percentage Terpene string false
spinosad_ug_per_g Pesticide string false
dioxane_ug_per_g Solvent string false
carbofuran_ug_per_g Pesticide string false
delta_3_carene_percentage Terpene string false
pulegone_percentage Terpene string false
dimethomorph_ug_per_g Pesticide string false
malathion_ug_per_g Pesticide string false
cbt_percentage Cannabinoid string false
clothianidin_ug_per_g Pesticide string false
permethrin_ug_per_g Pesticide string false
cadmium_ug_per_g Heavy Metal string false
aspergillus_fumigatus_cfu_per_g Microbial string false
nickel_ug_per_g Heavy Metal string false
beta_myrcene_percentage Terpene string false
other_pesticides_ug_per_g Pesticide string false
terpinolene_percentage Terpene string false
pentane_ug_per_g Solvent string false
nitromethane_ug_per_g Solvent string false
methyl_parathion_ug_per_g Pesticide string false
ocimene_mg_per_unit Terpene string false
isopropanol_ug_per_g Solvent string false
cbga_mg_per_unit Cannabinoid string false
other_mycotoxins_ug_per_kg Mycotoxin string false
diazinon_ug_per_g Pesticide string false
terpinolene_mg_per_unit Terpene string false
methylcyclohexane_ug_per_g Solvent string false
cyclohexane_ug_per_g Solvent string false
dinotefuran_ug_per_g Pesticide string false
sabinene_percentage Terpene string false
methyl_butanol_ug_per_g Solvent string false
delta_3_carene_mg_per_unit Terpene string false
ethyl_formate_ug_per_g Other string false
ethanol_ug_per_g Solvent string false
propiconazole_cis_ug_per_g Pesticide string false
beta_caryophyllene_mg_per_unit Terpene string false
alpha_myrcene_percentage Terpene string false
ancymidol_ug_per_g Pesticide string false
cbdv_mg_per_unit Cannabinoid string false
spinetoram_j_ug_per_g Pesticide string false
beta_cyfluthrin_ug_per_g Pesticide string false
hexane_ug_per_g Solvent string false
fenoxycarb_ug_per_g Pesticide string false
gamma_terpinene_percentage Terpene string false
methyl_acetate_ug_per_g Solvent string false
cbc_mg_per_unit Cannabinoid string false
thcv_percentage Cannabinoid string false
nerolidol_mg_per_unit Terpene string false
naled_ug_per_g Pesticide string false
pyrethrins_cinerin_i_ug_per_g Pesticide string false
pyrethrins_ug_per_g Pesticide string false
methylisobutyl_ketone_ug_per_g Solvent string false
caryophyllene_oxide_percentage Terpene string false
methoxybenzene_ug_per_g Solvent string false
arsenic_ug_per_g Heavy Metal string false
cbt_mg_per_unit Cannabinoid string false
mold_cfu_per_g Microbial string false
prallethrin_cis_ug_per_g Pesticide string false
linalool_percentage Terpene string false
antimony_ug_per_g Heavy Metal string false
formic_acid_percentage Other string false
ocimene_percentage Terpene string false
spinetoram_l_ug_per_g Pesticide string false
terpineol_percentage Terpene string false
spinosad_a_ug_per_g Pesticide string false
yeast_cfu_per_g Microbial string false
chlordane_ug_per_g Pesticide string false
ochratoxin_a_ug_per_kg Mycotoxin string false
cbl_percentage Cannabinoid string false
alpha_pinene_mg_per_unit Terpene string false
ethylene_oxide_ug_per_g Solvent string false
guaiol_mg_per_unit Terpene string false
paclobutrazol_ug_per_g Pesticide string false
methyl_propanol_ug_per_g Solvent string false
other_microbials_cfu_per_g Microbial string false
chlordane_trans_ug_per_g Pesticide string false
chromium_ug_per_g Heavy Metal string false
pyrethrins_jasmolin_i_ug_per_g Pesticide string false
cyfluthrin_ug_per_g Pesticide string false
terpineol_mg_per_unit Terpene string false
isobutyl_acetate_ug_per_g Solvent string false
other_terpenes_mg_per_unit Terpene string false
salmonella_cfu_per_g Microbial string false
moisture_percentage Moisture string false
ethephon_ug_per_g Pesticide string false
toluene_ug_per_g Solvent string false
linalool_mg_per_unit Terpene string false
coumaphos_ug_per_g Pesticide string false
dichloromethane_ug_per_g Solvent string false
aspergillus_niger_cfu_per_g Microbial string false
thcva_mg_per_unit Cannabinoid string false
cumene_ug_per_g Solvent string false
cbdv_percentage Cannabinoid string false
guaiol_percentage Terpene string false
trichloroethylene_ug_per_g Solvent string false
kresoxim_methyl_ug_per_g Pesticide string false
beta_pinene_mg_per_unit Terpene string false
chlormequat_chloride_ug_per_g Other string false
farnesene_mg_per_unit Terpene string false
cbn_percentage Cannabinoid string false
alpha_phellandrene_mg_per_unit Terpene string false
permethrin_trans_ug_per_g Pesticide string false
ethyl_acetate_ug_per_g Solvent string false
propiconazole_ug_per_g Pesticide string false
alpha_cyfluthrin_ug_per_g Pesticide string false
limonene_percentage Terpene string false
butane_ug_per_g Solvent string false
dimethylacetamide_ug_per_g Solvent string false
chlormequat_chloride_percentage Other string false
piperonylbutoxide_ug_per_g Pesticide string false
borneol_mg_per_unit Terpene string false
acequinocyl_ug_per_g Pesticide string false
ethyl_ether_ug_per_g Solvent string false
chlorfenapyr_ug_per_g Pesticide string false
imazalil_ug_per_g Pesticide string false

Assemblies

A collection of Assemblies

Property Description Type Required
data Assemblies array(Assembly) false
next_page URL for the next page of results; null when there is no next page string false

Assembly

An assembly as shown in Distru

Property Description Type Required
assembly_number The assembly number for this assembly string false
completion_datetime The datetime this assembly was completed at string false
compliance_type The compliance type for this assembly. Options include METRC, BIOTRACK or NONE string false
creation_source The creation source for this assembly string false
custom_data The custom data for this assembly array(CustomField) false
description The description for this assembly string false
estimated_start_date The datetime this assembly is expected to start string false
estimated_work_hours The estimated work hours for this assembly integer false
estimated_work_minutes The estimated work minutes for this assembly integer false
fulfilled True if all assembly inputs have been fulfilled with batches or packages, false otherwise. boolean false
id Unique ID for this assembly string false
is_metrc_processing_job True if this assembly is associated with a Metrc processing job, false otherwise boolean false
license A license as shown in Distru License false
outputs The outputs for this assembly array(AssemblyOutput) false
owner_id The ID of the user that owns this assembly string false
status The status of this assembly string false

AssemblyInput

An input for an assembly as shown in Distru

Property Description Type Required
batch A batch for a product as shown in Distru Batch false
compliance_quantity The quantity of this input expressed in the package's unit type. Null if this input is not package-tracked. string false
cost_per_unit The cost per unit of this input string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this input string false
location A location as nested inside another entity in Distru LocationCompact false
package A package as shown in Distru Package false
product A product as shown in Distru Product false
quantity The quantity of this input in its product's unit string false
total_cost_actual The total actual cost of this input string false
total_cost_default The total default cost (from the configured product unit cost) of this input string false

AssemblyOutput

An output for an assembly as shown in Distru

Property Description Type Required
additional_costs The additional costs for this assembly output array(AdditionalCost) false
batch A batch for a product as shown in Distru Batch false
compliance_label The compliance label for this assembly output string false
compliance_quantity The quantity of this output expressed in the package's unit type. Null if this input is not package-tracked. string false
cost_per_unit The cost per unit of this output string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this output string false
expiration_datetime The expiration date for this assembly output string false
ingredients The ingredients for this assembly output array(AssemblyInput) false
is_finished_good Is this output a finished good? boolean false
is_production_batch Is this output a production batch? boolean false
location A location as nested inside another entity in Distru LocationCompact false
package A package as shown in Distru Package false
package_datetime The date that this package was created at string false
package_unit_type A unit type as shown in Distru UnitType false
product A product as shown in Distru Product false
quantity The quantity of this output in its product's unit string false
total_cost_actual The total actual cost of this output string false
total_cost_default The total default cost (from the configured product unit cost) of this output string false

Batch

A batch for a product as shown in Distru

Property Description Type Required
id Unique ID for this batch string false
name Human readable name for this batch string false

BatchFull

Extended details about a batch for a product as shown in Distru

Property Description Type Required
batch_number The batch number for this batch string false
cost_per_unit_actual The cost per unit of this batch string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this batch string false
custom_data The custom data for this batch array(CustomField) false
deleted_at The date and time when this batch was deleted string false
description The description for this batch string false
expiration_date The expiration date for this batch string false
id Unique ID for this batch string false
manufactured_datetime The manufactured datetime for this batch (ISO 8601 format) string false
name Human readable name for this batch string false
owner_id The ID of the user that owns this batch string false
primary_test_result The compact primary test result nested on a package or batch PrimaryTestResult false
product_id The ID of the batch's product string false
total_cost_actual The total actual cost of this batch string false
total_cost_default The total default cost (from the configured product unit cost) of this batch string false

Batches

A collection of Batches

Property Description Type Required
data Batches array(BatchFull) false
next_page URL for the next page of results; null when there is no next page string false

BillOfMaterials

A product's bill of materials (recipe of inputs and additional costs)

Property Description Type Required
costs The additional costs applied by this bill of materials array(BillOfMaterialsCost) false
description The description of this bill of materials string false
id Unique ID for this bill of materials string false
inputs The inputs consumed by this bill of materials array(BillOfMaterialsInput) false
name Human readable name for this bill of materials string false

BillOfMaterialsCost

An additional cost applied by a bill of materials

Property Description Type Required
cost_type The cost type applied by a bill-of-materials cost BillOfMaterialsCostType false
description The description of this cost string false
id Unique ID for this cost string false
quantity The quantity of the cost type applied string false

BillOfMaterialsCostType

The cost type applied by a bill-of-materials cost

Property Description Type Required
cost_per_unit The cost per unit. Null unless the caller has the costs_permissions_view_cost_types_cost_per_unit permission. string false
id Unique ID for this cost type string false
name Human readable name for this cost type string false
unit_type A unit type as shown in Distru UnitType false

BillOfMaterialsFilter

A dynamic filter that selects products as a bill-of-materials input

Property Description Type Required
criteria The filter criteria, each a type (category, subcategory, group, strain, unit_type, tags) and its matched values (each an id and name) array(any) false
id Unique ID for this filter string false
name Human readable name for this filter string false

BillOfMaterialsInput

A single input of a bill of materials

Property Description Type Required
filter A dynamic filter that selects products as a bill-of-materials input BillOfMaterialsFilter false
id Unique ID for this input string false
product A product as shown in Distru Product false
quantity The quantity of this input required by the bill of materials string false
type The kind of input: product or filter string false

CancelCredit

Options for canceling a credit

{
  "should_delete_credit_uses": false
}
Property Description Type Required
should_delete_credit_uses When true, also removes this credit's applications to invoices (its credit uses), returning the used amounts to those invoices. Defaults to false. boolean false

Charge

A line representing a Tax, Discount, or Charge added to an order

Property Description Type Required
id Unique ID for this charge string false
name The name for this charge string false
percent The percent to charge for this line if it is a percentage string false
price The price of this line if it is a flat charge string false
type What type of additional line is this. Tax lines are returned as CHARGE with a populated tax object. array(any) false
unit_type Determines if this line is tracked as a percentage or a flat charge array(any) false
tax.id Unique ID for this Tax string false
tax.name The name of this tax string false

CogsReport

The Cost of Goods Sold report

{
  "data": [
    {
      "batch": "BD-BATCH-07 (B-0042)",
      "cost_origin": "Purchase Order",
      "final_input": "Final",
      "margin_actual": 0.757,
      "margin_default": 0.743,
      "metrc_production_batch_number": "PB-2026-0042",
      "order_number": "1042",
      "package": "1A4000000000000000000123",
      "product_brand": "Sunshine Extracts",
      "product_category": "Vape",
      "product_name": "Blue Dream 1g Cartridge",
      "profit_unit_actual": 26.5,
      "profit_unit_default": 26.0,
      "quantity": 4.0,
      "sku": "BD-1G-CART",
      "total_cost_actual": 34.0,
      "total_cost_default": 36.0,
      "total_price": 140.0,
      "total_profits_actual": 106.0,
      "total_profits_default": 104.0,
      "unit_cost_actual": 8.5,
      "unit_cost_default": 9.0,
      "unit_price": 35.0,
      "unit_type": "Each"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "final_input",
        "label": "Final/Input"
      },
      {
        "key": "cost_origin",
        "label": "Cost Origin"
      },
      {
        "key": "product_name",
        "label": "Product Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "product_brand",
        "label": "Product Brand"
      },
      {
        "key": "product_category",
        "label": "Product Category"
      },
      {
        "key": "package",
        "label": "Package"
      },
      {
        "key": "metrc_production_batch_number",
        "label": "Metrc Production Batch Number"
      },
      {
        "key": "batch",
        "label": "Batch"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "total_price",
        "label": "Total Price"
      },
      {
        "key": "unit_cost_actual",
        "label": "Unit Cost (Actual)"
      },
      {
        "key": "unit_cost_default",
        "label": "Unit Cost (Default)"
      },
      {
        "key": "total_cost_actual",
        "label": "Total Cost (Actual)"
      },
      {
        "key": "total_cost_default",
        "label": "Total Cost (Default)"
      },
      {
        "key": "total_profits_actual",
        "label": "Total Profits (Actual)"
      },
      {
        "key": "total_profits_default",
        "label": "Total Profits (Default)"
      },
      {
        "key": "profit_unit_actual",
        "label": "Profit/Unit (Actual)"
      },
      {
        "key": "profit_unit_default",
        "label": "Profit/Unit (Default)"
      },
      {
        "key": "margin_actual",
        "label": "Margin (Actual)"
      },
      {
        "key": "margin_default",
        "label": "Margin (Default)"
      }
    ],
    "date_range": "Jul 26th 2026",
    "report": "cogs"
  }
}
Property Description Type Required
data The report rows array(CogsReportRow) true
meta Report-level metadata CogsReportMeta true

CogsReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

CogsReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(CogsReportColumn) false
date_range The human-readable date the report was generated string false
report The report identifier string true

CogsReportRow

A single row of the Cost of Goods Sold report (one sales order line item). Companies on the BioTrack compliance integration do not get the metrc_production_batch_number key.

{
  "batch": "BD-BATCH-07 (B-0042)",
  "cost_origin": "Purchase Order",
  "final_input": "Final",
  "margin_actual": 0.757,
  "margin_default": 0.743,
  "metrc_production_batch_number": "PB-2026-0042",
  "order_number": "1042",
  "package": "1A4000000000000000000123",
  "product_brand": "Sunshine Extracts",
  "product_category": "Vape",
  "product_name": "Blue Dream 1g Cartridge",
  "profit_unit_actual": 26.5,
  "profit_unit_default": 26.0,
  "quantity": 4.0,
  "sku": "BD-1G-CART",
  "total_cost_actual": 34.0,
  "total_cost_default": 36.0,
  "total_price": 140.0,
  "total_profits_actual": 106.0,
  "total_profits_default": 104.0,
  "unit_cost_actual": 8.5,
  "unit_cost_default": 9.0,
  "unit_price": 35.0,
  "unit_type": "Each"
}
Property Description Type Required
batch The Distru batch number string false
cost_origin The origin of the cost string false
final_input Whether the row is the sold item (Final) string false
margin_actual The actual margin number false
margin_default The default margin number false
metrc_production_batch_number The Metrc production batch number string false
order_number The sales order number string false
package The package compliance label string false
product_brand The product's brand string false
product_category The product's category string false
product_name The product name string false
profit_unit_actual The actual profit per unit number false
profit_unit_default The default profit per unit number false
quantity The quantity sold, net of returns number false
sku The product SKU string false
total_cost_actual The actual total cost number false
total_cost_default The default total cost number false
total_price The total price (unit price times quantity) number false
total_profits_actual The actual total profit number false
total_profits_default The default total profit number false
unit_cost_actual The actual cost per unit number false
unit_cost_default The default cost per unit number false
unit_price The price per unit number false
unit_type The item's unit type string false

CompactCredit

A compact representation of a credit

Property Description Type Required
amount The current amount of this credit string false
credit_number The credit number as shown in the Distru UI string false
id Unique ID for this credit string false
source How this credit was created string false

CompactReturn

A compact representation of a return

Property Description Type Required
company A company as nested inside another entity in Distru CompanyCompact false
id Unique ID for this return string false
return_datetime The datetime of this return string false
return_number The return number as shown in the Distru UI string false
status The status of this return string false
total The total value of this return number false

Companies

A collection of companies

Property Description Type Required
data Companies array(Company) false
next_page URL for the next page of results; null when there is no next page string false

Company

A company as shown in Distru

Property Description Type Required
category The category of this company string false
custom_data The custom data for this company array(CustomField) false
default_email The default email for this company string false
default_payment_term A payment term as shown in Distru PaymentTerm false
default_purchase_order_notes The default notes that will be automatically added to purchase orders when this company is the supplier string false
default_sales_order_notes The default external notes that will be automatically added to sales orders when this company is the customer string false
deleted_at The datetime this company relationship was deleted at string false
group A company group as shown in Distru CompanyGroup false
id Unique ID for this company string false
invoice_email The email address where sales order invoices are delivered string false
legal_business_name The legal business name for this company string false
licenses The license for the company array(License) false
locations The location for the company array(LocationCompact) false
name Human readable name for this company string false
order_shipment_email The email address where sales order shipment packing slips are delivered string false
outstanding_balance The current outstanding (unpaid) balance for this company, as a decimal string (e.g. "150.50"). "0" when nothing is outstanding. string false
outstanding_balance_threshold Threshold that determines when a company is considered to have a too high an outstanding balance. When exceeded, Distru will show a warning banner in the company's page and when selling to this company. integer false
owner Information about a user in Distru User false
owner_id The ID of the user that owns this company string false
phone_number The phone number for this company string false
purchase_order_email The email address where purchase order slips are delivered string false
relationship_type A relationship type as shown in Distru RelationshipType false
sales_order_email The email address where sales order slips are delivered string false
updated_datetime The datetime this company was last updated at string false
website The website for this company string false

CompanyCompact

A company as nested inside another entity in Distru

Property Description Type Required
id Unique ID for this company string false
name Human readable name for this company string false
updated_datetime The datetime this company was last updated at string false

CompanyGroup

A company group as shown in Distru

{
  "id": "3f128a34-cc59-4b49-8883-23bf10e59c6c",
  "name": "Group 123"
}
Property Description Type Required
id Unique ID for this company group string false
name Name of the company group string false

CompanyGroupFull

A company group

Property Description Type Required
id Unique ID for this company group string false
inserted_datetime When the company group was created (UTC ISO-8601) string false
name The name of the company group string false
updated_datetime When the company group was last updated (UTC ISO-8601) string false

CompanyGroups

A collection of company groups

Property Description Type Required
data Company Groups array(CompanyGroupFull) false
next_page URL for the next page of results; null when there is no next page string false

Contact

Information about a contact in Distru's CRM

{
  "company": {
    "id": "3f128a34-cc59-4b49-8883-23bf10e59c6c"
  },
  "email": "contact@example.com",
  "full_name": "John Doe",
  "id": "12345",
  "owner": {
    "id": "02c88a3f-d759-4973-88f9-60049d682524"
  }
}
Property Description Type Required
custom_data The custom data for this contact array(CustomField) false
deleted_at The datetime of deletion if the contact was deleted string false
description The description of this contact string false
driver_license_issuing_state Driver license issuing state for shipping manifests string false
driver_license_number Driver license number for shipping manifests string false
email The email address of this contact string false
first_name The first name of this contact string false
full_name The full name of this contact string false
id Unique ID for this contact string false
last_name The last name of this contact string false
owner Information about a user in Distru User false
phone_number The phone number of this contact string false
title The title of this contact string false
work_phone_number The work phone number of this contact string false
company.id Unique ID for this company string false

Contacts

A collection of Contacts

Property Description Type Required
data Contacts array(Contact) false
next_page URL for the next page of results; null when there is no next page string false

CostType

A cost type

Property Description Type Required
active Whether the cost type is active boolean false
allow_inline_edits Controls whether the per-unit cost amount can be overridden when a cost of this type is applied to a record (a plant cost, an assembly or breakdown output cost, or an order/invoice cost line). When true, the user may enter or override cost_per_unit at apply time; when false, the applied amount is locked to this cost type's configured cost_per_unit and cannot be changed. boolean false
cost_per_unit The cost per unit as a decimal string string false
description A description of the cost type string false
id Unique ID for this cost type string false
inserted_datetime When the cost type was created (UTC ISO-8601) string false
name The name of the cost type string false
unit_type A unit type as shown in Distru UnitType false
updated_datetime When the cost type was last updated (UTC ISO-8601) string false

CostTypes

A collection of cost types

Property Description Type Required
data Cost Types array(CostType) false
next_page URL for the next page of results; null when there is no next page string false

Credit

A credit as shown in Distru

{
  "amount": "100",
  "company": {
    "id": "00000000-0000-0000-0000-00000000000a",
    "name": "RAW"
  },
  "credit_number": "CRT-00000001",
  "credit_uses": [
    {
      "amount": "50",
      "credit": {
        "amount": "100",
        "credit_number": "CRT-00000001",
        "id": "00000000-0000-0000-0000-000000000001",
        "source": "USER"
      },
      "id": "00000000-0000-0000-0000-000000000002",
      "payment": {
        "amount": "50",
        "company": {
          "id": "00000000-0000-0000-0000-00000000000a",
          "name": "RAW"
        },
        "credit_uses": [],
        "description": "Payment for invoice INV-001",
        "fully_paid_with_credits": false,
        "id": "12345",
        "inserted_datetime": "2024-12-12T20:26:19.297537Z",
        "invoice": {
          "id": "67890",
          "invoice_number": "INV-001",
          "status": "FULLY_PAID",
          "total": "150.50"
        },
        "overpayment_credits": [],
        "payment_date": "2024-12-12T20:26:19.297537Z",
        "payment_method": {
          "id": "12345",
          "name": "Credit Card"
        },
        "payment_number": "PAY-001",
        "payment_type": "INVOICE",
        "status": "POSTED",
        "updated_datetime": "2024-12-12T20:26:19.297537Z"
      }
    }
  ],
  "deleted_in_qbo": false,
  "external_note": "External note",
  "id": "00000000-0000-0000-0000-000000000001",
  "inserted_datetime": "2024-12-12T20:26:19.297537Z",
  "internal_note": "Internal note",
  "original_amount": "150",
  "owner": {
    "banned": false,
    "email": "jeanb@zorgindustries.com",
    "full_name": "Jean-Baptiste Emanuel Zorg",
    "id": "12345"
  },
  "qb_sync_status": "SYNCED",
  "remaining_balance": "100",
  "source": "USER",
  "status": "ACTIVE",
  "updated_datetime": "2024-12-12T20:26:19.297537Z"
}
Property Description Type Required
amount The current amount of this credit string false
canceled_datetime The datetime at which the credit was canceled. Only set for CANCELED credits. string false
company A company as nested inside another entity in Distru CompanyCompact false
credit_number The credit number as shown in the Distru UI string false
credit_uses This credit's applications to invoices. Each use has the applied amount, the compact credit, and the invoice payment it was applied to. array(CreditUse) false
deleted_in_qbo Whether this credit was pushed to QuickBooks and later deleted there. boolean false
external_note A note on this credit, visible to the customer string false
id Unique ID for this credit string false
inserted_datetime The datetime at which the credit was created in Distru string false
internal_note An internal note on this credit string false
original_amount The amount this credit was originally created with. Never changes. string false
owner Information about a user in Distru User false
payment A payment as shown in Distru Payment false
qb_credit_memo_id The id of the QuickBooks credit memo this credit maps to, when synced. string false
qb_payment_id The id of the QuickBooks payment this credit maps to, when synced. string false
qb_sync_status The credit's QuickBooks sync status. Only meaningful when the QuickBooks integration is enabled; null otherwise. Values: PENDING (the latest sync covering this credit is still in flight), ERROR (the latest sync covering this credit failed), DELETED_IN_QBO (pushed to QuickBooks once, then deleted there), NOT_SYNCED (never pushed to QuickBooks), PARTIALLY_SYNCED (the credit is in QuickBooks but at least one of its applications has not been synced yet), SYNCED (fully synced). string false
remaining_balance The unused balance still available on this credit string false
return A compact representation of a return CompactReturn false
source How this credit was created string false
status The status of this credit. ACTIVE has a remaining balance, REDEEMED is fully used, CANCELED was voided. string false
updated_datetime The datetime at which the credit was last updated in Distru string false

CreditUse

An application of a credit to an invoice payment

Property Description Type Required
amount The amount of the credit applied to the invoice payment string false
credit A compact representation of a credit CompactCredit false
id Unique ID for this credit use string false
payment A payment as shown in Distru Payment false

Credits

A collection of Credits

Property Description Type Required
data Credits array(Credit) false
next_page URL for the next page of results; null when there is no next page string false

CultivationTransactionHistoryReport

The Cultivation Transaction History report

{
  "data": [
    {
      "amount": 50,
      "batch_name": "Blue Dream 2026-01",
      "date": "01/15/2026",
      "description": "Created from immature package",
      "package_label_s": "1A4FF0100000022000000201",
      "plant_tag_s": "1A4FF0100000022000000101, 1A4FF0100000022000000102",
      "product_name": "Blue Dream Flower",
      "related_entity": "Teardown #42",
      "related_entity_status": "Completed",
      "strain": "Blue Dream",
      "total_cost": 1.2e3,
      "type": "Plant Batch Creation",
      "unit": "Unit"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "date",
        "label": "Date"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "batch_name",
        "label": "Batch Name"
      },
      {
        "key": "plant_tag_s",
        "label": "Plant Tag(s)"
      },
      {
        "key": "product_name",
        "label": "Product Name"
      },
      {
        "key": "package_label_s",
        "label": "Package Label(s)"
      },
      {
        "key": "type",
        "label": "Type"
      },
      {
        "key": "related_entity",
        "label": "Related Entity"
      },
      {
        "key": "related_entity_status",
        "label": "Related Entity Status"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "unit",
        "label": "Unit"
      },
      {
        "key": "description",
        "label": "Description"
      },
      {
        "key": "total_cost",
        "label": "Total Cost"
      }
    ],
    "date_range": "Jan 1st 2026 to Feb 1st 2026",
    "report": "cultivation_transaction_history"
  }
}
Property Description Type Required
data The report rows array(CultivationTransactionHistoryReportRow) true
meta Report-level metadata CultivationTransactionHistoryReportMeta true

CultivationTransactionHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

CultivationTransactionHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(CultivationTransactionHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

CultivationTransactionHistoryReportRow

A single row of the Cultivation Transaction History report (one cultivation transaction). The total_cost key is omitted for users without permission to view costs.

{
  "amount": 50,
  "batch_name": "Blue Dream 2026-01",
  "date": "01/15/2026",
  "description": "Created from immature package",
  "package_label_s": "1A4FF0100000022000000201",
  "plant_tag_s": "1A4FF0100000022000000101, 1A4FF0100000022000000102",
  "product_name": "Blue Dream Flower",
  "related_entity": "Teardown #42",
  "related_entity_status": "Completed",
  "strain": "Blue Dream",
  "total_cost": 1.2e3,
  "type": "Plant Batch Creation",
  "unit": "Unit"
}
Property Description Type Required
amount The signed transaction amount number false
batch_name The plant batch name string false
date The transaction date, in the company's timezone string false
description The transaction description string false
package_label_s The package compliance label(s) string false
plant_tag_s The plant tag(s) involved string false
product_name The product name string false
related_entity The related entity (teardown or harvest) string false
related_entity_status The related entity's status string false
strain The strain name string false
total_cost The transaction's total cost number false
type The transaction type string false
unit The unit string false

CustomField

A custom field as shown in Distru

{
  "id": 98,
  "name": "Custom Field 1",
  "value": "Custom Field Value 1"
}
Property Description Type Required
id Unique ID for this custom field integer false
name The name of this custom field string false
value The value of the custom field in the context of the object it's associated with string false

CustomFieldDefinition

A custom field definition

Property Description Type Required
description Description of the custom field string false
field_options Field options array(any) false
field_type Field type string false
filterable Whether the field is filterable boolean false
id Custom field ID integer false
name Name of the custom field string false
parent_object Parent object attached to the field string false
required Whether a value for the field is required when saving a record boolean false

CustomFieldDefinitions

A collection of custom field definitions

Property Description Type Required
data The custom field definitions array(CustomFieldDefinition) false

Driver

A driver

Property Description Type Required
birth_date The driver's birth date (ISO-8601 date) string false
driver_license The driver's license number string false
email The driver's email string false
first_name The driver's first name string false
hire_date The driver's hire date (ISO-8601 date) string false
id Unique ID for this driver string false
inserted_datetime When the driver was created (UTC ISO-8601) string false
last_name The driver's last name string false
occupational_license_number The driver's occupational license number string false
phone_number The driver's phone number string false
updated_datetime When the driver was last updated (UTC ISO-8601) string false
us_state The driver's US state string false

Drivers

A collection of drivers

Property Description Type Required
data Drivers array(Driver) false
next_page URL for the next page of results; null when there is no next page string false

FileAttachment

A file attachment

Property Description Type Required
assembly_id ID of the assembly this file is attached to, if any string false
batch_id ID of the batch this file is attached to, if any string false
company_relationship_id ID of the company relationship this file is attached to, if any string false
contact_id ID of the contact this file is attached to, if any string false
id Unique ID for this file attachment string false
invoice_id ID of the invoice this file is attached to, if any string false
license_id ID of the license this file is attached to, if any string false
mime_type MIME type of the file; null when the file is missing string false
name The file name string false
order_id ID of the order this file is attached to, if any string false
order_shipment_id ID of the order shipment this file is attached to, if any string false
product_id ID of the product this file is attached to, if any string false
purchase_id ID of the purchase this file is attached to, if any string false
request_id ID of the request this file is attached to, if any string false
return_id ID of the return this file is attached to, if any string false
size_in_bytes Size of the file in bytes; null when the file is missing integer false
stock_transfer_id ID of the stock transfer this file is attached to, if any string false
task_id ID of the task this file is attached to, if any string false
upload_datetime When the file was uploaded (UTC ISO-8601) string false
url URL to download the file; null when the file is missing string false
uploader.id string false
uploader.name string false

HarvestOutputsReport

The Harvest Outputs report

{
  "data": [
    {
      "cost_input_output": "Output",
      "cost_type": "Labor",
      "cost_type_description": "Trimming labor",
      "distru_product": "Blue Dream Flower",
      "harvest_assembly_date": "07/01/2026",
      "harvest_assembly_number": "HA-0000001",
      "harvest_name": "Blue Dream Fall 2026",
      "line_item_id": "a1b2c3d4-e5f6-47a8-9b0c-1d2e3f4a5b6c",
      "location": "Main Warehouse",
      "output_batch_number": "BATCH-0001",
      "output_package_number": "1A4FF0100000022000000123",
      "output_reference_id": "b2c3d4e5-f6a7-48b9-8c0d-2e3f4a5b6c7d",
      "product_category": "Flower",
      "quantity": 1.2e3,
      "status": "COMPLETED",
      "strain": "Blue Dream",
      "total_cost_actual": 3.4e3,
      "total_cost_default": 3.6e3,
      "unit_cost_actual": 2.83,
      "unit_cost_default": 3.0,
      "unit_type": "Grams"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "harvest_assembly_date",
        "label": "Harvest Assembly Date"
      },
      {
        "key": "harvest_assembly_number",
        "label": "Harvest Assembly Number"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "harvest_name",
        "label": "Harvest Name"
      },
      {
        "key": "output_batch_number",
        "label": "Output Batch Number"
      },
      {
        "key": "output_package_number",
        "label": "Output Package Number"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "location",
        "label": "Location"
      },
      {
        "key": "cost_input_output",
        "label": "Cost/Input/Output"
      },
      {
        "key": "distru_product",
        "label": "Distru Product"
      },
      {
        "key": "product_category",
        "label": "Product Category"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "unit_cost_actual",
        "label": "Unit Cost (Actual)"
      },
      {
        "key": "unit_cost_default",
        "label": "Unit Cost (Default)"
      },
      {
        "key": "total_cost_actual",
        "label": "Total Cost (Actual)"
      },
      {
        "key": "total_cost_default",
        "label": "Total Cost (Default)"
      },
      {
        "key": "cost_type",
        "label": "Cost Type"
      },
      {
        "key": "cost_type_description",
        "label": "Cost Type Description"
      },
      {
        "key": "line_item_id",
        "label": "Line Item ID"
      },
      {
        "key": "output_reference_id",
        "label": "Output Reference ID"
      }
    ],
    "date_range": "Jul 20th 2026 to Jul 27th 2026",
    "report": "harvest_outputs"
  }
}
Property Description Type Required
data The report rows array(HarvestOutputsReportRow) true
meta Report-level metadata HarvestOutputsReportMeta true

HarvestOutputsReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

HarvestOutputsReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(HarvestOutputsReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

HarvestOutputsReportRow

A single row of the Harvest Outputs report (one input, output, or cost line item of a harvest assembly). The cost keys (unit_cost_actual, unit_cost_default, total_cost_actual, total_cost_default, cost_type, cost_type_description) are omitted for users without permission to view costs.

{
  "cost_input_output": "Output",
  "cost_type": "Labor",
  "cost_type_description": "Trimming labor",
  "distru_product": "Blue Dream Flower",
  "harvest_assembly_date": "07/01/2026",
  "harvest_assembly_number": "HA-0000001",
  "harvest_name": "Blue Dream Fall 2026",
  "line_item_id": "a1b2c3d4-e5f6-47a8-9b0c-1d2e3f4a5b6c",
  "location": "Main Warehouse",
  "output_batch_number": "BATCH-0001",
  "output_package_number": "1A4FF0100000022000000123",
  "output_reference_id": "b2c3d4e5-f6a7-48b9-8c0d-2e3f4a5b6c7d",
  "product_category": "Flower",
  "quantity": 1.2e3,
  "status": "COMPLETED",
  "strain": "Blue Dream",
  "total_cost_actual": 3.4e3,
  "total_cost_default": 3.6e3,
  "unit_cost_actual": 2.83,
  "unit_cost_default": 3.0,
  "unit_type": "Grams"
}
Property Description Type Required
cost_input_output The line item type (Input, Output, or Cost) string false
cost_type The cost type name string false
cost_type_description The cost type description string false
distru_product The Distru product name string false
harvest_assembly_date The harvest assembly date string false
harvest_assembly_number The harvest assembly number string false
harvest_name The harvest name string false
line_item_id The line item ID string false
location The location name string false
output_batch_number The output batch number string false
output_package_number The output package compliance label string false
output_reference_id The referenced output ID for cost line items string false
product_category The product category string false
quantity The line item quantity number false
status The assembly status string false
strain The strain name string false
total_cost_actual The actual total cost number false
total_cost_default The default total cost number false
unit_cost_actual The actual cost per unit number false
unit_cost_default The default cost per unit number false
unit_type The unit type string false

Image

An image as shown in Distru

{
  "id": "12345",
  "name": "image.jpg",
  "rank": 0,
  "url": "https://example.com/image.jpg"
}
Property Description Type Required
id Unique ID for this image string false
name Name of the file for this image string false
rank The rank of this image in the list of images for the product integer false
url URL to the image file string false

Inventories

A list of active and available quantity for each group

Property Description Type Required
data Inventories array(Inventory) false
next_page URL for the next page of results; null when there is no next page string false

Inventory

{
  "active": "500.000000000",
  "available": "400.000000000",
  "batch_number": "1234",
  "location_id": "1764da45-c1be-425c-9b31-b860cdb93e98",
  "product_id": "67ae9080-8dc2-4ab7-9704-19673f4d9f21",
  "reserved": "100.000000000"
}
Property Description Type Required
active Active quantity string true
available Available quantity (active - reserved) string true
batch_number The batch number of the batch or the package string false
cost_default_per_unit The cost per unit of the inventory. Note: This is calculated by dividing the total default cost by the active quantity. string false
cost_per_unit_actual The cost per unit of the inventory. Note: This is calculated by dividing the total cost by the active quantity. string false
location_id ID of the location string false
product_id ID of the product string true
reserved Reserved quantity string true
total_cost_actual The aggregated total cost of the inventory's active quantity string false
total_cost_default The aggregated total default cost of the inventory's active quantity string false
updated_datetime The datetime at which the inventory was last updated string false

InventoryAssetsReport

The Inventory Assets report

{
  "data": [
    {
      "active_quantity": 120.0,
      "assembling_quantity": 0.0,
      "batch_number": "BD-2026-01",
      "category": "Vape Cartridges",
      "expiration_date": "2027-01-15",
      "harvest_date": "2025-11-01",
      "license": "C11-0000123-LIC",
      "location": "Main Warehouse",
      "owner": "Jane Doe",
      "package_number": "1A4060300003B01000001234",
      "product": "Blue Dream 1g Cartridge",
      "selling_quantity": 0.0,
      "sku": "BD-1G-CART",
      "subcategory": "Distillate",
      "total_cost_actual": 1020.0,
      "total_cost_default": 960.0,
      "tracking_method": "BATCH",
      "unit_cost_actual": 8.5,
      "unit_cost_default": 8.0,
      "unit_price": 35.0,
      "unit_type": "Each",
      "vendor": "Sunshine Extracts"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "license",
        "label": "License"
      },
      {
        "key": "location",
        "label": "Location"
      },
      {
        "key": "package_number",
        "label": "Package Number"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "active_quantity",
        "label": "Active Quantity"
      },
      {
        "key": "assembling_quantity",
        "label": "Assembling Quantity"
      },
      {
        "key": "selling_quantity",
        "label": "Selling Quantity"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "unit_cost_actual",
        "label": "Unit Cost (Actual)"
      },
      {
        "key": "unit_cost_default",
        "label": "Unit Cost (Default)"
      },
      {
        "key": "total_cost_actual",
        "label": "Total Cost (Actual)"
      },
      {
        "key": "total_cost_default",
        "label": "Total Cost (Default)"
      },
      {
        "key": "expiration_date",
        "label": "Expiration Date"
      },
      {
        "key": "tracking_method",
        "label": "Tracking Method"
      },
      {
        "key": "harvest_date",
        "label": "Harvest Date"
      }
    ],
    "date_range": "Jul 27th 2026",
    "report": "inventory_assets"
  }
}
Property Description Type Required
data The report rows array(InventoryAssetsReportRow) true
meta Report-level metadata InventoryAssetsReportMeta true

InventoryAssetsReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

InventoryAssetsReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(InventoryAssetsReportColumn) false
date_range The human-readable date the report was generated string false
report The report identifier string true

InventoryAssetsReportRow

A single row of the Inventory Assets report. The final_input, cost_origin, and cost_quantity keys are present only when style=granular. Cost keys (unit_cost_actual, unit_cost_default, total_cost_actual, total_cost_default) are omitted for users without permission to view costs.

{
  "active_quantity": 120.0,
  "assembling_quantity": 0.0,
  "batch_number": "BD-2026-01",
  "category": "Vape Cartridges",
  "expiration_date": "2027-01-15",
  "harvest_date": "2025-11-01",
  "license": "C11-0000123-LIC",
  "location": "Main Warehouse",
  "owner": "Jane Doe",
  "package_number": "1A4060300003B01000001234",
  "product": "Blue Dream 1g Cartridge",
  "selling_quantity": 0.0,
  "sku": "BD-1G-CART",
  "subcategory": "Distillate",
  "total_cost_actual": 1020.0,
  "total_cost_default": 960.0,
  "tracking_method": "BATCH",
  "unit_cost_actual": 8.5,
  "unit_cost_default": 8.0,
  "unit_price": 35.0,
  "unit_type": "Each",
  "vendor": "Sunshine Extracts"
}
Property Description Type Required
active_quantity The active on-hand quantity number false
assembling_quantity The quantity being assembled number false
batch_number The batch number string false
category The product's category string false
cost_origin The origin of the cost input (granular) string false
cost_quantity The quantity attributed to the cost input (granular) number false
expiration_date The asset's expiration date string false
final_input Whether the row is the final asset or a cost input (granular) string false
harvest_date The package's harvest date string false
license The location's license number string false
location The location name string false
owner The product owner's name string false
package_number The package compliance label string false
product The product name string false
selling_quantity The quantity being sold number false
sku The product SKU string false
subcategory The product's subcategory string false
total_cost_actual The actual total cost number false
total_cost_default The default total cost number false
tracking_method The product's inventory tracking method string false
unit_cost_actual The actual cost per unit number false
unit_cost_default The default cost per unit number false
unit_price The product's unit price number false
unit_type The unit type string false
vendor The product's vendor string false

InventoryTransactionHistoryReport

The Inventory Transaction History report

{
  "data": [
    {
      "amount": -4.0,
      "batch_id": "00000000-0000-0000-0000-000000000400",
      "batch_number": "BD-2026-01",
      "cbd": 0.5,
      "cbd_mg_g": 5.0,
      "cbd_mg_ml": 4.0,
      "company_relationship_id": "00000000-0000-0000-0000-0000000015bf",
      "date": "2026-07-01 09:30",
      "description": "Manual stock adjustment",
      "metrc_production_batch_number": "PB-2026-0042",
      "metrc_unit_name": "Each",
      "package_batch_number_or_batch_name": "BD-2026-01",
      "package_label": "1A4060300003B01000001234",
      "product": "Blue Dream 1g Cartridge",
      "product_id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
      "related_entity": "Stock Adjustment",
      "related_entity_customer_vendor": "Green Leaf Dispensary",
      "related_entity_status": "COMPLETED",
      "thc": 21.5,
      "thc_mg_g": 215.0,
      "thc_mg_ml": 780.0,
      "total_cbd": 0.6,
      "total_cbd_mg_g": 6.0,
      "total_cbd_mg_ml": 5.0,
      "total_cost": 34.0,
      "total_thc": 24.8,
      "total_thc_mg_g": 248.0,
      "total_thc_mg_ml": 800.0,
      "type": "adjustment",
      "unit_type": "Each"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "date",
        "label": "Date"
      },
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "package_batch_number_or_batch_name",
        "label": "Package Batch Number or Batch Name"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      },
      {
        "key": "package_label",
        "label": "Package Label"
      },
      {
        "key": "metrc_production_batch_number",
        "label": "Metrc Production Batch Number"
      },
      {
        "key": "type",
        "label": "Type"
      },
      {
        "key": "related_entity",
        "label": "Related Entity"
      },
      {
        "key": "related_entity_status",
        "label": "Related Entity Status"
      },
      {
        "key": "related_entity_customer_vendor",
        "label": "Related Entity Customer/Vendor"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "metrc_unit_name",
        "label": "Metrc Unit Name"
      },
      {
        "key": "product_id",
        "label": "Product Id"
      },
      {
        "key": "batch_id",
        "label": "Batch Id"
      },
      {
        "key": "company_relationship_id",
        "label": "Company Relationship Id"
      },
      {
        "key": "description",
        "label": "Description"
      },
      {
        "key": "thc",
        "label": "THC %"
      },
      {
        "key": "total_thc",
        "label": "Total THC %"
      },
      {
        "key": "thc_mg_g",
        "label": "THC mg/g"
      },
      {
        "key": "thc_mg_ml",
        "label": "THC mg/mL"
      },
      {
        "key": "total_thc_mg_g",
        "label": "Total THC mg/g"
      },
      {
        "key": "total_thc_mg_ml",
        "label": "Total THC mg/mL"
      },
      {
        "key": "cbd",
        "label": "CBD %"
      },
      {
        "key": "total_cbd",
        "label": "Total CBD %"
      },
      {
        "key": "cbd_mg_g",
        "label": "CBD mg/g"
      },
      {
        "key": "cbd_mg_ml",
        "label": "CBD mg/mL"
      },
      {
        "key": "total_cbd_mg_g",
        "label": "Total CBD mg/g"
      },
      {
        "key": "total_cbd_mg_ml",
        "label": "Total CBD mg/mL"
      },
      {
        "key": "total_cost",
        "label": "Total Cost"
      }
    ],
    "date_range": "Jun 27th 2026 to Jul 27th 2026",
    "report": "inventory_transaction_history"
  }
}
Property Description Type Required
data The report rows array(InventoryTransactionHistoryReportRow) true
meta Report-level metadata InventoryTransactionHistoryReportMeta true

InventoryTransactionHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

InventoryTransactionHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(InventoryTransactionHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

InventoryTransactionHistoryReportRow

A single row of the Inventory Transaction History report (one inventory transaction). Companies on the BioTrack compliance integration do not get the metrc_unit_name and metrc_production_batch_number keys. Potency keys are only populated for package-based transactions.

{
  "amount": -4.0,
  "batch_id": "00000000-0000-0000-0000-000000000400",
  "batch_number": "BD-2026-01",
  "cbd": 0.5,
  "cbd_mg_g": 5.0,
  "cbd_mg_ml": 4.0,
  "company_relationship_id": "00000000-0000-0000-0000-0000000015bf",
  "date": "2026-07-01 09:30",
  "description": "Manual stock adjustment",
  "metrc_production_batch_number": "PB-2026-0042",
  "metrc_unit_name": "Each",
  "package_batch_number_or_batch_name": "BD-2026-01",
  "package_label": "1A4060300003B01000001234",
  "product": "Blue Dream 1g Cartridge",
  "product_id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
  "related_entity": "Stock Adjustment",
  "related_entity_customer_vendor": "Green Leaf Dispensary",
  "related_entity_status": "COMPLETED",
  "thc": 21.5,
  "thc_mg_g": 215.0,
  "thc_mg_ml": 780.0,
  "total_cbd": 0.6,
  "total_cbd_mg_g": 6.0,
  "total_cbd_mg_ml": 5.0,
  "total_cost": 34.0,
  "total_thc": 24.8,
  "total_thc_mg_g": 248.0,
  "total_thc_mg_ml": 800.0,
  "type": "adjustment",
  "unit_type": "Each"
}
Property Description Type Required
amount The transaction amount (signed quantity) number false
batch_id The batch ID string false
batch_number The Distru batch number string false
cbd The package CBD percentage number false
cbd_mg_g The package CBD in mg/g number false
cbd_mg_ml The package CBD in mg/mL number false
company_relationship_id The related company relationship ID string false
date The transaction date and time, in the company's timezone string false
description The transaction description string false
metrc_production_batch_number The Metrc production batch number string false
metrc_unit_name The Metrc unit name string false
package_batch_number_or_batch_name The package batch number or, for batch-tracked products, the batch name string false
package_label The package compliance label string false
product The product name string false
product_id The product ID string false
related_entity The related entity (order, return, assembly, adjustment...) string false
related_entity_customer_vendor The related entity's customer or vendor name string false
related_entity_status The related entity's status string false
thc The package THC percentage number false
thc_mg_g The package THC in mg/g number false
thc_mg_ml The package THC in mg/mL number false
total_cbd The package total CBD percentage number false
total_cbd_mg_g The package total CBD in mg/g number false
total_cbd_mg_ml The package total CBD in mg/mL number false
total_cost The transaction's total cost number false
total_thc The package total THC percentage number false
total_thc_mg_g The package total THC in mg/g number false
total_thc_mg_ml The package total THC in mg/mL number false
type The transaction type string false
unit_type The unit type string false

InventoryValuationReport

The Inventory Valuation report

{
  "data": [
    {
      "active_quantity": 120.0,
      "active_value_price": 4.2e3,
      "assembling_quantity": 0.0,
      "available_quantity": 100.0,
      "brand": "Blue Dream Co",
      "category": "Vape Cartridges",
      "group": "Cartridges",
      "image_url": "https://cdn.distru.com/products/bd-1g-cart.jpg",
      "incoming_quantity": 50.0,
      "inventory_threshold_max": 500.0,
      "inventory_threshold_min": 50.0,
      "name": "Blue Dream 1g Cartridge",
      "owner": "Jane Doe",
      "pending_output_quantity": 0.0,
      "reserved_quantity": 20.0,
      "sku": "BD-1G-CART",
      "subcategory": "Distillate",
      "unit_cost": 8.5,
      "unit_price": 35.0,
      "unit_type": "Each",
      "vendor": "Sunshine Extracts"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "active_quantity",
        "label": "Active Quantity"
      },
      {
        "key": "assembling_quantity",
        "label": "Assembling Quantity"
      },
      {
        "key": "reserved_quantity",
        "label": "Reserved Quantity"
      },
      {
        "key": "available_quantity",
        "label": "Available Quantity"
      },
      {
        "key": "incoming_quantity",
        "label": "Incoming Quantity"
      },
      {
        "key": "pending_output_quantity",
        "label": "Pending Output Quantity"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "inventory_threshold_max",
        "label": "Inventory Threshold Max"
      },
      {
        "key": "inventory_threshold_min",
        "label": "Inventory Threshold Min"
      },
      {
        "key": "active_value_price",
        "label": "Active Value (Price)"
      },
      {
        "key": "image_url",
        "label": "Image URL"
      },
      {
        "key": "brand",
        "label": "Brand"
      }
    ],
    "date_range": "Jul 27th 2026",
    "report": "inventory_valuation"
  }
}
Property Description Type Required
data The report rows array(InventoryValuationReportRow) true
meta Report-level metadata InventoryValuationReportMeta true

InventoryValuationReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

InventoryValuationReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(InventoryValuationReportColumn) false
date_range The human-readable date the report was generated string false
report The report identifier string true

InventoryValuationReportRow

A single row of the Inventory Valuation report (one product). Companies with Product custom fields will see additional keys. When calculation_method=cost, the active_value_price key is returned as active_value_cost instead.

{
  "active_quantity": 120.0,
  "active_value_price": 4.2e3,
  "assembling_quantity": 0.0,
  "available_quantity": 100.0,
  "brand": "Blue Dream Co",
  "category": "Vape Cartridges",
  "group": "Cartridges",
  "image_url": "https://cdn.distru.com/products/bd-1g-cart.jpg",
  "incoming_quantity": 50.0,
  "inventory_threshold_max": 500.0,
  "inventory_threshold_min": 50.0,
  "name": "Blue Dream 1g Cartridge",
  "owner": "Jane Doe",
  "pending_output_quantity": 0.0,
  "reserved_quantity": 20.0,
  "sku": "BD-1G-CART",
  "subcategory": "Distillate",
  "unit_cost": 8.5,
  "unit_price": 35.0,
  "unit_type": "Each",
  "vendor": "Sunshine Extracts"
}
Property Description Type Required
active_quantity The active on-hand quantity number false
active_value_price The active inventory value (priced by unit price) number false
assembling_quantity The quantity being assembled number false
available_quantity The available quantity (active minus reserved) number false
brand The product's brand string false
category The product's category string false
group The product's group string false
image_url The product's thumbnail image URL string false
incoming_quantity The incoming quantity from open purchases number false
inventory_threshold_max The product's inventory alert maximum number false
inventory_threshold_min The product's inventory alert minimum number false
name The product name string false
owner The product owner's name string false
pending_output_quantity The quantity pending output from open assemblies number false
reserved_quantity The reserved quantity number false
sku The product SKU string false
subcategory The product's subcategory string false
unit_cost The product's unit cost number false
unit_price The product's unit price number false
unit_type The product's unit type string false
vendor The product's vendor string false

Invoice

An invoice as shown in Distru. Ordered by invoice date

{
  "creator": {
    "banned": false,
    "email": "jeanb@zorgindustries.com",
    "full_name": "Jean-Baptiste Emanuel Zorg",
    "id": "12345"
  },
  "due_datetime": "2022‐07‐02T00:00:00Z",
  "id": "193c12d2-bc68-46fa-a221-12f9ed958ef4",
  "inserted_datetime": "2022‐07‐02T00:00:00Z",
  "invoice_datetime": "2022‐07‐02T00:00:00Z",
  "invoice_number": "INV-00012345",
  "items": [
    {
      "id": "1",
      "order_item_id": 456,
      "price": "3.0",
      "product": {
        "id": "543",
        "name": "Crawdad Crippler - 1g - PreRoll",
        "sku": "WHODAT"
      },
      "quantity": "5"
    }
  ],
  "order": {
    "id": "931c12d2-68bc-fa46-a221-12f9edcg5hd7",
    "order_number": "SO-0000657",
    "status": "DELIVERING",
    "total": "999.99"
  },
  "payments": [
    {
      "amount": 500.0,
      "company": {
        "id": "00000000-0000-0000-0000-00000000000a",
        "name": "RAW"
      },
      "credit_uses": [],
      "description": "Payment for invoice INV-00012345",
      "fully_paid_with_credits": false,
      "id": "12345",
      "inserted_datetime": "2022‐07‐02T00:00:00Z",
      "invoice": {
        "id": "193c12d2-bc68-46fa-a221-12f9ed958ef4",
        "invoice_number": "INV-00012345",
        "status": "NOT_PAID",
        "total": "543.23"
      },
      "overpayment_credits": [],
      "payment_date": "2022‐07‐02T00:00:00Z",
      "payment_method": {
        "id": "12345",
        "name": "Credit Card"
      },
      "payment_number": "PAY-001",
      "payment_type": "INVOICE",
      "status": "POSTED",
      "updated_datetime": "2022‐07‐02T00:00:00Z"
    }
  ],
  "remaining_amount": "43.23",
  "status": "NOT_PAID",
  "total": "543.23",
  "updated_datetime": "2022‐07‐02T00:00:00Z"
}
Property Description Type Required
billing_location A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
charges A collection of Charges array(Charge) false
company A company as nested inside another entity in Distru CompanyCompact false
creator Information about a user in Distru User false
custom_data A collection of CustomData array(CustomField) false
due_datetime The datetime by which the invoice should be paid by the customer string false
external_notes Notes on this invoice that are visible to the customer string false
id Unique ID for this invoice string false
inserted_datetime The datetime at which the invoice was created in Distru string false
internal_notes Notes on this invoice that are only visible internally string false
invoice_datetime The datetime on which the invoice was placed string false
invoice_number The invoice number as shown in the Distru UI string false
items A collection of InvoiceItems array(InvoiceItem) false
owner Information about a user in Distru User false
paid_amount The payment amount recorded against this invoice so far. string false
payments A collection of the invoice's payments array(Payment) false
remaining_amount The remaining amount for this invoice string false
status The status of this invoice string false
total The total for this invoice including taxes, discounts, and all line items string false
updated_datetime The datetime at which the invoice was last updated in Distru string false
order.id Unique ID for this order string false
order.order_number The order number for this sale as seen in the Distru UI string false
order.status Status of the associated order string false
order.total The total on the order string false

InvoiceChargeRequest

Invoice charge params

Property Description Type Required
id Unique ID for this invoice charge. If it exists, an update will be performed; otherwise, it will be used as the ID of a new invoice charge record string false
name The name of this charge string false
percent The percent (if it is percent-based) of this charge number false
price The flat price (if it is price-based) of this charge number false
type Determines if this is a charge or discount string true
unit_type Determines if this line is tracked as a percentage or a flat charge string true

InvoiceChargesRequest

A collection of Invoice charge params

Property Description Type Required

InvoiceHistoryReport

The Invoice History report

{
  "data": [
    {
      "charge_summary": "Delivery Fee - $10.00",
      "customer": "Green Leaf Dispensary",
      "discount_summary": "Volume Discount - $5.00",
      "due_date": "2026-07-15",
      "invoice_date": "2026-07-01",
      "invoice_number": "INV-1042",
      "line_item_subtotal": 1150.0,
      "metrc_manifest_number": "0000123456",
      "outstanding": 0.0,
      "owner": "Jane Doe",
      "paid": 1239.56,
      "sales_order": "SO-1042",
      "shipped_from_license": "C11-0000123-LIC",
      "status": "FULLY_PAID",
      "tax_summary": "Excise Tax - $84.56",
      "total": 1239.56,
      "total_charges": 10.0,
      "total_discounts": 5.0,
      "total_taxes": 84.56
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "invoice_date",
        "label": "Invoice Date"
      },
      {
        "key": "invoice_number",
        "label": "Invoice Number"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "sales_order",
        "label": "Sales Order"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "outstanding",
        "label": "Outstanding"
      },
      {
        "key": "line_item_subtotal",
        "label": "Line Item Subtotal"
      },
      {
        "key": "total_taxes",
        "label": "Total Taxes"
      },
      {
        "key": "tax_summary",
        "label": "Tax Summary"
      },
      {
        "key": "total_charges",
        "label": "Total Charges"
      },
      {
        "key": "charge_summary",
        "label": "Charge Summary"
      },
      {
        "key": "total_discounts",
        "label": "Total Discounts"
      },
      {
        "key": "discount_summary",
        "label": "Discount Summary"
      },
      {
        "key": "total",
        "label": "Total"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "metrc_manifest_number",
        "label": "Metrc Manifest Number"
      },
      {
        "key": "shipped_from_license",
        "label": "Shipped From License"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "invoice_history"
  }
}
Property Description Type Required
data The report rows array(InvoiceHistoryReportRow) true
meta Report-level metadata InvoiceHistoryReportMeta true

InvoiceHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

InvoiceHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(InvoiceHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

InvoiceHistoryReportRow

A single row of the Invoice History report. Companies on a compliance integration and companies with Invoice custom fields will see additional keys.

{
  "charge_summary": "Delivery Fee - $10.00",
  "customer": "Green Leaf Dispensary",
  "discount_summary": "Volume Discount - $5.00",
  "due_date": "2026-07-15",
  "invoice_date": "2026-07-01",
  "invoice_number": "INV-1042",
  "line_item_subtotal": 1150.0,
  "metrc_manifest_number": "0000123456",
  "outstanding": 0.0,
  "owner": "Jane Doe",
  "paid": 1239.56,
  "sales_order": "SO-1042",
  "shipped_from_license": "C11-0000123-LIC",
  "status": "FULLY_PAID",
  "tax_summary": "Excise Tax - $84.56",
  "total": 1239.56,
  "total_charges": 10.0,
  "total_discounts": 5.0,
  "total_taxes": 84.56
}
Property Description Type Required
charge_summary A per-charge breakdown of the invoice charges string false
customer The customer name string false
discount_summary A per-discount breakdown of the invoice discounts string false
due_date The due date, in the company's timezone string false
invoice_date The invoice date, in the company's timezone string false
invoice_number The invoice number string false
line_item_subtotal The invoice line item subtotal number false
outstanding The outstanding (unpaid) amount on the invoice number false
owner The invoice owner's name string false
paid The amount paid on the invoice number false
sales_order The sales order number the invoice belongs to string false
status The invoice payment status string false
tax_summary A per-tax breakdown of the invoice taxes string false
total The invoice total number false
total_charges The total charges on the invoice number false
total_discounts The total discounts on the invoice number false
total_taxes The total taxes on the invoice number false

InvoiceItem

A invoice line item as shown in Distru

Property Description Type Required
batch A batch for a product as shown in Distru Batch false
cost_per_unit The cost per unit of this invoice item. string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this invoice item. string false
id Unique ID for this invoice item string false
order_item_id The ID of the order item this invoice item is associated with integer false
package A package as shown in Distru Package false
price Price per unit of this invoice item string false
product A product as shown in Distru Product false
quantity Quantity used on this invoice item string false
returned_quantity Quantity returned on this invoice item. This is the sum of all return items associated with this invoice item allocated proportionally based on the quantity

of the invoice item relative to its associated order item. For example, if an invoice item with a quantity of 1 has an order item with a quantity of 2, and a return item with a quantity of 2, the returned_quantity would be 1, calculated as (1 ÷ 2) × 2. |string|false| |total_cost_actual|Total cost of the non-returned quantity in this order item, in other words, this is the total cost of order_item.quantity minus order_item.returned quantity. The cost is allocated proportionally based on the quantity of the invoice item relative to its associated order item. For example, if an invoice item with a quantity of 1 has an order item with a quantity of 2 and a total cost of $10, the total_cost_actual would be $5, calculated as (1 ÷ 2) × $10. |string|false| |total_cost_default|Default cost of the non-returned quantity in this order item, in other words, this is the default cost of order_item.quantity minus order_item.returned quantity. The cost is allocated proportionally based on the quantity of the invoice item relative to its associated order item. For example, if an invoice item with a quantity of 1 has an order item with a quantity of 2 and a total cost of $10, the total_cost_default would be $5, calculated as (1 ÷ 2) × $10. |string|false|

InvoiceItemRequest

Invoice item params

Property Description Type Required
id Unique ID for this order item. If it exists, an update will be performed; otherwise, it will be used as the ID of a new invoice item record string false
order_item_id The ID of order item with which this invoice item is associated string false
quantity Quantity used on this order item number true

InvoiceItemsRequest

A collection of invoice item params

Property Description Type Required

InvoicePayment

An invoice payment as shown in Distru

{
  "amount": 100.0,
  "description": "Payment for invoice 12345",
  "id": "12345",
  "method_id": "12345",
  "payment_date": "2024-12-12 20:26:19.297537",
  "payment_number": "12345",
  "quickbooks_deposit_account_id": "12345",
  "quickbooks_deposit_account_name": "Checking",
  "quickbooks_sync_enqueued": true
}
Property Description Type Required
amount The amount of the payment number false
description The description of this payment string false
id Unique ID for this invoice payment string false
invoice_id The ID of the invoice this payment is for string false
method_id The ID of the payment method used for this payment string false
payment_date The date of this payment string false
payment_number The payment number for this payment string false
quickbooks_deposit_account_id The id of the Quickbooks deposit account used for this payment string false
quickbooks_deposit_account_name The name of the Quickbooks deposit account used for this payment string false
quickbooks_sync_enqueued Whether a sync of this payment to QuickBooks was enqueued. False when the company isn't integrated with QuickBooks, or when the payment's invoice or credits aren't synced yet (those must be synced first). boolean false

Invoices

A collection of Invoices

Property Description Type Required
data Invoices array(Invoice) false
next_page URL for the next page of results; null when there is no next page string false

License

A license as shown in Distru

Property Description Type Required
id Unique ID for this license string false
license_number License number string false

Location

A location as shown in Distru

Property Description Type Required
address Human readable address for this location string false
company_id ID of the company that owns this location string false
deleted_at The datetime of deletion if the location was deleted string false
id Unique ID for this location string false
license A license as shown in Distru License false
license_id ID of the license that this location is associated with, if null, then this location is not associated to a license string false
name Human readable name for this location string false

LocationCompact

A location as nested inside another entity in Distru

Property Description Type Required
address Human readable address for this location string false
company_id ID of the company that owns this location string false
id Unique ID for this location string false
license_id ID of the license this location is associated with, null if none string false
name Human readable name for this location string false

LocationWithLicense

A location with its license number inlined, as nested on orders/invoices/purchases

Property Description Type Required
address Human readable address for this location string false
company_id ID of the company that owns this location string false
id Unique ID for this location string false
license_id ID of the license this location is associated with, null if none string false
license_number License number of the location's license, null if none string false
name Human readable name for this location string false

Locations

A collection of Locations

Property Description Type Required
data Locations array(Location) false
next_page URL for the next page of results; null when there is no next page string false
Property Description Type Required
active Whether the menu is active boolean false
external_name External menu name string false
id Unique ID for this menu string false
inserted_datetime Created at (UTC ISO-8601) string false
internal_name Internal menu name string false
product_count Count of active products on the menu integer false
updated_datetime Updated at (UTC ISO-8601) string false
visibility One of: PUBLIC, PRIVATE, PASSCODE_PROTECTED string false

A collection of menus

Property Description Type Required
data Menus array(Menu) false
next_page URL for the next page of results; null when there is no next page string false

OfficialProductCategories

A collection of official product categories

Property Description Type Required
data Official product categories array(OfficialProductCategory) false

OfficialProductCategory

An official product category

Property Description Type Required
id Unique ID for this official product category string false
name The name of the official product category string false

Order

A sales order as shown in Distru. Ordered by order date

{
  "billing_location": {
    "address": "123 Compton Street, CA, USA, 12345",
    "id": "d06a5135-dccf-4d62-a922-804190213c10",
    "name": "Warehouse 1"
  },
  "charges": [
    {
      "id": "8h7512d2-g4h6-jj89-92h7-12f9ed9ls8f5",
      "name": "Friends and Family",
      "percent": -10,
      "type": "DISCOUNT",
      "unit_type": "PERCENT"
    },
    {
      "id": "duy67x9r-0d4k-mmk5-8u9u-l3k8ed9lj900",
      "name": "Excise Tax",
      "percent": 27,
      "tax": {
        "id": "00000000-0000-0000-0000-000000002694",
        "name": "Excise Tax - CA 27%"
      },
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "id": "ko38h9ju-ndn7-76h8-jio9-j98yhd93h6fh",
      "name": "Membership Fee",
      "price": 25.0,
      "type": "CHARGE",
      "unit_type": "PRICE"
    }
  ],
  "creator": {
    "banned": false,
    "email": "jeanb@zorgindustries.com",
    "full_name": "Jean-Baptiste Emanuel Zorg",
    "id": "3e98e590-85b6-4247-b2e9-96fc2f45802e"
  },
  "delivery_datetime": "2022‐07‐02T00:00:00Z",
  "due_datetime": "2022‐07‐02T00:00:00Z",
  "id": "193c12d2-bc68-46fa-a221-12f9ed958ef4",
  "inserted_datetime": "2022‐07‐02T00:00:00Z",
  "internal_notes": "Internal note example",
  "items": [
    {
      "id": "3e98e590-85b6-4247-b2e9-96fc2f45802e",
      "price": 0.006,
      "price_base": 0.006,
      "product": {
        "id": "4ec0ac89-a382-409c-ae67-4478e7e681ac",
        "name": "Crawdad Crippler - 1g - PreRoll",
        "sku": "WHODAT"
      },
      "quantity": 786
    }
  ],
  "order_datetime": "2022‐07‐02T00:00:00Z",
  "order_number": "SO-00012345",
  "payment_term_name": "Net 30",
  "shipping_location": {
    "address": "123 Compton Street, CA, USA, 12345",
    "id": "d06a5135-dccf-4d62-a922-804190213c10",
    "name": "Warehouse 1"
  },
  "status": "PENDING",
  "total": "150.23",
  "updated_datetime": "2022‐07‐02T00:00:00Z"
}
Property Description Type Required
billing_location A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
biotrack_id The ID of the BioTrack manifest associated with this order string false
blaze_payment_type The payment type for an order shipping to a Blaze-associated company. string false
charges A collection of Charges array(Charge) false
company A company as nested inside another entity in Distru CompanyCompact false
creator Information about a user in Distru User false
custom_data A collection of CustomData array(CustomField) false
delivery_datetime The datetime on which the order was / will be delivered string false
due_datetime The datetime by which the order should be completed for the customer string false
external_notes External notes for this order string false
id Unique ID for this order string false
inserted_datetime The datetime at which the order was created in Distru string false
internal_notes Internal notes for this order string false
inventory_source A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
items A collection of SalesOrderItems array(SalesOrderItem) false
leaflink_order_number The LeafLink order number for this order string false
metrc_transfer_id The ID of the Metrc transfer associated with this order integer false
order_datetime The datetime on which the order was placed string false
order_number The order number as shown in the Distru UI string false
owner Information about a user in Distru User false
payment_term_name The name of the payment term applied to this order string false
shipping_location A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
status The status of this sales order string false
total The total for this order including taxes, discounts, and all line items string false
updated_datetime The datetime at which the order was last updated in Distru string false

OrderChargeRequest

Order charge params

Property Description Type Required
id Unique ID for this order charge. If it exists, an update will be performed; otherwise, it will be used as the ID of a new order charge record string false
name The name of this charge (e.g. "Delivery Fee") string false
percent The percentage applied for this charge. Used when type is PERCENT number false
price The flat amount for this charge. Used when type is PRICE number false
type What type of additional line is this string true
unit_type Determines if this line is tracked as a percentage or a flat charge string true

OrderChargesRequest

A collection of Order charge params

Property Description Type Required

OrderFulfillmentReport

The Order Fulfillment report

{
  "data": [
    {
      "category": "Vape",
      "group": "Cartridges",
      "product": "Blue Dream 1g Cartridge",
      "so_1042": 3.0,
      "subcategory": "Cartridge",
      "total_units": 3.0,
      "total_value": 105.0,
      "unit_price": 35.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "so_1042",
        "label": "SO-1042"
      },
      {
        "key": "total_units",
        "label": "Total Units"
      },
      {
        "key": "unit_price",
        "label": "Unit Price"
      },
      {
        "key": "total_value",
        "label": "Total Value"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "order_fulfillment"
  }
}
Property Description Type Required
data The report rows array(OrderFulfillmentReportRow) true
meta Report-level metadata OrderFulfillmentReportMeta true

OrderFulfillmentReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

OrderFulfillmentReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions, including one column per matching order array(OrderFulfillmentReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

OrderFulfillmentReportRow

A single row of the Order Fulfillment report (one product). In addition to the keys below, each row carries one dynamic key per matching order, named after the slugified order number (e.g. so_1042), whose value is the quantity of this product on that order.

{
  "category": "Vape",
  "group": "Cartridges",
  "product": "Blue Dream 1g Cartridge",
  "so_1042": 3.0,
  "so_1043": 2.0,
  "subcategory": "Cartridge",
  "total_units": 5.0,
  "total_value": 175.0,
  "unit_price": 35.0
}
Property Description Type Required
category The product's category string false
group The product's group string false
product The product name string false
subcategory The product's subcategory string false
total_units The total units of this product across the matching orders number false
total_value The total value of this product across the matching orders number false
unit_price The product's unit price number false

OrderItemRequest

Order item params

Property Description Type Required
batch_id The ID of the batch (if the product is batch-tracked) string false
compliance_quantity The Metrc (compliance) quantity for this item. For unit/each-based package-tracked products this must equal the package's full Metrc quantity, and quantity must equal it number false
id Unique ID for this order item. If it exists, an update will be performed; otherwise, it will be used as the ID of a new order item record string false
is_sample True if this order is a sample boolean false
location_id The ID of the location this order item is fulfilled from string false
package_id The ID of the package (if the product is package-tracked) string false
price_base Price per unit of this order item (prior to price tier items being applied) number true
product_id The ID of the product (if the product is product-tracked) string false
quantity Quantity used on this order item number true

OrderItemsRequest

A collection of Order item params

Property Description Type Required

OrderTransferTemplateTransporterInfoRequest

A Metrc-specific Order transfer template transporter info

Property Description Type Required
driver_license_number The driver's license number string false
driver_name The driver's name string false
driver_occupational_license_number The driver's occupational license number string false
driver_phone_number The driver's phone number string false
estimated_arrival_datetime The estimated arrival datetime (ISO 8601 format) string false
estimated_departure_datetime The estimated departure datetime (ISO 8601 format) string false
transporter_license_number The transporter's license number string false
vehicle_license_plate_number The vehicle's license plate number string false
vehicle_make The vehicle's make string false
vehicle_model The vehicle's model string false

OrderTransferTemplateTransporterInfosRequest

A collection of Metrc-specific Order transfer template transporter info params

Property Description Type Required

Orders

A collection of Orders

Property Description Type Required
data Orders array(Order) false
next_page URL for the next page of results; null when there is no next page string false

Package

A package as shown in Distru

Property Description Type Required
batch_number The non-compliance batch number for this package string false
compliance_label The compliance (e.g. Metrc) label for this package string false
id Unique ID for this package in Distru string false
status The status of this package array(any) false

PackageFull

A package with extended details as shown in Distru

Property Description Type Required
batch_number The non-compliance batch number for this package string false
compliance_label The compliance (e.g. Metrc) label for this package string false
cost_per_unit_actual The cost per unit of this package string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this package string false
custom_data The custom data for this package array(CustomField) false
expiration_date The date and time this package expires (ISO 8601) string false
harvest_date The harvest date for this package (ISO 8601) string false
id Unique ID for this package in Distru string false
is_trade_sample True if this package is a Metrc trade sample boolean false
lab_testing_state Compliance lab testing state (e.g. Metrc); BioTrack uses analogous values string false
license A license as shown in Distru License false
metrc_label The Metrc label for this package, null if not Metrc-tracked string false
packaged_date The compliance packaged date for this package (ISO 8601) string false
primary_test_result The compact primary test result nested on a package or batch PrimaryTestResult false
product_id The ID of this package's product string false
product_unit_quantity The quantity of this package expressed in it's product's unit type string false
product_unit_type A unit type as shown in Distru UnitType false
quantity The last known accurate quantity of this package string false
quantity_assembling This quantity of this package currently allocated towards a pending assembly string false
quantity_available The quantity available for use of this package (i.e. inventory that is not held up on a sales order or assembly.) string false
status The status of this package array(any) false
total_cost_actual The total actual cost of this package string false
total_cost_default The total default cost (from the configured product unit cost) of this package string false
unit_type A unit type as shown in Distru UnitType false
location.id Unique ID for this Location string false
location.name The name of this Location string false

Packages

A collection of Packages

Property Description Type Required
data Packages array(PackageFull) false
next_page URL for the next page of results; null when there is no next page string false

Page

Pagination information for a request

{
  "number": 1
}
Property Description Type Required
number Page number integer true

PageWithSize

Pagination information for a request

{
  "number": 1,
  "size": 100
}
Property Description Type Required
number Page number integer true
size Amount of records per page integer true

Payment

A payment as shown in Distru

{
  "amount": "150.50",
  "company": {
    "id": "00000000-0000-0000-0000-00000000000a",
    "name": "RAW"
  },
  "credit_uses": [],
  "description": "Payment for invoice INV-001",
  "fully_paid_with_credits": false,
  "id": "12345",
  "inserted_datetime": "2024-12-12T20:26:19.297537Z",
  "invoice": {
    "id": "67890",
    "invoice_number": "INV-001",
    "status": "FULLY_PAID",
    "total": "150.50"
  },
  "overpayment_credits": [],
  "payment_date": "2024-12-12T20:26:19.297537Z",
  "payment_method": {
    "id": "12345",
    "name": "Credit Card"
  },
  "payment_number": "PAY-001",
  "payment_type": "INVOICE",
  "status": "POSTED",
  "updated_datetime": "2024-12-12T20:26:19.297537Z"
}
Property Description Type Required
amount The amount of this payment string false
company A company as nested inside another entity in Distru CompanyCompact false
credit_uses Credits applied towards this invoice payment. Null for purchase payments. array(PaymentCreditUse) false
description Description of this payment string false
fully_paid_with_credits Whether this payment was fully paid using credits. When true, payment_method is null. boolean false
id Unique ID for this payment string false
inserted_datetime The datetime at which the payment was created in Distru string false
invoice A compact representation of the invoice a payment belongs to PaymentInvoice false
overpayment_credits Credits created from overpaying this invoice payment. Null for purchase payments. array(PaymentCredit) false
payment_date The datetime of this payment string false
payment_method A payment method as shown in Distru PaymentMethod false
payment_number The payment number as shown in the Distru UI string false
payment_type Whether this payment belongs to an invoice (INVOICE) or a purchase (PURCHASE) string false
purchase A compact representation of the purchase a payment belongs to PaymentPurchase false
quickbooks_deposit_account_id The QuickBooks Online deposit account ID for this payment string false
quickbooks_deposit_account_name The QuickBooks Online deposit account name for this payment. Only present on the single-payment response. string false
quickbooks_sync_enqueued Whether a QuickBooks Online sync was enqueued for this payment. Only present on the payment creation response. boolean false
status The status of this payment. Either POSTED or VOIDED. string false
updated_datetime The datetime at which the payment was last updated in Distru string false

PaymentCredit

A compact representation of a credit related to a payment

Property Description Type Required
amount The current amount of this credit string false
credit_number The credit number as shown in the Distru UI string false
id Unique ID for this credit string false
source How this credit was created string false

PaymentCreditUse

A credit applied towards an invoice payment

Property Description Type Required
amount The amount of credit applied towards the payment string false
credit A compact representation of a credit related to a payment PaymentCredit false
id Unique ID for this credit use string false

PaymentInvoice

A compact representation of the invoice a payment belongs to

Property Description Type Required
id Unique ID for this invoice string false
invoice_number The invoice number as shown in the Distru UI string false
status The payment status of this invoice string false
total The total amount of this invoice string false

PaymentMethod

A payment method as shown in Distru

{
  "id": "12345",
  "name": "Credit Card"
}
Property Description Type Required
deleted_at The datetime of deletion if the payment method was deleted string false
id Unique ID for this payment method string false
name Name of the payment method string false

PaymentMethods

A collection of Payment Methods

Property Description Type Required
data Payment Methods array(PaymentMethod) false
next_page URL for the next page of results; null when there is no next page string false

PaymentPurchase

A compact representation of the purchase a payment belongs to

Property Description Type Required
id Unique ID for this purchase string false
purchase_number The purchase number as shown in the Distru UI string false
status The status of this purchase string false
total The total amount of this purchase string false

PaymentTerm

A payment term as shown in Distru

{
  "days": 30,
  "id": "12345",
  "locked": false,
  "name": "Net 30",
  "time_of_day": "17:00:00"
}
Property Description Type Required
days Number of days until payment is due integer false
id Unique ID for this payment term string false
locked Whether this payment term is a locked Distru default that cannot be edited boolean false
name Name of the payment term string false
time_of_day Time of day the payment is due string false

PaymentTerms

A collection of Payment Terms

Property Description Type Required
data Payment Terms array(PaymentTerm) false
next_page URL for the next page of results; null when there is no next page string false

Payments

A collection of Payments

Property Description Type Required
data Payments array(Payment) false
next_page URL for the next page of results; null when there is no next page string false

PdfDownloadUrl

The JSON envelope a PDF download endpoint returns when ?format=url is passed

Property Description Type Required
data.expires_datetime ISO 8601 datetime when the signed URL expires string false
data.url Temporary signed URL to download the PDF string false

PlantLifecycleReport

The Plant Lifecycle report

{
  "data": [
    {
      "batch_creation_date": "01/15/2026",
      "days_as_batch": 17,
      "days_veg_to_last_harvest": 78,
      "destroyed_plant_cost": 1.2e3,
      "first_harvest_date": "04/10/2026",
      "harvest_name_s": "Blue Dream Spring 2026",
      "last_harvest_date": "04/20/2026",
      "plant_batch_name": "Blue Dream 2026-01",
      "plants_destroyed": 2,
      "plants_harvested": 46,
      "plants_promoted_to_veg": 48,
      "plants_started": 50,
      "promoted_to_veg_date": "02/01/2026",
      "strain": "Blue Dream",
      "total_cost_batch_stage": 3.2e3,
      "total_cost_veg_to_last_harvest": 8.0e3,
      "total_lifecycle_cost": 1.24e4,
      "total_lifecycle_days": 95
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "plant_batch_name",
        "label": "Plant Batch Name"
      },
      {
        "key": "batch_creation_date",
        "label": "Batch Creation Date"
      },
      {
        "key": "strain",
        "label": "Strain"
      },
      {
        "key": "plants_started",
        "label": "Plants Started"
      },
      {
        "key": "plants_promoted_to_veg",
        "label": "Plants Promoted to Veg"
      },
      {
        "key": "plants_destroyed",
        "label": "Plants Destroyed"
      },
      {
        "key": "plants_harvested",
        "label": "Plants Harvested"
      },
      {
        "key": "promoted_to_veg_date",
        "label": "Promoted to Veg Date"
      },
      {
        "key": "first_harvest_date",
        "label": "First Harvest Date"
      },
      {
        "key": "last_harvest_date",
        "label": "Last Harvest Date"
      },
      {
        "key": "days_as_batch",
        "label": "Days as Batch"
      },
      {
        "key": "days_veg_to_last_harvest",
        "label": "Days Veg to Last Harvest"
      },
      {
        "key": "total_lifecycle_days",
        "label": "Total Lifecycle Days"
      },
      {
        "key": "total_cost_batch_stage",
        "label": "Total Cost — Batch Stage"
      },
      {
        "key": "total_cost_veg_to_last_harvest",
        "label": "Total Cost — Veg to Last Harvest"
      },
      {
        "key": "destroyed_plant_cost",
        "label": "Destroyed Plant Cost"
      },
      {
        "key": "total_lifecycle_cost",
        "label": "Total Lifecycle Cost"
      },
      {
        "key": "harvest_name_s",
        "label": "Harvest Name(s)"
      }
    ],
    "date_range": "Jan 1st 2026 to Feb 1st 2026",
    "report": "plant_lifecycle"
  }
}
Property Description Type Required
data The report rows array(PlantLifecycleReportRow) true
meta Report-level metadata PlantLifecycleReportMeta true

PlantLifecycleReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

PlantLifecycleReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(PlantLifecycleReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

PlantLifecycleReportRow

A single row of the Plant Lifecycle report (one plant batch). The cost keys (total_cost_batch_stage, total_cost_veg_to_last_harvest, destroyed_plant_cost, total_lifecycle_cost) are omitted for users without permission to view costs.

{
  "batch_creation_date": "01/15/2026",
  "days_as_batch": 17,
  "days_veg_to_last_harvest": 78,
  "destroyed_plant_cost": 1.2e3,
  "first_harvest_date": "04/10/2026",
  "harvest_name_s": "Blue Dream Spring 2026",
  "last_harvest_date": "04/20/2026",
  "plant_batch_name": "Blue Dream 2026-01",
  "plants_destroyed": 2,
  "plants_harvested": 46,
  "plants_promoted_to_veg": 48,
  "plants_started": 50,
  "promoted_to_veg_date": "02/01/2026",
  "strain": "Blue Dream",
  "total_cost_batch_stage": 3.2e3,
  "total_cost_veg_to_last_harvest": 8.0e3,
  "total_lifecycle_cost": 1.24e4,
  "total_lifecycle_days": 95
}
Property Description Type Required
batch_creation_date The plant batch creation date string false
days_as_batch The number of days spent as a batch number false
days_veg_to_last_harvest The number of days from veg to the last harvest number false
destroyed_plant_cost The cost of destroyed plants number false
first_harvest_date The date of the batch's first harvest string false
harvest_name_s The names of the harvests the batch produced string false
last_harvest_date The date of the batch's last harvest string false
plant_batch_name The plant batch name string false
plants_destroyed The number of plants destroyed number false
plants_harvested The number of plants harvested number false
plants_promoted_to_veg The number of plants promoted to vegetative number false
plants_started The number of plants started number false
promoted_to_veg_date The date the batch was promoted to vegetative string false
strain The strain name string false
total_cost_batch_stage The total cost during the batch stage number false
total_cost_veg_to_last_harvest The total cost from veg to the last harvest number false
total_lifecycle_cost The total lifecycle cost number false
total_lifecycle_days The total number of lifecycle days number false

PrimaryTestResult

The compact primary test result nested on a package or batch

Property Description Type Required
cbd_mg_per_unit The CBD mg per unit for this test result string false
cbd_mg_per_unit_total The total CBD mg per unit for this test result string false
cbd_percentage The CBD percentage for this test result string false
cbd_percentage_total The total CBD percentage for this test result string false
coa_url Public URL to view/download this test result's Certificate of Analysis (COA), or null when no file is attached string false
mg_per_unit_type The unit type for the mg per unit fields string false
name The name of the test result string false
thc_mg_per_unit The THC mg per unit for this test result string false
thc_mg_per_unit_total The total THC mg per unit for this test result string false
thc_percentage The THC percentage for this test result string false
thc_percentage_total The total THC percentage for this test result string false

Product

A product as shown in Distru

{
  "brand": {
    "id": "7a934b2c-1188-4c0a-9f2e-2b1f10e59a3d",
    "name": "Brand 123",
    "updated_datetime": "2024-12-12T20:26:19.297537Z"
  },
  "category": {
    "id": "89c8323f-aaaa-45v3-88f9-64009d68h3n8",
    "name": "Super Dank Buds"
  },
  "external_name": "Blue Dream Preroll",
  "id": "02c88a3f-d759-4973-88f9-60049d682524",
  "images": [
    {
      "id": "12345",
      "name": "image.jpg",
      "url": "https://example.com/image.jpg"
    }
  ],
  "is_active": true,
  "msrp": "100.1",
  "name": "Blue Dream Preroll 1G",
  "product_group": {
    "id": "9c1e2a3f-57d9-4473-88f9-40609d68bbh4",
    "name": "Group 123"
  },
  "sku": "BDP-1G",
  "unit_price": "1.50",
  "unit_type": {
    "name": "Gram"
  },
  "units_per_case": "6",
  "vendor": {
    "id": "3f128a34-cc59-4b49-8883-23bf10e59c6c",
    "name": "Vendor 123",
    "updated_datetime": "2024-12-12T20:26:19.297537Z"
  }
}
Property Description Type Required
unit_net_weight_serving_size_unit_type A unit type as shown in Distru UnitType false
units_per_case The number of units of this product that come in one case, if any string false
unit_price The price of one unit of this product string false
subcategory A product subcategory as shown in Distru ProductSubcategoryCompact false
is_active Is this product active? boolean false
strain A strain as shown in Distru Strain false
unit_net_weight The net weight of the product per unit string false
upc The UPC of this product string false
quantity_available_threshold_max The maximum available quantity before an over-stock alert is triggered string false
vendor A company as nested inside another entity in Distru CompanyCompact false
external_name Customer-facing name for DistruCommerce menus and Order Tracker string false
wholesale_unit_price The wholesale unit price of this product number false
brand A company as nested inside another entity in Distru CompanyCompact false
owner Information about a user in Distru User false
custom_data The custom data for this product array(CustomField) false
is_featured Is this product featured? boolean false
images The images associated with the product array(Image) false
quantity_available_threshold_min The minimum available quantity before a low-stock alert is triggered string false
tags The tags associated with this product array(ProductTagRef) false
unit_type A unit type as shown in Distru UnitType false
unit_cost The cost (or purchase price) of the product per unit. string false
total_thc The total THC of this product string false
id Unique ID for this product string false
name Human readable name for this product string false
description The description of this product string false
menus Menus this product is associated with, ordered by menu creation time then id (includes inactive menus) array(ProductMenuRef) false
deleted_at The datetime of deletion if the product was deleted string false
sku The SKU configured for the product string false
gross_weight_unit_type A unit type as shown in Distru UnitType false
description_markdown The description of this product in markdown format string false
total_cbd The total CBD of this product string false
msrp The MSRP of the product string false
unit_serving_size The serving size of the product per unit string false
category A product category as shown in Distru ProductCategoryCompact false
bill_of_materials A product's bill of materials (recipe of inputs and additional costs) BillOfMaterials false
updated_datetime The datetime this product was last updated at string false
total_cannabinoid_unit The unit that total THC and CBD are measured in string false
gross_weight The gross weight of the product string false
product_group.id Unique ID for this product group string false
product_group.name The name of this product group string false

ProductCategories

A collection of product categories

Property Description Type Required
data Product Categories array(ProductCategory) false
next_page URL for the next page of results; null when there is no next page string false

ProductCategory

A product category

Property Description Type Required
id Unique ID for this product category string false
inserted_datetime When the product category was created (UTC ISO-8601) string false
name The name of the product category string false
official_product_category_id The official product category ID this category maps to string false
updated_datetime When the product category was last updated (UTC ISO-8601) string false

ProductCategoryCompact

A product category as shown in Distru

{
  "id": "88c02a3f-57d9-9473-f8f9-40609d68bbh4",
  "name": "Flower",
  "official_product_category_id": "FLOWER"
}
Property Description Type Required
id Unique ID for this category string false
name Human readable name for this category string false
official_product_category_id The official product category ID this category maps to string false

ProductGroup

A product group

Property Description Type Required
id Unique ID for this product group string false
inserted_datetime When the product group was created (UTC ISO-8601) string false
name The name of the product group string false
updated_datetime When the product group was last updated (UTC ISO-8601) string false

ProductGroups

A collection of product groups

Property Description Type Required
data Product Groups array(ProductGroup) false
next_page URL for the next page of results; null when there is no next page string false

ProductMenuRef

A menu association for a product

Property Description Type Required
menu_id Public ID of the menu string false
menu_name Display name of the menu string false

ProductPosMapping

A mapping between a Distru product and a POS product

Property Description Type Required
blaze_asset_id Blaze asset ID string false
blaze_product_id Blaze product ID string false
blaze_retailer_id Blaze retailer ID string false
dutchie_product_id Dutchie product ID integer false
dutchie_retailer_id Dutchie retailer ID string false
id Mapping ID string false
inserted_datetime Creation timestamp string false
pos_type POS type (BLAZE, DUTCHIE, or TREEZ) string false
product_id Distru product ID string false
treez_photo_url Treez photo URL string false
treez_product_id Treez product ID string false
treez_retailer_id Treez retailer ID integer false
updated_datetime Last update timestamp string false

ProductPosMappingResponse

Property Description Type Required
data A mapping between a Distru product and a POS product ProductPosMapping false

ProductPosMappingsResponse

Property Description Type Required
data List of POS mappings array(ProductPosMapping) false

ProductSubcategories

A collection of product subcategories

Property Description Type Required
data Product Subcategories array(ProductSubcategory) false
next_page URL for the next page of results; null when there is no next page string false

ProductSubcategory

A product subcategory

Property Description Type Required
category A product category as shown in Distru ProductCategoryCompact false
id Unique ID for this product subcategory string false
inserted_datetime When the product subcategory was created (UTC ISO-8601) string false
name The name of the product subcategory string false
updated_datetime When the product subcategory was last updated (UTC ISO-8601) string false

ProductSubcategoryCompact

A product subcategory as shown in Distru

{
  "id": "88c02a3f-57d9-9473-f8f9-40609d68bbh4",
  "name": "High Grade Flower"
}
Property Description Type Required
id Unique ID for this subcategory string false
name Human readable name for this subcategory string false

ProductTagRef

A tag associated with a product

Property Description Type Required
id Unique ID for this tag string false
name The name of this tag string false

Products

A collection of Products

Property Description Type Required
data Products array(Product) false
next_page URL for the next page of results; null when there is no next page string false

Purchase

A purchase order as shown in Distru. Ordered by order date

{
  "charges": [
    {
      "id": "8h7512d2-g4h6-jj89-92h7-12f9ed9ls8f5",
      "name": "Friends and Family",
      "percent": -10,
      "type": "DISCOUNT",
      "unit_type": "PERCENT"
    },
    {
      "id": "duy67x9r-0d4k-mmk5-8u9u-l3k8ed9lj900",
      "name": "Excise Tax",
      "percent": 27,
      "tax": {
        "id": "00000000-0000-0000-0000-000000002694",
        "name": "Excise Tax - CA 27%"
      },
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "id": "ko38h9ju-ndn7-76h8-jio9-j98yhd93h6fh",
      "name": "Membership Fee",
      "price": 25.0,
      "type": "CHARGE",
      "unit_type": "PRICE"
    }
  ],
  "due_datetime": "2022‐07‐02T00:00:00Z",
  "id": "193c12d2-bc68-46fa-a221-12f9ed958ef4",
  "inserted_datetime": "2022‐07‐02T00:00:00Z",
  "items": [
    {
      "id": "3e98e590-85b6-4247-b2e9-96fc2f45802e",
      "price": 0.006,
      "product": {
        "id": "4ec0ac89-a382-409c-ae67-4478e7e681ac",
        "name": "Crawdad Crippler - 1g - PreRoll",
        "sku": "WHODAT"
      },
      "quantity": 786,
      "received_quantity": 786
    }
  ],
  "order_datetime": "2022‐07‐02T00:00:00Z",
  "payments": [
    {
      "amount": 150.23,
      "company": {
        "id": "00000000-0000-0000-0000-00000000000a",
        "name": "RAW"
      },
      "description": "Payment for purchase PO-00012345",
      "fully_paid_with_credits": false,
      "id": "12345",
      "inserted_datetime": "2022‐07‐02T00:00:00Z",
      "payment_date": "2022‐07‐02T00:00:00Z",
      "payment_method": {
        "id": "12345",
        "name": "Credit Card"
      },
      "payment_number": "PYT-0000001",
      "payment_type": "PURCHASE",
      "purchase": {
        "id": "193c12d2-bc68-46fa-a221-12f9ed958ef4",
        "purchase_number": "PO-00012345",
        "status": "PENDING",
        "total": 150.23
      },
      "status": "POSTED",
      "updated_datetime": "2022‐07‐02T00:00:00Z"
    }
  ],
  "purchase_number": "PO-00012345",
  "status": "PENDING",
  "total": "150.23",
  "updated_datetime": "2022‐07‐02T00:00:00Z"
}
Property Description Type Required
billing_location A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
charges A collection of Charges array(Charge) false
company A company as nested inside another entity in Distru CompanyCompact false
custom_data The custom data for this purchase order array(CustomField) false
description A description of the purchase order string false
due_datetime The datetime by which the order should be completed for the customer string false
id Unique ID for this order string false
inserted_datetime The datetime at which the order was created in Distru string false
items A collection of PurchaseOrderItems array(PurchaseOrderItem) false
location A location with its license number inlined, as nested on orders/invoices/purchases LocationWithLicense false
order_datetime The datetime on which the order was placed string false
owner Information about a user in Distru User false
payments A collection of the purchase's payments array(Payment) false
purchase_number The purchase order number as shown in the Distru UI string false
status The status of this purchase order string false
total The total for this order including taxes, discounts, and all line items string false
updated_datetime The datetime at which the order was last updated in Distru string false

PurchaseChargeRequest

Purchase charge params

Property Description Type Required
id Unique ID for this purchase charge. If it exists, an update will be performed; otherwise, it will be used as the ID of a new purchase charge record string false
name The name of this charge string true
percent The percent value for this charge. Required if unit_type is PERCENT number false
price The flat price for this charge. Required if unit_type is PRICE. Auto-calculated for percent-based charges number false
type Type of this line item. Note: Tax charges should be sent as CHARGE with a tax_id string true
unit_type Determines if this line is tracked as a percentage or a flat charge string true

PurchaseChargesRequest

A collection of Purchase charge params

Property Description Type Required

PurchaseItemRequest

Purchase item params. Must provide either batch_id or product_id. If batch_id is provided, product_id will be auto-filled. If product_id is provided for a product-tracked item, batch_id will be auto-filled.

Property Description Type Required
batch_id The ID of the batch string false
id Unique ID for this order item. If it exists, an update will be performed; otherwise, it will be used as the ID of a new purchase order item record string false
price Price per unit of the inventory being received on this purchase item number true
product_id The ID of the product string false
quantity Quantity received in this purchase item number true

PurchaseItemsRequest

A collection of purchase item params

Property Description Type Required

PurchaseOrderHistoryReport

The Purchase Order History report

{
  "data": [
    {
      "amount": 1234.56,
      "due_date": "Jul 15th 2026",
      "metrc_manifest_number": "0000123456",
      "owner": "Jane Doe",
      "paid": 1.0e3,
      "purchase_date": "Jul 1st 2026",
      "purchase_number": "PO-1042",
      "status": "COMPLETED",
      "vendor": "Emerald Farms"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "purchase_date",
        "label": "Purchase Date"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "purchase_number",
        "label": "Purchase Number"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "amount",
        "label": "Amount"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "metrc_manifest_number",
        "label": "Metrc Manifest Number"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "purchase_order_history"
  }
}
Property Description Type Required
data The report rows array(PurchaseOrderHistoryReportRow) true
meta Report-level metadata PurchaseOrderHistoryReportMeta true

PurchaseOrderHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

PurchaseOrderHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(PurchaseOrderHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

PurchaseOrderHistoryReportRow

A single row of the Purchase Order History report. Companies on a compliance integration and companies with Purchase custom fields will see additional keys.

{
  "amount": 1234.56,
  "due_date": "Jul 15th 2026",
  "metrc_manifest_number": "0000123456",
  "owner": "Jane Doe",
  "paid": 1.0e3,
  "purchase_date": "Jul 1st 2026",
  "purchase_number": "PO-1042",
  "status": "COMPLETED",
  "vendor": "Emerald Farms"
}
Property Description Type Required
amount The purchase total number false
due_date The due date, in the company's timezone string false
owner The purchase owner's name string false
paid The amount paid on the purchase number false
purchase_date The purchase date, in the company's timezone string false
purchase_number The purchase number string false
status The purchase status string false
vendor The vendor name string false

PurchaseOrderItem

An order line item as shown in Distru

Property Description Type Required
batch A batch for a product as shown in Distru Batch false
compliance_quantity The quantity of this order item expressed in its package's unit type. Null if not package-tracked. string false
id Unique ID for this order item string false
is_sample True if this order item is a sample boolean false
location A location as nested inside another entity in Distru LocationCompact false
package A package as shown in Distru Package false
price Price per unit of this order item (with discounts applied) string false
price_base Price per unit of this order item string false
product A product as shown in Distru Product false
quantity Quantity purchased on this order item string false
received_quantity Quantity received on this order item. Less than or equal to the quantity field. Omitted when null. string false

PurchasePayment

A purchase payment as shown in Distru

{
  "amount": 100.0,
  "description": "Payment for invoice 12345",
  "id": "12345",
  "method_id": "12345",
  "payment_date": "2024-12-12 20:26:19.297537",
  "payment_number": "12345",
  "quickbooks_deposit_account_id": "12345",
  "quickbooks_deposit_account_name": "Checking"
}
Property Description Type Required
amount The amount of the payment number false
description The description of this payment string false
id Unique ID for this purchase payment string false
method_id The ID of the payment method used for this payment string false
payment_date The date of this payment string false
payment_number The payment number for this payment string false
purchase_id The ID of the purchase this payment is for string false
quickbooks_deposit_account_id The id of the Quickbooks deposit account used for this payment string false
quickbooks_deposit_account_name The name of the Quickbooks deposit account used for this payment string false

Purchases

A collection of Purchases

Property Description Type Required
data Purchases array(Purchase) false
next_page URL for the next page of results; null when there is no next page string false

PurchasesByCompanyReport

The Purchases By Company report

{
  "data": [
    {
      "category": "Vendor",
      "last_purchase_date": "07/03/2026",
      "name": "Emerald Farms",
      "product_owner": "Jane Doe",
      "purchase_order_count": 4,
      "relationship_type": "Supplier",
      "total_purchases": 4234.56
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "last_purchase_date",
        "label": "Last Purchase Date"
      },
      {
        "key": "purchase_order_count",
        "label": "Purchase Order Count"
      },
      {
        "key": "total_purchases",
        "label": "Total Purchases"
      },
      {
        "key": "product_owner",
        "label": "Product Owner"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "relationship_type",
        "label": "Relationship Type"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "purchases_by_company"
  }
}
Property Description Type Required
data The report rows array(PurchasesByCompanyReportRow) true
meta Report-level metadata PurchasesByCompanyReportMeta true

PurchasesByCompanyReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

PurchasesByCompanyReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(PurchasesByCompanyReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

PurchasesByCompanyReportRow

A single row of the Purchases By Company report. Companies with CompanyRelationship custom fields will see additional keys.

{
  "category": "Vendor",
  "last_purchase_date": "07/03/2026",
  "name": "Emerald Farms",
  "product_owner": "Jane Doe",
  "purchase_order_count": 4,
  "relationship_type": "Supplier",
  "total_purchases": 4234.56
}
Property Description Type Required
category The vendor's category string false
last_purchase_date The date of the vendor's most recent purchase string false
name The vendor (related company) name string false
product_owner The vendor's owner (sales rep) name string false
purchase_order_count The number of purchases in the reported date range number false
relationship_type The vendor's relationship type string false
total_purchases The total cost of the vendor's purchases number false

PurchasesByProductReport

The Purchases By Product report

{
  "data": [
    {
      "category": "Vape",
      "group": "Cartridges",
      "name": "Blue Dream 1g Cartridge",
      "owner": "Jane Doe",
      "quantity_purchased": 120.0,
      "sale_price": 35.0,
      "sku": "BD-1G-CART",
      "subcategory": "Cartridge",
      "total_purchased": 4234.56,
      "unit_cost": 8.5,
      "unit_type": "Each",
      "vendor": "Sunshine Extracts",
      "wholesale_price": 25.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "quantity_purchased",
        "label": "Quantity Purchased"
      },
      {
        "key": "total_purchased",
        "label": "Total Purchased"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "sale_price",
        "label": "Sale Price"
      },
      {
        "key": "wholesale_price",
        "label": "Wholesale Price"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "purchases_by_product"
  }
}
Property Description Type Required
data The report rows array(PurchasesByProductReportRow) true
meta Report-level metadata PurchasesByProductReportMeta true

PurchasesByProductReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

PurchasesByProductReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(PurchasesByProductReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

PurchasesByProductReportRow

A single row of the Purchases By Product report. Companies with Product custom fields will see additional keys.

{
  "category": "Vape",
  "group": "Cartridges",
  "name": "Blue Dream 1g Cartridge",
  "owner": "Jane Doe",
  "quantity_purchased": 120.0,
  "sale_price": 35.0,
  "sku": "BD-1G-CART",
  "subcategory": "Cartridge",
  "total_purchased": 4234.56,
  "unit_cost": 8.5,
  "unit_type": "Each",
  "vendor": "Sunshine Extracts",
  "wholesale_price": 25.0
}
Property Description Type Required
category The product's category string false
group The product's group string false
name The product name string false
owner The product owner's name string false
quantity_purchased The quantity purchased number false
sale_price The product's sale price number false
sku The product SKU string false
subcategory The product's subcategory string false
total_purchased The total cost of the purchased quantity number false
unit_cost The product's unit cost number false
unit_type The product's unit type string false
vendor The product's vendor string false
wholesale_price The product's wholesale price number false

RelationshipType

A relationship type as shown in Distru

{
  "id": "12345",
  "name": "Supplier"
}
Property Description Type Required
id Unique ID for this relationship type string false
name Name of the relationship type string false

Return

A return as shown in Distru

{
  "company": {
    "id": "00000000-0000-0000-0000-00000000000a",
    "name": "RAW"
  },
  "custom_data": {},
  "description": "Customer return for damaged goods",
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "inserted_datetime": "2024-12-12T20:26:19.297537Z",
  "invoice_numbers": [
    "INV-001",
    "INV-002"
  ],
  "items": [
    {
      "id": "e5f6a7b8-c9d0-1234-ef01-23456789abcd",
      "price": 30.1,
      "product": {
        "id": "p1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "name": "Blue Dream Preroll 1G",
        "sku": "BDP-1G",
        "updated_datetime": "2024-12-12T20:26:19.297537Z"
      },
      "quantity": 5,
      "waste": false
    }
  ],
  "location": {
    "address": "420 smoke lane, Oakland, CA 94636, USA",
    "company_id": "00000000-0000-0000-0000-000000000001",
    "id": "00000000-0000-0000-0000-000000000001",
    "name": "Warehouse 1"
  },
  "order_id": "67ae9080-8dc2-4ab7-9704-19673f4d9f21",
  "order_number": "SO-12345",
  "order_quantity": "100",
  "owner": {
    "banned": false,
    "email": "admin@thcdistributioninc.com",
    "full_name": "Greg Owner",
    "id": "00000000-0000-0000-0000-000000000001",
    "role": {
      "id": "00000000-0000-0000-0000-000000000001",
      "name": "Admin"
    }
  },
  "return_datetime": "2024-12-12T20:26:19.297537Z",
  "return_number": "RET-001",
  "return_quantity": "50",
  "return_type": "Partial Return",
  "status": "SHIPPED",
  "total": 150.5,
  "updated_datetime": "2024-12-12T20:26:19.297537Z"
}
Property Description Type Required
company A company as nested inside another entity in Distru CompanyCompact false
custom_data Custom data associated with this return map false
description Description of the return string false
id Unique ID for this return string false
inserted_datetime The datetime at which the return was created in Distru string false
invoice_numbers Invoice numbers associated with the order array(any) false
items The items on this return array(ReturnItem) false
location A location as nested inside another entity in Distru LocationCompact false
order_id The associated order ID (UUID) string false
order_number The order number from the associated order string false
order_quantity Total quantity of all items on the associated order string false
owner Information about a user in Distru User false
return_datetime The datetime of the return string false
return_number The return number as shown in the Distru UI string false
return_quantity Total quantity of all items on this return string false
return_type Indicates if this is a Full Return or Partial Return. Full Return means ALL order items have been FULLY returned. Null if not associated with an order. string false
status The status of this return string false
total The total amount of this return number false
updated_datetime The datetime at which the return was last updated in Distru string false

ReturnItem

A return item as shown in Distru

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "price": 30.1,
  "product": {
    "id": "p1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Blue Dream Preroll 1G",
    "sku": "BDP-1G",
    "updated_datetime": "2024-12-12T20:26:19.297537Z"
  },
  "quantity": 5,
  "waste": false
}
Property Description Type Required
id Unique ID for this return item string false
price Price per unit number false
product A product as shown in Distru Product false
quantity Quantity returned number false
waste Whether this item was marked as waste boolean false

Returns

A collection of Returns

Property Description Type Required
data Returns array(Return) false
next_page URL for the next page of results; null when there is no next page string false

Role

A user role as shown in Distru

{
  "id": "12345",
  "name": "Admin"
}
Property Description Type Required
id Unique ID for this role string false
name Name of the role string false

SalesByCompanyReport

The Sales By Company report

{
  "data": [
    {
      "category": "Dispensary",
      "last_order_date": "07/03/2026",
      "name": "Green Leaf Dispensary",
      "order_count": 4,
      "owner": "Jane Doe",
      "relationship_type": "Customer",
      "total_received": 1.0e3,
      "total_sales": 4234.56
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "last_order_date",
        "label": "Last Order Date"
      },
      {
        "key": "order_count",
        "label": "Order Count"
      },
      {
        "key": "total_received",
        "label": "Total Received"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "relationship_type",
        "label": "Relationship Type"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_by_company"
  }
}
Property Description Type Required
data The report rows array(SalesByCompanyReportRow) true
meta Report-level metadata SalesByCompanyReportMeta true

SalesByCompanyReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesByCompanyReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesByCompanyReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesByCompanyReportRow

A single row of the Sales By Company report. Companies with CompanyRelationship custom fields will see additional keys.

{
  "category": "Dispensary",
  "last_order_date": "07/03/2026",
  "name": "Green Leaf Dispensary",
  "order_count": 4,
  "owner": "Jane Doe",
  "relationship_type": "Customer",
  "total_received": 1.0e3,
  "total_sales": 4234.56
}
Property Description Type Required
category The customer's category string false
last_order_date The date of the customer's most recent order string false
name The customer (related company) name string false
order_count The number of orders in the reported date range number false
owner The customer's owner (sales rep) name string false
relationship_type The customer's relationship type string false
total_received The total payments received on the customer's orders number false
total_sales The total order sales, net of returns number false

SalesByProductReport

The Sales By Product report

{
  "data": [
    {
      "category": "Vape",
      "group": "Cartridges",
      "name": "Blue Dream 1g Cartridge",
      "product_owner": "Jane Doe",
      "quantity_sold": 120.0,
      "sale_price": 35.0,
      "shipped_from_license": "C11-0000001-LIC",
      "sku": "BD-1G-CART",
      "subcategory": "Cartridge",
      "total_sales": 4234.56,
      "unit_cost": 8.5,
      "unit_type": "Each",
      "upc": "850000000001",
      "vendor": "Sunshine Extracts",
      "wholesale_price": 25.0
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "name",
        "label": "Name"
      },
      {
        "key": "sku",
        "label": "SKU"
      },
      {
        "key": "quantity_sold",
        "label": "Quantity Sold"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      },
      {
        "key": "unit_type",
        "label": "Unit Type"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "product_owner",
        "label": "Product Owner"
      },
      {
        "key": "unit_cost",
        "label": "Unit Cost"
      },
      {
        "key": "sale_price",
        "label": "Sale Price"
      },
      {
        "key": "wholesale_price",
        "label": "Wholesale Price"
      },
      {
        "key": "shipped_from_license",
        "label": "Shipped From License"
      },
      {
        "key": "upc",
        "label": "UPC"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_by_product"
  }
}
Property Description Type Required
data The report rows array(SalesByProductReportRow) true
meta Report-level metadata SalesByProductReportMeta true

SalesByProductReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesByProductReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesByProductReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesByProductReportRow

A single row of the Sales By Product report. Companies with Product custom fields will see additional keys.

{
  "category": "Vape",
  "group": "Cartridges",
  "name": "Blue Dream 1g Cartridge",
  "product_owner": "Jane Doe",
  "quantity_sold": 120.0,
  "sale_price": 35.0,
  "shipped_from_license": "C11-0000001-LIC",
  "sku": "BD-1G-CART",
  "subcategory": "Cartridge",
  "total_sales": 4234.56,
  "unit_cost": 8.5,
  "unit_type": "Each",
  "upc": "850000000001",
  "vendor": "Sunshine Extracts",
  "wholesale_price": 25.0
}
Property Description Type Required
category The product's category string false
group The product's group string false
name The product name string false
product_owner The product owner's name string false
quantity_sold The quantity sold, net of returns number false
sale_price The product's sale price number false
shipped_from_license The license the sold items shipped from string false
sku The product SKU string false
subcategory The product's subcategory string false
total_sales The total sales, net of returns number false
unit_cost The product's unit cost number false
unit_type The product's unit type string false
upc The product's UPC string false
vendor The product's vendor string false
wholesale_price The product's wholesale price number false

SalesByUserReport

The Sales By User report

{
  "data": [
    {
      "leaderboard_rank": 1,
      "order_count": 4,
      "sales_pre_tax": 3.8e3,
      "total_sales": 4234.56,
      "user": "Jane Doe"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "leaderboard_rank",
        "label": "Leaderboard Rank"
      },
      {
        "key": "user",
        "label": "User"
      },
      {
        "key": "order_count",
        "label": "Order Count"
      },
      {
        "key": "sales_pre_tax",
        "label": "Sales (Pre-Tax)"
      },
      {
        "key": "total_sales",
        "label": "Total Sales"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_by_user"
  }
}
Property Description Type Required
data The report rows array(SalesByUserReportRow) true
meta Report-level metadata SalesByUserReportMeta true

SalesByUserReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesByUserReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesByUserReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesByUserReportRow

A single row of the Sales By User report.

{
  "leaderboard_rank": 1,
  "order_count": 4,
  "sales_pre_tax": 3.8e3,
  "total_sales": 4234.56,
  "user": "Jane Doe"
}
Property Description Type Required
leaderboard_rank The user's rank by total sales, with 1 as the top seller number false
order_count The number of orders in the reported date range number false
sales_pre_tax The pre-tax sales total, net of returns number false
total_sales The total sales, net of returns number false
user The user's (sales rep's) name string false

SalesOrderHistoryReport

The Sales Order History report

{
  "data": [
    {
      "charges_taxes_not_included": 0.0,
      "customer": "Green Leaf Dispensary",
      "delivery_date": "Jul 3rd 2026",
      "delivery_date_utc": "Jul 3rd 2026",
      "discounts_taxes_not_included": 0.0,
      "due_date": "Jul 15th 2026",
      "due_date_utc": "Jul 15th 2026",
      "metrc_manifest_number": "0000012345",
      "order_date": "Jul 1st 2026",
      "order_date_utc": "Jul 1st 2026",
      "order_number": "1042",
      "outstanding": 234.56,
      "owner": "Jane Doe",
      "paid": 1.0e3,
      "returns": 0.0,
      "shipped_from_license": "C11-0000123-LIC",
      "status": "COMPLETED",
      "subtotal": 1150.0,
      "taxes": 84.56,
      "total": 1234.56
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "order_date",
        "label": "Order Date"
      },
      {
        "key": "order_date_utc",
        "label": "Order Date (UTC)"
      },
      {
        "key": "delivery_date",
        "label": "Delivery Date"
      },
      {
        "key": "delivery_date_utc",
        "label": "Delivery Date (UTC)"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "due_date_utc",
        "label": "Due Date (UTC)"
      },
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "paid",
        "label": "Paid"
      },
      {
        "key": "outstanding",
        "label": "Outstanding"
      },
      {
        "key": "subtotal",
        "label": "Subtotal"
      },
      {
        "key": "taxes",
        "label": "Taxes"
      },
      {
        "key": "discounts_taxes_not_included",
        "label": "Discounts (taxes not included)"
      },
      {
        "key": "charges_taxes_not_included",
        "label": "Charges (taxes not included)"
      },
      {
        "key": "returns",
        "label": "Returns"
      },
      {
        "key": "total",
        "label": "Total"
      },
      {
        "key": "owner",
        "label": "Owner"
      },
      {
        "key": "metrc_manifest_number",
        "label": "Metrc Manifest Number"
      },
      {
        "key": "shipped_from_license",
        "label": "Shipped From License"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_order_history"
  }
}
Property Description Type Required
data The report rows array(SalesOrderHistoryReportRow) true
meta Report-level metadata SalesOrderHistoryReportMeta true

SalesOrderHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesOrderHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesOrderHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesOrderHistoryReportRow

A single row of the Sales Order History report. Companies on a compliance integration and companies with Order custom fields will see additional keys.

{
  "charges_taxes_not_included": 0.0,
  "customer": "Green Leaf Dispensary",
  "delivery_date": "Jul 3rd 2026",
  "delivery_date_utc": "Jul 3rd 2026",
  "discounts_taxes_not_included": 0.0,
  "due_date": "Jul 15th 2026",
  "due_date_utc": "Jul 15th 2026",
  "metrc_manifest_number": "0000012345",
  "order_date": "Jul 1st 2026",
  "order_date_utc": "Jul 1st 2026",
  "order_number": "1042",
  "outstanding": 234.56,
  "owner": "Jane Doe",
  "paid": 1.0e3,
  "returns": 0.0,
  "shipped_from_license": "C11-0000123-LIC",
  "status": "COMPLETED",
  "subtotal": 1150.0,
  "taxes": 84.56,
  "total": 1234.56
}
Property Description Type Required
charges_taxes_not_included The total charges on the order, taxes not included number false
customer The customer name string false
delivery_date The delivery date, in the company's timezone string false
delivery_date_utc The delivery date, in UTC string false
discounts_taxes_not_included The total discounts on the order, taxes not included number false
due_date The due date, in the company's timezone string false
due_date_utc The due date, in UTC string false
order_date The order date, in the company's timezone string false
order_date_utc The order date, in UTC string false
order_number The order number string false
outstanding The outstanding (unpaid) amount on the order number false
owner The order owner's name string false
paid The amount paid on the order number false
returns The total value of returns on the order number false
status The order status string false
subtotal The order subtotal number false
taxes The total taxes on the order number false
total The order total number false

SalesOrderItem

An order line item as shown in Distru

Property Description Type Required
batch A batch for a product as shown in Distru Batch false
compliance_quantity The quantity of this order item expressed in its package's unit type. Null if not package-tracked. string false
cost_per_unit The cost per unit of this order item string false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this order item string false
id Unique ID for this order item string false
is_sample True if this order item is a sample boolean false
location A location as nested inside another entity in Distru LocationCompact false
package A package as shown in Distru Package false
price Price per unit of this order item string false
price_base Price per unit before any discounts string false
product A product as shown in Distru Product false
quantity Quantity sold on this order item string false
received_quantity Quantity received on this order item. Omitted when null. string false
returned_quantity Quantity returned on this order item string false
total_cost_actual Total cost of the non-returned quantity in this order item, in other words, this is the total cost of order_item.quantity minus order_item.returned quantity. string false
total_cost_default Default cost of the non-returned quantity in this order item, in other words, this is the default cost of order_item.quantity minus order_item.returned quantity. string false

SalesOrderItemHistoryReport

The Sales Order Item History report

{
  "data": [
    {
      "vendor_id": "00000000-0000-0000-0000-000000000440",
      "default_unit_cost": 12.5,
      "cbd_mg_ml": 4.5,
      "category": "Vape",
      "order_number": "1042",
      "product_sku": "BD-CART-1G",
      "due_date_utc": "Jul 15th 2026",
      "customer": "Green Leaf Dispensary",
      "order_date": "Jul 1st 2026",
      "customer_id": "00000000-0000-0000-0000-0000000015bf",
      "order_id": "a0e8d1b3-5c2f-4e9a-8b7d-1f6c3a2e9d04",
      "package_label": "1A4060300003B01000001234",
      "total_cbd": 0.8,
      "delivery_date": "Jul 3rd 2026",
      "batch_number": "BATCH-2026-001",
      "delivery_date_utc": "Jul 3rd 2026",
      "order_date_utc": "Jul 1st 2026",
      "returned_quantity": 0.0,
      "default_unit_price": 25.0,
      "package_harvest_date": "May 1st 2026",
      "status": "COMPLETED",
      "cbd_mg_g": 5.0,
      "sales_rep": "Jane Doe",
      "order_item_price": 25.0,
      "due_date": "Jul 15th 2026",
      "total_thc": 88.0,
      "brand_id": "00000000-0000-0000-0000-000000000156",
      "total_cbd_mg_ml": 7.0,
      "total_cbd_mg_g": 8.0,
      "package_expiration_date": "Dec 31st 2026",
      "invoice_numbers": "INV-1042",
      "quantity": 10.0,
      "brand": "Green Labs",
      "default_wholesale_price": 20.0,
      "total_thc_mg_ml": 820.0,
      "total_thc_mg_g": 880.0,
      "shipped_from_license": "C11-0000123-LIC",
      "vendor": "Green Labs Cultivation",
      "group": "Cartridges",
      "thc": 85.0,
      "package_batch_number": "BATCH-2026-001",
      "upc": "850000123456",
      "cbd": 0.5,
      "product_id": "c2d7e6f5-4b3a-4c1d-8e9f-0a1b2c3d4e5f",
      "thc_mg_g": 850.0,
      "thc_mg_ml": 800.0,
      "subcategory": "Cartridge",
      "metrc_manifest_number": "0000012345",
      "product": "Blue Dream 1g Cartridge",
      "line_item_id": "b1f9c0a2-6e4d-4a7b-9f3c-2d8e5a1c0f42"
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "line_item_id",
        "label": "Line Item Id"
      },
      {
        "key": "order_id",
        "label": "Order Id"
      },
      {
        "key": "order_date",
        "label": "Order Date"
      },
      {
        "key": "order_date_utc",
        "label": "Order Date (UTC)"
      },
      {
        "key": "delivery_date",
        "label": "Delivery Date"
      },
      {
        "key": "delivery_date_utc",
        "label": "Delivery Date (UTC)"
      },
      {
        "key": "due_date",
        "label": "Due Date"
      },
      {
        "key": "due_date_utc",
        "label": "Due Date (UTC)"
      },
      {
        "key": "order_number",
        "label": "Order Number"
      },
      {
        "key": "status",
        "label": "Status"
      },
      {
        "key": "product",
        "label": "Product"
      },
      {
        "key": "product_id",
        "label": "Product Id"
      },
      {
        "key": "product_sku",
        "label": "Product SKU"
      },
      {
        "key": "default_unit_cost",
        "label": "Default Unit Cost"
      },
      {
        "key": "default_unit_price",
        "label": "Default Unit Price"
      },
      {
        "key": "default_wholesale_price",
        "label": "Default Wholesale Price"
      },
      {
        "key": "brand",
        "label": "Brand"
      },
      {
        "key": "brand_id",
        "label": "Brand Id"
      },
      {
        "key": "vendor",
        "label": "Vendor"
      },
      {
        "key": "vendor_id",
        "label": "Vendor Id"
      },
      {
        "key": "package_label",
        "label": "Package Label"
      },
      {
        "key": "package_batch_number",
        "label": "Package Batch Number"
      },
      {
        "key": "order_item_price",
        "label": "Order Item Price"
      },
      {
        "key": "returned_quantity",
        "label": "Returned Quantity"
      },
      {
        "key": "quantity",
        "label": "Quantity"
      },
      {
        "key": "category",
        "label": "Category"
      },
      {
        "key": "subcategory",
        "label": "Subcategory"
      },
      {
        "key": "group",
        "label": "Group"
      },
      {
        "key": "customer",
        "label": "Customer"
      },
      {
        "key": "customer_id",
        "label": "Customer Id"
      },
      {
        "key": "sales_rep",
        "label": "Sales Rep"
      },
      {
        "key": "thc",
        "label": "THC %"
      },
      {
        "key": "thc_mg_g",
        "label": "THC mg/g"
      },
      {
        "key": "thc_mg_ml",
        "label": "THC mg/mL"
      },
      {
        "key": "total_thc",
        "label": "Total THC %"
      },
      {
        "key": "total_thc_mg_g",
        "label": "Total THC mg/g"
      },
      {
        "key": "total_thc_mg_ml",
        "label": "Total THC mg/mL"
      },
      {
        "key": "cbd",
        "label": "CBD %"
      },
      {
        "key": "cbd_mg_g",
        "label": "CBD mg/g"
      },
      {
        "key": "cbd_mg_ml",
        "label": "CBD mg/mL"
      },
      {
        "key": "total_cbd",
        "label": "Total CBD %"
      },
      {
        "key": "total_cbd_mg_g",
        "label": "Total CBD mg/g"
      },
      {
        "key": "total_cbd_mg_ml",
        "label": "Total CBD mg/mL"
      },
      {
        "key": "metrc_manifest_number",
        "label": "Metrc Manifest Number"
      },
      {
        "key": "invoice_numbers",
        "label": "Invoice Numbers"
      },
      {
        "key": "shipped_from_license",
        "label": "Shipped From License"
      },
      {
        "key": "package_expiration_date",
        "label": "Package Expiration Date"
      },
      {
        "key": "upc",
        "label": "UPC"
      },
      {
        "key": "package_harvest_date",
        "label": "Package Harvest Date"
      },
      {
        "key": "batch_number",
        "label": "Batch Number"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_order_item_history"
  }
}
Property Description Type Required
data The report rows array(SalesOrderItemHistoryReportRow) true
meta Report-level metadata SalesOrderItemHistoryReportMeta true

SalesOrderItemHistoryReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesOrderItemHistoryReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesOrderItemHistoryReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesOrderItemHistoryReportRow

A single row of the Sales Order Item History report (one sales order line item). Companies on a compliance integration and companies with Order custom fields will see additional keys (package, potency, manifest, and custom field columns).

{
  "vendor_id": "00000000-0000-0000-0000-000000000440",
  "default_unit_cost": 12.5,
  "cbd_mg_ml": 4.5,
  "category": "Vape",
  "order_number": "1042",
  "product_sku": "BD-CART-1G",
  "due_date_utc": "Jul 15th 2026",
  "customer": "Green Leaf Dispensary",
  "order_date": "Jul 1st 2026",
  "customer_id": "00000000-0000-0000-0000-0000000015bf",
  "order_id": "a0e8d1b3-5c2f-4e9a-8b7d-1f6c3a2e9d04",
  "package_label": "1A4060300003B01000001234",
  "total_cbd": 0.8,
  "delivery_date": "Jul 3rd 2026",
  "batch_number": "BATCH-2026-001",
  "delivery_date_utc": "Jul 3rd 2026",
  "order_date_utc": "Jul 1st 2026",
  "returned_quantity": 0.0,
  "default_unit_price": 25.0,
  "package_harvest_date": "May 1st 2026",
  "status": "COMPLETED",
  "cbd_mg_g": 5.0,
  "sales_rep": "Jane Doe",
  "order_item_price": 25.0,
  "due_date": "Jul 15th 2026",
  "total_thc": 88.0,
  "brand_id": "00000000-0000-0000-0000-000000000156",
  "total_cbd_mg_ml": 7.0,
  "total_cbd_mg_g": 8.0,
  "package_expiration_date": "Dec 31st 2026",
  "invoice_numbers": "INV-1042",
  "quantity": 10.0,
  "brand": "Green Labs",
  "default_wholesale_price": 20.0,
  "total_thc_mg_ml": 820.0,
  "total_thc_mg_g": 880.0,
  "shipped_from_license": "C11-0000123-LIC",
  "vendor": "Green Labs Cultivation",
  "group": "Cartridges",
  "thc": 85.0,
  "package_batch_number": "BATCH-2026-001",
  "upc": "850000123456",
  "cbd": 0.5,
  "product_id": "c2d7e6f5-4b3a-4c1d-8e9f-0a1b2c3d4e5f",
  "thc_mg_g": 850.0,
  "thc_mg_ml": 800.0,
  "subcategory": "Cartridge",
  "metrc_manifest_number": "0000012345",
  "product": "Blue Dream 1g Cartridge",
  "line_item_id": "b1f9c0a2-6e4d-4a7b-9f3c-2d8e5a1c0f42"
}
Property Description Type Required
batch_number The batch number string false
brand The brand name string false
brand_id The brand ID string false
category The product category string false
customer The customer name string false
customer_id The customer ID string false
default_unit_cost The product's default unit cost number false
default_unit_price The product's default unit price number false
default_wholesale_price The product's default wholesale price number false
delivery_date The delivery date, in the company's timezone string false
delivery_date_utc The delivery date, in UTC string false
due_date The due date, in the company's timezone string false
due_date_utc The due date, in UTC string false
group The product group string false
invoice_numbers The invoice numbers associated with the line item string false
line_item_id The line item ID string false
order_date The order date, in the company's timezone string false
order_date_utc The order date, in UTC string false
order_id The order ID string false
order_item_price The line item price number false
order_number The order number string false
product The product name string false
product_id The product ID string false
product_sku The product SKU string false
quantity The line item quantity number false
returned_quantity The returned quantity on the line item number false
sales_rep The sales rep's name string false
status The order status string false
subcategory The product subcategory string false
upc The product UPC string false
vendor The vendor name string false
vendor_id The vendor ID string false

SalesOrderTaxReport

The Sales Order Tax report

{
  "data": [
    {
      "tax_rate": 27.0,
      "tax_type": "Excise Tax - CA 27%",
      "total_tax": 1234.56
    }
  ],
  "meta": {
    "columns": [
      {
        "key": "tax_type",
        "label": "Tax Type"
      },
      {
        "key": "tax_rate",
        "label": "Tax Rate"
      },
      {
        "key": "total_tax",
        "label": "Total Tax"
      }
    ],
    "date_range": "Jun 26th 2026 to Jul 26th 2026",
    "report": "sales_order_tax"
  }
}
Property Description Type Required
data The report rows array(SalesOrderTaxReportRow) true
meta Report-level metadata SalesOrderTaxReportMeta true

SalesOrderTaxReportColumn

Property Description Type Required
key The key used for this column in each data row string true
label The human-readable label of the column string true

SalesOrderTaxReportMeta

Report-level metadata

Property Description Type Required
columns The report's column definitions array(SalesOrderTaxReportColumn) false
date_range The human-readable date range the report covers string false
report The report identifier string true

SalesOrderTaxReportRow

A single row of the Sales Order Tax report

{
  "tax_rate": 27.0,
  "tax_type": "Excise Tax - CA 27%",
  "total_tax": 1234.56
}
Property Description Type Required
tax_rate The tax rate percentage number false
tax_type The name of the tax string false
total_tax The total tax collected for this tax type and rate number false

StockAdjustment

A stock adjustment as shown in Distru

{
  "batch_id": "12345",
  "completion_datetime": "2024-12-12 20:26:19.297537",
  "compliance_quantity": "10",
  "compliance_unit_type": {
    "id": "123",
    "name": "Gram"
  },
  "description": "The description for this adjustment",
  "id": "12345",
  "inserted_datetime": "2024-12-12 20:26:19.297537",
  "license_id": "12345",
  "location_id": "12345",
  "owner_id": "12345",
  "package_id": "12345",
  "product_id": "12345",
  "quantity": "10",
  "reason": "Waste",
  "total_cost": "100",
  "unit_cost": "10",
  "unit_type": {
    "id": "123",
    "name": "Gram"
  }
}
Property Description Type Required
batch_id The ID of this adjustment's batch. Null if this adjustment is not associated with a batch-tracked product string false
completion_datetime The datetime this adjustment was completed at string false
compliance_quantity The quantity of this adjustment expressed in it's package's unit type. Null if this adjustment is not associated with a package-tracked product. string false
compliance_unit_type A unit type as shown in Distru UnitType false
description The description for this adjustment string false
id Unique ID for this stock adjustment string false
inserted_datetime The datetime this adjustment was created at string false
license_id ID of the license that this adjustment is associated with string false
location_id ID of the location that this adjustment is associated with string false
owner_id The ID of the user that owns this adjustment string false
package_id The ID of this adjustment's package. Null if this adjustment is not associated with a package-tracked product string false
product_id The ID of this adjustment's product. Populated regardless of the product's inventory tracking method. string false
quantity The quantity of the adjustment string false
reason The reason for this adjustment string false
total_cost The total cost of this adjustment string false
unit_cost The cost per unit of this adjustment string false
unit_type A unit type as shown in Distru UnitType false

StockAdjustments

A collection of Stock Adjustments

Property Description Type Required
data Stock Adjustments array(StockAdjustment) false
next_page URL for the next page of results; null when there is no next page string false

Strain

A strain as shown in Distru

{
  "id": "12345",
  "name": "Strain 123",
  "strain_type": "INDICA"
}
Property Description Type Required
id Unique ID for this strain string false
name Name of the strain string false
strain_type The type of strain string false

Strains

A collection of Strains. Note: This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.

Property Description Type Required
data Strains array(Strain) false
next_page URL for the next page of results; null when there is no next page string false

Tag

A tag

Property Description Type Required
id Unique ID for this tag string false
name The name of the tag string false

Tags

A collection of tags

Property Description Type Required
data Tags array(Tag) false
next_page URL for the next page of results; null when there is no next page string false

Tax

A tax

Property Description Type Required
description The description of the tax string false
id Unique ID for this tax string false
inserted_datetime When the tax was created (UTC ISO-8601) string false
name The name of the tax string false
qb_account_id The associated QuickBooks Online account ID string false
qb_product_id The associated QuickBooks Online product ID string false
tags Tags associated with this tax array(Tag) false
tax_applied_after_charges Whether the tax is applied after charges boolean false
tax_applied_after_price_tiers Whether the tax is applied after price tiers boolean false
tax_code The tax code string false
tax_rate_percent The tax rate as a percentage number false
updated_datetime When the tax was last updated (UTC ISO-8601) string false

Taxes

A collection of taxes

Property Description Type Required
data Taxes array(Tax) false
next_page URL for the next page of results; null when there is no next page string false

TestResult

A test result as shown in Distru

Property Description Type Required
additional_test_results An additional test result object for a test result as shown in Distru AdditionalTestResult false
batch_id The ID of the batch this test result belongs to, or null string false
cbd_mg_per_unit The CBD mg per unit for this test result string false
cbd_percentage The CBD percentage for this test result string false
coa_url Public URL to view/download this test result's Certificate of Analysis (COA), or null when no file is attached string false
id Unique ID for this test result string false
is_primary True if this is the primary test result for the product boolean false
lab_license_number The license number for the lab that performed this test string false
lab_name The name of the lab that performed this test string false
mg_per_unit_type The unit type for the mg per unit fields string false
name The name of the test result string false
package_id The ID of the package this test result belongs to, or null string false
release_date The release date for this test result string false
thc_mg_per_unit The THC mg per unit for this test result string false
thc_percentage The THC percentage for this test result string false
total_cbd_mg_per_unit The total CBD mg per unit for this test result string false
total_cbd_percentage The total CBD percentage for this test result string false
total_thc_mg_per_unit The total THC mg per unit for this test result string false
total_thc_percentage The total THC percentage for this test result string false
updated_datetime The datetime this test result was updated at string false

TestResults

A collection of Test Results

Property Description Type Required
data Test Results array(TestResult) false
next_page URL for the next page of results; null when there is no next page string false

UnitType

A unit type as shown in Distru

{
  "name": "Gram"
}
Property Description Type Required
id Unique ID for this unit type string false
name Human readable name for this unit type string false

UnitTypeFull

A unit type

Property Description Type Required
active Whether the unit type is active boolean false
category The category of the unit type string false
id Unique ID for this unit type string false
inserted_datetime When the unit type was created (UTC ISO-8601) string false
locked Whether the unit type is locked boolean false
name The name of the unit type string false
qty_per_si_unit The number of this unit that make up one SI base unit of its category. For weight-based unit types the SI base unit is the kilogram (e.g. a Gram is 1000, a Pound is ~2.20462). For volume-based unit types the SI base unit is the liter (e.g. a Milliliter is 1000, a Gallon is ~0.264172). For count-based (discrete/each) unit types it is 1, since a count unit has no physical measure. string false
updated_datetime When the unit type was last updated (UTC ISO-8601) string false

UnitTypes

A collection of unit types

Property Description Type Required
data Unit Types array(UnitTypeFull) false
next_page URL for the next page of results; null when there is no next page string false

UpsertCredit

Parameters for creating or updating a credit

{
  "amount": 100.0,
  "company_id": "00000000-0000-0000-0000-00000000000a",
  "external_note": "External note",
  "internal_note": "Internal note"
}
Property Description Type Required
amount The credit amount. Must be greater than 0. Required when creating. number false
company_id ID of the customer (company) this credit applies to. Required when creating; cannot be changed on update. string false
external_note A note on this credit, visible to the customer string false
id ID of the credit to update. Omit to create a new credit. string false
internal_note An internal note on this credit string false
owner_id ID of the user who owns this credit. Defaults to the API user when creating. string false
quickbooks_sales_item_id Optional QuickBooks sales item this credit maps to, used only when QuickBooks credit sync is enabled. Omit or send null to use the default "Distru Sales" item. Never required. string false

UpsertProductPosMapping

Parameters for creating or updating a POS mapping

{
  "blaze_product_id": "blaze_123",
  "blaze_retailer_id": "456e7890-e89b-12d3-a456-426614174000",
  "product_id": "123e4567-e89b-12d3-a456-426614174000"
}
Property Description Type Required
blaze_product_id Blaze product ID string false
blaze_retailer_id Blaze retailer ID string false
dutchie_product_id Dutchie product ID integer false
dutchie_retailer_id Dutchie retailer ID string false
product_id Distru product ID string true
treez_product_id Treez product ID string false
treez_retailer_id Treez retailer ID string false

User

Information about a user in Distru

{
  "banned": false,
  "email": "jeanb@zorgindustries.com",
  "full_name": "Jean-Baptiste Emanuel Zorg",
  "id": "12345",
  "role": {
    "id": "3",
    "name": "Admin"
  }
}
Property Description Type Required
banned Is this user banned by Distru? boolean false
deleted_at The datetime of deletion if the user was deleted string false
email The email address of this user string false
full_name The full name of this user string false
id Unique ID for this user string false
role A user role as shown in Distru Role false

Users

A collection of Users

Property Description Type Required
data Users array(User) false
next_page URL for the next page of results; null when there is no next page string false

Vehicle

A vehicle

Property Description Type Required
color The color of the vehicle string false
description A description or name for the vehicle string false
id Unique ID for this vehicle string false
inserted_datetime When the vehicle was created (UTC ISO-8601) string false
license_plate_number The license plate number string false
license_plate_state The license plate state string false
make The make of the vehicle string false
model The model of the vehicle string false
updated_datetime When the vehicle was last updated (UTC ISO-8601) string false
vin The vehicle identification number (VIN) string false
year The year of the vehicle string false

Vehicles

A collection of vehicles

Property Description Type Required
data Vehicles array(Vehicle) false
next_page URL for the next page of results; null when there is no next page string false

Changelog

2026-08-13

2026-08-12

2026-08-03

2026-07-30

2026-07-29

Read/write parity pass across the API — every field that can be set can now be read back, and related resources (owner, locations, notes, custom data, tags) are exposed consistently.

2026-07-27

2026-06-29

2026-06-23

2026-06-08

2026-05-28

2026-05-25

2026-05-17

2026-05-11

2026-05-06

2026-05-01

2026-03-27

2026-03-10

2026-02-13

2026-02-12

2026-02-10

2026-01-23

2026-01-21

2026-01-19

2025-10-24

2025-10-19

2025-10-15

2025-09-10

2025-08-21

2025-08-20

2025-08-19

2025-07-01

2025-06-12

2025-06-12

2025-06-09

2025-05-27

2025-05-22

2025-05-18

2025-05-16

2025-05-15

2025-05-14

2025-05-13

2025-05-06

2025-04-09

2025-03-18

2025-03-11

2025-03-05

2025-02-26

2025-01-31

2025-01-17

2025-01-15

2025-01-08

2024-12-26

2024-12-24

2024-11-06

2024-10-02