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.

Models

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_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_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

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
company A company as shown in Distru Company false
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

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

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 number false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this batch number 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
product_id The ID of the batch's product string false
total_cost_actual The total actual cost of this batch number false
total_cost_default The total default cost (from the configured product unit cost) of this batch number 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

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

Packages

A collection of Packages

Property Description Type Required

PurchaseChargesRequest

A collection of Purchase charge params

Property Description Type Required

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

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

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

Batches

A collection of Batches

Property Description Type Required

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

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

OrderItemRequest

Order item params

Property Description Type Required
batch_id The ID of the batch (if the product is batch-tracked) 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 order item record string false
is_sample True if this order is a sample boolean 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

Purchases

A collection of Purchases

Property Description Type Required

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. number false
cost_per_unit_actual The cost per unit of this output number false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this output number false
expiration_date 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 shown in Distru Location false
package A package as shown in Distru Package false
package_date 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 number false
total_cost_actual The total actual cost of this output number false
total_cost_default The total default cost (from the configured product unit cost) of this output number 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": "9876",
        "name": "Excise Tax - CA 27%",
        "percent": 27.0
      },
      "type": "Tax",
      "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",
  "purchase_number": "PO-00012345",
  "status": "Pending",
  "total": 150.23,
  "updated_datetime": "2022‐07‐02T00:00:00Z"
}
Property Description Type Required
charges A collection of Charges array(Charge) false
company A company as shown in Distru Company false
creator Information about a user in Distru User false
custom_data The custom data for this purchase order array(CustomField) 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
order_datetime The datetime on which the order was placed string false
owner Information about a user in Distru User 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 number false
updated_datetime The datetime at which the order was last updated in Distru string false

PurchaseItemsRequest

A collection of purchase item params

Property Description Type Required

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_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(Location) 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_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_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

PaymentMethods

A collection of Payment Methods

Property Description Type Required

Orders

A collection of Orders

Property Description Type Required

CompanyGroup

A company group as shown in Distru

{
  "id": "12345",
  "name": "Group 123"
}
Property Description Type Required
id Unique ID for this company group string false
name Name of the company group string 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
cost_per_unit_actual The cost per unit of this order item number false
id Unique ID for this order item string false
package A package as shown in Distru Package false
price Price per unit of this order item number false
product A product as shown in Distru Product false
quantity Quantity sold on this order item number false
returned_quantity Quantity returned on this order item number 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. number 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. number false

Users

A collection of Users

Property Description Type Required

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
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
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
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

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",
      "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
  },
  "remaining_amount": 43.23,
  "status": "Pending",
  "total": 543.23,
  "updated_datetime": "2022‐07‐02T00:00:00Z"
}
Property Description Type Required
charges A collection of Charges array(Charge) false
company A company as shown in Distru Company 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
id Unique ID for this invoice string false
inserted_datetime The datetime at which the invoice was created in Distru 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. number false
remaining_amount The remaining amount for this invoice number false
status The status of this invoice string false
total The total for this invoice including taxes, discounts, and all line items number 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 number false

Companies

A collection of companies

Property Description Type Required

Invoices

A collection of Invoices

Property Description Type Required

ProductCategory

A product category as shown in Distru

{
  "id": "88c02a3f-57d9-9473-f8f9-40609d68bbh4",
  "name": "Flower",
  "type": "FLOWER"
}
Property Description Type Required
id Unique ID for this category string false
name Human readable name for this category string false
type The type of this category string false

ProductPosMappingResponse

Property Description Type Required
data A mapping between a Distru product and a POS product ProductPosMapping false

StockAdjustments

A collection of Stock Adjustments

Property Description Type Required

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. number false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this invoice item. number false
id Unique ID for this invoice item string false
package A package as shown in Distru Package false
price Price per unit of this invoice item number false
product A product as shown in Distru Product false
quantity Quantity used on this invoice item number 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. |number|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. |number|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. |number|false|

Inventories

A list of active and available quantity for each group

Property Description Type Required

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

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

Returns

A collection of Returns

Property Description Type Required

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

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

InvoiceItemsRequest

A collection of invoice item params

Property Description Type Required

Assemblies

A collection of Assemblies

Property Description Type Required

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

Page

Pagination information for a request

{
  "number": 1
}
Property Description Type Required
number Page number integer true

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 string 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

Locations

A collection of Locations

Property Description Type Required

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 number false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this package number 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
packaged_date The compliance packaged date for this package (ISO 8601) 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 number false
total_cost_default The total default cost (from the configured product unit cost) of this package number 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

ProductPosMapping

A mapping between a Distru product and a POS product

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
id Mapping ID string false
inserted_at Creation timestamp string false
pos_type POS type (BLAZE, DUTCHIE, or TREEZ) string false
product_id Distru product ID string false
treez_product_id Treez product ID string false
treez_retailer_id Treez retailer ID string false
updated_at Last update timestamp string false

CustomField

A custom field as shown in Distru

{
  "id": "12345",
  "name": "Custom Field 1",
  "value": "Custom Field Value 1"
}
Property Description Type Required
id Unique ID for this custom field string 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

Product

A product as shown in Distru

{
  "brand": {
    "name": "Brand 123"
  },
  "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",
  "sku": "BDP-1G",
  "unit_price": 1.5,
  "unit_type": {
    "name": "Gram"
  },
  "units_per_case": 6
}
Property Description Type Required
brand A brand as shown in Distru Brand false
category A product category as shown in Distru ProductCategory false
company A company as shown in Distru Company false
custom_data The custom data for this product array(CustomField) false
deleted_at The datetime of deletion if the product was deleted string false
description The description of this product string false
description_markdown The description of this product in markdown format string false
external_name Customer-facing name for DistruCommerce menus and Order Tracker string false
gross_weight The gross weight of the product number false
gross_weight_unit_type A unit type as shown in Distru UnitType false
id Unique ID for this product string false
images The images associated with the product array(Image) false
is_active Is this product active? boolean false
menus Menus this product is associated with, ordered by menu creation time then id (includes inactive menus) array(ProductMenuRef) false
msrp The MSRP of the product number false
name Human readable name for this product string false
sku The SKU configured for the product string false
strain A strain as shown in Distru Strain false
subcategory A product subcategory as shown in Distru ProductSubcategory false
unit_cost The cost (or purchase price) of the product per unit. number false
unit_net_weight The net weight of the product per unit number false
unit_net_weight_and_serving_size_unit_type_id A unit type as shown in Distru UnitType false
unit_price The price of one unit of this product number false
unit_serving_size The serving size of the product per unit number false
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 number false
updated_datetime The datetime this product was last updated at string false

Products

A collection of Products

Property Description Type Required

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
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
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
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

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 number false
price The price of this line if it is a flat charge number false
type What type of additional line is this 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
tax.percent The amount of tax levied 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

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

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

FileAttachment

A file attachment

Property Description Type Required

ProductPosMappingsResponse

Property Description Type Required
data List of POS mappings array(ProductPosMapping) 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. number false
cost_per_unit_actual The cost per unit of this input number false
cost_per_unit_default The default cost per unit (from the configured product unit cost) of this input number false
location A location as shown in Distru Location 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 number false
total_cost_actual The total actual cost of this input number false
total_cost_default The total default cost (from the configured product unit cost) of this input number 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 The license number for this assembly string 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

TestResults

A collection of Test Results

Property Description Type Required

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

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
id Unique ID for this order item string false
package A package as shown in Distru Package false
price Price per unit of this order item (with discounts applied) number false
price_base Price per unit of this order item number false
product A product as shown in Distru Product false
quantity Quantity used on this order item number false
received_quantity Quantity received on this order item. Less than or equal to the quantity field number 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

Brand

A brand as shown in Distru

{
  "name": "Brand 123"
}
Property Description Type Required
name Name of the brand string false

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

ProductSubcategory

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

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",
  "license_id": "12345",
  "location_id": "12345",
  "owner_id": "12345",
  "package_id": "12345",
  "product_id": "12345",
  "quantity": 10,
  "reason": "Waste",
  "total_cost": 100,
  "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 datetime 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. number 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
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 number false
reason The reason for this adjustment string false
total_cost The total cost of this adjustment number false
unit_type A unit type as shown in Distru UnitType false

OrderChargesRequest

A collection of Order charge params

Property Description Type Required

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

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": "9876",
        "name": "Excise Tax - CA 27%",
        "percent": 27.0
      },
      "type": "TAX",
      "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 as shown in Distru Location false
biotrack_id The ID of the BioTrack manifest associated with this order string false
charges A collection of Charges array(Charge) false
company A company as shown in Distru Company false
creator Information about a user in Distru User false
custom_data A collection of CustomData array(CustomData) 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
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
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 string 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 as shown in Distru Location false
status The status of this sales order string false
total The total for this order including taxes, discounts, and all line items number false
updated_datetime The datetime at which the order was last updated in Distru 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

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

Contacts

A collection of Contacts

Property Description Type Required

OrderTransferTemplateTransporterInfosRequest

A collection of Metrc-specific Order transfer template transporter info params

Property Description Type Required

OrderItemsRequest

A collection of Order item params

Property Description Type Required

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"
}
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

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

InvoiceChargesRequest

A collection of Invoice charge params

Property Description Type Required

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

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

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_at": "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_at": "2024-12-12T20:26:19.297537Z"
}
Property Description Type Required
company A company as shown in Distru Company 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_at 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 shown in Distru Location 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_at The datetime at which the return was last updated in Distru 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 number true
available Available quantity (active - reserved) number true
batch_number The batch number of the batch or the package 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. number false
cost_per_unit_default The cost per unit of the inventory. Note: This is calculated by dividing the total default cost by the active quantity. number false
location_id ID of the location string false
product_id ID of the product string true
reserved Reserved quantity number true
total_cost_actual The aggregated total cost of the inventory's active quantity number false
total_cost_default The aggregated total default cost of the inventory's active quantity number false

User

Information about a user in Distru

{
  "banned": false,
  "email": "jeanb@zorgindustries.com",
  "full_name": "Jean-Baptiste Emanuel Zorg",
  "id": "12345",
  "role": "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

Assembly

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTMxMDRmZDAtOGRjYy00ZjE2LThhNWYtYzM3ZDZkY2I4YWUzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDA1MiIsInR5cCI6ImFjY2VzcyJ9._Q1G-OH4V57bNY-iN767K9rgIOwyuoC1jYbuTS6iFJg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c0a2a50c33587f77c266cf6a2a063ceb-89b10acc744c8011-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-07-24T10:28:09.664686Z",
      "compliance_type": "NONE",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [
        {
          "id": 111,
          "name": "Custom Field 30",
          "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": "40128b00-e104-49e3-90e0-c38b42ca120a",
      "is_metrc_processing_job": false,
      "license": null,
      "outputs": [
        {
          "additional_costs": [
            {
              "cost_per_unit": "-1",
              "description": null,
              "name": "CostType 2",
              "quantity": "1",
              "total_cost_actual": "-1",
              "total_cost_default": "0",
              "unit_type": {
                "id": "00000000-0000-0000-0000-000000009a75",
                "name": "Unit Type 3"
              }
            }
          ],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000056d",
            "name": "B954"
          },
          "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-00000000056d",
                "name": "B954"
              },
              "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-000000000c0d",
                "id": "00000000-0000-0000-0000-0000000003ee",
                "license_id": null,
                "name": "Place 267"
              },
              "package": null,
              "product": {
                "id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
                "name": "Product 949",
                "sku": "sku 950",
                "updated_datetime": "2026-07-24T10:28:09.595032Z"
              },
              "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-000000000c0d",
            "id": "00000000-0000-0000-0000-0000000003ee",
            "license_id": null,
            "name": "Place 267"
          },
          "package": null,
          "package_datetime": null,
          "package_unit_type": null,
          "product": {
            "id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
            "name": "Product 949",
            "sku": "sku 950",
            "updated_datetime": "2026-07-24T10:28:09.595032Z"
          },
          "quantity": "2",
          "total_cost_actual": "-0.6",
          "total_cost_default": "1"
        }
      ],
      "owner_id": "00000000-0000-0000-0000-000000000fd4",
      "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-00000046&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjFmOTlmNWYtMmRmMy00NjVkLWJkOTctMTkxMDkwMTIwNzdjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg0NSIsInR5cCI6ImFjY2VzcyJ9.FKaB0RFuge5dNmXWaeh0Pjp0xpm_xtap7en9-vdcevU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1cb57f2c086f903fd915184c7e7f3abd-a5521167d527d9b2-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": null,
      "compliance_type": "METRC",
      "creation_source": "MANUALLY_CREATED",
      "custom_data": [
        {
          "id": 104,
          "name": "Custom Field 24",
          "value": null
        }
      ],
      "description": null,
      "estimated_start_date": null,
      "estimated_work_hours": null,
      "estimated_work_minutes": null,
      "fulfilled": true,
      "id": "a2a48abb-6ed3-4598-8be0-6deada3de55d",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-0000000000f5",
        "license_number": "CDPH-00000046"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000536",
            "name": "B758"
          },
          "compliance_label": "1A4010200001234000000001",
          "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-000000000536",
                "name": "B758"
              },
              "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-000000000b69",
                "id": "00000000-0000-0000-0000-0000000003cf",
                "license_id": "00000000-0000-0000-0000-0000000000f5",
                "name": "Place 236"
              },
              "package": {
                "batch_number": "1234567890",
                "compliance_label": "ABCDEF012345670000000076",
                "id": "00000000-0000-0000-0000-00000000009d",
                "metrc_label": "ABCDEF012345670000000076",
                "status": "active"
              },
              "product": {
                "id": "9c8fcb45-e1ab-4e7f-881f-52aeaf042eb9",
                "name": "Product 750",
                "sku": "sku 751",
                "updated_datetime": "2026-07-24T10:28:09.119408Z"
              },
              "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-000000000b69",
            "id": "00000000-0000-0000-0000-0000000003cf",
            "license_id": "00000000-0000-0000-0000-0000000000f5",
            "name": "Place 236"
          },
          "package": null,
          "package_datetime": "2026-07-24",
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-000000009177",
            "name": "Gram"
          },
          "product": {
            "id": "9c8fcb45-e1ab-4e7f-881f-52aeaf042eb9",
            "name": "Product 750",
            "sku": "sku 751",
            "updated_datetime": "2026-07-24T10:28:09.119408Z"
          },
          "quantity": "2",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-000000000f05",
      "status": "PENDING"
    }
  ],
  "next_page": null
}

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

GET /public/v1/assemblies?completion_datetime=2026-07-24+09%3A28%3A08.693631Z%2C2026-07-24+11%3A28%3A08.693631Z&creation_source=MANUALLY_CREATED&license_number=CDPH-00000036&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmU5ZDQ5NWQtMjU3Mi00ODQxLWEzOWEtNzUyMGQxMGM1YmZkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzYxOCIsInR5cCI6ImFjY2VzcyJ9.qOKaTz4_PZRMC2jXQmUA875FmE4SWpsrbmhESkAcfLU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6b026b84770ca867befb77cb535e4382-54c44ea9ac44b67e-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-07-24T10:28:08.693631Z",
      "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": "17e7b34d-2df9-46c2-9d1e-2986d6992d01",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-0000000000eb",
        "license_number": "CDPH-00000036"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004fa",
            "name": "B545"
          },
          "compliance_label": "1A4010200001234000000000",
          "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-0000000004fa",
                "name": "B545"
              },
              "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-000000000ab3",
                "id": "00000000-0000-0000-0000-00000000039f",
                "license_id": "00000000-0000-0000-0000-0000000000eb",
                "name": "Place 188"
              },
              "package": {
                "batch_number": "1234567890",
                "compliance_label": "ABCDEF012345670000000054",
                "id": "00000000-0000-0000-0000-000000000092",
                "metrc_label": "ABCDEF012345670000000054",
                "status": "active"
              },
              "product": {
                "id": "3e40d5a7-ce51-4a60-b769-139fdb9de9b4",
                "name": "Product 531",
                "sku": "sku 532",
                "updated_datetime": "2026-07-24T10:28:08.379126Z"
              },
              "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-000000000ab3",
            "id": "00000000-0000-0000-0000-00000000039f",
            "license_id": "00000000-0000-0000-0000-0000000000eb",
            "name": "Place 188"
          },
          "package": {
            "batch_number": null,
            "compliance_label": "1A4010200001234000000000",
            "id": "00000000-0000-0000-0000-000000000098",
            "metrc_label": "1A4010200001234000000000",
            "status": "active"
          },
          "package_datetime": "2026-07-24",
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-000000008877",
            "name": "Gram"
          },
          "product": {
            "id": "3e40d5a7-ce51-4a60-b769-139fdb9de9b4",
            "name": "Product 531",
            "sku": "sku 532",
            "updated_datetime": "2026-07-24T10:28:08.379126Z"
          },
          "quantity": "2",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-000000000e22",
      "status": "COMPLETED"
    }
  ],
  "next_page": null
}

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

GET /public/v1/assemblies?completion_datetime=2026-07-24+09%3A28%3A07.698053Z%2C2026-07-24+11%3A28%3A07.698053Z&creation_source=MANUALLY_CREATED&license_number=CDPH-00000004&page[number]=1
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmNmYTM3MGQtNzBkNi00OWVlLWIzZmUtNzdmZjJlY2NjY2E3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk0NiIsInR5cCI6ImFjY2VzcyJ9.VYaWIz0Rsm_i1O0HfZ7v3EzyZnjhhMkc4ZGas6TaNmw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8cf21d77644fd784598d083e31f713d6-8a26ae5c0c3ec1a1-0
{
  "data": [
    {
      "assembly_number": "AS-0000001",
      "completion_datetime": "2026-07-24T10:28:07.698053Z",
      "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": "1f725ee2-b125-4c4b-961b-4d3a939e5452",
      "is_metrc_processing_job": false,
      "license": {
        "id": "00000000-0000-0000-0000-0000000000cb",
        "license_number": "CDPH-00000004"
      },
      "outputs": [
        {
          "additional_costs": [],
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000047b",
            "name": "B89"
          },
          "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-00000000047b",
                "name": "B89"
              },
              "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-0000000008d1",
                "id": "00000000-0000-0000-0000-0000000002f6",
                "license_id": "00000000-0000-0000-0000-0000000000cb",
                "name": "Place 19"
              },
              "package": {
                "batch_number": null,
                "compliance_label": "0000000000000001",
                "id": "00000000-0000-0000-0000-00000000007c",
                "metrc_label": "0000000000000001",
                "status": "active"
              },
              "product": {
                "id": "80168830-5e60-47dd-9390-f46a839997db",
                "name": "Product 86",
                "sku": "sku 87",
                "updated_datetime": "2026-07-24T10:28:06.255101Z"
              },
              "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-0000000008d1",
            "id": "00000000-0000-0000-0000-0000000002f6",
            "license_id": "00000000-0000-0000-0000-0000000000cb",
            "name": "Place 19"
          },
          "package": {
            "batch_number": null,
            "compliance_label": null,
            "id": "00000000-0000-0000-0000-000000000086",
            "metrc_label": null,
            "status": "active"
          },
          "package_datetime": null,
          "package_unit_type": {
            "id": "00000000-0000-0000-0000-0000000070b0",
            "name": "Gram"
          },
          "product": {
            "id": "80168830-5e60-47dd-9390-f46a839997db",
            "name": "Product 86",
            "sku": "sku 87",
            "updated_datetime": "2026-07-24T10:28:06.255101Z"
          },
          "quantity": "1",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "owner_id": "00000000-0000-0000-0000-000000000b82",
      "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

Get an assembly

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

GET /public/v1/assemblies/8acb69c4-cd63-418c-b859-19a8fbfda103
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTEwOGYwZmMtMzI2Yy00NWM4LWE5YzYtNGU1NTg1YTEzNmZkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDEyNCIsInR5cCI6ImFjY2VzcyJ9.Tw6jau1JH3DWnbST9iEcNJYwK3WivQoLRGcn7kq7_O0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: bea6d4991729d9368befc97c5204eaaa-1d52b35fc75d67a2-0
{
  "data": {
    "assembly_number": "ASM001",
    "completion_datetime": null,
    "compliance_type": "NONE",
    "creation_source": "MANUALLY_CREATED",
    "custom_data": [],
    "description": "I will speak daggers to her, but use none.",
    "estimated_start_date": null,
    "estimated_work_hours": null,
    "estimated_work_minutes": null,
    "fulfilled": true,
    "id": "8acb69c4-cd63-418c-b859-19a8fbfda103",
    "is_metrc_processing_job": false,
    "license": null,
    "outputs": [],
    "owner_id": "00000000-0000-0000-0000-00000000101f",
    "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

Batch

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2U0ODFmNzYtNWQ5MC00YmM3LTk5YTktNjczNmVhNDVhOTFmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzkzMCIsInR5cCI6ImFjY2VzcyJ9.RaUW_JiQZvQf-9LnqmcQFB1w_L3rdWIIHMFQKBkmymg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 77330533b041cbc34b58dc72617dd960-9d918e677972d688-0
{
  "data": [
    {
      "batch_number": null,
      "custom_data": [
        {
          "id": 103,
          "name": "Custom Field 23",
          "value": "Custom Data 1"
        }
      ],
      "deleted_at": null,
      "description": null,
      "expiration_date": "2024-01-01T00:00:00.000000Z",
      "id": "00000000-0000-0000-0000-000000000549",
      "manufactured_datetime": "2024-01-02T03:04:05.000000Z",
      "name": "B834",
      "owner_id": "00000000-0000-0000-0000-000000000f5e",
      "primary_test_result": null,
      "product_id": "3bc42877-6eee-4127-b8aa-334af8aaeec1"
    },
    {
      "batch_number": null,
      "custom_data": [
        {
          "id": 103,
          "name": "Custom Field 23",
          "value": null
        }
      ],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-00000000054f",
      "manufactured_datetime": "2024-01-02T03:04:05.000000Z",
      "name": "B849",
      "owner_id": "00000000-0000-0000-0000-000000000f66",
      "primary_test_result": {
        "cbd_mg_per_unit": "1",
        "cbd_mg_per_unit_total": "2",
        "cbd_percentage": "3",
        "cbd_percentage_total": "4",
        "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": "dd827ad8-f230-480c-8a2c-cb7f54eb6acf"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWFiNzgwOWQtZTIxOS00ZDhkLWJlZDAtYThjOTVmN2VhZDNiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzI0NyIsInR5cCI6ImFjY2VzcyJ9.wXL87NW0hk4o09_nyovEKxthGQKH7Ltix1N2DW3RqnA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 511c2020c3e5c7885ed2fcac54d87273-f0a1f69b0acd0d13-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-0000000004aa",
      "manufactured_datetime": "2026-07-24T10:28:07.169329Z",
      "name": "B259",
      "owner_id": "00000000-0000-0000-0000-000000000cc9",
      "primary_test_result": null,
      "product_id": "78acbdf7-b82d-4405-bf2b-0475366f3693",
      "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-000000000483&batch_ids[]=00000000-0000-0000-0000-000000000484
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWY0ZjI0YWYtMjBhNS00OGM4LTgxODctNmNhYzNhMjA3OGFlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk5MyIsInR5cCI6ImFjY2VzcyJ9.MUX4BsPzZ3BgFwepWU7OVKNk3KrER8ZOMwQMrhoYobE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 58ca72a70f327c36cdea25fefb0b7125-a19af568871bd5d2-0
{
  "data": [
    {
      "batch_number": null,
      "custom_data": [],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-000000000483",
      "manufactured_datetime": "2026-07-24T10:28:06.289359Z",
      "name": "B117",
      "owner_id": "00000000-0000-0000-0000-000000000bb5",
      "primary_test_result": null,
      "product_id": "8572e5d4-29b9-4351-8df0-8f761c1136d7"
    },
    {
      "batch_number": null,
      "custom_data": [],
      "deleted_at": null,
      "description": null,
      "expiration_date": null,
      "id": "00000000-0000-0000-0000-000000000484",
      "manufactured_datetime": "2026-07-24T10:28:06.289359Z",
      "name": "B120",
      "owner_id": "00000000-0000-0000-0000-000000000bbf",
      "primary_test_result": null,
      "product_id": "bfdb9027-1f98-436a-ae66-ebd8e3786a60"
    }
  ],
  "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzI1Y2E4YjgtOWZmNC00OWE4LWJiODMtZjFjMjliYzczYzFiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0MyIsInR5cCI6ImFjY2VzcyJ9.8rCwmk8Gnx-VXN-LdMQmyVCKepr-7nK4MKN49miCIVY
{
  "owner_id": "218a3199-2824-4010-b45c-7962f0a472cf",
  "product_id": "aceda88f-23f2-4ef3-93bb-d75c26b75e56"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 609d816cc5ba17b8a5c0d1a7882e6e75-2f537a8336faec79-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2VjNzkwYmItOGM5NC00M2NiLWI1MzMtNDY2YWM3ZmFkNzY5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzgwNiIsInR5cCI6ImFjY2VzcyJ9.I-dVE-LHYYxOWGLOFgMkoT4sHo5itAMFnDOYZSROGWA
{
  "product_id": "29e477b6-fa0d-491f-b7fb-6df80880ffb9"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f1519d5d636477057d2782c05c95ce44-4bcaf2e308ac54a8-0
{
  "data": {
    "batch_number": null,
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "expiration_date": null,
    "id": "00000000-0000-0000-0000-00000000052c",
    "manufactured_datetime": "2026-07-24T10:28:08.951994Z",
    "name": "B1",
    "owner_id": null,
    "product_id": "29e477b6-fa0d-491f-b7fb-6df80880ffb9"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzAxNTA4YjAtNjI2Zi00N2YyLWI1MjItMzY4ZGFhYWRmMzA1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDA0MiIsInR5cCI6ImFjY2VzcyJ9.0ao4jnQTia0RlB0SGowTx_mhPsLHx_BArZlt3q1uRdY
{
  "batch_number": "B1",
  "description": "Test batch",
  "expiration_date": "2025-01-01T00:00:00.000000Z",
  "manufactured_datetime": "2025-01-02T03:04:05.000000Z",
  "owner_id": "00000000-0000-0000-0000-000000000fd8",
  "product_id": "0f9c63fe-ce86-44ff-9895-f295e2cdd19e"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d367db41ad84a1a3b134bf91a3461f8d-53385fa025bae819-0
{
  "data": {
    "batch_number": "B1",
    "custom_data": [],
    "deleted_at": null,
    "description": "Test batch",
    "expiration_date": "2025-01-01T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-00000000056b",
    "manufactured_datetime": "2025-01-02T03:04:05.000000Z",
    "name": "B1",
    "owner_id": "00000000-0000-0000-0000-000000000fd8",
    "product_id": "0f9c63fe-ce86-44ff-9895-f295e2cdd19e"
  }
}

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
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

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-00000000050c
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDI5YTU3YTQtZDc3Yy00YzhmLTg2MzctOTBiMWM4Y2VjZjA1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY5NiIsInR5cCI6ImFjY2VzcyJ9.6CtMpFZyrFwKbyI2ftvQ_h_hf_KAyk_TDRWlSGl9I2Y

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 28b4d6432c9b1eca90c568e959471ea2-14ace934d07eae42-0
{
  "data": {
    "batch_number": "B001",
    "custom_data": [],
    "deleted_at": null,
    "description": "Test batch",
    "expiration_date": null,
    "id": "00000000-0000-0000-0000-00000000050c",
    "manufactured_datetime": "2026-07-24T10:28:08.493468Z",
    "name": "B613",
    "owner_id": "00000000-0000-0000-0000-000000000e78",
    "primary_test_result": null,
    "product_id": "2db18f2c-b14b-4e3c-93a5-4d7cdd4ad90c"
  }
}

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

Company

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjNiOWJhZWUtNmJhNS00NmQ3LTg4MzItNGUwZTY0MzY5ODdiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzgxNiIsInR5cCI6ImFjY2VzcyJ9.KQ8JICJfyUtKlPF9jDjKaffG8s2z-bvMkhMm5et14DQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8c2ae521c6f2d39173f72d894659a309-7b95f92fac6ce328-0
{
  "data": [
    {
      "category": "Retailer",
      "custom_data": [
        {
          "id": 95,
          "name": "Custom Field 17",
          "value": "Custom Data 1"
        }
      ],
      "default_email": "company-1@example.com",
      "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-000000000005",
        "name": "Comp Rel Group 1"
      },
      "id": "00000000-0000-0000-0000-00000000079b",
      "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-000000000b67",
          "id": "00000000-0000-0000-0000-0000000003c8",
          "license_id": null,
          "name": "Place 229"
        }
      ],
      "name": "Company 709",
      "order_shipment_email": "order shipment email",
      "outstanding_balance_threshold": 1000,
      "owner_id": "00000000-0000-0000-0000-000000000efd",
      "phone_number": "1234567890",
      "purchase_order_email": "purchase email",
      "relationship_type": {
        "id": "00000000-0000-0000-0000-000000000005",
        "name": "Supplier"
      },
      "sales_order_email": "order email",
      "updated_datetime": "2023-11-03T00:00:00.000000Z",
      "website": "https://www.example.com"
    },
    {
      "category": "Cultivator",
      "custom_data": [
        {
          "id": 95,
          "name": "Custom Field 17",
          "value": null
        }
      ],
      "default_email": "company-1673@example.com",
      "default_purchase_order_notes": null,
      "default_sales_order_notes": null,
      "deleted_at": null,
      "group": null,
      "id": "00000000-0000-0000-0000-00000000079f",
      "invoice_email": null,
      "legal_business_name": "Company Legal Name 715",
      "licenses": [
        {
          "id": "00000000-0000-0000-0000-0000000000f4",
          "license_number": "CDPH-00000045"
        }
      ],
      "locations": [],
      "name": "Company 715",
      "order_shipment_email": null,
      "outstanding_balance_threshold": 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

Get a company

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

GET /public/v1/companies/00000000-0000-0000-0000-0000000007b4
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmU4MjYzZTAtYTUwOC00ZDYyLTg2N2MtMWMzOTc1NTgzMzE1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg2OSIsInR5cCI6ImFjY2VzcyJ9.mj9SOTdh_l9TmtynjdHrktCh836SBhirJ8dzIvauZT0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9c2776177480220ebec17831229b3bff-476aa35efb0d8d64-0
{
  "data": {
    "category": "Retailer",
    "custom_data": [
      {
        "id": 98,
        "name": "Custom Field 19",
        "value": "Custom Value"
      }
    ],
    "default_email": "co@example.com",
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": {
      "id": "00000000-0000-0000-0000-000000000006",
      "name": "Comp Rel Group 2"
    },
    "id": "00000000-0000-0000-0000-0000000007b4",
    "invoice_email": "inv@example.com",
    "legal_business_name": "Legal Co",
    "licenses": [
      {
        "id": "00000000-0000-0000-0000-0000000000f6",
        "license_number": "CDPH-00000047"
      }
    ],
    "locations": [
      {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000b89",
        "id": "00000000-0000-0000-0000-0000000003d4",
        "license_id": null,
        "name": "Place 241"
      }
    ],
    "name": "Company 743",
    "order_shipment_email": null,
    "outstanding_balance_threshold": null,
    "owner_id": "00000000-0000-0000-0000-000000000f33",
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": {
      "id": "00000000-0000-0000-0000-000000000006",
      "name": "Supplier"
    },
    "sales_order_email": "order@example.com",
    "updated_datetime": "2026-07-24T10:28:09.171858Z",
    "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzhmNTdkMmUtMmIyNC00YzA1LWI0M2EtNWMwOTU3ZWYxNDFjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzE4NSIsInR5cCI6ImFjY2VzcyJ9.qerdHh0SBjJkWQb3e3jkFPpomLQt5oxhdg_J94guoFI
{
  "name": "New Retailer"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e18940440d396e953e427b6583af581e-f77f44e0775209cd-0
{
  "data": {
    "category": null,
    "custom_data": [],
    "default_email": null,
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": null,
    "id": "00000000-0000-0000-0000-000000000694",
    "invoice_email": null,
    "legal_business_name": "",
    "licenses": [],
    "locations": [],
    "name": "New Retailer",
    "order_shipment_email": null,
    "outstanding_balance_threshold": null,
    "owner_id": null,
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": null,
    "sales_order_email": null,
    "updated_datetime": "2026-07-24T10:28:07.083754Z",
    "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmY0NjRmZjktYjU2Ny00ODgzLWJjNjQtODYzMGYyYjFmMzVjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0MSIsInR5cCI6ImFjY2VzcyJ9.ktMuZl1D4J08FgTwXPXBNcK2xucXxyvOuRmfbC-lzAQ
{
  "category": "Retail",
  "custom_data": {
    "84": "VIP"
  },
  "default_email": "info@fullretailer.com",
  "default_purchase_order_notes": "Purchase notes",
  "default_sales_order_notes": "Sales notes",
  "group_id": "00000000-0000-0000-0000-000000000004",
  "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-000000000d74",
  "phone_number": "555-1234",
  "purchase_order_email": "purchasing@fullretailer.com",
  "relationship_type_id": "00000000-0000-0000-0000-000000000004",
  "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: a40f168125f66f594834318ef3b7eb06-4a509f6e2d3b18a2-0
{
  "data": {
    "category": "Retail",
    "custom_data": [
      {
        "id": 84,
        "name": "Custom Field 10",
        "value": "VIP"
      }
    ],
    "default_email": "info@fullretailer.com",
    "default_purchase_order_notes": "Purchase notes",
    "default_sales_order_notes": "Sales notes",
    "deleted_at": null,
    "group": {
      "id": "00000000-0000-0000-0000-000000000004",
      "name": "Comp Rel Group 0"
    },
    "id": "00000000-0000-0000-0000-0000000006f0",
    "invoice_email": "invoice@fullretailer.com",
    "legal_business_name": "Full Retailer LLC",
    "licenses": [],
    "locations": [],
    "name": "Full Retailer",
    "order_shipment_email": "shipping@fullretailer.com",
    "outstanding_balance_threshold": 5000,
    "owner_id": "00000000-0000-0000-0000-000000000d74",
    "phone_number": "555-1234",
    "purchase_order_email": "purchasing@fullretailer.com",
    "relationship_type": {
      "id": "00000000-0000-0000-0000-000000000004",
      "name": "Supplier"
    },
    "sales_order_email": "orders@fullretailer.com",
    "updated_datetime": "2026-07-24T10:28:07.849879Z",
    "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiODkyMTQ0ZjAtNzVjMS00OTMxLWJmYTktMTI3YWM2MjUwNjE3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzMyMyIsInR5cCI6ImFjY2VzcyJ9.iAmRfmlhZ2YqB7ahr4YqbRcYm6oWfrDRiVkzaPxzaac
{
  "id": "00000000-0000-0000-0000-0000000006be",
  "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: a88b696846474e9fd8c04ff4aad808ba-42016e9d6ce34528-0
{
  "data": {
    "category": "Dispensary",
    "custom_data": [],
    "default_email": "company-774@example.com",
    "default_purchase_order_notes": null,
    "default_sales_order_notes": null,
    "deleted_at": null,
    "group": null,
    "id": "00000000-0000-0000-0000-0000000006be",
    "invoice_email": "newinvoice@example.com",
    "legal_business_name": "Company Legal Name 320",
    "licenses": [],
    "locations": [],
    "name": "Updated Name",
    "order_shipment_email": null,
    "outstanding_balance_threshold": null,
    "owner_id": "00000000-0000-0000-0000-000000000cfe",
    "phone_number": null,
    "purchase_order_email": null,
    "relationship_type": null,
    "sales_order_email": null,
    "updated_datetime": "2026-07-24T10:28:07.522236Z",
    "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
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

Contact

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDUwYzgyODMtMWU2Ny00NDcwLWFkZmQtMThjZWYzZTEyMjFhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDAyNSIsInR5cCI6ImFjY2VzcyJ9.3A9aw94NsHiILmZkXj9H7tq5KUl6A5QITr0VEUxjDwA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3aebd8f35b77b6c35e042fa37859d938-a08eccb4c495be87-0
{
  "data": [
    {
      "company": {
        "id": "00000000-0000-0000-0000-0000000007f9"
      },
      "custom_data": [
        {
          "id": 110,
          "name": "Custom Field 29",
          "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-000000000050",
      "last_name": "name1",
      "owner": {
        "id": "00000000-0000-0000-0000-000000000fbd"
      },
      "phone_number": "1234567890",
      "title": null,
      "work_phone_number": "1234567891"
    },
    {
      "company": {
        "id": "00000000-0000-0000-0000-0000000007fc"
      },
      "custom_data": [
        {
          "id": 110,
          "name": "Custom Field 29",
          "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-000000000051",
      "last_name": "name2",
      "owner": {
        "id": "00000000-0000-0000-0000-000000000fc4"
      },
      "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

Get a contact

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

GET /public/v1/contacts/00000000-0000-0000-0000-00000000002e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODUsImlhdCI6MTc4NDg4ODg4NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMTk4NjAwMzctMjAxMC00YzM4LThjNTMtNjBkNTU3ZWY2MjJhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg3MiIsInR5cCI6ImFjY2VzcyJ9.uXaJ4zRJBo-4iceOkUNn7_gG3fVQvGC6Qhubasd8d4I

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 19606fc45e77e0a2a49214fa844aa498-d6261786770d8945-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-000000000611"
    },
    "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-00000000002e",
    "last_name": "Doe",
    "owner": {
      "id": "00000000-0000-0000-0000-000000000b4a"
    },
    "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGRiZjQxZTYtMjlkMC00N2RhLTk3Y2YtNmRjNmNjNzQ5ZDBkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY4NSIsInR5cCI6ImFjY2VzcyJ9.pRZKbUILtHYxQyqS2lgyj-Y9tBER9P4JbYiVO5k791g
{
  "company_id": "00000000-0000-0000-0000-000000000758",
  "custom_data": {
    "92": "Preferred"
  },
  "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-000000000e67",
  "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: 08d6d8da072ef039622633aa3fc8f5ba-f022a88c0381541c-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-000000000758"
    },
    "custom_data": [
      {
        "id": 92,
        "name": "Custom Field 14",
        "value": "Preferred"
      }
    ],
    "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-000000000047",
    "last_name": "Doe",
    "owner": {
      "id": "00000000-0000-0000-0000-000000000e67"
    },
    "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

CustomField

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmVhOWVlNzctZDViNy00ZjE5LWJkY2ItMGQwNTE2MTdhOGMzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzk0MSIsInR5cCI6ImFjY2VzcyJ9.rVadzMCknf4GCeqoP2PZmebU-UsfFaFAYzAxRYPDbKY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e131a68a3fd9058f0c82ceec32934961-cec52aff4a0ecf75-0
{
  "data": [
    {
      "description": null,
      "field_options": [],
      "field_type": "text",
      "filterable": false,
      "id": 105,
      "name": "Field 1",
      "parent_object": "product",
      "required": false
    },
    {
      "description": null,
      "field_options": [
        "A",
        "B"
      ],
      "field_type": "dropdown",
      "filterable": true,
      "id": 106,
      "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWU2MTVmMmEtZTJhOS00ZjBlLWJhNjgtM2ZmZjZkMzk2YTEzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzMzOSIsInR5cCI6ImFjY2VzcyJ9.YuEPEtd8OgfCRRXGAV2HrexQzW-vpbJw1WAsCwvyGK4
{
  "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: 60f9e80c1ce96aaa2a22bb83e606945a-7cc00e5a9a0836d5-0
{
  "data": {
    "description": "Notes",
    "field_options": [],
    "field_type": "text",
    "filterable": false,
    "id": 79,
    "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTU5NjU0MzItYzcwNi00YTJmLWI0M2UtZmI5NzJiZTIyNjhmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQyOSIsInR5cCI6ImFjY2VzcyJ9.FPzxkl2PC7QRXn9Re6cF2hZ4IL-HIo78hYR0eY6phDA
{
  "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: b6a16aa8e8f63333142179eaefc8f020-3fa49be2671c0c06-0
{
  "data": {
    "description": null,
    "field_options": [],
    "field_type": "date",
    "filterable": false,
    "id": 83,
    "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGYxODcxYzEtNDlkYi00MTgwLTk3MTYtM2QwZTQ0YTY5NWQwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzUyMyIsInR5cCI6ImFjY2VzcyJ9.9YR8MAKZid2qjnhWMSJEycgh0Sv4YcUX5p8ACV-mNxM
{
  "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: df95054e1be3692745d40938fc008ff8-2d3f5ac861f96ddc-0
{
  "data": {
    "description": null,
    "field_options": [
      "A",
      "B"
    ],
    "field_type": "dropdown",
    "filterable": true,
    "id": 87,
    "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzk4MjUzNzAtM2Q1Yy00NWJhLTk5Y2UtMjhmOWFlOGQyOTRkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg3MyIsInR5cCI6ImFjY2VzcyJ9.UdPpBO_FKMGVWrxOvxEcc2PU0Bu4tAi7YpUk-Q-5PfY
{
  "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: 14bc32e592d27e7bd631f7690230af12-96029cae9da5662a-0
{
  "data": {
    "description": null,
    "field_options": [
      "Option 1"
    ],
    "field_type": "checkbox",
    "filterable": true,
    "id": 101,
    "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/71
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWRiZmVmMGMtZjVlMC00Mzg1LTgwZmUtOTExNWNjMjQ1NjAwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk1MCIsInR5cCI6ImFjY2VzcyJ9.u4m8P6nnlK56ilOfB7EsnSbEP2nGfSojls5g8l7rTl0

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f63c3a372b4622d2cf5c89d5b8e45440-e695995c9173b850-0
{
  "data": {
    "description": "A test field",
    "field_options": [
      "A",
      "B",
      "C"
    ],
    "field_type": "dropdown",
    "filterable": true,
    "id": 71,
    "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

Update a custom field

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

POST /public/v1/custom-fields/72
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2FkMTAwMjUtODA3YS00ZGJhLWIzMzMtMDU4ZjJmODQwNmRmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzAwMyIsInR5cCI6ImFjY2VzcyJ9.wfvMTz5eHcnM96Rw4oiKbKLqrNndlRvjGycweovDN2M
{
  "name": "Updated Name"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f8db8bbe3d84146366b8de96b9cac97f-1fbd886d8bc9ca5e-0
{
  "data": {
    "description": null,
    "field_options": [],
    "field_type": "text",
    "filterable": false,
    "id": 72,
    "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmQ2ZjgxOTctMTM4Ni00MjUyLTljYWMtZDU0ZjExODc3NmMzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzc2MSIsInR5cCI6ImFjY2VzcyJ9.z-TKVt8HcFR5r3NDMDsuSFr18LT0aOsh1fm8o2vRKak
{
  "file": {
    "filename": "test-image.png",
    "content_type": "image/png"
  },
  "name": "My Test Image",
  "product_id": "39466942-7436-48c0-ab95-3c06e6044015"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 584f64bf3c0ef80b97bae38af5da30ab-c000899bca234728-0
{
  "data": {
    "agent_chat_thread_id": null,
    "ai_order_intake_id": null,
    "ai_purchase_intake_id": null,
    "assembly_id": null,
    "batch_id": null,
    "company_relationship_id": null,
    "contact_id": null,
    "id": "00000000-0000-0000-0000-000000000031",
    "invoice_id": null,
    "license_id": null,
    "mime_type": "image/png",
    "name": "My Test Image",
    "order_id": null,
    "order_shipment_id": null,
    "product_id": "39466942-7436-48c0-ab95-3c06e6044015",
    "purchase_id": null,
    "request_id": null,
    "return_id": null,
    "size_in_bytes": 355974,
    "stock_transfer_id": null,
    "task_id": null,
    "upload_datetime": "2026-07-24T10:28:08.879210Z",
    "uploader": {
      "id": "00000000-0000-0000-0000-000000000eb1",
      "name": "FirstName1818 LastName1819"
    },
    "url": "/var/folders/2z/jg98hkm57rx18c_x3bnqbr8c0000gn/T/75e3c724-0ff8-41c1-910a-8e33299e116b/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[]=99cbae58-2d6d-4cf8-aaab-331afe7f696b
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTQsImlhdCI6MTc4NDg4ODg5NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTRjMmYyYzktNTM5NC00MTVjLWE4N2ItYWY0NzhhNDllZjJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTE4MiIsInR5cCI6ImFjY2VzcyJ9.Jb59nt6zAMHY_ZhXE9nF1tSgJCS9-8Ni-MbUsbbtuAQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0fcd242053832499ca9982a5d09df573-3d2d2d065d229b9e-0
{
  "data": [
    {
      "active": "10.000000000",
      "available": "10.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "99cbae58-2d6d-4cf8-aaab-331afe7f696b",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:14.325113Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDc4NzMwMGQtMDQ4Ny00MjY2LTk3ZmYtNzJhM2U1NDNlYTNlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDU3MyIsInR5cCI6ImFjY2VzcyJ9.0xpL0uLQ42388N-5L0m2RH3ySjKiSZvw13HIK4EI6rw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 00a31f33b830ed9df289799c7311a1d5-03210e8e8c56a100-0
{
  "data": [
    {
      "active": "100.000000000",
      "available": "90.000000000",
      "cost_default_per_unit": "2.06",
      "cost_per_unit_actual": "0.03",
      "product_id": "01a41bfa-ba60-4aa3-ab0a-d93fbe8588dd",
      "reserved": "10.000000000",
      "total_cost_actual": "3",
      "total_cost_default": "206",
      "updated_datetime": "2026-07-24T10:28:12.060563Z"
    },
    {
      "active": "95.000000000",
      "available": "80.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "4b1595ce-7d5c-451b-aeeb-455b28bdb837",
      "reserved": "15.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.061509Z"
    },
    {
      "active": "50.000000000",
      "available": "50.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "b3ab4663-d976-4e8c-a3f2-12b83f8f6d92",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:11.976597Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmM1ZjAyN2EtMjc2NC00YjEyLWFlMGEtYWNhMmM2OTEwNDFlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0MiIsInR5cCI6ImFjY2VzcyJ9.moEp5Li8B18iPopR5x29p-U7i6Q-lQAqbelWTeKeDZk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 8ed77a85c54384b88e1abf764b24b72d-747327bfc1912f3a-0
{
  "data": [
    {
      "active": "0.000000000",
      "available": "-15.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000370",
      "product_id": "276f2001-a1ac-41a5-9357-8d2ed8281da3",
      "reserved": "15.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.543214Z"
    },
    {
      "active": "0.000000000",
      "available": "-8.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000371",
      "product_id": "276f2001-a1ac-41a5-9357-8d2ed8281da3",
      "reserved": "8.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.544592Z"
    },
    {
      "active": "190.000000000",
      "available": "169.000000000",
      "cost_default_per_unit": "1",
      "cost_per_unit_actual": "0.5",
      "location_id": "00000000-0000-0000-0000-000000000389",
      "product_id": "276f2001-a1ac-41a5-9357-8d2ed8281da3",
      "reserved": "21.000000000",
      "total_cost_actual": "95",
      "total_cost_default": "190",
      "updated_datetime": "2026-07-24T10:28:08.545943Z"
    },
    {
      "active": "80.000000000",
      "available": "80.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-00000000038a",
      "product_id": "276f2001-a1ac-41a5-9357-8d2ed8281da3",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.447516Z"
    },
    {
      "active": "0.000000000",
      "available": "-1.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": null,
      "product_id": "276f2001-a1ac-41a5-9357-8d2ed8281da3",
      "reserved": "1.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.550921Z"
    },
    {
      "active": "100.000000000",
      "available": "100.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000371",
      "product_id": "d054ccac-50bb-46b7-bcf6-9ec87829e7ce",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:07.990188Z"
    },
    {
      "active": "30.000000000",
      "available": "26.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": null,
      "product_id": "d054ccac-50bb-46b7-bcf6-9ec87829e7ce",
      "reserved": "4.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.549396Z"
    },
    {
      "active": "100.000000000",
      "available": "90.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000370",
      "product_id": "d400426b-0085-4ed8-8c4f-734bd46f930b",
      "reserved": "10.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.539234Z"
    },
    {
      "active": "0.000000000",
      "available": "-1.000000000",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "location_id": "00000000-0000-0000-0000-000000000371",
      "product_id": "d400426b-0085-4ed8-8c4f-734bd46f930b",
      "reserved": "1.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:08.541788Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTIwNDYxNjYtYzkxMS00ZmFmLWE4NGMtYjdhYjQwZGM5YjYyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDMxMCIsInR5cCI6ImFjY2VzcyJ9.l4CXlG4Y5ahIFDqbQ2qGJyJrj8coAYOpYAgq0GgZPzQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ebec8082b51bb53064e4c0190d989a81-50e00b53c913aa0e-0
{
  "data": [
    {
      "active": "19.000000000",
      "available": "19.000000000",
      "batch_number": null,
      "cost_default_per_unit": "2",
      "cost_per_unit_actual": "1",
      "product_id": "02944807-4389-4f9b-b27e-7f89399d8827",
      "reserved": "0.000000000",
      "total_cost_actual": "19",
      "total_cost_default": "38",
      "updated_datetime": "2026-07-24T10:28:10.598538Z"
    },
    {
      "active": "13.000000000",
      "available": "13.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "02944807-4389-4f9b-b27e-7f89399d8827",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:10.674117Z"
    },
    {
      "active": "43.000000000",
      "available": "43.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "1ef2d9d3-f083-4293-bb0d-deb55ccc57b2",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:10.847559Z"
    },
    {
      "active": "47.000000000",
      "available": "47.000000000",
      "batch_number": "1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "1ef2d9d3-f083-4293-bb0d-deb55ccc57b2",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:10.945429Z"
    },
    {
      "active": "25.000000000",
      "available": "25.000000000",
      "batch_number": "2",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "1ef2d9d3-f083-4293-bb0d-deb55ccc57b2",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:10.993951Z"
    },
    {
      "active": "8.000000000",
      "available": "8.000000000",
      "batch_number": "TEST-1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "77134fe8-8792-434e-9407-1d147c7fc3f8",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:10.715594Z"
    },
    {
      "active": "26.000000000",
      "available": "26.000000000",
      "batch_number": null,
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "f2bb40a3-7e99-4123-8684-11ca9c5d7f2d",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:11.060165Z"
    },
    {
      "active": "27.000000000",
      "available": "27.000000000",
      "batch_number": "1",
      "cost_default_per_unit": null,
      "cost_per_unit_actual": null,
      "product_id": "f2bb40a3-7e99-4123-8684-11ca9c5d7f2d",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:11.102019Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTcwZDhkM2YtMmM4MS00OGNhLThkNzQtZDMyYzk2Nzg3MjkxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDcwMCIsInR5cCI6ImFjY2VzcyJ9.oUKz5nHDqJa_2hut51mXHTFTzM39QfUbw-M0SK5C9sU

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4a8ef9db2ac53cd6dacca5b893798d63-46a21f3361cef5c9-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-0000000004aa",
      "product_id": "4f1ca994-64a1-44c2-9387-1f745c73c570",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.613875Z"
    },
    {
      "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-0000000004aa",
      "product_id": "4f1ca994-64a1-44c2-9387-1f745c73c570",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.774644Z"
    },
    {
      "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-0000000004ab",
      "product_id": "4f1ca994-64a1-44c2-9387-1f745c73c570",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.695144Z"
    },
    {
      "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-0000000004ab",
      "product_id": "4f1ca994-64a1-44c2-9387-1f745c73c570",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.843727Z"
    },
    {
      "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-0000000004aa",
      "product_id": "5b0d9d80-0fe2-4ec0-93af-bfad789f96bc",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.408655Z"
    },
    {
      "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-0000000004aa",
      "product_id": "5b0d9d80-0fe2-4ec0-93af-bfad789f96bc",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.480427Z"
    },
    {
      "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-0000000004ab",
      "product_id": "5b0d9d80-0fe2-4ec0-93af-bfad789f96bc",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.447323Z"
    },
    {
      "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-0000000004ab",
      "product_id": "5b0d9d80-0fe2-4ec0-93af-bfad789f96bc",
      "reserved": "0.000000000",
      "total_cost_actual": null,
      "total_cost_default": null,
      "updated_datetime": "2026-07-24T10:28:12.513363Z"
    }
  ],
  "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 false ["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 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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTUsImlhdCI6MTc4NDg4ODg5NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWI2Nzc0YjgtM2Y0Yi00MjFhLTk0M2QtZDg5NzgxMGFmYmU0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTI4OCIsInR5cCI6ImFjY2VzcyJ9.L5L873ZWJX9CVM3N3Xr4p1A8iNhtUHdwx-KW1p36A7I

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 6c4bae90f751566ff997f0874b9bc1d3-00c24694e3c6f10d-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000aeb",
        "name": "Company 1829",
        "updated_datetime": "2026-07-24T10:28:15.316834Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2414@example.com",
        "full_name": "FirstName4898 LastName4899",
        "id": "00000000-0000-0000-0000-0000000014b9",
        "role": {
          "id": "00000000-0000-0000-0000-00000000150d",
          "name": "Admin 2470"
        }
      },
      "custom_data": [
        {
          "id": 136,
          "name": "Custom Field 41",
          "value": null
        }
      ],
      "due_datetime": "2026-07-24T10:28:15.377772Z",
      "id": "00000000-0000-0000-0000-000000000091",
      "inserted_datetime": "2026-07-24T10:28:15.378231Z",
      "invoice_datetime": "2026-07-24T10:28:15.377772Z",
      "invoice_number": "Invoice #59",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000007cd",
            "name": "B2693"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-0000000000cf",
          "order_item_id": "b102cf5e-537b-409c-9e8b-a25e337c2ef0",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "b35ab3b2-5747-42e3-8419-24d443943fbe",
            "name": "Product 2691",
            "sku": "sku 2692",
            "updated_datetime": "2026-07-24T10:28:15.326726Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000007d0",
            "name": "B2702"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-0000000000d0",
          "order_item_id": "d1b39a3a-4d90-46ee-9bfc-001be177f7c0",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "f14f1feb-1bf6-48ba-94d2-16f6e5d1fdad",
            "name": "Product 2700",
            "sku": "sku 2701",
            "updated_datetime": "2026-07-24T10:28:15.336944Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "7559a218-3697-4229-9028-7773c0ad9654",
        "order_number": "SO-101",
        "status": "Pending",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2414@example.com",
        "full_name": "FirstName4898 LastName4899",
        "id": "00000000-0000-0000-0000-0000000014b9",
        "role": {
          "id": "00000000-0000-0000-0000-00000000150d",
          "name": "Admin 2470"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "200.00",
      "status": "NOT_PAID",
      "total": "200.00",
      "updated_datetime": "2026-07-24T10:28:15.378231Z"
    },
    {
      "charges": [
        {
          "id": "08c79bc5-764e-43a7-b2f9-3a6d3a182594",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-000000000ade",
        "name": "Company 1815",
        "updated_datetime": "2026-07-24T10:28:15.196560Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "user1@a.com",
        "full_name": "John Foo",
        "id": "00000000-0000-0000-0000-0000000014a5",
        "role": {
          "id": "00000000-0000-0000-0000-0000000014f9",
          "name": "Admin 2450"
        }
      },
      "custom_data": [
        {
          "id": 136,
          "name": "Custom Field 41",
          "value": "Custom Field Value 1"
        }
      ],
      "due_datetime": "2020-01-01T00:00:01.000000Z",
      "id": "00000000-0000-0000-0000-000000000090",
      "inserted_datetime": "2026-07-24T10:28:15.217228Z",
      "invoice_datetime": "2020-01-01T00:00:02.000000Z",
      "invoice_number": "INV-123",
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-0000000007be",
            "name": "B1"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-0000000000ce",
          "order_item_id": "149df37c-78d0-4280-8b23-4cd04be46d89",
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000179",
            "id": "00000000-0000-0000-0000-0000000000d0",
            "metrc_label": "ABCDEF012345670000000179",
            "status": "active"
          },
          "price": "10.000000000",
          "product": {
            "id": "66ffca9c-fb7a-4d7a-8b8f-06f591f59515",
            "name": "P1",
            "sku": "SKU1",
            "updated_datetime": "2026-07-24T10:28:15.166122Z"
          },
          "quantity": "1.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "462c3b4e-9200-4fd1-b06b-9a4b3abbb9f6",
        "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-0000000014a6",
        "role": {
          "id": "00000000-0000-0000-0000-0000000014fa",
          "name": "Admin 2451"
        }
      },
      "paid_amount": "5.00",
      "remaining_amount": "3.00",
      "status": "PARTIALLY_PAID",
      "total": "8.00",
      "updated_datetime": "2026-07-24T10:28:15.244062Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjVhMGY3NzctZDkwZi00NDViLTg0ZTQtMDE2NTkyNmM3NjEyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMSIsInR5cCI6ImFjY2VzcyJ9.hiLSbPgQz9bxW010sIcEq1uvPPz1vmDGCbdqgT_Yppo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0dafffb8d28c82dc668b78aa08059c43-110e2e2dd7ec8724-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000090a",
        "name": "Company 1248",
        "updated_datetime": "2026-07-24T10:28:11.349447Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1669@example.com",
        "full_name": "FirstName3408 LastName3409",
        "id": "00000000-0000-0000-0000-0000000011c5",
        "role": {
          "id": "00000000-0000-0000-0000-000000001219",
          "name": "Admin 1714"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:11.475651Z",
      "id": "00000000-0000-0000-0000-00000000006b",
      "inserted_datetime": "2026-07-24T10:28:11.476041Z",
      "invoice_datetime": "2026-07-24T10:28:11.475650Z",
      "invoice_number": "Invoice #25",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000061e",
            "name": "B1511"
          },
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "00000000-0000-0000-0000-00000000008e",
          "order_item_id": "7f597d89-8fbd-4b9b-af9b-57f371de3cdf",
          "package": null,
          "price": "657522.000000000",
          "product": {
            "id": "3e63ebf1-d788-451d-8d23-f200ef280e40",
            "name": "Product 1509",
            "sku": "sku 1510",
            "updated_datetime": "2026-07-24T10:28:11.281401Z"
          },
          "quantity": "2.000000000",
          "returned_quantity": "2",
          "total_cost_actual": "20.052",
          "total_cost_default": "10"
        }
      ],
      "order": {
        "id": "09e4a363-a0ff-4a9b-871c-15a0d2320e73",
        "order_number": "SO-0000001",
        "status": "Processing",
        "total": "1315044.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1669@example.com",
        "full_name": "FirstName3408 LastName3409",
        "id": "00000000-0000-0000-0000-0000000011c5",
        "role": {
          "id": "00000000-0000-0000-0000-000000001219",
          "name": "Admin 1714"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "32.00",
      "status": "NOT_PAID",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:11.476041Z"
    }
  ],
  "next_page": null
}

GET /invoices/ allows filtering by several statuses

GET /public/v1/invoices?status[]=Fully+Paid&status[]=Not+Paid
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGMwMDQ3MWYtOGEwYS00ODEyLWJlZjgtMWI0NjBkZDM4NTc3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY1MSIsInR5cCI6ImFjY2VzcyJ9.zCsNEgxM_S9DKl70pSi7_SsCjMNuPKAJHhIblj2b5dQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2c5ae50476efa46d6c610841538aa4a4-d6caf56d25a7b133-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000097f",
        "name": "Company 1393",
        "updated_datetime": "2026-07-24T10:28:12.313392Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1828@example.com",
        "full_name": "FirstName3726 LastName3727",
        "id": "00000000-0000-0000-0000-000000001264",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012b6",
          "name": "Admin 1871"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:12.368046Z",
      "id": "00000000-0000-0000-0000-000000000073",
      "inserted_datetime": "2026-07-24T10:28:12.368579Z",
      "invoice_datetime": "2020-01-01T12:30:00.000000Z",
      "invoice_number": "Invoice #33",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000067a",
            "name": "B1794"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000009d",
          "order_item_id": "2a512d3b-7134-4f39-859f-161516972b00",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "be573c21-e14d-4f2a-ada3-80f48449d81c",
            "name": "Product 1792",
            "sku": "sku 1793",
            "updated_datetime": "2026-07-24T10:28:12.322141Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000067b",
            "name": "B1797"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000009e",
          "order_item_id": "aa98245c-dd3c-4c78-b420-11ac17033e09",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "94ef6030-9e8b-4d3a-b061-2f138978ca53",
            "name": "Product 1795",
            "sku": "sku 1796",
            "updated_datetime": "2026-07-24T10:28:12.330570Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "834140b1-cfcf-4153-a669-4c7c3dd59d2f",
        "order_number": "SO-45",
        "status": "Pending",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1828@example.com",
        "full_name": "FirstName3726 LastName3727",
        "id": "00000000-0000-0000-0000-000000001264",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012b6",
          "name": "Admin 1871"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "200.00",
      "status": "NOT_PAID",
      "total": "200.00",
      "updated_datetime": "2026-07-24T10:28:12.368579Z"
    },
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000975",
        "name": "Company 1381",
        "updated_datetime": "2026-07-24T10:28:12.229117Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1810@example.com",
        "full_name": "FirstName3690 LastName3691",
        "id": "00000000-0000-0000-0000-000000001252",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012a4",
          "name": "Admin 1853"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:12.286841Z",
      "id": "00000000-0000-0000-0000-000000000072",
      "inserted_datetime": "2026-07-24T10:28:12.287382Z",
      "invoice_datetime": "2020-01-01T12:20:00.000000Z",
      "invoice_number": "Invoice #32",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000672",
            "name": "B1772"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000009b",
          "order_item_id": "01dbe001-36c8-47f9-8348-53b4ca22fc16",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "c5da0ede-de61-4bb9-a256-429a4eb88143",
            "name": "Product 1770",
            "sku": "sku 1771",
            "updated_datetime": "2026-07-24T10:28:12.237672Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000674",
            "name": "B1776"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-00000000009c",
          "order_item_id": "e66b36f1-f7eb-480c-a51f-d708c713cb56",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "3d97b5ba-f479-4f0d-b4e3-638042037fd5",
            "name": "Product 1774",
            "sku": "sku 1775",
            "updated_datetime": "2026-07-24T10:28:12.246079Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "340aa996-ad60-4aec-98db-7bb8ed96dbdd",
        "order_number": "SO-44",
        "status": "Pending",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1810@example.com",
        "full_name": "FirstName3690 LastName3691",
        "id": "00000000-0000-0000-0000-000000001252",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012a4",
          "name": "Admin 1853"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "200.00",
      "status": "FULLY_PAID",
      "total": "200.00",
      "updated_datetime": "2026-07-24T10:28:12.287382Z"
    },
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000964",
        "name": "Company 1355",
        "updated_datetime": "2026-07-24T10:28:12.040708Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1775@example.com",
        "full_name": "FirstName3620 LastName3621",
        "id": "00000000-0000-0000-0000-00000000122f",
        "role": {
          "id": "00000000-0000-0000-0000-000000001280",
          "name": "Admin 1818"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:12.114160Z",
      "id": "00000000-0000-0000-0000-000000000070",
      "inserted_datetime": "2026-07-24T10:28:12.114630Z",
      "invoice_datetime": "2020-01-01T12:00:00.000000Z",
      "invoice_number": "Invoice #30",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000665",
            "name": "B1731"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-000000000097",
          "order_item_id": "914a6a1d-1934-45c7-bd16-494d0f4a6063",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "566b50e6-ab3a-4f0a-b55a-115997f7e030",
            "name": "Product 1729",
            "sku": "sku 1730",
            "updated_datetime": "2026-07-24T10:28:12.052356Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000666",
            "name": "B1734"
          },
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "00000000-0000-0000-0000-000000000098",
          "order_item_id": "139ecd66-a86d-43cc-a49e-6089b321cfed",
          "package": null,
          "price": "10.000000000",
          "product": {
            "id": "7a1e74ac-f84b-4351-8b08-74c53e446ee6",
            "name": "Product 1732",
            "sku": "sku 1733",
            "updated_datetime": "2026-07-24T10:28:12.066416Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        }
      ],
      "order": {
        "id": "50ac7958-6225-4dbb-bb7f-2835226fbd85",
        "order_number": "SO-42",
        "status": "Pending",
        "total": "320.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1775@example.com",
        "full_name": "FirstName3620 LastName3621",
        "id": "00000000-0000-0000-0000-00000000122f",
        "role": {
          "id": "00000000-0000-0000-0000-000000001280",
          "name": "Admin 1818"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "200.00",
      "status": "FULLY_PAID",
      "total": "200.00",
      "updated_datetime": "2026-07-24T10:28:12.114630Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTYsImlhdCI6MTc4NDg4ODg5NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmQ2Y2UwZDUtN2FjZi00MDcxLTk0ZDEtMGQ3OTU4YjJiZjMzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTM3NSIsInR5cCI6ImFjY2VzcyJ9.S7DQ-HS-Y1TVB2S-7vfqPFItXe3vTRTtrJgFwUq65II

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e0b5ceffbc3fef5e8fab5218148112c8-3dff343e71d62fe4-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000b30",
        "name": "Company 1909",
        "updated_datetime": "2026-07-24T10:28:16.098633Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2500@example.com",
        "full_name": "FirstName5070 LastName5071",
        "id": "00000000-0000-0000-0000-000000001510",
        "role": {
          "id": "00000000-0000-0000-0000-000000001565",
          "name": "Admin 2558"
        }
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:16.217915Z",
      "id": "00000000-0000-0000-0000-000000000097",
      "inserted_datetime": "2026-07-24T10:28:16.218156Z",
      "invoice_datetime": "2026-07-24T10:28:16.217914Z",
      "invoice_number": "Invoice #64",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000007ff",
            "name": "B2843"
          },
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "00000000-0000-0000-0000-0000000000d8",
          "order_item_id": "53fd2eb7-48b0-4a75-bb4d-9da82febb099",
          "package": null,
          "price": "237648.000000000",
          "product": {
            "id": "ee8d645d-7a08-4749-96d5-57522de16616",
            "name": "Product 2841",
            "sku": "sku 2842",
            "updated_datetime": "2026-07-24T10:28:16.059075Z"
          },
          "quantity": "1.000000000",
          "returned_quantity": "1",
          "total_cost_actual": "10.026",
          "total_cost_default": "5"
        }
      ],
      "order": {
        "id": "c5027b39-ec3a-4ab6-a2ab-5776bde120d4",
        "order_number": "SO-0000001",
        "status": "Processing",
        "total": "475296.00"
      },
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2500@example.com",
        "full_name": "FirstName5070 LastName5071",
        "id": "00000000-0000-0000-0000-000000001510",
        "role": {
          "id": "00000000-0000-0000-0000-000000001565",
          "name": "Admin 2558"
        }
      },
      "paid_amount": "0.0",
      "remaining_amount": "32.00",
      "status": "NOT_PAID",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:16.218156Z"
    }
  ],
  "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-000000000095/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTUsImlhdCI6MTc4NDg4ODg5NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDQxZDE4NTktNzU2Zi00NDczLWIxZjUtNWUzM2NmYzkxYjAyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTM1MSIsInR5cCI6ImFjY2VzcyJ9.C-4RJYu4fSac3Xi0Yp-YYlTyy8cEoAKdekdeEdOyh_o
{
  "amount": 100.01,
  "description": "Payment for invoice",
  "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: c72fe56b2dba43335d933940b06f9cc1-291ee327c3ab0f47-0
{
  "data": {
    "amount": "100",
    "description": "Payment for invoice",
    "id": "00000000-0000-0000-0000-000000000008",
    "inserted_datetime": "2026-07-24T10:28:15.721979Z",
    "invoice_id": "00000000-0000-0000-0000-000000000095",
    "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",
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_sync_enqueued": true
  }
}

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-000000000095/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTUsImlhdCI6MTc4NDg4ODg5NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDQxZDE4NTktNzU2Zi00NDczLWIxZjUtNWUzM2NmYzkxYjAyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTM1MSIsInR5cCI6ImFjY2VzcyJ9.C-4RJYu4fSac3Xi0Yp-YYlTyy8cEoAKdekdeEdOyh_o
{
  "amount": 100.01,
  "description": "Payment for invoice",
  "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: c72fe56b2dba43335d933940b06f9cc1-8d400432a765eca3-0
{
  "data": {
    "amount": "100",
    "description": "Payment for invoice",
    "id": "00000000-0000-0000-0000-000000000009",
    "inserted_datetime": "2026-07-24T10:28:15.863869Z",
    "invoice_id": "00000000-0000-0000-0000-000000000095",
    "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",
    "quickbooks_deposit_account_id": "QBD-123",
    "quickbooks_sync_enqueued": true
  }
}

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 InvoicePayment

Get an invoice

GET /invoices/:id returns the expected invoice

GET /public/v1/invoices/00000000-0000-0000-0000-000000000099
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTYsImlhdCI6MTc4NDg4ODg5NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWJjMGU2OWQtODVmNy00NDdlLWFkYmEtNTQyNTZkYTRmODJiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQwNiIsInR5cCI6ImFjY2VzcyJ9.kFbRTrXx9bGVOYYU1wjiSdzCM1jd9VufZ6mVjuoYTMY

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ea86ec3971982f73bfcf99cca6d9ba0b-1bff205849032a17-0
{
  "data": {
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000b4a",
      "name": "Company 1938",
      "updated_datetime": "2026-07-24T10:28:16.400946Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2515@example.com",
      "full_name": "FirstName5100 LastName5101",
      "id": "00000000-0000-0000-0000-00000000151f",
      "role": {
        "id": "00000000-0000-0000-0000-000000001576",
        "name": "Admin 2575"
      }
    },
    "custom_data": [
      {
        "id": 137,
        "name": "Custom Field 42",
        "value": "Custom Field Value 1"
      }
    ],
    "due_datetime": "2026-07-24T10:28:16.465198Z",
    "id": "00000000-0000-0000-0000-000000000099",
    "inserted_datetime": "2026-07-24T10:28:16.465724Z",
    "invoice_datetime": "2026-07-24T10:28:16.465197Z",
    "invoice_number": "Invoice #66",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000819",
          "name": "B2921"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000db",
        "order_item_id": "1b2404c8-0d40-42a9-b754-5de6ef6bf025",
        "package": null,
        "price": "10.000000000",
        "product": {
          "id": "d3ba7648-9cbe-4178-853b-7e8020eb3028",
          "name": "Product 2919",
          "sku": "sku 2920",
          "updated_datetime": "2026-07-24T10:28:16.411559Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000081a",
          "name": "B2924"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000dc",
        "order_item_id": "9d8ba86e-151d-41a7-81d9-46ab07e335ed",
        "package": null,
        "price": "10.000000000",
        "product": {
          "id": "66a9b514-5d95-4b88-8730-4c99f53cb8f5",
          "name": "Product 2922",
          "sku": "sku 2923",
          "updated_datetime": "2026-07-24T10:28:16.424877Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "656e8ea0-a4a5-4172-8588-1d86dddefd28",
      "order_number": "SO-118",
      "status": "Pending",
      "total": "320.00"
    },
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2515@example.com",
      "full_name": "FirstName5100 LastName5101",
      "id": "00000000-0000-0000-0000-00000000151f",
      "role": {
        "id": "00000000-0000-0000-0000-000000001576",
        "name": "Admin 2575"
      }
    },
    "paid_amount": "0.0",
    "remaining_amount": null,
    "status": "NOT_PAID",
    "total": "200.00",
    "updated_datetime": "2026-07-24T10:28:16.465724Z"
  }
}

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

Upsert an invoice

POST /invoices creates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTUzMDEyYjMtYTVkYS00NTk1LTkyMWMtYTc4YzYwNGJhMWEzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDk4MiIsInR5cCI6ImFjY2VzcyJ9.AVrPDkWeAOHEWj9gfqiPtgitY4Hm_L2xzHEBGNTYslc
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004f3",
  "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": "617febb4-ec73-4378-a393-fd70acbe71e6",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "86424c3f-eb31-45a2-b559-d80564b934d0",
      "quantity": "10.000000000"
    }
  ],
  "order_id": "a080da5c-1d15-45fa-ad57-e056c4692115"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3bd7605ed05ed120eb45e8afe990eaae-ca6cc56c70736055-0
{
  "data": {
    "charges": [
      {
        "id": "9013f0fc-820a-4719-997c-dad4d543f384",
        "name": "C1",
        "percent": "10.0000",
        "price": "5.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "2d3c7005-b010-4245-b90e-03921c6fb751",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a23",
      "name": "Company 1582",
      "updated_datetime": "2026-07-24T10:28:13.309083Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000001376",
      "role": {
        "id": "00000000-0000-0000-0000-0000000013c3",
        "name": "Admin 2140"
      }
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:01.000000Z",
    "id": "00000000-0000-0000-0000-00000000007d",
    "inserted_datetime": "2026-07-24T10:28:13.363534Z",
    "invoice_datetime": "2020-01-01T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000734",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000b0",
        "order_item_id": "617febb4-ec73-4378-a393-fd70acbe71e6",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "ee2991fe-028d-41bf-944c-0f4c31b99140",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.322135Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000735",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000b1",
        "order_item_id": "86424c3f-eb31-45a2-b559-d80564b934d0",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "76ddcac5-4d2c-4382-aea6-58d8cb4079f7",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:13.330462Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "a080da5c-1d15-45fa-ad57-e056c4692115",
      "order_number": "SO-68",
      "status": "Processing",
      "total": "0.00"
    },
    "owner": null,
    "paid_amount": "0.0",
    "remaining_amount": "53.30",
    "status": "NOT_PAID",
    "total": "53.30",
    "updated_datetime": "2026-07-24T10:28:13.369653Z"
  }
}

POST /invoices updates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTUsImlhdCI6MTc4NDg4ODg5NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDM0MzBjZmUtMWJhYy00MjZmLWE4N2MtZDBkYmZiM2E2ZTI0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTMyMSIsInR5cCI6ImFjY2VzcyJ9.VogQo-7T5i5JAZYpEjELZ52ovXdhRZHl_dG4eTXNnPo
{
  "billing_location_id": "00000000-0000-0000-0000-000000000549",
  "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": "3068b7d8-f6a3-4772-a5f1-0df6c75dbb2c",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "7017ff0b-6f7e-4e7b-8969-3d2b43370372",
      "quantity": "10.000000000"
    }
  ],
  "order_id": "86e14782-0d1e-4d43-8f28-fdc2e5c26b07"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7eb27d54a364f56585402e667748cf4f-98f95c1e055ca2de-0
{
  "data": {
    "charges": [
      {
        "id": "c6a06798-9598-4c5e-bc79-07295c9ca4a9",
        "name": "C1",
        "percent": "10.0000",
        "price": "5.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "6a5d7c96-1db6-45a4-99c6-5b158c12cbc2",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000afa",
      "name": "Company 1846",
      "updated_datetime": "2026-07-24T10:28:15.436184Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000014c9",
      "role": {
        "id": "00000000-0000-0000-0000-00000000151d",
        "name": "Admin 2486"
      }
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:01.000000Z",
    "id": "00000000-0000-0000-0000-000000000093",
    "inserted_datetime": "2026-07-24T10:28:15.481911Z",
    "invoice_datetime": "2020-01-01T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000007d8",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000d1",
        "order_item_id": "3068b7d8-f6a3-4772-a5f1-0df6c75dbb2c",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "ce59b667-7af2-41b1-b3ea-badb38c23bef",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:15.448872Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000007d9",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000d2",
        "order_item_id": "7017ff0b-6f7e-4e7b-8969-3d2b43370372",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "9ce5b37f-5c5a-46a6-9174-4939a4583da3",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:15.456946Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "86e14782-0d1e-4d43-8f28-fdc2e5c26b07",
      "order_number": "SO-104",
      "status": "Processing",
      "total": "0.00"
    },
    "owner": null,
    "paid_amount": "0.0",
    "remaining_amount": "53.30",
    "status": "NOT_PAID",
    "total": "53.30",
    "updated_datetime": "2026-07-24T10:28:15.486372Z"
  }
}

POST /invoices updates an invoice

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTUsImlhdCI6MTc4NDg4ODg5NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDM0MzBjZmUtMWJhYy00MjZmLWE4N2MtZDBkYmZiM2E2ZTI0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTMyMSIsInR5cCI6ImFjY2VzcyJ9.VogQo-7T5i5JAZYpEjELZ52ovXdhRZHl_dG4eTXNnPo
{
  "billing_location_id": "00000000-0000-0000-0000-00000000054a",
  "charges": [
    {
      "id": "c6a06798-9598-4c5e-bc79-07295c9ca4a9",
      "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-000000000093",
  "invoice_datetime": "2020-01-02T00:00:00.000000Z",
  "items": [
    {
      "id": "00000000-0000-0000-0000-0000000000d1",
      "order_item_id": "3068b7d8-f6a3-4772-a5f1-0df6c75dbb2c",
      "quantity": "1.000000000"
    },
    {
      "order_item_id": "7017ff0b-6f7e-4e7b-8969-3d2b43370372",
      "quantity": "8.000000000"
    }
  ],
  "order_id": "86e14782-0d1e-4d43-8f28-fdc2e5c26b07"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7eb27d54a364f56585402e667748cf4f-954a8484def206b7-0
{
  "data": {
    "charges": [
      {
        "id": "c6a06798-9598-4c5e-bc79-07295c9ca4a9",
        "name": "C1",
        "percent": "10.0000",
        "price": "4.30",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "8fb7f43e-9ee6-4729-82ed-8bc2c32e7484",
        "name": "C3",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000afa",
      "name": "Company 1846",
      "updated_datetime": "2026-07-24T10:28:15.436184Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000014c9",
      "role": {
        "id": "00000000-0000-0000-0000-00000000151d",
        "name": "Admin 2486"
      }
    },
    "custom_data": [],
    "due_datetime": "2020-01-28T00:00:01.000000Z",
    "id": "00000000-0000-0000-0000-000000000093",
    "inserted_datetime": "2026-07-24T10:28:15.481911Z",
    "invoice_datetime": "2020-01-02T00:00:00.000000Z",
    "invoice_number": "INV-0000001",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000007d8",
          "name": "B1"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000d1",
        "order_item_id": "3068b7d8-f6a3-4772-a5f1-0df6c75dbb2c",
        "package": null,
        "price": "3.000000000",
        "product": {
          "id": "ce59b667-7af2-41b1-b3ea-badb38c23bef",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:15.448872Z"
        },
        "quantity": "1.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000007d9",
          "name": "B2"
        },
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "00000000-0000-0000-0000-0000000000d3",
        "order_item_id": "7017ff0b-6f7e-4e7b-8969-3d2b43370372",
        "package": null,
        "price": "5.000000000",
        "product": {
          "id": "9ce5b37f-5c5a-46a6-9174-4939a4583da3",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:15.456946Z"
        },
        "quantity": "8.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      }
    ],
    "order": {
      "id": "86e14782-0d1e-4d43-8f28-fdc2e5c26b07",
      "order_number": "SO-104",
      "status": "Processing",
      "total": "0.00"
    },
    "owner": null,
    "paid_amount": "0.0",
    "remaining_amount": "42.30",
    "status": "NOT_PAID",
    "total": "42.30",
    "updated_datetime": "2026-07-24T10:28:15.528783Z"
  }
}

POST /invoices reports various errors correctly on update

POST /public/v1/invoices
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTNhZmMxZDctNDU4NC00ZjNjLWI1NzgtZmRiZTYzNWQwN2Q1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk2OCIsInR5cCI6ImFjY2VzcyJ9.GZsOhZkF5T659w8zPfQrdTesf6ZL6PAlN-CRZ-mmyHM
{
  "billing_location_id": "00000000-0000-0000-0000-0000000002f7",
  "charges": [
    {
      "name": "C1",
      "percent": "-1000.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    }
  ],
  "due_datetime": "2020-01-30T00:00:01.000000Z",
  "id": "00000000-0000-0000-0000-000000000051",
  "invoice_datetime": "2020-01-01T00:00:00.000000Z",
  "items": [
    {
      "order_item_id": "00000000-0000-0000-0000-000000000000",
      "quantity": "15.000"
    },
    {
      "order_item_id": "be19d24f-8c9a-4e33-b976-9e357d3e029a",
      "quantity": "19.000"
    }
  ],
  "order_id": "4a9c92b8-21da-4f00-82d7-20beddb4580b"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: e223efea90a16a4817b4920fc192d412-bde6c81f7a1bdc7f-0
{
  "errors": [
    {
      "context": {
        "id": "f6e5e10d-6daa-4707-99c0-bfef0aedf088"
      },
      "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

Responses

Status Description Schema
200 A single invoice Invoice

Location

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOGFhZTY3MjgtZDUwZS00ZDk5LTk2OTktYzI4M2Y3MzI2YzVmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU0NCIsInR5cCI6ImFjY2VzcyJ9.LqyMJBKOqFFEHL2FtqD1k1DdvjEWZwm3YUXNP0AX_tA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e0ea8695a555fe4ddb2cea6c8ebd6eef-38f65e90951b17e5-0
{
  "data": [
    {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000a76",
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-00000000038b",
      "license": null,
      "license_id": null,
      "name": "Place 168"
    },
    {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000a76",
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-00000000038c",
      "license": {
        "id": "00000000-0000-0000-0000-0000000000e5",
        "license_number": "CDPH-00000030"
      },
      "license_id": "00000000-0000-0000-0000-0000000000e5",
      "name": "Place 169"
    }
  ],
  "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 location

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

GET /public/v1/locations/00000000-0000-0000-0000-00000000035c
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTg4NTlkNDMtZDM3OC00NjA1LTkyNGUtMzY3YzBkMGZlMmY2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzM3MCIsInR5cCI6ImFjY2VzcyJ9.2yUl9gG-lAGHjtSwKXlCVWjsqMStZWme9oD3qXs4SPk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ca4f9b5aca38a8261e744fc9d234ae97-2a39ba48278d978b-0
{
  "data": {
    "address": "123 Fake Street, Beverly Hills, CA 90210, US",
    "company_id": "00000000-0000-0000-0000-0000000009f9",
    "deleted_at": null,
    "id": "00000000-0000-0000-0000-00000000035c",
    "license": {
      "id": "00000000-0000-0000-0000-0000000000dd",
      "license_number": "CDPH-00000022"
    },
    "license_id": "00000000-0000-0000-0000-0000000000dd",
    "name": "Place 121"
  }
}

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

Menu

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDBmOWU3N2MtNmFlOS00ZGNlLTgzNzgtZmNiMGQyOTM4ZWYwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzc5OSIsInR5cCI6ImFjY2VzcyJ9.4scJeOWwUsB-3LhND7QGCEqPa7X5dygvkFQgUEIscug

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ec1e2723496b8265f494e62245eeb1c7-392e339ac18f9dd8-0
{
  "data": [
    {
      "active": true,
      "external_name": "Ext A",
      "id": "00000000-0000-0000-0000-000000000068",
      "inserted_datetime": "2026-07-24T10:28:08.987796Z",
      "internal_name": "Alpha",
      "product_count": 0,
      "updated_datetime": "2026-07-24T10:28:08.987796Z",
      "visibility": "PUBLIC"
    },
    {
      "active": true,
      "external_name": "Ext B",
      "id": "00000000-0000-0000-0000-000000000069",
      "inserted_datetime": "2026-07-24T10:28:09.002909Z",
      "internal_name": "Beta",
      "product_count": 0,
      "updated_datetime": "2026-07-24T10:28:09.002909Z",
      "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

Get a menu

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

GET /public/v1/menus/00000000-0000-0000-0000-000000000053
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmQyNDc3YjUtNWZkMy00MWEwLThhY2MtNDdkYzllYTkzYzJhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzM1MSIsInR5cCI6ImFjY2VzcyJ9.nF2pRg4oCCmd8HgPU8emFuA3u_9dDHeXBFJ8LwQLT-4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 70b11060f8721d54d53284faf68ebff7-e9b525c229717d31-0
{
  "data": {
    "active": true,
    "external_name": "External Test Menu",
    "id": "00000000-0000-0000-0000-000000000053",
    "inserted_datetime": "2026-07-24T10:28:07.621155Z",
    "internal_name": "Test Menu",
    "product_count": 1,
    "updated_datetime": "2026-07-24T10:28:07.621155Z",
    "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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTgsImlhdCI6MTc4NDg4ODg5OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDg3MTVhNWYtODkxYy00MWVjLWE5NDgtZDE3N2MwOWY0Y2QzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU0NyIsInR5cCI6ImFjY2VzcyJ9.yLDWf-d3EdtQWVdqmxd-TmKVmzuCJ-IuhAst0ImjT_k

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7bf50a78772638158e098f27a77a35a5-927bb6d766adb6a1-0
{
  "data": [
    {
      "billing_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000010c8",
        "id": "00000000-0000-0000-0000-00000000058d",
        "license_id": null,
        "license_number": null,
        "name": "Place 681"
      },
      "biotrack_id": null,
      "charges": [
        {
          "id": "d7797167-bffc-479e-a93b-8b92058153a0",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-000000000bc9",
        "name": "Company 2087",
        "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-0000000015a9",
        "role": {
          "id": "00000000-0000-0000-0000-000000001603",
          "name": "Admin 2716"
        }
      },
      "custom_data": [
        {
          "id": 140,
          "name": "Custom Field 45",
          "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": "48a87337-d990-4475-b183-fe9712631398",
      "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-0000000010c8",
        "id": "00000000-0000-0000-0000-00000000058d",
        "license_id": null,
        "license_number": null,
        "name": "Place 681"
      },
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-000000000878",
            "name": "B1"
          },
          "compliance_quantity": "10.0000",
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "80a2ef67-f1fa-4d22-bb83-14330493aa52",
          "is_sample": true,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-0000000010c8",
            "id": "00000000-0000-0000-0000-00000000058d",
            "license_id": null,
            "name": "Place 681"
          },
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000185",
            "id": "00000000-0000-0000-0000-0000000000d3",
            "metrc_label": "ABCDEF012345670000000185",
            "status": "active"
          },
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "b46d57bf-8f84-4171-a05c-51dcf07cf71c",
            "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": "4f19f7e4-7e37-40bf-a118-da0affa9c310",
      "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-0000000015aa",
        "role": {
          "id": "00000000-0000-0000-0000-000000001604",
          "name": "Admin 2717"
        }
      },
      "payment_term_name": null,
      "shipping_location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-0000000010c8",
        "id": "00000000-0000-0000-0000-00000000058d",
        "license_id": null,
        "license_number": null,
        "name": "Place 681"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTQsImlhdCI6MTc4NDg4ODg5NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTYxOGJjYTUtODY4Zi00M2U3LThmMzctMmMzMjc5ZmE3NTBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTE2MiIsInR5cCI6ImFjY2VzcyJ9.kqN4gEAiMjeD519wQ7_7QXQWdNVv-apq2MszyZVIt6s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 613dee55129bc831a96e572da9b36864-117430f9e45ee6cf-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000a80",
        "name": "Company 1700",
        "updated_datetime": "2026-07-24T10:28:14.184524Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2283@example.com",
        "full_name": "FirstName4636 LastName4637",
        "id": "00000000-0000-0000-0000-000000001432",
        "role": {
          "id": "00000000-0000-0000-0000-000000001483",
          "name": "Admin 2332"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-07-24T10:28:14.185423Z",
      "external_notes": null,
      "id": "42f02f47-ceef-487a-b27b-7598f69510b1",
      "inserted_datetime": "2026-07-24T10:28:14.198709Z",
      "internal_notes": null,
      "inventory_source": null,
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000778",
            "name": "B2436"
          },
          "compliance_quantity": null,
          "cost_per_unit": "10.026",
          "cost_per_unit_default": "5",
          "id": "1765954b-4de3-4bce-9e00-3434796adf84",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000f41",
            "id": "00000000-0000-0000-0000-00000000051a",
            "license_id": null,
            "name": "Place 566"
          },
          "package": null,
          "price": "192281.000000000",
          "price_base": "192281",
          "product": {
            "id": "b43598fd-77e1-4b33-ac72-f2d67277e666",
            "name": "Product 2434",
            "sku": "sku 2435",
            "updated_datetime": "2026-07-24T10:28:14.122688Z"
          },
          "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-07-24T10:28:14.185424Z",
      "order_number": "SO-0000001",
      "owner": null,
      "payment_term_name": null,
      "shipping_location": null,
      "status": "PROCESSING",
      "total": "384562.00",
      "updated_datetime": "2026-07-24T10:28:14.198709Z"
    }
  ],
  "next_page": null
}

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

GET /public/v1/orders?company_id=00000000-0000-0000-0000-000000000b57
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTYsImlhdCI6MTc4NDg4ODg5NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzJiZWI1MTAtMzA3My00MTFjLWIwMjctMDA0ZWFmY2EyMDRhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQyMSIsInR5cCI6ImFjY2VzcyJ9.x4ogFrxVtqxdqCw_bcrTNzn2z9JMWnrtRHe6yWmaQ1U

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9571680f9ef6d65d7feb7b98a5a65533-1b22fee36db41752-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000b57",
        "name": "Company 1953",
        "updated_datetime": "2026-07-24T10:28:16.580477Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2532@example.com",
        "full_name": "FirstName5134 LastName5135",
        "id": "00000000-0000-0000-0000-000000001531",
        "role": {
          "id": "00000000-0000-0000-0000-000000001588",
          "name": "Admin 2593"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-07-24T10:28:16.606702Z",
      "external_notes": null,
      "id": "0614b7cd-f9a3-4c71-bb91-72bfdd71934b",
      "inserted_datetime": "2026-07-24T10:28:16.607110Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000001043",
        "id": "00000000-0000-0000-0000-000000000567",
        "license_id": null,
        "license_number": null,
        "name": "Place 643"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000824",
            "name": "B2954"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "ea9317f1-8999-4684-a2b6-336a9dba5393",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "fb7810ab-d1fb-4405-b7a6-72fa1818997d",
            "name": "Product 2952",
            "sku": "sku 2953",
            "updated_datetime": "2026-07-24T10:28:16.615527Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000825",
            "name": "B2957"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "6fad69af-b5e8-477b-ab9a-7213817792a5",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f7346430-b2ac-4e5a-ae46-68e5d73172dc",
            "name": "Product 2955",
            "sku": "sku 2956",
            "updated_datetime": "2026-07-24T10:28:16.624038Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000826",
            "name": "B2960"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "4559a368-bb14-4aeb-8666-1f97b4a0914b",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "9382a600-d3c3-4274-8788-c42aba86e99c",
            "name": "Product 2958",
            "sku": "sku 2959",
            "updated_datetime": "2026-07-24T10:28:16.632532Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000827",
            "name": "B2963"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "74678fc3-f2cf-4012-810d-97c05782244e",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "7e277b46-1b28-48b5-b703-d9f3a9d9103b",
            "name": "Product 2961",
            "sku": "sku 2962",
            "updated_datetime": "2026-07-24T10:28:16.639721Z"
          },
          "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-120",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-2532@example.com",
        "full_name": "FirstName5134 LastName5135",
        "id": "00000000-0000-0000-0000-000000001531",
        "role": {
          "id": "00000000-0000-0000-0000-000000001588",
          "name": "Admin 2593"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-07-24T10:28:16.653933Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODgwNjgxNmEtY2IwMC00MDBmLWFkYTctYjk1YWQzN2IxYWMwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDcxNiIsInR5cCI6ImFjY2VzcyJ9.cqCFc1WKJXwIx-frXwZ1H8BMznosw2TUOIK_58TQjBs

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c56b78b8d1e32f84ae377a4381f5ba9a-44d0513598bcbc12-0
{
  "data": [
    {
      "billing_location": null,
      "biotrack_id": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000009ad",
        "name": "Company 1446",
        "updated_datetime": "2026-07-24T10:28:12.592549Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1901@example.com",
        "full_name": "FirstName3872 LastName3873",
        "id": "00000000-0000-0000-0000-0000000012ae",
        "role": {
          "id": "00000000-0000-0000-0000-000000001301",
          "name": "Admin 1946"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-07-24T10:28:12.607288Z",
      "external_notes": null,
      "id": "ed34ab51-12a8-4382-8185-ca7365ade70c",
      "inserted_datetime": "2026-07-24T10:28:12.607732Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000e15",
        "id": "00000000-0000-0000-0000-0000000004bf",
        "license_id": null,
        "license_number": null,
        "name": "Place 475"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006a9",
            "name": "B1925"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "d82d6828-23d9-42dc-a498-a8747cb70c84",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "00dab6a8-40ef-41e2-921a-5c01727947ba",
            "name": "Product 1922",
            "sku": "sku 1923",
            "updated_datetime": "2026-07-24T10:28:12.615415Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006aa",
            "name": "B1930"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "bdc38db0-0822-405c-be9c-f9874d47cb8f",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "1eb562e2-c9f7-4f4a-a5ed-43b15b6286a4",
            "name": "Product 1928",
            "sku": "sku 1929",
            "updated_datetime": "2026-07-24T10:28:12.623379Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006af",
            "name": "B1939"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "e9e48260-ada4-4bc7-8cdd-118357c713b0",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "346b19db-c8db-4b59-b8cb-0e89d1f68e86",
            "name": "Product 1937",
            "sku": "sku 1938",
            "updated_datetime": "2026-07-24T10:28:12.631768Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006b0",
            "name": "B1942"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "56a3438f-d35b-46a6-bfdc-960534e5e021",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "fe861468-cf6d-4eba-93c1-a81885e133ce",
            "name": "Product 1940",
            "sku": "sku 1941",
            "updated_datetime": "2026-07-24T10:28:12.640136Z"
          },
          "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-52",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1901@example.com",
        "full_name": "FirstName3872 LastName3873",
        "id": "00000000-0000-0000-0000-0000000012ae",
        "role": {
          "id": "00000000-0000-0000-0000-000000001301",
          "name": "Admin 1946"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "CANCELED",
      "total": "320.00",
      "updated_datetime": "2026-07-24T10:28:12.657398Z"
    },
    {
      "billing_location": null,
      "biotrack_id": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000099f",
        "name": "Company 1431",
        "updated_datetime": "2026-07-24T10:28:12.517580Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1885@example.com",
        "full_name": "FirstName3840 LastName3841",
        "id": "00000000-0000-0000-0000-00000000129e",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012f1",
          "name": "Admin 1930"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-07-24T10:28:12.531646Z",
      "external_notes": null,
      "id": "18560d46-392f-4995-b791-acb6cd64be07",
      "inserted_datetime": "2026-07-24T10:28:12.531980Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000e15",
        "id": "00000000-0000-0000-0000-0000000004ba",
        "license_id": null,
        "license_number": null,
        "name": "Place 470"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000069e",
            "name": "B1888"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "5c98c695-69b2-4fec-b26f-aaec467dc44d",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "c7ff3539-2334-470d-9319-b1f13eaa602b",
            "name": "Product 1886",
            "sku": "sku 1887",
            "updated_datetime": "2026-07-24T10:28:12.540482Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000069f",
            "name": "B1891"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "43d4604e-6710-411a-af65-45008533dc37",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "b8f171cc-f561-4613-8256-291e60d22f37",
            "name": "Product 1889",
            "sku": "sku 1890",
            "updated_datetime": "2026-07-24T10:28:12.548313Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006a0",
            "name": "B1894"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "f6da6d09-cbe7-41a2-9766-922573b3c213",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "28a40a0c-3677-48b4-b334-77be22d5f268",
            "name": "Product 1892",
            "sku": "sku 1893",
            "updated_datetime": "2026-07-24T10:28:12.556824Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000006a1",
            "name": "B1897"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "4f1155ce-ef12-49e0-bbb9-323b07af5bdd",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "23950312-ecdd-4333-904c-ad387e102914",
            "name": "Product 1895",
            "sku": "sku 1896",
            "updated_datetime": "2026-07-24T10:28:12.567130Z"
          },
          "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-50",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1885@example.com",
        "full_name": "FirstName3840 LastName3841",
        "id": "00000000-0000-0000-0000-00000000129e",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012f1",
          "name": "Admin 1930"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-07-24T10:28:12.584729Z"
    },
    {
      "billing_location": null,
      "biotrack_id": null,
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000984",
        "name": "Company 1400",
        "updated_datetime": "2026-07-24T10:28:12.338737Z"
      },
      "creator": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1838@example.com",
        "full_name": "FirstName3746 LastName3747",
        "id": "00000000-0000-0000-0000-00000000126e",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012c1",
          "name": "Admin 1882"
        }
      },
      "custom_data": [],
      "delivery_datetime": null,
      "due_datetime": "2026-07-24T10:28:12.371256Z",
      "external_notes": null,
      "id": "c729e712-1b46-4a20-86ed-bd68fd8677fa",
      "inserted_datetime": "2026-07-24T10:28:12.371704Z",
      "internal_notes": null,
      "inventory_source": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000e15",
        "id": "00000000-0000-0000-0000-0000000004b0",
        "license_id": null,
        "license_number": null,
        "name": "Place 460"
      },
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000681",
            "name": "B1821"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "1b048dac-030a-41b6-b5ea-2b398da46a57",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "60392939-8a0a-46c8-bbd5-e46a7229b361",
            "name": "Product 1819",
            "sku": "sku 1820",
            "updated_datetime": "2026-07-24T10:28:12.381592Z"
          },
          "quantity": "15.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000686",
            "name": "B1830"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "7a083f44-fbfb-4572-9166-b1eaeeb2774c",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "0062d08c-d314-4111-aa07-03ec61375abb",
            "name": "Product 1828",
            "sku": "sku 1829",
            "updated_datetime": "2026-07-24T10:28:12.396659Z"
          },
          "quantity": "10.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000688",
            "name": "B1834"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "903af2c7-869b-419c-ae26-cbb9ba0be47c",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "f3984c50-1023-4495-9521-fbf778c3e392",
            "name": "Product 1832",
            "sku": "sku 1833",
            "updated_datetime": "2026-07-24T10:28:12.408049Z"
          },
          "quantity": "5.000000000",
          "returned_quantity": "0",
          "total_cost_actual": null,
          "total_cost_default": null
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-000000000689",
            "name": "B1839"
          },
          "compliance_quantity": null,
          "cost_per_unit": null,
          "cost_per_unit_default": null,
          "id": "f824d0df-1787-4cc4-83b3-f9573cea01f0",
          "is_sample": false,
          "location": null,
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "31404f69-3db1-4a6b-9af1-8275d58d6fd8",
            "name": "Product 1835",
            "sku": "sku 1836",
            "updated_datetime": "2026-07-24T10:28:12.418127Z"
          },
          "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-46",
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-1838@example.com",
        "full_name": "FirstName3746 LastName3747",
        "id": "00000000-0000-0000-0000-00000000126e",
        "role": {
          "id": "00000000-0000-0000-0000-0000000012c1",
          "name": "Admin 1882"
        }
      },
      "payment_term_name": null,
      "shipping_location": null,
      "status": "COMPLETED",
      "total": "320.00",
      "updated_datetime": "2026-07-24T10:28:12.435232Z"
    }
  ],
  "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

Get an order

GET /orders/:id returns the expected order

GET /public/v1/orders/e10faf71-9092-43b6-a333-fbce5a4b4b1a
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTYsImlhdCI6MTc4NDg4ODg5NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjY0NDYzYTYtNDExNi00NTZiLTg0NmUtYTdhOWUwZTM1YjY4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQ2MSIsInR5cCI6ImFjY2VzcyJ9.xVTfyHqVKjSzNRHtlrS0_CLeafc2hPv1Yl7EPW_0n7I

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 31cff6022435e3222ed73629d44cb472-d782dcef11cfbf81-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000b7d",
      "name": "Company 1997",
      "updated_datetime": "2026-07-24T10:28:16.948314Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2569@example.com",
      "full_name": "FirstName5208 LastName5209",
      "id": "00000000-0000-0000-0000-000000001557",
      "role": {
        "id": "00000000-0000-0000-0000-0000000015b0",
        "name": "Admin 2633"
      }
    },
    "custom_data": [
      {
        "id": 138,
        "name": "Custom Field 43",
        "value": "Custom Field Value 1"
      }
    ],
    "delivery_datetime": null,
    "due_datetime": "2026-07-24T10:28:16.961613Z",
    "external_notes": null,
    "id": "e10faf71-9092-43b6-a333-fbce5a4b4b1a",
    "inserted_datetime": "2026-07-24T10:28:16.961898Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-00000000106f",
      "id": "00000000-0000-0000-0000-000000000576",
      "license_id": null,
      "license_number": null,
      "name": "Place 658"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000841",
          "name": "B3041"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "37b922eb-838a-4d1c-9192-3cc4a65a0b05",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "738218e1-2245-450c-8911-6cc022a4a584",
          "name": "Product 3039",
          "sku": "sku 3040",
          "updated_datetime": "2026-07-24T10:28:16.969015Z"
        },
        "quantity": "15.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000843",
          "name": "B3049"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "79286541-19a9-48f8-a741-8c489a37ad34",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "fe789732-a507-4f45-947b-36cdbac65180",
          "name": "Product 3045",
          "sku": "sku 3046",
          "updated_datetime": "2026-07-24T10:28:16.977646Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000845",
          "name": "B3055"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "83914eab-66a9-43cf-92e1-a03852015dfb",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "68f2ea12-4e2c-4cfd-bcbe-f050fe0d40af",
          "name": "Product 3051",
          "sku": "sku 3052",
          "updated_datetime": "2026-07-24T10:28:16.985212Z"
        },
        "quantity": "5.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000848",
          "name": "B3062"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "756ce418-fa61-4fd1-86a1-8099fdccb269",
        "is_sample": false,
        "location": null,
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "41e5f691-62a7-4d61-b270-fe958daff721",
          "name": "Product 3059",
          "sku": "sku 3060",
          "updated_datetime": "2026-07-24T10:28:16.992559Z"
        },
        "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-07-24T10:28:16.961613Z",
    "order_number": "SO-126",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2569@example.com",
      "full_name": "FirstName5208 LastName5209",
      "id": "00000000-0000-0000-0000-000000001557",
      "role": {
        "id": "00000000-0000-0000-0000-0000000015b0",
        "name": "Admin 2633"
      }
    },
    "payment_term_name": null,
    "shipping_location": null,
    "status": "COMPLETED",
    "total": "320.00",
    "updated_datetime": "2026-07-24T10:28:17.006563Z"
  }
}

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

GET /public/v1/orders/5a20e254-6b49-43c5-b6bc-4dbd59658cd8
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTksImlhdCI6MTc4NDg4ODg5OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWU4NDVlMjUtYjU3Mi00MTMyLWFlZjAtZmQ1MTc1MDI0YzcyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU2NiIsInR5cCI6ImFjY2VzcyJ9.ktFkwg-U-xAFtpOV-7TWGOHahIgcLp4bz4YlkxDzJoo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2285b6269abb1f790eed5988a6dc54d8-23113aa74909fb09-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000bd3",
      "name": "Company 2102",
      "updated_datetime": "2026-07-24T10:28:19.098625Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2671@example.com",
      "full_name": "FirstName5412 LastName5413",
      "id": "00000000-0000-0000-0000-0000000015c3",
      "role": {
        "id": "00000000-0000-0000-0000-00000000161e",
        "name": "Admin 2743"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2026-07-24T10:28:19.099484Z",
    "external_notes": null,
    "id": "5a20e254-6b49-43c5-b6bc-4dbd59658cd8",
    "inserted_datetime": "2026-07-24T10:28:19.114921Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000087e",
          "name": "B3228"
        },
        "compliance_quantity": null,
        "cost_per_unit": "10.026",
        "cost_per_unit_default": "5",
        "id": "eadadd16-8936-477e-ac10-5ef6a2c828d7",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010d7",
          "id": "00000000-0000-0000-0000-000000000593",
          "license_id": null,
          "name": "Place 687"
        },
        "package": null,
        "price": "81777.000000000",
        "price_base": "81777",
        "product": {
          "id": "17e2bfb7-3da3-4615-9f4d-5dba89e60011",
          "name": "Product 3226",
          "sku": "sku 3227",
          "updated_datetime": "2026-07-24T10:28:19.038618Z"
        },
        "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-07-24T10:28:19.099485Z",
    "order_number": "SO-0000001",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": null,
    "status": "PROCESSING",
    "total": "163554.00",
    "updated_datetime": "2026-07-24T10:28:19.114921Z"
  }
}

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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTcsImlhdCI6MTc4NDg4ODg5NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmVkODE2NzEtNGM3NS00OGQ3LWI4MmMtNzgzNWNlNjkyMzNjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTQ3OSIsInR5cCI6ImFjY2VzcyJ9.5G0LT7eIYle5xmv4gxJiAMpjSEYchLYDHRPyKeoFVHc
{
  "billing_location_id": "00000000-0000-0000-0000-00000000057a",
  "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-000000000b8f",
  "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-000000000579",
      "price_base": "10.000000000",
      "product_id": "61b05ae9-77b3-4a57-b613-652dc6898619",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "owner_id": "00000000-0000-0000-0000-000000001567",
  "shipping_location_id": "00000000-0000-0000-0000-00000000057a",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9cd75163dc73296acc990f37d300c186-e9b769e039eee537-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000001084",
      "id": "00000000-0000-0000-0000-00000000057a",
      "license_id": null,
      "license_number": null,
      "name": "Place 662"
    },
    "biotrack_id": null,
    "charges": [
      {
        "id": "704948e0-833e-4b54-920e-ddcd423f007d",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "f7c65751-af4d-4aab-a298-69db3565519c",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000b8f",
      "name": "Company 2017",
      "updated_datetime": "2026-07-24T10:28:17.117053Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000001567",
      "role": {
        "id": "00000000-0000-0000-0000-0000000015c0",
        "name": "Admin 2649"
      }
    },
    "custom_data": [
      {
        "id": 139,
        "name": "Custom Field 44",
        "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": "77d8c7f0-3b27-4033-a3f0-57e51bae7fa7",
    "inserted_datetime": "2026-07-24T10:28:17.157824Z",
    "internal_notes": "Internal notes for this order",
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000084e",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "cbaa4d63-0f64-4b39-b1dd-a1e9980fc72d",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000001083",
          "id": "00000000-0000-0000-0000-000000000579",
          "license_id": "00000000-0000-0000-0000-00000000016c",
          "name": "Place 661"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "61b05ae9-77b3-4a57-b613-652dc6898619",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:17.134119Z"
        },
        "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-000000001567",
      "role": {
        "id": "00000000-0000-0000-0000-0000000015c0",
        "name": "Admin 2649"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000001084",
      "id": "00000000-0000-0000-0000-00000000057a",
      "license_id": null,
      "license_number": null,
      "name": "Place 662"
    },
    "status": "PROCESSING",
    "total": "6.00",
    "updated_datetime": "2026-07-24T10:28:17.183874Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjQ1MzJhMmMtYTM4YS00YzY0LWI0MmItYTE0MTY0ODliZjJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQxNCIsInR5cCI6ImFjY2VzcyJ9.GeRsgMqYctbkTGhnbYnkPFhM4y2l4aKKPzTx5KVnhMI
{
  "billing_location_id": "00000000-0000-0000-0000-000000000451",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000008b1",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000044c",
      "price_base": "10.000000000",
      "product_id": "3f35eaef-7782-4a25-9f5e-248e4349032a",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-000000000451",
  "status": "PROCESSING"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 9a677c7451e4063addff847f6b59368b-d6d26986cfce71b7-0
{
  "errors": [
    {
      "context": {
        "id": "5013f139-5ef9-490e-b6cd-b1e83ea296eb"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjQ1MzJhMmMtYTM4YS00YzY0LWI0MmItYTE0MTY0ODliZjJmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQxNCIsInR5cCI6ImFjY2VzcyJ9.GeRsgMqYctbkTGhnbYnkPFhM4y2l4aKKPzTx5KVnhMI
{
  "billing_location_id": "00000000-0000-0000-0000-000000000451",
  "blaze_payment_type": "CASH",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-0000000008b1",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000044c",
      "price_base": "10.000000000",
      "product_id": "3f35eaef-7782-4a25-9f5e-248e4349032a",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-000000000451",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9a677c7451e4063addff847f6b59368b-466fec39bb100c27-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000d13",
      "id": "00000000-0000-0000-0000-000000000451",
      "license_id": null,
      "license_number": null,
      "name": "Place 366"
    },
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-0000000008b1",
      "name": "Company 1135",
      "updated_datetime": "2026-07-24T10:28:10.747374Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1535@example.com",
      "full_name": "FirstName3138 LastName3139",
      "id": "00000000-0000-0000-0000-00000000113e",
      "role": {
        "id": "00000000-0000-0000-0000-00000000119a",
        "name": "Admin 1587"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "0a187cdd-f9d4-437a-a355-52dd2689c9b8",
    "inserted_datetime": "2026-07-24T10:28:10.865085Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000005e5",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "3097ded7-b697-4c11-82e9-64f9128d6140",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000d0c",
          "id": "00000000-0000-0000-0000-00000000044c",
          "license_id": "00000000-0000-0000-0000-000000000114",
          "name": "Place 361"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "3f35eaef-7782-4a25-9f5e-248e4349032a",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:10.793892Z"
        },
        "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-000000000d13",
      "id": "00000000-0000-0000-0000-000000000451",
      "license_id": null,
      "license_number": null,
      "name": "Place 366"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-07-24T10:28:10.865085Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWE3NjgwNTktZTJiNC00MTk2LThkNDctOGYzYTkzZDhmZmQ0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDk4OCIsInR5cCI6ImFjY2VzcyJ9.BbuRCWJZ2lG1P0H5WUcZQ2D66A9sFgtBIhTuK-VCZIA
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004f5",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000a24",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004f4",
      "position": 1,
      "price_base": "100.000000000",
      "product_id": "3fdb54f4-67e6-44a6-a7b0-c6eea0dd6f1e",
      "quantity": "80.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-0000000004f4",
      "position": 2,
      "price_base": "200.000000000",
      "product_id": "3fdb54f4-67e6-44a6-a7b0-c6eea0dd6f1e",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-0000000004f4",
      "position": 3,
      "price_base": "300.000000000",
      "product_id": "72758974-5a93-4816-8c51-b408cfb68fe7",
      "quantity": "20.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-0000000004f5",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 02bf91251fad5718107fdfe6a04662f2-3d559c1c93b54780-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000ed2",
      "id": "00000000-0000-0000-0000-0000000004f5",
      "license_id": null,
      "license_number": null,
      "name": "Place 529"
    },
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a24",
      "name": "Company 1583",
      "updated_datetime": "2026-07-24T10:28:13.318134Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2105@example.com",
      "full_name": "FirstName4280 LastName4281",
      "id": "00000000-0000-0000-0000-00000000137c",
      "role": {
        "id": "00000000-0000-0000-0000-0000000013c9",
        "name": "Admin 2146"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "68871d27-6491-438c-8c11-a71d6c768555",
    "inserted_datetime": "2026-07-24T10:28:13.409363Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000736",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "a33ada39-02e2-4a70-9230-35064e1eb8f1",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ed0",
          "id": "00000000-0000-0000-0000-0000000004f4",
          "license_id": "00000000-0000-0000-0000-000000000143",
          "name": "Place 528"
        },
        "package": null,
        "price": "80.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "3fdb54f4-67e6-44a6-a7b0-c6eea0dd6f1e",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.340193Z"
        },
        "quantity": "80.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000736",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "935fa362-d192-46eb-95e6-db6a46029fd8",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ed0",
          "id": "00000000-0000-0000-0000-0000000004f4",
          "license_id": "00000000-0000-0000-0000-000000000143",
          "name": "Place 528"
        },
        "package": null,
        "price": "180.000000000",
        "price_base": "200.000000000",
        "product": {
          "id": "3fdb54f4-67e6-44a6-a7b0-c6eea0dd6f1e",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.340193Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000737",
          "name": "B2"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "0b9ee4c2-45d1-4a76-9360-3ca38bc98394",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ed0",
          "id": "00000000-0000-0000-0000-0000000004f4",
          "license_id": "00000000-0000-0000-0000-000000000143",
          "name": "Place 528"
        },
        "package": null,
        "price": "270.000000000",
        "price_base": "300.000000000",
        "product": {
          "id": "72758974-5a93-4816-8c51-b408cfb68fe7",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:13.354283Z"
        },
        "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-000000000ed2",
      "id": "00000000-0000-0000-0000-0000000004f5",
      "license_id": null,
      "license_number": null,
      "name": "Place 529"
    },
    "status": "PROCESSING",
    "total": "13600.00",
    "updated_datetime": "2026-07-24T10:28:13.449903Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg1MDAsImlhdCI6MTc4NDg4ODkwMCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMzFhNTZhZDYtOTFjMC00YTExLWI1NTUtOTlhMmI4MzExZDQ5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTYxOSIsInR5cCI6ImFjY2VzcyJ9.wdFKjjUXXa4mcFtA1ib5Li3y3LDj8u-7MmbV-HWY2k4
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-000000000898",
      "location_id": "00000000-0000-0000-0000-00000000059e",
      "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: 67849a437d802a425f1dd8b445a31b28-0ad1a03a1492cd9d-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000015f3",
      "role": {
        "id": "00000000-0000-0000-0000-000000001651",
        "name": "Admin 2794"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "b8b3c55c-8eef-4331-8bb7-ca81afb54758",
    "inserted_datetime": "2026-07-24T10:28:20.166660Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000898",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "978c1bb1-62a4-40cb-85b2-53c2e0fa9894",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000001102",
          "id": "00000000-0000-0000-0000-00000000059e",
          "license_id": "00000000-0000-0000-0000-00000000017a",
          "name": "Place 698"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "0749260e-c884-433e-be85-538630bc98b5",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:20.145818Z"
        },
        "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-07-24T10:28:20.166660Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmNjNWUzMzItZGQyZS00NzI2LWI1YzMtMTZjZWJiYjdhZThjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDk1OCIsInR5cCI6ImFjY2VzcyJ9.OZszJEeDUx0URl9Mg0p49bPJomMMh_0MdKNiE2O2iNA
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004ed",
      "price_base": "10.000000000",
      "product_id": "7dc43545-3759-46be-9872-c2bcdc3104c1",
      "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: dc3cae368d57010c0262b0041968c747-cbd86f1a4de8ffdd-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-00000000135e",
      "role": {
        "id": "00000000-0000-0000-0000-0000000013aa",
        "name": "Admin 2115"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "a7057c15-9240-4980-bf95-47821bfcf329",
    "inserted_datetime": "2026-07-24T10:28:13.220832Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": null,
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "0052f62c-fff0-4f42-9fc1-568078525a4e",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ec4",
          "id": "00000000-0000-0000-0000-0000000004ed",
          "license_id": "00000000-0000-0000-0000-00000000013f",
          "name": "Place 521"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "7dc43545-3759-46be-9872-c2bcdc3104c1",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.207268Z"
        },
        "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-07-24T10:28:13.220832Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTgsImlhdCI6MTc4NDg4ODg5OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODhjYzYwZWQtMmMzMi00ZDI4LWE5MzUtMzU5MTYzZDIyMTM2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTUzNyIsInR5cCI6ImFjY2VzcyJ9.PKcb9YtEQKb9tQQq3he6tDNDkJmfhSQ5zGzPR0Owiqo
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "compliance_quantity": "1.0000",
      "is_sample": true,
      "location_id": "00000000-0000-0000-0000-00000000058a",
      "package_id": "00000000-0000-0000-0000-0000000000d1",
      "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: 290d6c037ec1d655542d5078ff24cdc1-35561a273a9e6f27-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2640@example.com",
      "full_name": "FirstName5350 LastName5351",
      "id": "00000000-0000-0000-0000-0000000015a1",
      "role": {
        "id": "00000000-0000-0000-0000-0000000015fb",
        "name": "Admin 2708"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "bc31578e-8481-4d7e-867d-dbc80fdc8ba6",
    "inserted_datetime": "2026-07-24T10:28:18.525022Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000876",
          "name": "B1"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "e43d9391-f5ac-4920-bb37-42334913fe35",
        "is_sample": true,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010c3",
          "id": "00000000-0000-0000-0000-00000000058a",
          "license_id": "00000000-0000-0000-0000-000000000170",
          "name": "Place 678"
        },
        "package": {
          "batch_number": "B1",
          "compliance_label": "ABCDEF012345670000000180",
          "id": "00000000-0000-0000-0000-0000000000d1",
          "metrc_label": "ABCDEF012345670000000180",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "c9545e3d-b0fc-46ac-8227-b1223ae8bae9",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:18.451817Z"
        },
        "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-07-24T10:28:18.525022Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTgsImlhdCI6MTc4NDg4ODg5OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMGQxNDM4ZjktYjQ1Mi00OWEzLTk4NjAtZGFhM2E5NDg2YzNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU2MiIsInR5cCI6ImFjY2VzcyJ9.y7NlWX_UmNfbM4ybQWi2b8fF8OvcyaFX5TCgkVoRg78
{
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-000000000591",
      "price_base": "10.000000000",
      "product_id": "86a511b8-5840-434c-9102-d254b011db5e",
      "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: 39e959acf38df20e83a3a8204fe323bd-d73aa99e7955cb68-0
{
  "data": {
    "billing_location": null,
    "biotrack_id": null,
    "charges": [],
    "company": null,
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000015ba",
      "role": {
        "id": "00000000-0000-0000-0000-000000001615",
        "name": "Admin 2734"
      }
    },
    "custom_data": [],
    "delivery_datetime": null,
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "c6cae1ca-5a37-4bfb-86f2-49a1a6cc915b",
    "inserted_datetime": "2026-07-24T10:28:18.921203Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": null,
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "421c5677-4bdb-4dc9-aa3e-8a4be333148b",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010d4",
          "id": "00000000-0000-0000-0000-000000000591",
          "license_id": "00000000-0000-0000-0000-000000000174",
          "name": "Place 685"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "86a511b8-5840-434c-9102-d254b011db5e",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:18.906099Z"
        },
        "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-07-24T10:28:18.921203Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTQsImlhdCI6MTc4NDg4ODg5NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2JmMzQ2YmYtY2VmYS00YjZjLTg2MTEtNjVlNmUxNDQ2NjBkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTI3MyIsInR5cCI6ImFjY2VzcyJ9.tg81juSf4qdLqC0xpJa0fQA1qWEkOjoZgNukEAuCETM
{
  "billing_location_id": "00000000-0000-0000-0000-000000000539",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000ad3",
  "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": "f90654ec-260c-4f9d-b606-b479d6d1e3ca",
      "location_id": "00000000-0000-0000-0000-000000000538",
      "package_id": "00000000-0000-0000-0000-0000000000cf",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000538",
  "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-000000001499",
  "shipping_location_id": "00000000-0000-0000-0000-000000000539",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 9028cb599fb4c81cfed4489bc89bd7d8-ccca7430d94bd09e-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000fac",
      "id": "00000000-0000-0000-0000-000000000539",
      "license_id": null,
      "license_number": null,
      "name": "Place 597"
    },
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000ad3",
      "name": "Company 1801",
      "updated_datetime": "2026-07-24T10:28:14.938029Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000001499",
      "role": {
        "id": "00000000-0000-0000-0000-0000000014ec",
        "name": "Admin 2437"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "51251132-177f-41f9-b0fe-2d5b5e32fc90",
    "inserted_datetime": "2026-07-24T10:28:15.033119Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000faa",
      "id": "00000000-0000-0000-0000-000000000538",
      "license_id": "00000000-0000-0000-0000-00000000015a",
      "license_number": "CDPH-00000147",
      "name": "Place 596"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-0000000007bb",
          "name": "B2"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "f90654ec-260c-4f9d-b606-b479d6d1e3ca",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000faa",
          "id": "00000000-0000-0000-0000-000000000538",
          "license_id": "00000000-0000-0000-0000-00000000015a",
          "name": "Place 596"
        },
        "package": {
          "batch_number": "B1",
          "compliance_label": "ABCDEF012345670000000176",
          "id": "00000000-0000-0000-0000-0000000000cf",
          "metrc_label": "ABCDEF012345670000000176",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "ba169c15-36ec-4a05-b3db-9a7fbdfcfcdd",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:14.950652Z"
        },
        "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-000000001499",
      "role": {
        "id": "00000000-0000-0000-0000-0000000014ec",
        "name": "Admin 2437"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000fac",
      "id": "00000000-0000-0000-0000-000000000539",
      "license_id": null,
      "license_number": null,
      "name": "Place 597"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-07-24T10:28:15.090162Z"
  }
}

POST /public/v1/orders updates an order

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTksImlhdCI6MTc4NDg4ODg5OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWUyODk5YzktZGM3My00OWE1LWE1YjQtMWMzNjM5ZDFiZDZiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODk4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTU3NiIsInR5cCI6ImFjY2VzcyJ9.PUsFYP4I3N1XsjCIjlZ7LbFkOjhZajnc0pApWoKu9b8
{
  "billing_location_id": "00000000-0000-0000-0000-000000000595",
  "charges": [
    {
      "id": "b3ea1d35-6c13-4b17-ba7a-86c80a442fa8",
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    },
    {
      "id": "34b36f82-c6a6-4fcf-85c3-4a2ec3b180fe",
      "name": "C2",
      "price": "-5.00",
      "type": "DISCOUNT",
      "unit_type": "PRICE"
    }
  ],
  "company_id": "00000000-0000-0000-0000-000000000bd4",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "external_notes": "gonna make you sweat",
  "id": "a54f10f9-5d17-4ae0-89b7-3ec776313ac5",
  "items": [
    {
      "id": "12dcbc7b-6b2b-4248-ba08-6b6005b999e8",
      "is_sample": true,
      "location_id": "00000000-0000-0000-0000-000000000594",
      "price_base": "10.000000000",
      "product_id": "b9f42a29-5975-48f8-a5f0-ce1cd5a64e2b",
      "quantity": "2.000000000"
    },
    {
      "id": "b309d479-47cc-43c4-8f7f-3d38295c8853",
      "location_id": "00000000-0000-0000-0000-000000000594",
      "price_base": "100.000000000",
      "product_id": "b9f42a29-5975-48f8-a5f0-ce1cd5a64e2b",
      "quantity": "3.000000000"
    },
    {
      "compliance_quantity": "1.0000",
      "id": "b8ea13d7-733d-428f-ae17-24722e174a9a",
      "location_id": "00000000-0000-0000-0000-000000000594",
      "package_id": "00000000-0000-0000-0000-0000000000d4",
      "price_base": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000594",
  "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-0000000015cf",
  "shipping_location_id": "00000000-0000-0000-0000-000000000595",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 19b5a5ae376a2c8805eb70506aa36f9d-f70c2dd430086a75-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000010db",
      "id": "00000000-0000-0000-0000-000000000595",
      "license_id": null,
      "license_number": null,
      "name": "Place 689"
    },
    "biotrack_id": null,
    "charges": [
      {
        "id": "b3ea1d35-6c13-4b17-ba7a-86c80a442fa8",
        "name": "C1",
        "percent": "10.0000",
        "price": "33.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "34b36f82-c6a6-4fcf-85c3-4a2ec3b180fe",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000bd4",
      "name": "Company 2104",
      "updated_datetime": "2026-07-24T10:28:19.256210Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-0000000015c7",
      "role": {
        "id": "00000000-0000-0000-0000-000000001622",
        "name": "Admin 2747"
      }
    },
    "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": "a54f10f9-5d17-4ae0-89b7-3ec776313ac5",
    "inserted_datetime": "2026-07-24T10:28:19.304070Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000010da",
      "id": "00000000-0000-0000-0000-000000000594",
      "license_id": "00000000-0000-0000-0000-000000000176",
      "license_number": "CDPH-00000176",
      "name": "Place 688"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000087f",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "12dcbc7b-6b2b-4248-ba08-6b6005b999e8",
        "is_sample": true,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010da",
          "id": "00000000-0000-0000-0000-000000000594",
          "license_id": "00000000-0000-0000-0000-000000000176",
          "name": "Place 688"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "b9f42a29-5975-48f8-a5f0-ce1cd5a64e2b",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:19.284808Z"
        },
        "quantity": "2.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000087f",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "b309d479-47cc-43c4-8f7f-3d38295c8853",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010da",
          "id": "00000000-0000-0000-0000-000000000594",
          "license_id": "00000000-0000-0000-0000-000000000176",
          "name": "Place 688"
        },
        "package": null,
        "price": "100.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "b9f42a29-5975-48f8-a5f0-ce1cd5a64e2b",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:19.284808Z"
        },
        "quantity": "3.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000880",
          "name": "B2"
        },
        "compliance_quantity": "1.0000",
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "b8ea13d7-733d-428f-ae17-24722e174a9a",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-0000000010da",
          "id": "00000000-0000-0000-0000-000000000594",
          "license_id": "00000000-0000-0000-0000-000000000176",
          "name": "Place 688"
        },
        "package": {
          "batch_number": "B2",
          "compliance_label": "ABCDEF012345670000000186",
          "id": "00000000-0000-0000-0000-0000000000d4",
          "metrc_label": "ABCDEF012345670000000186",
          "status": "selling"
        },
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "45a44157-86ac-406d-91dd-5e9676ff5cd6",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:19.319535Z"
        },
        "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-141",
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-2682@example.com",
      "full_name": "FirstName5434 LastName5435",
      "id": "00000000-0000-0000-0000-0000000015cf",
      "role": {
        "id": "00000000-0000-0000-0000-00000000162a",
        "name": "Admin 2755"
      }
    },
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000010db",
      "id": "00000000-0000-0000-0000-000000000595",
      "license_id": null,
      "license_number": null,
      "name": "Place 689"
    },
    "status": "PROCESSING",
    "total": "358.00",
    "updated_datetime": "2026-07-24T10:28:19.507076Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZGNiNzUyMmUtMjM0NS00MGJhLTk4NGYtNjJiMDczZDFkNDk2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY0NCIsInR5cCI6ImFjY2VzcyJ9.bl0--hfpt4n83UN5x0GeiSsSq01Qw5jlDcNPKrlHFRg
{
  "billing_location_id": "00000000-0000-0000-0000-00000000049d",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000959",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000049c",
      "position": 1,
      "price_base": "100.000000000",
      "product_id": "bc9a1c08-e9ef-4aea-aff3-04794f5acf44",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-00000000049c",
      "position": 2,
      "price_base": "200.000000000",
      "product_id": "45169cec-af5d-4e84-a493-68e392e89bf5",
      "quantity": "10.000000000"
    },
    {
      "location_id": "00000000-0000-0000-0000-00000000049c",
      "position": 3,
      "price_base": "300.000000000",
      "product_id": "aaf563de-1ab6-4996-b3a9-eb213e4722e9",
      "quantity": "10.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-00000000049d",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5e951f1439ed5c3b459c089610308054-7459a0e3ec7257de-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000ddf",
      "id": "00000000-0000-0000-0000-00000000049d",
      "license_id": null,
      "license_number": null,
      "name": "Place 441"
    },
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000959",
      "name": "Company 1340",
      "updated_datetime": "2026-07-24T10:28:11.942817Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-1764@example.com",
      "full_name": "FirstName3598 LastName3599",
      "id": "00000000-0000-0000-0000-000000001224",
      "role": {
        "id": "00000000-0000-0000-0000-000000001276",
        "name": "Admin 1807"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "412c2af5-aa74-468e-be3a-f737bfac0b71",
    "inserted_datetime": "2026-07-24T10:28:12.082632Z",
    "internal_notes": null,
    "inventory_source": null,
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000065f",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "199697e3-1b73-4d27-bcf8-9f8fb9497694",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ddd",
          "id": "00000000-0000-0000-0000-00000000049c",
          "license_id": "00000000-0000-0000-0000-000000000125",
          "name": "Place 440"
        },
        "package": null,
        "price": "90.000000000",
        "price_base": "100.000000000",
        "product": {
          "id": "bc9a1c08-e9ef-4aea-aff3-04794f5acf44",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:11.979674Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000660",
          "name": "B2"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "3abb6b86-efd5-4c30-8255-65314d561e18",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ddd",
          "id": "00000000-0000-0000-0000-00000000049c",
          "license_id": "00000000-0000-0000-0000-000000000125",
          "name": "Place 440"
        },
        "package": null,
        "price": "200.000000000",
        "price_base": "200.000000000",
        "product": {
          "id": "45169cec-af5d-4e84-a493-68e392e89bf5",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:12.001726Z"
        },
        "quantity": "10.000000000",
        "returned_quantity": "0",
        "total_cost_actual": null,
        "total_cost_default": null
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000663",
          "name": "B3"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "719090df-b419-4ce6-b5a8-424c3ee944a0",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000ddd",
          "id": "00000000-0000-0000-0000-00000000049c",
          "license_id": "00000000-0000-0000-0000-000000000125",
          "name": "Place 440"
        },
        "package": null,
        "price": "290.000000000",
        "price_base": "300.000000000",
        "product": {
          "id": "aaf563de-1ab6-4996-b3a9-eb213e4722e9",
          "name": "P3",
          "sku": "SKU3",
          "updated_datetime": "2026-07-24T10:28:12.017154Z"
        },
        "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-000000000ddf",
      "id": "00000000-0000-0000-0000-00000000049d",
      "license_id": null,
      "license_number": null,
      "name": "Place 441"
    },
    "status": "PROCESSING",
    "total": "5800.00",
    "updated_datetime": "2026-07-24T10:28:12.122030Z"
  }
}

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

POST /public/v1/orders
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTQsImlhdCI6MTc4NDg4ODg5NCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTZhN2M5NGUtNTVmZC00YzhiLThhYTYtODExNmU1NTQyZTQxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkzLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTE5MSIsInR5cCI6ImFjY2VzcyJ9.6XOwL8zcI_bcpUpufDz1o8ogLDtApE2jU8riC7F9Unw
{
  "billing_location_id": "00000000-0000-0000-0000-000000000520",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000a87",
  "delivery_datetime": "2020-01-01T00:00:00.000000Z",
  "due_datetime": "2020-01-01T00:00:01.000000Z",
  "id": "82f7ee4f-f81f-44c2-bb0e-5b47ddc70fab",
  "items": [
    {
      "id": "04308a84-8a7f-4db1-8e01-0e17755dcb6e",
      "location_id": "00000000-0000-0000-0000-00000000051f",
      "price_base": "10.000000000",
      "product_id": "2b7f41b3-2d71-4b5c-8021-a8fdd1d2a4d3",
      "quantity": "1.000000000"
    }
  ],
  "order_datetime": "2020-01-01T00:00:02.000000Z",
  "shipping_location_id": "00000000-0000-0000-0000-000000000520",
  "status": "PROCESSING"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1d6e958fa5aa8da0879553d6d11345bd-4f0da4e20135e092-0
{
  "data": {
    "billing_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000f52",
      "id": "00000000-0000-0000-0000-000000000520",
      "license_id": null,
      "license_number": null,
      "name": "Place 572"
    },
    "biotrack_id": null,
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a87",
      "name": "Company 1711",
      "updated_datetime": "2026-07-24T10:28:14.316172Z"
    },
    "creator": {
      "banned": false,
      "deleted_at": null,
      "email": "user1@a.com",
      "full_name": "John Foo",
      "id": "00000000-0000-0000-0000-000000001447",
      "role": {
        "id": "00000000-0000-0000-0000-000000001498",
        "name": "Admin 2353"
      }
    },
    "custom_data": [],
    "delivery_datetime": "2020-01-01T00:00:00.000000Z",
    "due_datetime": "2020-01-01T00:00:01.000000Z",
    "external_notes": null,
    "id": "82f7ee4f-f81f-44c2-bb0e-5b47ddc70fab",
    "inserted_datetime": "2026-07-24T10:28:14.348006Z",
    "internal_notes": null,
    "inventory_source": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000f4f",
      "id": "00000000-0000-0000-0000-000000000521",
      "license_id": null,
      "license_number": null,
      "name": "Place 573"
    },
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000780",
          "name": "B1"
        },
        "compliance_quantity": null,
        "cost_per_unit": null,
        "cost_per_unit_default": null,
        "id": "04308a84-8a7f-4db1-8e01-0e17755dcb6e",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000f4f",
          "id": "00000000-0000-0000-0000-00000000051f",
          "license_id": "00000000-0000-0000-0000-000000000150",
          "name": "Place 571"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "2b7f41b3-2d71-4b5c-8021-a8fdd1d2a4d3",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:14.335248Z"
        },
        "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-82",
    "owner": null,
    "payment_term_name": null,
    "shipping_location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-000000000f52",
      "id": "00000000-0000-0000-0000-000000000520",
      "license_id": null,
      "license_number": null,
      "name": "Place 572"
    },
    "status": "PROCESSING",
    "total": "10.00",
    "updated_datetime": "2026-07-24T10:28:14.430027Z"
  }
}

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 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
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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjdlMzEwN2YtNjJjOC00OGI4LWEwN2ItNTM0ZTRmYTk2YjIyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQxNyIsInR5cCI6ImFjY2VzcyJ9.c7dAlF0Uy-A4YL-W2bcWuYti6MjYr5vTMtH6kkm44Yg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 359daaee1a16cf4e4d3571d6d109138c-7d9ffc636d1a3a9e-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000130",
      "custom_data": [
        {
          "id": 130,
          "name": "Custom Field 35",
          "value": "Custom Field Value 1"
        }
      ],
      "expiration_date": "2024-01-01T00:00:00.000000Z",
      "harvest_date": "2024-06-15",
      "id": "00000000-0000-0000-0000-0000000000b6",
      "is_trade_sample": true,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000115",
        "license_number": "CDPH-00000078"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000454",
        "name": "Place 369"
      },
      "metrc_label": "ABCDEF012345670000000130",
      "packaged_date": "2024-07-01",
      "primary_test_result": null,
      "product_id": "8d828191-81e9-4ea3-bb83-f33b42aa0a90",
      "product_unit_quantity": "7.500000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a75b",
        "name": "3"
      },
      "quantity": "5.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "5.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a75c",
        "name": "2"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000134",
      "custom_data": [
        {
          "id": 130,
          "name": "Custom Field 35",
          "value": null
        }
      ],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-0000000000b8",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000115",
        "license_number": "CDPH-00000078"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000045a",
        "name": "Place 375"
      },
      "metrc_label": "ABCDEF012345670000000134",
      "packaged_date": null,
      "primary_test_result": {
        "cbd_mg_per_unit": "1",
        "cbd_mg_per_unit_total": "2",
        "cbd_percentage": "3",
        "cbd_percentage_total": "4",
        "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": "8d828191-81e9-4ea3-bb83-f33b42aa0a90",
      "product_unit_quantity": "15.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a75b",
        "name": "3"
      },
      "quantity": "20.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "20.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a75d",
        "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWY5ZWU4OGItOGQ2MC00YjFkLTk5ZGMtNDlmNTc4N2YxYWMyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzM3MiIsInR5cCI6ImFjY2VzcyJ9.uqvp2YRtXDpecL5qP-1wdTtBI0WjvwAVxygTX7y97mk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 7f8ff021561fb5975e15cc02baf997cd-9cf1c0a4f41ca054-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000034",
      "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-000000000087",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-0000000000de",
        "license_number": "CDPH-00000023"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000035e",
        "name": "Place 123"
      },
      "metrc_label": "ABCDEF012345670000000034",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "bfcc69ef-db2e-4ed5-8fd3-4bedba8b9731",
      "product_unit_quantity": "141.747462720",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-000000007f51",
        "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-000000007f53",
        "name": "Ounce"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by product_ids

GET /public/v1/packages?product_ids[]=e485948d-a16d-4d29-9697-1e2dc9af5a8b&product_ids[]=473f60cc-f52a-4a62-ba52-cf0a79a8128a
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTBkMDQ5Y2ItZWY4Ni00MDdkLWFmODMtNDdhYzEyOTg2NGVmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDM4NyIsInR5cCI6ImFjY2VzcyJ9.-dd8fsI8dL0af-_fkV_8fDvPIfEul49mOQdeXceSPI4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2694a9e5964b5e9c4faf09ae73ebe58f-2129d9886f46a311-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000121",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-0000000000b1",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000113",
        "license_number": "CDPH-00000076"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000449",
        "name": "Place 358"
      },
      "metrc_label": "ABCDEF012345670000000121",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "e485948d-a16d-4d29-9697-1e2dc9af5a8b",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a5c3",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a5c3",
        "name": "Gram"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000125",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-0000000000b2",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000113",
        "license_number": "CDPH-00000076"
      },
      "location": {
        "id": "00000000-0000-0000-0000-00000000044d",
        "name": "Place 362"
      },
      "metrc_label": "ABCDEF012345670000000125",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "473f60cc-f52a-4a62-ba52-cf0a79a8128a",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a5c3",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a5c3",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by ids

GET /public/v1/packages?ids[]=00000000-0000-0000-0000-000000000091
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWM0NmJhNDEtM2Y5OS00NDk1LWE3YjItZDQ3YjlmNTgxZWZmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY1MyIsInR5cCI6ImFjY2VzcyJ9.fnsAG_1Pks56BhBICxGadnQUvtfaq0HdyOttlOoTd84

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 92103182e52e282230972d6baad644c2-8d16dfd73d9d8f5e-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000057",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-000000000091",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-0000000000ed",
        "license_number": "CDPH-00000038"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000003a7",
        "name": "Place 196"
      },
      "metrc_label": "ABCDEF012345670000000057",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "ec2228ea-61c4-4cb4-a2c9-0d694d09055d",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-0000000089af",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-0000000089af",
        "name": "Gram"
      }
    }
  ],
  "next_page": null
}

GET /public/v1/packages allows filtering by location_ids

GET /public/v1/packages?location_ids[]=00000000-0000-0000-0000-000000000405&location_ids[]=00000000-0000-0000-0000-000000000406
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2YyNDMwZjItN2MwNC00Yjc2LWJhYzctZjQ4ZTAxOGFkOTc0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI1MiIsInR5cCI6ImFjY2VzcyJ9.SK9tjIxVqKPE2Z7O1w-7HZ2usoFH7Rfvx154uRsdAQ4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c0e84fd3c67e205d2886a4cff9fb9cbb-56ffeaa6ee76face-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000105",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-0000000000a9",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000103",
        "license_number": "CDPH-00000060"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000405",
        "name": "Place 290"
      },
      "metrc_label": "ABCDEF012345670000000105",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "0e95a5ce-d4a6-49ae-ad69-c66113bbd6df",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a030",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a030",
        "name": "Gram"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000107",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-0000000000aa",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-000000000103",
        "license_number": "CDPH-00000060"
      },
      "location": {
        "id": "00000000-0000-0000-0000-000000000406",
        "name": "Place 291"
      },
      "metrc_label": "ABCDEF012345670000000107",
      "packaged_date": null,
      "primary_test_result": null,
      "product_id": "c0400aed-e849-4cdc-b588-01f59689873c",
      "product_unit_quantity": "10.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a030",
        "name": "Gram"
      },
      "quantity": "10.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "10.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a030",
        "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTFlNzNkZjYtMDIyYi00NTYzLWIzOTYtY2Y4MjgwYzJmZTlkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg0MCIsInR5cCI6ImFjY2VzcyJ9._OmBr4Qii-Hq-_GyzErcCPx78LGER0yOKl-BwmBinsA

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fc8956b25654c4123ffad6d2004cd0ab-c33bebe4c30ff7ca-0
{
  "data": [
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000072",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-00000000009c",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-0000000000f3",
        "license_number": "CDPH-00000044"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000003ca",
        "name": "Place 231"
      },
      "metrc_label": "ABCDEF012345670000000072",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "6a70f685-dba9-48e2-88cb-f0dd0b08fcb9",
      "product_unit_quantity": "1.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000907d",
        "name": "Ounce"
      },
      "quantity": "1.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "1.000000000",
      "status": "active",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000907d",
        "name": "Ounce"
      }
    },
    {
      "batch_number": null,
      "compliance_label": "ABCDEF012345670000000078",
      "custom_data": [],
      "expiration_date": null,
      "harvest_date": null,
      "id": "00000000-0000-0000-0000-00000000009e",
      "is_trade_sample": false,
      "lab_testing_state": "NotSubmitted",
      "license": {
        "id": "00000000-0000-0000-0000-0000000000f3",
        "license_number": "CDPH-00000044"
      },
      "location": {
        "id": "00000000-0000-0000-0000-0000000003d9",
        "name": "Place 246"
      },
      "metrc_label": "ABCDEF012345670000000078",
      "packaged_date": "2014-11-29",
      "primary_test_result": null,
      "product_id": "8b5c580a-3950-44c9-b36c-cbf18cb07363",
      "product_unit_quantity": "0.000000000",
      "product_unit_type": {
        "id": "00000000-0000-0000-0000-00000000907d",
        "name": "Ounce"
      },
      "quantity": "0.000000000",
      "quantity_assembling": "0.000000000",
      "quantity_available": "0.000000000",
      "status": "finished",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000907d",
        "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

PaymentMethod

Get payment methods

GET /public/v1/payments/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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTJlYjA5MTEtOWExYi00NzRjLWJiYWUtOTQ5MDI5YzJkMTBjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzIxOSIsInR5cCI6ImFjY2VzcyJ9.LsGSQe-vHMIMpZ7QeJ3O43n5CAbV7R1MsnW8ruSSHjQ

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f665fae5faa1e76394619690e33453ed-f247758641babaf5-0
{
  "data": [
    {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-00000000001b",
      "name": "Payment Method 7"
    }
  ],
  "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

Get a payment method

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

GET /public/v1/payment-methods/00000000-0000-0000-0000-000000000014
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYTFlYTQ2MmMtZTRmNS00OWFhLWJkYTYtODllMmVhNDllMDU1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjkyMSIsInR5cCI6ImFjY2VzcyJ9.xPY1KCrxoYOhGHQ-Rm7Xq7ZVIieQmwJZesrVDs67jz4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 87f83445707dcec34cdffd22baa0e50e-265faf769bc540ad-0
{
  "data": {
    "deleted_at": null,
    "id": "00000000-0000-0000-0000-000000000014",
    "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

Product

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmQ0OTE4OTUtMmExNC00ZDhkLWFjZGQtNWY0MWMwYzlmYWYwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQzMiIsInR5cCI6ImFjY2VzcyJ9.ra9Jc39Kyw3mDffsM2H87QbkfLI3_CWvPiO0dqkk2Sc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5b138be1ff72cd84bf383b8cbca20de0-6e51183cf6b1a53a-0
{
  "data": [
    {
      "brand": {
        "id": "00000000-0000-0000-0000-0000000008c9",
        "name": "Company 1166",
        "updated_datetime": "2030-11-01T00:00:00.000000Z"
      },
      "category": {
        "id": "00000000-0000-0000-0000-000000000680",
        "name": "Some category 498",
        "type": "OTHER"
      },
      "custom_data": [
        {
          "id": 131,
          "name": "Custom Field 36",
          "value": "Custom Field Value 1"
        }
      ],
      "deleted_at": null,
      "description": "test",
      "description_markdown": "# test",
      "external_name": "External Name",
      "gross_weight": null,
      "gross_weight_unit_type": null,
      "id": "bdd9e875-0eef-4e50-a18e-81700043e591",
      "images": [
        {
          "id": "00000000-0000-0000-0000-000000000015",
          "name": "Image Name 107",
          "rank": 0,
          "url": "https://google.com/original-5.jpg"
        },
        {
          "id": "00000000-0000-0000-0000-000000000016",
          "name": "Image Name 108",
          "rank": 1,
          "url": "https://google.com/original-6.jpg"
        }
      ],
      "is_active": true,
      "menus": [],
      "msrp": null,
      "name": "Product 1378",
      "product_group": {
        "id": "00000000-0000-0000-0000-000000000674",
        "name": "Product Group 493"
      },
      "sku": "sku 1379",
      "strain": {
        "id": "00000000-0000-0000-0000-00000000004c",
        "name": "Strain 32",
        "strain_type": "INDICA"
      },
      "subcategory": {
        "id": "00000000-0000-0000-0000-000000000674",
        "name": "Some subcategory 493"
      },
      "unit_cost": null,
      "unit_net_weight": "20",
      "unit_net_weight_serving_size_unit_type": {
        "id": "00000000-0000-0000-0000-00000000a80a",
        "name": "Ounce"
      },
      "unit_price": "1",
      "unit_serving_size": "10",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a808",
        "name": "Gram"
      },
      "units_per_case": null,
      "updated_datetime": "2023-11-01T00:00:00.000000Z",
      "vendor": {
        "id": "00000000-0000-0000-0000-0000000008cc",
        "name": "Company 1168",
        "updated_datetime": "2030-11-03T00:00:00.000000Z"
      }
    },
    {
      "brand": {
        "id": "00000000-0000-0000-0000-0000000008ca",
        "name": "Company 1167",
        "updated_datetime": "2030-11-02T00:00:00.000000Z"
      },
      "category": {
        "id": "00000000-0000-0000-0000-000000000682",
        "name": "Some category 500",
        "type": "OTHER"
      },
      "custom_data": [
        {
          "id": 131,
          "name": "Custom Field 36",
          "value": null
        }
      ],
      "deleted_at": null,
      "description": null,
      "description_markdown": null,
      "external_name": null,
      "gross_weight": null,
      "gross_weight_unit_type": null,
      "id": "59663dbd-a1e7-48db-893f-783b6d00be72",
      "images": [],
      "is_active": false,
      "menus": [],
      "msrp": "100",
      "name": "Product 1386",
      "product_group": {
        "id": "00000000-0000-0000-0000-000000000676",
        "name": "Product Group 495"
      },
      "sku": "sku 1387",
      "strain": null,
      "subcategory": {
        "id": "00000000-0000-0000-0000-000000000676",
        "name": "Some subcategory 495"
      },
      "unit_cost": null,
      "unit_net_weight": null,
      "unit_net_weight_serving_size_unit_type": null,
      "unit_price": "1",
      "unit_serving_size": null,
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000a806",
        "name": "Pound"
      },
      "units_per_case": null,
      "updated_datetime": "2023-11-02T00:00:00.000000Z",
      "vendor": {
        "id": "00000000-0000-0000-0000-0000000008cf",
        "name": "Company 1171",
        "updated_datetime": "2030-11-04T00:00:00.000000Z"
      }
    }
  ],
  "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

Responses

Status Description Schema
200 A list of products Products

Get a product

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

GET /public/v1/products/1cd0ed77-2c78-4c56-9685-9af74e3b36ab
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZThlNzE0NDQtYWQ1Ny00ZDliLTk2YmQtNDAyZmQ4YjgzYzJjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQ4MSIsInR5cCI6ImFjY2VzcyJ9.JK8SQL4bUomJiBdtXGy7X6hHjY7Kobo41EWJ7t-Q18o

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f38928f3902aa3c3f141b909ea2097e0-b2f3319c03cb75ac-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-00000000069a",
      "name": "Some category 524",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "1cd0ed77-2c78-4c56-9685-9af74e3b36ab",
    "images": [],
    "is_active": true,
    "menus": [],
    "msrp": null,
    "name": "Test Product",
    "product_group": {
      "id": "00000000-0000-0000-0000-00000000068e",
      "name": "Product Group 519"
    },
    "sku": "SKU001",
    "strain": null,
    "subcategory": {
      "id": "00000000-0000-0000-0000-00000000068e",
      "name": "Some subcategory 519"
    },
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "1",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000aa48",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.089193Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-0000000008ee",
      "name": "Company 1211",
      "updated_datetime": "2026-07-24T10:28:11.087380Z"
    }
  }
}

Get a single product given the ID.

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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjcxNmY3NzgtOTBmYi00ZjkxLWJiYWYtZDg4ODRmMTE2NWY1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDQ5MSIsInR5cCI6ImFjY2VzcyJ9.Tf6OUkIkZXmXAHedCwMgo85istZ6TT0JBbkuYSDfY7Y
{
  "vendor_id": "00000000-0000-0000-0000-0000000008f4",
  "group_id": "00000000-0000-0000-0000-000000000696",
  "gross_weight": "7.5",
  "total_cannabinoid_unit": "PERCENT",
  "strain_id": "00000000-0000-0000-0000-00000000004e",
  "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-000000000075"
  ],
  "gross_weight_unit_type_id": "00000000-0000-0000-0000-00000000aa90",
  "description": "My Product Description",
  "name": "My Product",
  "owner_id": "00000000-0000-0000-0000-000000001188",
  "total_thc": "10.4",
  "brand_id": "00000000-0000-0000-0000-0000000008f9",
  "unit_cost": "50.4",
  "category_id": "00000000-0000-0000-0000-0000000006a0",
  "tags": [
    "00000000-0000-0000-0000-00000000000a"
  ],
  "quantity_available_threshold_min": "5.5",
  "is_featured": true,
  "custom_data": {
    "132": "VIP"
  },
  "is_inactive": true,
  "wholesale_unit_price": "90.50",
  "quantity_available_threshold_max": "10.5",
  "subcategory_id": "00000000-0000-0000-0000-000000000694",
  "upc": "036000291452",
  "unit_net_weight": "3.1",
  "unit_type_id": "00000000-0000-0000-0000-00000000aa99",
  "unit_price": "100",
  "units_per_case": "0.2",
  "unit_net_weight_and_serving_size_unit_type_id": "00000000-0000-0000-0000-00000000aa92"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 757f8ffc921436249cc9f5482a34ea9b-060ed2237f62d82a-0
{
  "data": {
    "brand": {
      "id": "00000000-0000-0000-0000-0000000008f9",
      "name": "Company 1226",
      "updated_datetime": "2026-07-24T10:28:11.141813Z"
    },
    "category": {
      "id": "00000000-0000-0000-0000-0000000006a0",
      "name": "Some category 530",
      "type": "OTHER"
    },
    "custom_data": [
      {
        "id": 132,
        "name": "Custom Field 37",
        "value": "VIP"
      }
    ],
    "deleted_at": null,
    "description": "My Product Description",
    "description_markdown": "# My Product Description Markdown",
    "external_name": null,
    "gross_weight": "7.5",
    "gross_weight_unit_type": {
      "id": "00000000-0000-0000-0000-00000000aa90",
      "name": "Gram"
    },
    "id": "1dfe6dbc-d820-41d5-8fda-098f319a6527",
    "images": [],
    "is_active": false,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000075",
        "menu_name": "Menu 167"
      }
    ],
    "msrp": "100.5",
    "name": "My Product",
    "product_group": {
      "id": "00000000-0000-0000-0000-000000000696",
      "name": "Product Group 527"
    },
    "sku": "12345",
    "strain": {
      "id": "00000000-0000-0000-0000-00000000004e",
      "name": "Strain 34",
      "strain_type": null
    },
    "subcategory": {
      "id": "00000000-0000-0000-0000-000000000694",
      "name": "Some subcategory 525"
    },
    "unit_cost": "50.4",
    "unit_net_weight": "3.1",
    "unit_net_weight_serving_size_unit_type": {
      "id": "00000000-0000-0000-0000-00000000aa92",
      "name": "Ounce"
    },
    "unit_price": "100",
    "unit_serving_size": "2.2",
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000aa99",
      "name": "Unit"
    },
    "units_per_case": "0.2",
    "updated_datetime": "2026-07-24T10:28:11.184529Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-0000000008f4",
      "name": "Company 1219",
      "updated_datetime": "2026-07-24T10:28:11.125218Z"
    }
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTJmYjU0MGMtMWU4Zi00ODIwLTg2ZTYtYjIxNWQyNDhjNTBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDIxNyIsInR5cCI6ImFjY2VzcyJ9.cDtSwBXWsfiMQk4b-jd-epXKGNsdNcvXEb3J3P025Pc
{
  "category_id": "00000000-0000-0000-0000-00000000061a",
  "inventory_tracking_method": "PACKAGE",
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-000000009ef8",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000844"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5769a3ca4ab0c512ff36593eba1f2520-aa79f861ff6ea999-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-00000000061a",
      "name": "Some category 396",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "03bd5035-0c00-461e-a3ea-e0158aa185c5",
    "images": [],
    "is_active": true,
    "menus": [],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000009ef8",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:10.172746Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000844",
      "name": "Company 992",
      "updated_datetime": "2026-07-24T10:28:10.124329Z"
    }
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTJmYjU0MGMtMWU4Zi00ODIwLTg2ZTYtYjIxNWQyNDhjNTBiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDIxNyIsInR5cCI6ImFjY2VzcyJ9.cDtSwBXWsfiMQk4b-jd-epXKGNsdNcvXEb3J3P025Pc
{
  "vendor_id": "00000000-0000-0000-0000-000000000852",
  "group_id": "00000000-0000-0000-0000-00000000061b",
  "gross_weight": "9.9",
  "total_cannabinoid_unit": "PERCENT",
  "strain_id": "00000000-0000-0000-0000-00000000004b",
  "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-000000000074"
  ],
  "gross_weight_unit_type_id": "00000000-0000-0000-0000-000000009ef8",
  "description": "My Product Description",
  "name": "Updated Name",
  "id": "03bd5035-0c00-461e-a3ea-e0158aa185c5",
  "owner_id": "00000000-0000-0000-0000-0000000010a5",
  "total_thc": "10.4",
  "brand_id": "00000000-0000-0000-0000-000000000856",
  "unit_cost": "50.4",
  "category_id": "00000000-0000-0000-0000-000000000624",
  "tags": [
    "00000000-0000-0000-0000-000000000009"
  ],
  "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-00000000061a",
  "upc": "036000291453",
  "unit_net_weight": "3.1",
  "unit_type_id": "00000000-0000-0000-0000-000000009f01",
  "unit_price": "200",
  "units_per_case": "0.2",
  "unit_net_weight_and_serving_size_unit_type_id": "00000000-0000-0000-0000-000000009efa"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 5769a3ca4ab0c512ff36593eba1f2520-0181194a21218931-0
{
  "data": {
    "brand": {
      "id": "00000000-0000-0000-0000-000000000856",
      "name": "Company 1020",
      "updated_datetime": "2026-07-24T10:28:10.287065Z"
    },
    "category": {
      "id": "00000000-0000-0000-0000-000000000624",
      "name": "Some category 406",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": "My Product Description",
    "description_markdown": "My Product Description",
    "external_name": "External Name",
    "gross_weight": "9.9",
    "gross_weight_unit_type": {
      "id": "00000000-0000-0000-0000-000000009ef8",
      "name": "Gram"
    },
    "id": "03bd5035-0c00-461e-a3ea-e0158aa185c5",
    "images": [],
    "is_active": false,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000074",
        "menu_name": "Menu 164"
      }
    ],
    "msrp": "100.5",
    "name": "Updated Name",
    "product_group": {
      "id": "00000000-0000-0000-0000-00000000061b",
      "name": "Product Group 404"
    },
    "sku": "45678",
    "strain": {
      "id": "00000000-0000-0000-0000-00000000004b",
      "name": "Strain 31",
      "strain_type": null
    },
    "subcategory": {
      "id": "00000000-0000-0000-0000-00000000061a",
      "name": "Some subcategory 403"
    },
    "unit_cost": "50.4",
    "unit_net_weight": "3.1",
    "unit_net_weight_serving_size_unit_type": {
      "id": "00000000-0000-0000-0000-000000009efa",
      "name": "Ounce"
    },
    "unit_price": "200",
    "unit_serving_size": "2.2",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000009f01",
      "name": "Unit"
    },
    "units_per_case": "0.2",
    "updated_datetime": "2026-07-24T10:28:10.324327Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000852",
      "name": "Company 1014",
      "updated_datetime": "2026-07-24T10:28:10.261818Z"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzc0MzM4YzEtNzNkNS00ZjAzLTg2ZDYtMWI3MjYxYTI1NDQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMCIsInR5cCI6ImFjY2VzcyJ9.-lNnCT-0Q6b3-yFKjGP5vL7nq59L4LD_i9vKjdtdIHs
{
  "category_id": "00000000-0000-0000-0000-0000000006af",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_ALL",
  "menus": [
    "00000000-0000-0000-0000-000000000076"
  ],
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-00000000abbc",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000906"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b07b05f462f26758c351cd68854da88c-15faea862319c35c-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-0000000006af",
      "name": "Some category 545",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "ce99306a-2c7e-4737-becd-a48f09445699",
    "images": [],
    "is_active": true,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000076",
        "menu_name": "Menu 170"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000077",
        "menu_name": "Menu 173"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000078",
        "menu_name": "Menu 176"
      }
    ],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000abbc",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.357406Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000906",
      "name": "Company 1242",
      "updated_datetime": "2026-07-24T10:28:11.280371Z"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzc0MzM4YzEtNzNkNS00ZjAzLTg2ZDYtMWI3MjYxYTI1NDQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMCIsInR5cCI6ImFjY2VzcyJ9.-lNnCT-0Q6b3-yFKjGP5vL7nq59L4LD_i9vKjdtdIHs
{
  "category_id": "00000000-0000-0000-0000-0000000006af",
  "id": "ce99306a-2c7e-4737-becd-a48f09445699",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "DO_NOT_INCLUDE",
  "menus": [
    "00000000-0000-0000-0000-000000000076",
    "00000000-0000-0000-0000-000000000077"
  ],
  "name": "My Product",
  "sku": "12345",
  "tags": [],
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-00000000abbc",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000906"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b07b05f462f26758c351cd68854da88c-010a9f4a9ca1508f-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-0000000006af",
      "name": "Some category 545",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "ce99306a-2c7e-4737-becd-a48f09445699",
    "images": [],
    "is_active": true,
    "menus": [],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000abbc",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.433321Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000906",
      "name": "Company 1242",
      "updated_datetime": "2026-07-24T10:28:11.280371Z"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzc0MzM4YzEtNzNkNS00ZjAzLTg2ZDYtMWI3MjYxYTI1NDQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMCIsInR5cCI6ImFjY2VzcyJ9.-lNnCT-0Q6b3-yFKjGP5vL7nq59L4LD_i9vKjdtdIHs
{
  "category_id": "00000000-0000-0000-0000-0000000006af",
  "id": "ce99306a-2c7e-4737-becd-a48f09445699",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_SELECT",
  "menus": [
    "00000000-0000-0000-0000-000000000076",
    "00000000-0000-0000-0000-000000000077"
  ],
  "name": "My Product",
  "sku": "12345",
  "tags": [],
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-00000000abbc",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000906"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b07b05f462f26758c351cd68854da88c-eabc3fb130b3d3cf-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-0000000006af",
      "name": "Some category 545",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "ce99306a-2c7e-4737-becd-a48f09445699",
    "images": [],
    "is_active": true,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000076",
        "menu_name": "Menu 170"
      },
      {
        "menu_id": "00000000-0000-0000-0000-000000000077",
        "menu_name": "Menu 173"
      }
    ],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000abbc",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.475488Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000906",
      "name": "Company 1242",
      "updated_datetime": "2026-07-24T10:28:11.280371Z"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzc0MzM4YzEtNzNkNS00ZjAzLTg2ZDYtMWI3MjYxYTI1NDQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMCIsInR5cCI6ImFjY2VzcyJ9.-lNnCT-0Q6b3-yFKjGP5vL7nq59L4LD_i9vKjdtdIHs
{
  "category_id": "00000000-0000-0000-0000-0000000006af",
  "id": "ce99306a-2c7e-4737-becd-a48f09445699",
  "inventory_tracking_method": "PACKAGE",
  "menu_visibility": "INCLUDE_IN_SELECT",
  "menus": [
    "00000000-0000-0000-0000-000000000077"
  ],
  "name": "My Product",
  "sku": "12345",
  "unit_price": "100",
  "unit_type_id": "00000000-0000-0000-0000-00000000abbc",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000906"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b07b05f462f26758c351cd68854da88c-d4a8dd9bb03b1e6e-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-0000000006af",
      "name": "Some category 545",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "ce99306a-2c7e-4737-becd-a48f09445699",
    "images": [],
    "is_active": true,
    "menus": [
      {
        "menu_id": "00000000-0000-0000-0000-000000000077",
        "menu_name": "Menu 173"
      }
    ],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000abbc",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.520300Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000906",
      "name": "Company 1242",
      "updated_datetime": "2026-07-24T10:28:11.280371Z"
    }
  }
}

POST /public/v1/products Menus act as expected

POST /public/v1/products
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNzc0MzM4YzEtNzNkNS00ZjAzLTg2ZDYtMWI3MjYxYTI1NDQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDUxMCIsInR5cCI6ImFjY2VzcyJ9.-lNnCT-0Q6b3-yFKjGP5vL7nq59L4LD_i9vKjdtdIHs
{
  "category_id": "00000000-0000-0000-0000-0000000006af",
  "id": "ce99306a-2c7e-4737-becd-a48f09445699",
  "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-00000000abbc",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-000000000906"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b07b05f462f26758c351cd68854da88c-7680e8e4eb1beb18-0
{
  "data": {
    "brand": null,
    "category": {
      "id": "00000000-0000-0000-0000-0000000006af",
      "name": "Some category 545",
      "type": "OTHER"
    },
    "custom_data": [],
    "deleted_at": null,
    "description": null,
    "description_markdown": null,
    "external_name": null,
    "gross_weight": null,
    "gross_weight_unit_type": null,
    "id": "ce99306a-2c7e-4737-becd-a48f09445699",
    "images": [],
    "is_active": true,
    "menus": [],
    "msrp": null,
    "name": "My Product",
    "product_group": null,
    "sku": "12345",
    "strain": null,
    "subcategory": null,
    "unit_cost": null,
    "unit_net_weight": null,
    "unit_net_weight_serving_size_unit_type": null,
    "unit_price": "100",
    "unit_serving_size": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-00000000abbc",
      "name": "Gram"
    },
    "units_per_case": null,
    "updated_datetime": "2026-07-24T10:28:11.553035Z",
    "vendor": {
      "id": "00000000-0000-0000-0000-000000000906",
      "name": "Company 1242",
      "updated_datetime": "2026-07-24T10:28:11.280371Z"
    }
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjZkNDk2N2ItN2ExYi00YmE1LTk0NTctZDQwMDFkMWUwNzlhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDE0MSIsInR5cCI6ImFjY2VzcyJ9.Qul_pO1aTDzyfcrNWT7AHXcAZDjcToJAPLZUmDTJguk
{
  "id": "a3174799-2619-4f1b-982b-1c68f9c05031",
  "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: e95a27325a93cbd6f6b2d3b328c50dce-d5cdb259b6edf24d-0
{
  "errors": [
    {
      "context": {
        "id": "a3174799-2619-4f1b-982b-1c68f9c05031"
      },
      "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": "a3174799-2619-4f1b-982b-1c68f9c05031"
      },
      "message": "Unit Serving Size can't be greater than Unit Net Weight/Volume",
      "pointer": [
        "unit_serving_size"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "a3174799-2619-4f1b-982b-1c68f9c05031"
      },
      "message": "Cannot be negative",
      "pointer": [
        "quantity_available_threshold_max"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "a3174799-2619-4f1b-982b-1c68f9c05031"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjNhZjNlZmUtN2ZmMS00YjM5LTgyMTItMGQ1ZTdmMjllYjBjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDMyMCIsInR5cCI6ImFjY2VzcyJ9.zPF8GScjRJlFWY89G6rEU6ZjPfDB7emr90dFSXxMXLQ
{
  "id": "3a8bb8bb-1742-4b28-91e1-7b2be9368b98",
  "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: 9424d7cda84ee028ddf6dc81fcc7374a-f7d9a6c7677d2abd-0
{
  "errors": [
    {
      "context": {
        "id": "3a8bb8bb-1742-4b28-91e1-7b2be9368b98"
      },
      "message": "Must be greater than threshold min",
      "pointer": [
        "quantity_available_threshold_max"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "3a8bb8bb-1742-4b28-91e1-7b2be9368b98"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjExNDZkNjUtYTY4ZS00ZDBiLTk1NjEtNzIzYzk2MjY3YzJlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ2NCIsInR5cCI6ImFjY2VzcyJ9.ywFsnVfGSlrMElhnszMAjjOfR_esyQzCDUhhvMNL_6I
{
  "brand_id": "00000000-0000-0000-0000-0000000006fc",
  "category_id": "00000000-0000-0000-0000-000000000521",
  "cbd": "5.2",
  "description": "My Product Description",
  "description_markdown": "# My Product Description Markdown",
  "group_id": "00000000-0000-0000-0000-00000000051a",
  "inventory_tracking_method": "PACKAGE",
  "is_featured": true,
  "is_inactive": true,
  "menu_visibility": "INCLUDE_IN_ALL",
  "menus": [
    "00000000-0000-0000-0000-000000000055",
    "00000000-0000-0000-0000-000000000056",
    "00000000-0000-0000-0000-000000000057"
  ],
  "msrp": "100.5",
  "name": "My Product",
  "owner_id": "00000000-0000-0000-0000-000000000d90",
  "quantity_available_threshold_max": "10.5",
  "quantity_available_threshold_min": "5.5555",
  "sku": "12345",
  "strain_id": "00000000-0000-0000-0000-000000000040",
  "subcategory_id": "00000000-0000-0000-0000-000000000519",
  "tags": [
    "00000000-0000-0000-0000-000000000006",
    "00000000-0000-0000-0000-000000000007",
    "00000000-0000-0000-0000-000000000008"
  ],
  "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-00000000832d",
  "unit_price": "100",
  "unit_serving_size": "2.2",
  "unit_type_id": "00000000-0000-0000-0000-000000008334",
  "units_per_case": "0.2",
  "upc": "036000291452",
  "vendor_id": "00000000-0000-0000-0000-0000000006f7",
  "wholesale_unit_price": "90.50"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 464455c3f302e68afed385e3b93ca2c0-189cfbbe1ec88cff-0
{
  "errors": [
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Brand does not exist",
      "pointer": [
        "brand_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Category does not exist",
      "pointer": [
        "category_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Vendor does not exist",
      "pointer": [
        "vendor_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Group does not exist",
      "pointer": [
        "group_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Serving unit type does not exist",
      "pointer": [
        "unit_net_weight_and_serving_size_unit_type_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Owner does not exist",
      "pointer": [
        "owner_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Strain does not exist",
      "pointer": [
        "strain_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "Subcategory does not belong to the product category",
      "pointer": [
        "subcategory_id"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "message": "One or more of the provided tags do not exist",
      "pointer": [
        "tags"
      ],
      "section": "body"
    },
    {
      "context": {
        "id": "c07f3a50-104e-4d3f-90b0-b038a4a32793"
      },
      "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-000000000055"
      ],
      "section": "body"
    },
    {
      "context": {},
      "message": "Menu does not exist",
      "pointer": [
        "menus",
        1,
        "00000000-0000-0000-0000-000000000056"
      ],
      "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

ProductPosMapping

Delete a product POS mapping

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

DELETE /public/v1/product-pos-mappings/20
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjI3NzUxZmItYTI1Zi00OTZjLThmMmUtMDYxMTYxMzFmNTk0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzczNCIsInR5cCI6ImFjY2VzcyJ9.AUofaN1G_ZAjod0MlXtOCePCLrTalq_AJ77hH0XMDbA

Response

204
cache-control: max-age=0, private, must-revalidate
b3: 87778c5ab49e9151136ad4bcb6bd3a01-2bcb7c0ea81c9ff1-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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMThhZmE3MTQtN2ZiZS00ZDgwLTk1YzctOTAxOGIxODlkMDZmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzgyMSIsInR5cCI6ImFjY2VzcyJ9.FoKVAiiQa7ro-oCI77qVZ291eMzg6dazELYfgfXaifg

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1c08f60afc917e6fb63353c765096073-de753f1384729650-0
{
  "data": [
    {
      "blaze_asset_id": null,
      "blaze_product_id": "blaze_123",
      "blaze_retailer_id": "edf06719-e605-41e7-acc9-f78fb43f5831",
      "id": 22,
      "inserted_at": "2026-07-24T10:28:09.093213Z",
      "pos_type": "BLAZE",
      "product_id": "e6772125-f9fd-4e17-94d7-af7060c89185",
      "updated_at": "2026-07-24T10:28:09.093213Z"
    },
    {
      "dutchie_product_id": 456,
      "dutchie_retailer_id": "f282fc09-0d3a-4cdb-976f-e96557bb0408",
      "id": 23,
      "inserted_at": "2026-07-24T10:28:09.114080Z",
      "pos_type": "DUTCHIE",
      "product_id": "c67ff9b3-2cf7-40ae-97e0-29947cc8cec8",
      "updated_at": "2026-07-24T10:28:09.114080Z"
    }
  ],
  "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

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-000000000011
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZjExZWVmYzItMGI5NS00NTBjLThkYzAtMmE0Y2I0MTZiNTY1IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzYxMyIsInR5cCI6ImFjY2VzcyJ9.GV3T3wWdcWU7l3eqagb5Sx-OSW87ddAoElEvy2XgKCc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d4bb66650d071e57291f8f497dff6d03-e5fa3f2f2aebf24a-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_123",
    "blaze_retailer_id": "a42ead58-28a2-43ae-ab14-db0d55e2cf56",
    "id": 17,
    "inserted_at": "2026-07-24T10:28:08.349464Z",
    "pos_type": "BLAZE",
    "product_id": "57c20df2-8892-429c-91ca-b1430737ed1e",
    "updated_at": "2026-07-24T10:28:08.349464Z"
  }
}

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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDQ0YzllNjItYTUwMS00NGQ5LWFhYjktNGU0MzkxNGZiMTRlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MjkzMiIsInR5cCI6ImFjY2VzcyJ9.s63jzGe35qjY8rCJHvssD3ec-9MwecV1r58bd8vvojY
{
  "blaze_product_id": "blaze_123",
  "blaze_retailer_id": "84030f31-d348-47fb-89e6-6aaac1d3bb17",
  "product_id": "dab63b79-9209-4ccc-8f32-7c727e0f2241"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e88c05ea87163c3fd0d7b0e081a54fec-92277072f4044749-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_123",
    "blaze_retailer_id": "84030f31-d348-47fb-89e6-6aaac1d3bb17",
    "id": 14,
    "inserted_at": "2026-07-24T10:28:06.307115Z",
    "pos_type": "BLAZE",
    "product_id": "dab63b79-9209-4ccc-8f32-7c727e0f2241",
    "updated_at": "2026-07-24T10:28:06.307115Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjU5YTFiZDYtNjEzYi00ZWI1LThiMDItYTEzNDM1ODEyZjdmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU0OSIsInR5cCI6ImFjY2VzcyJ9.2w59wt5AT9Qqpnxqfzsr6YTRw7M6PY6nW1tB2ZcNacs
{
  "blaze_product_id": "blaze_456",
  "blaze_retailer_id": "fb9ba9b4-3aa3-4749-a762-371a47747b07",
  "product_id": "389cca9c-a55c-4157-a40f-4b414198eb87"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 2c7046e4860555df7f327eb48c93236f-7169fcd4068d6ed6-0
{
  "data": {
    "blaze_asset_id": null,
    "blaze_product_id": "blaze_456",
    "blaze_retailer_id": "fb9ba9b4-3aa3-4749-a762-371a47747b07",
    "id": 16,
    "inserted_at": "2026-07-24T10:28:08.211106Z",
    "pos_type": "BLAZE",
    "product_id": "389cca9c-a55c-4157-a40f-4b414198eb87",
    "updated_at": "2026-07-24T10:28:08.224910Z"
  }
}

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

Purchase

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDBhOTg3ZWQtNWI4NC00NDJmLWJmYzUtYWY3YWRkOGY5NzE2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDg1OSIsInR5cCI6ImFjY2VzcyJ9.Inexst-i5bvGgTGLh4mw52lwQA494-nTiht5qQ1ET0s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4b5eea1a27d4b054a2f09664d2b69e9a-521b50e982680ec2-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-000000000a05",
        "name": "Company 1544",
        "updated_datetime": "2026-07-24T10:28:13.065351Z"
      },
      "custom_data": [
        {
          "id": 135,
          "name": "Custom Field 40",
          "value": null
        }
      ],
      "due_datetime": "2026-07-24T10:28:13.088541Z",
      "id": "00000000-0000-0000-0000-00000000007f",
      "inserted_datetime": "2026-07-24T10:28:13.088922Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000070b",
            "name": "B2173"
          },
          "compliance_quantity": null,
          "id": "c2a899aa-5d93-48bd-abe9-895d307db07b",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000e99",
            "id": "00000000-0000-0000-0000-0000000004df",
            "license_id": null,
            "name": "Place 507"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "7ef5eb50-0f51-4437-936c-a89528767dc9",
            "name": "Product 2154",
            "sku": "sku 2155",
            "updated_datetime": "2026-07-24T10:28:13.094575Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000070c",
            "name": "B2174"
          },
          "compliance_quantity": null,
          "id": "bbe7db70-8ed2-4c25-a399-73e91f07883a",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000e99",
            "id": "00000000-0000-0000-0000-0000000004df",
            "license_id": null,
            "name": "Place 507"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "040144ac-931f-443b-bd13-69aebf48225d",
            "name": "Product 2158",
            "sku": "sku 2159",
            "updated_datetime": "2026-07-24T10:28:13.100701Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000070e",
            "name": "B2176"
          },
          "compliance_quantity": null,
          "id": "8699de30-195b-46a4-8485-e429ce426147",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000e99",
            "id": "00000000-0000-0000-0000-0000000004df",
            "license_id": null,
            "name": "Place 507"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "59af0be3-b1c8-4791-90b6-b818189d759a",
            "name": "Product 2164",
            "sku": "sku 2165",
            "updated_datetime": "2026-07-24T10:28:13.106348Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-00000000070f",
            "name": "B2177"
          },
          "compliance_quantity": null,
          "id": "8fddd0b9-6024-4b0a-9ab5-a42ff601aa28",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000e99",
            "id": "00000000-0000-0000-0000-0000000004df",
            "license_id": null,
            "name": "Place 507"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "7cda601e-bd02-4e6e-8f96-8ef78a1693a2",
            "name": "Product 2171",
            "sku": "sku 2172",
            "updated_datetime": "2026-07-24T10:28:13.111330Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "0.000000000"
        }
      ],
      "order_datetime": "2026-07-24T10:28:13.088541Z",
      "purchase_number": "Purchase #56",
      "status": "PENDING",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:13.088922Z"
    },
    {
      "charges": [
        {
          "id": "8ea01c33-fb7e-44d4-9156-3f0e037b214c",
          "name": "C1",
          "percent": "10.0000",
          "price": "1.00",
          "type": "CHARGE",
          "unit_type": "PERCENT"
        }
      ],
      "company": {
        "id": "00000000-0000-0000-0000-000000000a03",
        "name": "Company 1541",
        "updated_datetime": "2030-11-01T00:00:00.000000Z"
      },
      "custom_data": [
        {
          "id": 135,
          "name": "Custom Field 40",
          "value": "Custom Field Value 1"
        }
      ],
      "due_datetime": "2020-01-01T00:00:01.000000Z",
      "id": "00000000-0000-0000-0000-00000000007e",
      "inserted_datetime": "2020-01-01T00:00:03.000000Z",
      "items": [
        {
          "batch": {
            "batch_number": "UID1",
            "id": "00000000-0000-0000-0000-0000000006ea",
            "name": "B1"
          },
          "compliance_quantity": "1.0000",
          "id": "cef480bb-2a02-40c4-864e-d94ef57714db",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000e99",
            "id": "00000000-0000-0000-0000-0000000004d7",
            "license_id": "00000000-0000-0000-0000-00000000013a",
            "name": "Place 499"
          },
          "package": {
            "batch_number": "B1",
            "compliance_label": "ABCDEF012345670000000173",
            "id": "00000000-0000-0000-0000-0000000000cd",
            "metrc_label": "ABCDEF012345670000000173",
            "status": "active"
          },
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "c2bb8248-2a2f-4717-b61b-7e6ce93734ad",
            "name": "P1",
            "sku": "SKU1",
            "updated_datetime": "2023-11-02T00:00:00.000000Z"
          },
          "quantity": "1.000000000",
          "received_quantity": "1.000000000"
        }
      ],
      "order_datetime": "2020-01-01T00:00:02.000000Z",
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYzFkODk2ZWItYjNiOS00YzE4LThhZDItYWI5OWU3N2Y4OWYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzIyOCIsInR5cCI6ImFjY2VzcyJ9.rWE1zHWKXBEUhg0UMIOunNjvy01LH3B8QRXzqGlmrZw

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: a21d8fea1de5ddef275be62a87e9a5f5-0646cdc58a98c83a-0
{
  "data": [
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000006da",
        "name": "Company 371",
        "updated_datetime": "2026-07-24T10:28:07.687543Z"
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:07.724582Z",
      "id": "00000000-0000-0000-0000-00000000004b",
      "inserted_datetime": "2026-07-24T10:28:07.725375Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004cc",
            "name": "B385"
          },
          "compliance_quantity": null,
          "id": "f3d7c1b2-5aec-4af6-ac8b-a579a43e6668",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000363",
            "license_id": null,
            "name": "Place 128"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "5d4d3a6c-c975-4b63-a870-9b4e805bc0c9",
            "name": "Product 371",
            "sku": "sku 372",
            "updated_datetime": "2026-07-24T10:28:07.741524Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004cd",
            "name": "B386"
          },
          "compliance_quantity": null,
          "id": "b1874117-542e-4bfd-a80c-f866d64b7f49",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000363",
            "license_id": null,
            "name": "Place 128"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "36b2ee9a-7f5c-4c7c-9532-dc18b35df5b5",
            "name": "Product 373",
            "sku": "sku 374",
            "updated_datetime": "2026-07-24T10:28:07.755539Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004ce",
            "name": "B387"
          },
          "compliance_quantity": null,
          "id": "c67f3702-9494-4f4d-b5b1-c53e790c071b",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000363",
            "license_id": null,
            "name": "Place 128"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "67fd022f-1199-4c69-8bce-4b89cf03295f",
            "name": "Product 379",
            "sku": "sku 380",
            "updated_datetime": "2026-07-24T10:28:07.767685Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "0.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004cf",
            "name": "B388"
          },
          "compliance_quantity": null,
          "id": "a3eb00ec-f226-429e-9a1f-264adc62d4fa",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000363",
            "license_id": null,
            "name": "Place 128"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "d85e7044-ff4c-4e39-a496-15c6bae51ee2",
            "name": "Product 383",
            "sku": "sku 384",
            "updated_datetime": "2026-07-24T10:28:07.779177Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "0.000000000"
        }
      ],
      "order_datetime": "2020-01-01T12:30:00.000000Z",
      "purchase_number": "Purchase #6",
      "status": "PENDING",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:07.725375Z"
    },
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-0000000006c6",
        "name": "Company 334",
        "updated_datetime": "2026-07-24T10:28:07.574071Z"
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:07.617680Z",
      "id": "00000000-0000-0000-0000-00000000004a",
      "inserted_datetime": "2026-07-24T10:28:07.620427Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004c1",
            "name": "B346"
          },
          "compliance_quantity": null,
          "id": "d041e2ec-e80e-4f93-8acd-0fed1ff507e5",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000359",
            "license_id": null,
            "name": "Place 118"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "dbb59e24-7d53-40a6-852b-f21ecca057b0",
            "name": "Product 329",
            "sku": "sku 330",
            "updated_datetime": "2026-07-24T10:28:07.631910Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "15.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004c2",
            "name": "B347"
          },
          "compliance_quantity": null,
          "id": "db7ccb4a-db31-45c6-9a23-d96e99067e8d",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000359",
            "license_id": null,
            "name": "Place 118"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "85872a8b-44ec-42f7-98d1-457a83eb87cd",
            "name": "Product 335",
            "sku": "sku 336",
            "updated_datetime": "2026-07-24T10:28:07.645286Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "10.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004c3",
            "name": "B348"
          },
          "compliance_quantity": null,
          "id": "28c82414-2b89-469f-b7d0-a0438ceb9aae",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000359",
            "license_id": null,
            "name": "Place 118"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "e90773ab-1ee5-4ae8-aa60-fea68869e302",
            "name": "Product 337",
            "sku": "sku 338",
            "updated_datetime": "2026-07-24T10:28:07.655868Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "5.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004c4",
            "name": "B349"
          },
          "compliance_quantity": null,
          "id": "cd107c4f-26cf-4ffc-833f-cc1171e687fd",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-000000000359",
            "license_id": null,
            "name": "Place 118"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "238ba378-c6a8-40de-8e56-9d8b8cdfc3c3",
            "name": "Product 343",
            "sku": "sku 344",
            "updated_datetime": "2026-07-24T10:28:07.665676Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "2.000000000"
        }
      ],
      "order_datetime": "2020-01-01T12:20:00.000000Z",
      "purchase_number": "Purchase #5",
      "status": "COMPLETED",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:07.620427Z"
    },
    {
      "charges": [],
      "company": {
        "id": "00000000-0000-0000-0000-00000000069a",
        "name": "Company 258",
        "updated_datetime": "2026-07-24T10:28:07.195698Z"
      },
      "custom_data": [],
      "due_datetime": "2026-07-24T10:28:07.265577Z",
      "id": "00000000-0000-0000-0000-000000000048",
      "inserted_datetime": "2026-07-24T10:28:07.266753Z",
      "items": [
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004ac",
            "name": "B267"
          },
          "compliance_quantity": null,
          "id": "8b2a8b22-6b81-4120-b1b2-0be5cb73daa5",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-00000000033d",
            "license_id": null,
            "name": "Place 90"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "3a6304b1-53cc-4491-a591-b405822e2c8d",
            "name": "Product 250",
            "sku": "sku 251",
            "updated_datetime": "2026-07-24T10:28:07.295298Z"
          },
          "quantity": "15.000000000",
          "received_quantity": "15.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004ad",
            "name": "B268"
          },
          "compliance_quantity": null,
          "id": "9cde88bf-419f-4bc4-bd8e-025ae93c20f1",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-00000000033d",
            "license_id": null,
            "name": "Place 90"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "6bbc320e-d5c8-466e-ad2b-f98cae1e3815",
            "name": "Product 257",
            "sku": "sku 258",
            "updated_datetime": "2026-07-24T10:28:07.343867Z"
          },
          "quantity": "10.000000000",
          "received_quantity": "10.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004ae",
            "name": "B269"
          },
          "compliance_quantity": null,
          "id": "31730634-c47e-4ceb-83d5-c6257322c340",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-00000000033d",
            "license_id": null,
            "name": "Place 90"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "051b7e46-aa29-4b43-8bbb-9a24c835338b",
            "name": "Product 261",
            "sku": "sku 262",
            "updated_datetime": "2026-07-24T10:28:07.365730Z"
          },
          "quantity": "5.000000000",
          "received_quantity": "5.000000000"
        },
        {
          "batch": {
            "batch_number": null,
            "id": "00000000-0000-0000-0000-0000000004af",
            "name": "B270"
          },
          "compliance_quantity": null,
          "id": "17f88e30-b22b-4705-9f7a-2271aa28ce63",
          "is_sample": false,
          "location": {
            "address": "123 Fake Street, Beverly Hills, CA 90210, US",
            "company_id": "00000000-0000-0000-0000-000000000997",
            "id": "00000000-0000-0000-0000-00000000033d",
            "license_id": null,
            "name": "Place 90"
          },
          "package": null,
          "price": "10.000000000",
          "price_base": "10",
          "product": {
            "id": "cfb72c7c-d58f-44c1-a60e-d783de27f11c",
            "name": "Product 265",
            "sku": "sku 266",
            "updated_datetime": "2026-07-24T10:28:07.393416Z"
          },
          "quantity": "2.000000000",
          "received_quantity": "2.000000000"
        }
      ],
      "order_datetime": "2020-01-01T12:00:00.000000Z",
      "purchase_number": "Purchase #3",
      "status": "COMPLETED",
      "total": "32.00",
      "updated_datetime": "2026-07-24T10:28:07.266753Z"
    }
  ],
  "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-000000000058/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2E3YWFkYjktMjhmYS00MTQzLThiMTctYzUyODNjMTExNTdjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDEzOSIsInR5cCI6ImFjY2VzcyJ9.PyNY7RgvwMGd2gFobNqZyUdtL0hwVB-kXTQ2CWX6AA8
{
  "amount": 100.01,
  "description": "Payment for purchase",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-000000000020",
  "quickbooks_deposit_account_id": "QBD-123"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d4ba3532945f639e8dca8cdbfb0a75a7-0a94b23ff774c3a7-0
{
  "data": {
    "amount": "100.01",
    "description": "Payment for purchase",
    "id": "00000000-0000-0000-0000-000000000004",
    "inserted_datetime": "2026-07-24T10:28:09.967161Z",
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000020",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000001",
    "purchase_id": "00000000-0000-0000-0000-000000000058",
    "quickbooks_deposit_account_id": "QBD-123"
  }
}

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-000000000058/payments
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2E3YWFkYjktMjhmYS00MTQzLThiMTctYzUyODNjMTExNTdjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDEzOSIsInR5cCI6ImFjY2VzcyJ9.PyNY7RgvwMGd2gFobNqZyUdtL0hwVB-kXTQ2CWX6AA8
{
  "amount": 100.01,
  "description": "Payment for purchase",
  "payment_datetime": "2020-01-01T00:00:00.000000Z",
  "payment_method_id": "00000000-0000-0000-0000-000000000020",
  "quickbooks_deposit_account_name": "QBD-NAME"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: d4ba3532945f639e8dca8cdbfb0a75a7-55f29435f58bbe52-0
{
  "data": {
    "amount": "100.01",
    "description": "Payment for purchase",
    "id": "00000000-0000-0000-0000-000000000005",
    "inserted_datetime": "2026-07-24T10:28:10.078311Z",
    "payment_date": "2020-01-01T00:00:00.000000Z",
    "payment_method": {
      "deleted_at": null,
      "id": "00000000-0000-0000-0000-000000000020",
      "name": "Payment Method 0"
    },
    "payment_number": "PYT-0000002",
    "purchase_id": "00000000-0000-0000-0000-000000000058",
    "quickbooks_deposit_account_id": "QBD-123"
  }
}

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 PurchasePayment

Get a purchase

GET /public/v1/purchases/:id returns a single purchase

GET /public/v1/purchases/00000000-0000-0000-0000-000000000047
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWQ3Y2FlZTMtNDJlZS00NDdkLTkwN2MtZDBkNDg0ZWMyNGJiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzExOSIsInR5cCI6ImFjY2VzcyJ9.6KUdcEn6bxGTF_KjG1wJa6kPvi3rUToJmscyZxvBAGI

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 1dd9de0e462315b74992b8de6a26496a-9457b55fd7df84a3-0
{
  "data": {
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-000000000673",
      "name": "Company 178",
      "updated_datetime": "2026-07-24T10:28:06.835297Z"
    },
    "custom_data": [],
    "due_datetime": "2026-07-24T10:28:06.885856Z",
    "id": "00000000-0000-0000-0000-000000000047",
    "inserted_datetime": "2026-07-24T10:28:06.886316Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000049b",
          "name": "B204"
        },
        "compliance_quantity": null,
        "id": "b977e868-92f0-41c8-a288-4e0d91bf0fec",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000094d",
          "id": "00000000-0000-0000-0000-000000000322",
          "license_id": null,
          "name": "Place 63"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "4004fcae-3d79-4e06-8070-b3518fe12961",
          "name": "Product 192",
          "sku": "sku 193",
          "updated_datetime": "2026-07-24T10:28:06.904681Z"
        },
        "quantity": "15.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000049c",
          "name": "B205"
        },
        "compliance_quantity": null,
        "id": "49e7086c-0fd2-4621-bad2-30813f5bf43a",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000094d",
          "id": "00000000-0000-0000-0000-000000000322",
          "license_id": null,
          "name": "Place 63"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "9680753d-aa0e-494e-b501-e5c3e80b009c",
          "name": "Product 195",
          "sku": "sku 196",
          "updated_datetime": "2026-07-24T10:28:06.921493Z"
        },
        "quantity": "10.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000049d",
          "name": "B206"
        },
        "compliance_quantity": null,
        "id": "a4a2bf38-1ebf-477e-b0bf-886675be18e2",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000094d",
          "id": "00000000-0000-0000-0000-000000000322",
          "license_id": null,
          "name": "Place 63"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "7398542c-87bb-4099-870c-f389886e450b",
          "name": "Product 197",
          "sku": "sku 198",
          "updated_datetime": "2026-07-24T10:28:06.938081Z"
        },
        "quantity": "5.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000049e",
          "name": "B207"
        },
        "compliance_quantity": null,
        "id": "6f685b96-95ae-454c-aad3-3397efa12539",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-00000000094d",
          "id": "00000000-0000-0000-0000-000000000322",
          "license_id": null,
          "name": "Place 63"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10",
        "product": {
          "id": "2a65ce34-ddd0-4651-8520-580aeec56646",
          "name": "Product 202",
          "sku": "sku 203",
          "updated_datetime": "2026-07-24T10:28:06.955285Z"
        },
        "quantity": "2.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2026-07-24T10:28:06.885855Z",
    "purchase_number": "Purchase #2",
    "status": "PENDING",
    "total": "32.00",
    "updated_datetime": "2026-07-24T10:28:06.886316Z"
  }
}

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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTU5OWZhN2YtY2FhMC00OGQzLWIzMTgtMTMzNzA2YWU5ZjAyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDc0MiIsInR5cCI6ImFjY2VzcyJ9.OZyl9sURKBuZU5fPxLjvcVlhYIFIIbKwSLKiYqkHrxA
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004b6",
  "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-000000000993",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004b4",
      "price": "10.000000000",
      "product_id": "4cd18572-6497-4c68-8d6e-58f376a50276",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004b4",
  "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: d0cb69f36e361b01a7a251c3691aa21d-22600f07df362499-0
{
  "data": {
    "charges": [
      {
        "id": "05515151-9157-4e9a-9a4f-54d84d685dc7",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "f2272e54-bced-4dc8-85b1-5b86145ae7b5",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000993",
      "name": "Company 1417",
      "updated_datetime": "2026-07-24T10:28:12.423928Z"
    },
    "custom_data": [
      {
        "id": 133,
        "name": "Custom Field 38",
        "value": null
      }
    ],
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000077",
    "inserted_datetime": "2026-07-24T10:28:12.462852Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-00000000068d",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "c2ccd43f-6bc0-4a69-80cd-202127d978dd",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000e29",
          "id": "00000000-0000-0000-0000-0000000004b4",
          "license_id": "00000000-0000-0000-0000-000000000131",
          "name": "Place 464"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "4cd18572-6497-4c68-8d6e-58f376a50276",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:12.448160Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-07-24T10:28:12.473038Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTI1NDc4ZTEtYzU2Yi00NTllLTg4MzctOWM1OTljMzRlMWI2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTA4NiIsInR5cCI6ImFjY2VzcyJ9.Aw7-3-XnFOkkZIi8GwsmcGNkZlJ94ifRXzQdVlqYGLw
{
  "billing_location_id": "00000000-0000-0000-0000-000000000505",
  "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-000000000a4b",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-000000000758",
      "location_id": "00000000-0000-0000-0000-000000000505",
      "price": "10.000000000",
      "product_id": "0b91f8d4-4fe7-4cc7-945e-41421c28c87c",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000505",
  "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: 7a7f8cabf964bda4aedb7463083ed821-aee9d335fdac0267-0
{
  "data": {
    "charges": [
      {
        "id": "8d249652-3c9e-49cb-98b0-07aa2b0b2944",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "0b668c50-ca7d-472f-b407-f774a05d0c67",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a4b",
      "name": "Company 1632",
      "updated_datetime": "2026-07-24T10:28:13.734172Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000084",
    "inserted_datetime": "2026-07-24T10:28:13.789995Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000758",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "880afba9-1071-4d16-bc17-cb37ea422b2a",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000f00",
          "id": "00000000-0000-0000-0000-000000000505",
          "license_id": "00000000-0000-0000-0000-00000000014b",
          "name": "Place 545"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "0b91f8d4-4fe7-4cc7-945e-41421c28c87c",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.769246Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-07-24T10:28:13.797994Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTIyNWQ5NjEtNWI1YS00MjFmLWJlOGUtNDcwY2I4YmQyZjZlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTExMyIsInR5cCI6ImFjY2VzcyJ9._GHz5xQ8F_aWZK5UjpZBq9USOY2Gi1BleR1VmOvbH0U
{
  "billing_location_id": "00000000-0000-0000-0000-00000000050a",
  "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-000000000a5f",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000050a",
      "price": "10.000000000",
      "product_id": "a71fe86f-208c-45ee-9bb8-5f5788327900",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-00000000050a",
  "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: f5580ee5a7e32fb983c6768a0064fad5-664379654d6de769-0
{
  "data": {
    "charges": [
      {
        "id": "0ba286e8-8d6e-49bc-8931-ceacdc5d17e7",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "09d098de-1841-4a55-848f-d43c97e23146",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a5f",
      "name": "Company 1656",
      "updated_datetime": "2026-07-24T10:28:13.876232Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000085",
    "inserted_datetime": "2026-07-24T10:28:13.913949Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000766",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "7846aaec-1cc3-4e43-9135-87ce29cbf843",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000f18",
          "id": "00000000-0000-0000-0000-00000000050a",
          "license_id": "00000000-0000-0000-0000-00000000014d",
          "name": "Place 550"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "a71fe86f-208c-45ee-9bb8-5f5788327900",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.898001Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "6.00",
    "updated_datetime": "2026-07-24T10:28:13.922084Z"
  }
}

POST /public/v1/purchases updates a purchase

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2U2MmQxN2YtZWIxYy00MWU4LTg2NDItY2Q3ODY1MzVhMzNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTA0NCIsInR5cCI6ImFjY2VzcyJ9.IGxdTUsmBOu4j42_2tPp-YA18Il_N1kampAR1Xpr0Vw
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004ff",
  "charges": [
    {
      "name": "C1",
      "percent": "10.0000",
      "type": "CHARGE",
      "unit_type": "PERCENT"
    }
  ],
  "company_id": "00000000-0000-0000-0000-000000000a36",
  "due_datetime": "2020-01-20T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004ff",
      "price": "10.000000000",
      "product_id": "686df635-bd7b-4ff8-bca5-cd4a383629bb",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004ff",
  "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: ae623f0946e3377947d199ee0655c2cc-a7e5c12774018d61-0
{
  "data": {
    "charges": [
      {
        "id": "4656c5e0-e0ad-4043-b7b2-da495b59422d",
        "name": "C1",
        "percent": "10.0000",
        "price": "1.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a36",
      "name": "Company 1609",
      "updated_datetime": "2026-07-24T10:28:13.559018Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000083",
    "inserted_datetime": "2026-07-24T10:28:13.603748Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000743",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "8d2adfb2-dcc3-4341-81eb-111861e2e5a0",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000eea",
          "id": "00000000-0000-0000-0000-0000000004ff",
          "license_id": "00000000-0000-0000-0000-000000000148",
          "name": "Place 539"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "686df635-bd7b-4ff8-bca5-cd4a383629bb",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.577987Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "11.00",
    "updated_datetime": "2026-07-24T10:28:13.609840Z"
  }
}

POST /public/v1/purchases updates a purchase

POST /public/v1/purchases
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2U2MmQxN2YtZWIxYy00MWU4LTg2NDItY2Q3ODY1MzVhMzNmIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTA0NCIsInR5cCI6ImFjY2VzcyJ9.IGxdTUsmBOu4j42_2tPp-YA18Il_N1kampAR1Xpr0Vw
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004ff",
  "charges": [
    {
      "id": "4656c5e0-e0ad-4043-b7b2-da495b59422d",
      "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-000000000a36",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "id": "00000000-0000-0000-0000-000000000083",
  "items": [
    {
      "id": "8d2adfb2-dcc3-4341-81eb-111861e2e5a0",
      "location_id": "00000000-0000-0000-0000-0000000004ff",
      "price": "10.000000000",
      "product_id": "686df635-bd7b-4ff8-bca5-cd4a383629bb",
      "quantity": "1.000000000"
    },
    {
      "batch_id": "00000000-0000-0000-0000-000000000745",
      "location_id": "00000000-0000-0000-0000-0000000004ff",
      "price": "5.000000000",
      "product_id": "d42abd02-9b4c-4fb8-8770-3d157dc93e7a",
      "quantity": "2.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004ff",
  "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: ae623f0946e3377947d199ee0655c2cc-839a56ffd4f04641-0
{
  "data": {
    "charges": [
      {
        "id": "4656c5e0-e0ad-4043-b7b2-da495b59422d",
        "name": "C1",
        "percent": "10.0000",
        "price": "2.00",
        "type": "CHARGE",
        "unit_type": "PERCENT"
      },
      {
        "id": "98f88b2d-62bd-46b7-97c3-61e97f84e3d6",
        "name": "C2",
        "percent": null,
        "price": "-5.00",
        "type": "DISCOUNT",
        "unit_type": "PRICE"
      }
    ],
    "company": {
      "id": "00000000-0000-0000-0000-000000000a36",
      "name": "Company 1609",
      "updated_datetime": "2026-07-24T10:28:13.559018Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-30T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000083",
    "inserted_datetime": "2026-07-24T10:28:13.603748Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000743",
          "name": "B1"
        },
        "compliance_quantity": null,
        "id": "8d2adfb2-dcc3-4341-81eb-111861e2e5a0",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000eea",
          "id": "00000000-0000-0000-0000-0000000004ff",
          "license_id": "00000000-0000-0000-0000-000000000148",
          "name": "Place 539"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "686df635-bd7b-4ff8-bca5-cd4a383629bb",
          "name": "P1",
          "sku": "SKU1",
          "updated_datetime": "2026-07-24T10:28:13.577987Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      },
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000745",
          "name": "B2"
        },
        "compliance_quantity": null,
        "id": "ac0aac8d-868e-4bf4-85dd-9e5b1d56b03c",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000eea",
          "id": "00000000-0000-0000-0000-0000000004ff",
          "license_id": "00000000-0000-0000-0000-000000000148",
          "name": "Place 539"
        },
        "package": null,
        "price": "5.000000000",
        "price_base": "5.000000000",
        "product": {
          "id": "d42abd02-9b4c-4fb8-8770-3d157dc93e7a",
          "name": "P2",
          "sku": "SKU2",
          "updated_datetime": "2026-07-24T10:28:13.591591Z"
        },
        "quantity": "2.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-01T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "17.00",
    "updated_datetime": "2026-07-24T10:28:13.691299Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDJhZjdjYTQtZDJhNS00ZGQ1LWFkN2YtY2I1NDA2Y2ZmMzk0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY0OSIsInR5cCI6ImFjY2VzcyJ9.ZEijQM8vBIyqXjTjxb43D_Hf8txTk5z9IPd0DNMEkKI
{
  "billing_location_id": "00000000-0000-0000-0000-00000000049f",
  "company_id": "00000000-0000-0000-0000-00000000095e",
  "due_datetime": "2020-01-20T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000049f",
      "price": "10",
      "product_id": "c710abe3-ee94-4c09-b6aa-ee9cfcb23580",
      "quantity": "1"
    }
  ],
  "location_id": "00000000-0000-0000-0000-00000000049f",
  "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: fda807930d5f192f08a2f40b3067199a-c4ff1729f3239d70-0
{
  "data": {
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000095e",
      "name": "Company 1349",
      "updated_datetime": "2026-07-24T10:28:11.998742Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000075",
    "inserted_datetime": "2026-07-24T10:28:12.032931Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000664",
          "name": "B1728"
        },
        "compliance_quantity": null,
        "id": "11068e31-bd9b-4961-a382-672dc6f51493",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000de6",
          "id": "00000000-0000-0000-0000-00000000049f",
          "license_id": "00000000-0000-0000-0000-000000000127",
          "name": "Place 443"
        },
        "package": null,
        "price": "10.000000000",
        "price_base": "10.000000000",
        "product": {
          "id": "c710abe3-ee94-4c09-b6aa-ee9cfcb23580",
          "name": "Product 1724",
          "sku": "sku 1725",
          "updated_datetime": "2026-07-24T10:28:12.017578Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "10.00",
    "updated_datetime": "2026-07-24T10:28:12.032931Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDJhZjdjYTQtZDJhNS00ZGQ1LWFkN2YtY2I1NDA2Y2ZmMzk0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY0OSIsInR5cCI6ImFjY2VzcyJ9.ZEijQM8vBIyqXjTjxb43D_Hf8txTk5z9IPd0DNMEkKI
{
  "company_id": "00000000-0000-0000-0000-00000000095e",
  "id": "00000000-0000-0000-0000-000000000075",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-00000000049f",
      "price": "2",
      "product_id": "c710abe3-ee94-4c09-b6aa-ee9cfcb23580",
      "quantity": "1"
    }
  ]
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: fda807930d5f192f08a2f40b3067199a-cac991a996dbf2d9-0
{
  "data": {
    "charges": [],
    "company": {
      "id": "00000000-0000-0000-0000-00000000095e",
      "name": "Company 1349",
      "updated_datetime": "2026-07-24T10:28:11.998742Z"
    },
    "custom_data": [],
    "due_datetime": "2020-01-20T00:00:00.000000Z",
    "id": "00000000-0000-0000-0000-000000000075",
    "inserted_datetime": "2026-07-24T10:28:12.032931Z",
    "items": [
      {
        "batch": {
          "batch_number": null,
          "id": "00000000-0000-0000-0000-000000000664",
          "name": "B1728"
        },
        "compliance_quantity": null,
        "id": "555f8963-9474-4083-91b3-1544bdaaba74",
        "is_sample": false,
        "location": {
          "address": "123 Fake Street, Beverly Hills, CA 90210, US",
          "company_id": "00000000-0000-0000-0000-000000000de6",
          "id": "00000000-0000-0000-0000-00000000049f",
          "license_id": "00000000-0000-0000-0000-000000000127",
          "name": "Place 443"
        },
        "package": null,
        "price": "2.000000000",
        "price_base": "2.000000000",
        "product": {
          "id": "c710abe3-ee94-4c09-b6aa-ee9cfcb23580",
          "name": "Product 1724",
          "sku": "sku 1725",
          "updated_datetime": "2026-07-24T10:28:12.017578Z"
        },
        "quantity": "1.000000000",
        "received_quantity": "0.000000000"
      }
    ],
    "order_datetime": "2020-01-02T00:00:00.000000Z",
    "purchase_number": "PO-0000001",
    "status": "PENDING",
    "total": "2.00",
    "updated_datetime": "2026-07-24T10:28:12.103825Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTRhYzdiYTktZjg4YS00MzBhLTgzYWMtMjNlYWNiNWE1NDY2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTAwMyIsInR5cCI6ImFjY2VzcyJ9.tcPuRED3iPUympHGdF4U4ChYSSlh9A0z3wh6iY6yGJk
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004f7",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000a29",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "id": "00000000-0000-0000-0000-000000000082",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-000000000738",
      "id": "e0b034e8-69f0-4baa-826d-4ae915c85e86",
      "location_id": "00000000-0000-0000-0000-0000000004f7",
      "price": "10.000000000",
      "product_id": "3a8da5d7-e1d8-43a6-8fa9-baf2042bd3e5",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004f7",
  "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: 8ebd7d722ad3c7e934875850909a2936-d26dda9c07413aa9-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmU4Y2FkNGEtYTUwMy00ZGFiLThjMDQtNTIyZjNlNzk0NzQxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDcwNyIsInR5cCI6ImFjY2VzcyJ9.oYPC32HDs32Nnv_IvpqUtYwc7yg1n4Pa94eh4TkqnIE
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004ac",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000097c",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004ac",
      "price": "10.000000000",
      "product_id": "2303d1e4-a3f7-4ed7-a829-b7a9bb584022",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004ac",
  "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: 16dbebc8549055efae145892d6d60e0e-f52e866a88ffce58-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTY1Mzg3NTYtMTBhMy00MmRiLTlkMmItMzc3OTdhZDc5NmJjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY4MiIsInR5cCI6ImFjY2VzcyJ9.G54rsobNu6HPDcKixZkmkrHUvZu4cBr-okU8al3e0i4
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004a5",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000096c",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004a5",
      "price": "10.000000000",
      "product_id": "e817ed8a-d7b1-43d4-9778-94e7be466f97",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004a5",
  "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: cf761aedc156fc4354a7e04e12776ca2-e5a638933206d3d6-0
{
  "errors": [
    {
      "context": {
        "id": "2f7f9f7b-0212-4858-8ecd-2c48ddee6a05"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmI5ZTBlMGMtNzE2Zi00YzZjLThhN2ItNmZmODk4MDdkYmNkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NTAyNiIsInR5cCI6ImFjY2VzcyJ9.j3aYz0OeY5G9JMEItJpc9y01KBuJcqi2rtudzfjuEQ8
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004fc",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000a30",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "batch_id": "00000000-0000-0000-0000-00000000073d",
      "location_id": "00000000-0000-0000-0000-0000000004fc",
      "price": "10.000000000",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004fc",
  "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: adb560b9d50888844b0eed883d8ebf13-c7f6f14f8d9c512a-0
{
  "errors": [
    {
      "context": {
        "id": "b5dd6a78-5613-4272-9750-bac207dd976b"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTEsImlhdCI6MTc4NDg4ODg5MSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTNlNzZhN2YtM2JlMi00Nzc5LTg2OTItMzZmYmJiZTEzNWY5IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkwLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDYxMCIsInR5cCI6ImFjY2VzcyJ9.vS02BitjTLUl3p3EEV5hKpOZl4RkoHzGci_eU-1eehY
{
  "billing_location_id": "00000000-0000-0000-0000-000000000490",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-00000000093b",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-000000000491",
      "price": "10.000000000",
      "product_id": "085591c0-23d0-4415-bb66-ff58953dd87d",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-000000000491",
  "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: f07ea51da14c984efc494b5c8b107b1f-53b8b1122d9c047a-0
{
  "errors": [
    {
      "context": {
        "id": "a30b8d74-c9f1-409a-9f28-1075cab9f5a4"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTMsImlhdCI6MTc4NDg4ODg5MywiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWJiMGU4MDYtYWU3Zi00MWE4LWE1MTEtYTI2ZGU2M2I3NjQxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkyLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDk2MyIsInR5cCI6ImFjY2VzcyJ9.kN9u8vtwVpxgW7iUxiydpOyJ0RBqDKIXkgi8PJ7SqcM
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004ee",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000a1c",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004ee",
      "price": "10.000000000",
      "product_id": "50fe1775-a4e2-4166-9b42-0858f3054858",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004ef",
  "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: 4b11506084181667832968e13254780c-0a23797ce8f6ffa5-0
{
  "errors": [
    {
      "context": {
        "id": "4a9cd396-2f2a-43c7-b2d0-e3b054c7cf35"
      },
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTIsImlhdCI6MTc4NDg4ODg5MiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMWZkZmJhM2MtMzU2OC00MDg5LWJjOTMtMWIzZDAyYTBlYzU2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODkxLCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDY5NSIsInR5cCI6ImFjY2VzcyJ9.kw8CWoXB-UMEvxTtOSg_YxqL6p2LW3o-s63vOFcb7q8
{
  "billing_location_id": "00000000-0000-0000-0000-0000000004a8",
  "charges": [],
  "company_id": "00000000-0000-0000-0000-000000000973",
  "due_datetime": "2020-01-30T00:00:00.000000Z",
  "items": [
    {
      "location_id": "00000000-0000-0000-0000-0000000004a7",
      "price": "10.000000000",
      "product_id": "24344cf9-eaa6-4405-9c64-4ea8b35cb8b7",
      "quantity": "1.000000000"
    }
  ],
  "location_id": "00000000-0000-0000-0000-0000000004a7",
  "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: be3e5a0c9f1778d0be4ba82d3aaace29-0d2930b7adb4e4eb-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
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

Responses

Status Description Schema
200 A single purchase orders Purchase

Returns

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2NmNTAzYzQtYWI2My00YjQ3LWJmYTQtMzA5ZTc4OWI2YTU0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzc1MiIsInR5cCI6ImFjY2VzcyJ9.t71rlOaDo_nLaFW3WjDQfqDIkGKZqLw9hV-bGt7FM-s

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 273305634f1fc5381def5c6c1d471712-7d70bb8d89f9cda2-0
{
  "data": [
    {
      "company": {
        "id": "00000000-0000-0000-0000-00000000077f",
        "name": "Company 663",
        "updated_datetime": "2026-07-24T10:28:08.838988Z"
      },
      "custom_data": {
        "94": "Custom Field Value"
      },
      "description": null,
      "id": "00000000-0000-0000-0000-000000000036",
      "inserted_at": "2026-07-24T10:28:08.846344Z",
      "invoice_numbers": [],
      "items": [
        {
          "id": "00000000-0000-0000-0000-000000000036",
          "price": 30.1,
          "product": {
            "id": "5886ab5c-a90c-49b3-b693-c32454a3cd73",
            "name": "Product 675",
            "sku": "sku 676",
            "updated_datetime": "2026-07-24T10:28:08.826476Z"
          },
          "quantity": 5.0,
          "waste": false
        }
      ],
      "location": {
        "address": "123 Fake Street, Beverly Hills, CA 90210, US",
        "company_id": "00000000-0000-0000-0000-000000000b26",
        "id": "00000000-0000-0000-0000-0000000003be",
        "license_id": null,
        "name": "Place 219"
      },
      "order_id": null,
      "order_number": null,
      "order_quantity": null,
      "owner": {
        "banned": false,
        "deleted_at": null,
        "email": "owner-881@example.com",
        "full_name": "FirstName1806 LastName1807",
        "id": "00000000-0000-0000-0000-000000000eab",
        "role": {
          "id": "00000000-0000-0000-0000-000000000ef8",
          "name": "Admin 913"
        }
      },
      "return_datetime": "2024-12-12T20:26:19.297537Z",
      "return_number": "RN-24",
      "return_quantity": null,
      "return_type": null,
      "status": "Processing",
      "total": 150.5,
      "updated_at": "2026-07-24T10:28:08.846344Z"
    }
  ],
  "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

Get a return

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

GET /public/v1/returns/00000000-0000-0000-0000-000000000022
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZWEzZGI1ZjItMWMxYS00ZTljLWFlMjUtYWM2OGE4OWE3MWNhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzAwNSIsInR5cCI6ImFjY2VzcyJ9.KDS9T6mG1JPu-U-LZKyjAwSX6oXJ3mXZ9eoo-T4tyi4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c050972857412d3ee5cc4c05fb487e05-5c905163c3ab2fdf-0
{
  "data": {
    "company": {
      "id": "00000000-0000-0000-0000-000000000652",
      "name": "Company 110",
      "updated_datetime": "2026-07-24T10:28:06.451570Z"
    },
    "custom_data": {},
    "description": null,
    "id": "00000000-0000-0000-0000-000000000022",
    "inserted_at": "2026-07-24T10:28:06.465833Z",
    "invoice_numbers": [],
    "items": [
      {
        "id": "00000000-0000-0000-0000-000000000022",
        "price": 30.1,
        "product": {
          "id": "ac47d6df-f242-456f-9be9-c840d0b0dfd8",
          "name": "Product 124",
          "sku": "sku 125",
          "updated_datetime": "2026-07-24T10:28:06.441410Z"
        },
        "quantity": 5.0,
        "waste": false
      }
    ],
    "location": {
      "address": "123 Fake Street, Beverly Hills, CA 90210, US",
      "company_id": "00000000-0000-0000-0000-0000000008ff",
      "id": "00000000-0000-0000-0000-0000000002ff",
      "license_id": null,
      "name": "Place 28"
    },
    "order_id": null,
    "order_number": null,
    "order_quantity": null,
    "owner": {
      "banned": false,
      "deleted_at": null,
      "email": "owner-136@example.com",
      "full_name": "FirstName278 LastName279",
      "id": "00000000-0000-0000-0000-000000000bc0",
      "role": {
        "id": "00000000-0000-0000-0000-000000000bf1",
        "name": "Admin 138"
      }
    },
    "return_datetime": "2026-07-24T10:28:06.465390Z",
    "return_number": "RN-4",
    "return_quantity": null,
    "return_type": null,
    "status": "Processing",
    "total": 32.0,
    "updated_at": "2026-07-24T10:28:06.465833Z"
  }
}

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

StockAdjustment

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiM2U0YTRjMWUtYTM4Ny00YjBmLTg0ZTUtNzdmMzEyZjA5MTkzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU5NSIsInR5cCI6ImFjY2VzcyJ9.VCH_0enGBhFy1OuOu0M2LZuUxz_N7tepk1BpyRSFP1Y

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: f860b85bb747efba0ebfed5410414340-cabc834b1a0b9542-0
{
  "data": [
    {
      "batch_id": null,
      "completion_datetime": "2026-07-24T10:28:08.351670Z",
      "compliance_quantity": null,
      "compliance_unit_type": null,
      "description": null,
      "id": "00000000-0000-0000-0000-0000000000f7",
      "inserted_at": "2026-07-24T10:28:08.352706Z",
      "license_id": null,
      "location_id": null,
      "owner_id": "00000000-0000-0000-0000-000000000e0b",
      "package_id": null,
      "product_id": "f69df640-f2d4-4026-a303-53c05b3ba0b3",
      "quantity": "10",
      "reason": "revaluation",
      "total_cost": "10000",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000874b",
        "name": "Gram"
      }
    },
    {
      "batch_id": null,
      "completion_datetime": "2026-07-24T10:28:08.566178Z",
      "compliance_quantity": "1",
      "compliance_unit_type": {
        "id": "00000000-0000-0000-0000-00000000874d",
        "name": "Ounce"
      },
      "description": "A default note describing this transaction",
      "id": "00000000-0000-0000-0000-0000000000f8",
      "inserted_at": "2026-07-24T10:28:08.576659Z",
      "license_id": "00000000-0000-0000-0000-0000000000ea",
      "location_id": "00000000-0000-0000-0000-0000000003a6",
      "owner_id": null,
      "package_id": "00000000-0000-0000-0000-000000000094",
      "product_id": "1ac97343-f6b0-41e5-ad47-f121e044afe3",
      "quantity": "1",
      "reason": "Voluntary Surrender",
      "total_cost": "900",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000874d",
        "name": "Ounce"
      }
    },
    {
      "batch_id": "00000000-0000-0000-0000-000000000519",
      "completion_datetime": "2026-07-24T10:28:08.774228Z",
      "compliance_quantity": null,
      "compliance_unit_type": null,
      "description": null,
      "id": "00000000-0000-0000-0000-0000000000f9",
      "inserted_at": "2026-07-24T10:28:08.775368Z",
      "license_id": null,
      "location_id": "00000000-0000-0000-0000-00000000039c",
      "owner_id": null,
      "package_id": null,
      "product_id": "18f23150-cbc6-4e85-a802-915db017d653",
      "quantity": "1",
      "reason": "revaluation",
      "total_cost": "-800",
      "unit_type": {
        "id": "00000000-0000-0000-0000-00000000874b",
        "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODJjZmUyN2QtNzE4YS00ZDM5LTkzNzQtNTMyMjI2ZGM0NjIxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzg2MCIsInR5cCI6ImFjY2VzcyJ9.5fr_KcuMO4rUjpQxif6y9EpbC0bNlrQNIaHxiY1kUvg
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000003d3",
  "product_id": "1110329e-277d-4751-8826-9bd779b7d639",
  "quantity": 10,
  "reason": "expired"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0ef732fb3ea88387a6b930678fa98351-dee1ef3bbbea5699-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-0000000000fc",
    "inserted_at": "2026-07-24T10:28:09.150136Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-0000000003d3",
    "owner_id": null,
    "package_id": null,
    "product_id": "1110329e-277d-4751-8826-9bd779b7d639",
    "quantity": "10",
    "reason": "expired",
    "total_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000009213",
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmRhN2Q2ZjQtNGFjYi00NGNhLThlOTgtZTIyMGQ5OGNhYjYyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzE4MSIsInR5cCI6ImFjY2VzcyJ9.T4f8Zq5h0UM5ya1UzuC4_fcjmtLm27j48UtUjKDQduM
{
  "batch_id": "00000000-0000-0000-0000-0000000004a3",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-000000000336",
  "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: 7e2830cfe1096c0cfd1b3a39fe0075f0-1cdf5134db848d20-0
{
  "data": {
    "batch_id": "00000000-0000-0000-0000-0000000004a3",
    "completion_datetime": "2020-01-03T12:20:00.000000Z",
    "compliance_quantity": null,
    "compliance_unit_type": null,
    "description": "test",
    "id": "00000000-0000-0000-0000-0000000000dc",
    "inserted_at": "2026-07-24T10:28:07.100102Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-000000000336",
    "owner_id": null,
    "package_id": null,
    "product_id": "41fbab78-3e31-4b9c-b43a-e3769d8228bb",
    "quantity": "10",
    "reason": "expired",
    "total_cost": "10000",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000007909",
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNWVjZjdkY2QtNGIxZS00ZjE1LTkyMDktM2UyNTdkZjk0MmUxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0NiIsInR5cCI6ImFjY2VzcyJ9.1LUm2zgfut1_3I_1qZQf2jEe7YHdZkfI3fmyf6Snfx0
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "package_id": "00000000-0000-0000-0000-000000000089",
  "reason": "Damage (BCC)",
  "unit_cost": 1000
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 260d08408774b1add1b61dbbc768d761-65b13642b7cafc3e-0
{
  "data": {
    "batch_id": null,
    "completion_datetime": "2020-01-03T12:20:00.000000Z",
    "compliance_quantity": "10",
    "compliance_unit_type": {
      "id": "00000000-0000-0000-0000-000000008187",
      "name": "Ounce"
    },
    "description": "test",
    "id": "00000000-0000-0000-0000-0000000000f4",
    "inserted_at": "2026-07-24T10:28:08.036378Z",
    "license_id": "00000000-0000-0000-0000-0000000000e0",
    "location_id": "00000000-0000-0000-0000-00000000036f",
    "owner_id": null,
    "package_id": "00000000-0000-0000-0000-000000000089",
    "product_id": "b659ffe3-8dc0-4029-beee-a31607ac834d",
    "quantity": "0.35274",
    "reason": "Damage (BCC)",
    "total_cost": "10000.000000005834",
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000008185",
      "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNGNjZGI0OTYtYzQwNy00ODNkLWFkNGItOGM5Y2Y3Y2YyODc4IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzk5MSIsInR5cCI6ImFjY2VzcyJ9.Qn8XLRi4Ll6VJ-MVL4kVnr7z7T1EGLgp2K4O5GWak9M
{
  "description": "test",
  "package_id": "00000000-0000-0000-0000-0000000000a0",
  "quantity": 10,
  "reason": "Damage (BCC)"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 670fea2489e8fb23517253d210b9c78b-043952cff959e03a-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOWI5YjBhNjgtOTQ1Zi00ZmMzLTg3ODAtN2I0N2EzYzFiMzA3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzgyMCIsInR5cCI6ImFjY2VzcyJ9.L0BZvlQhQ9PKngJRE6DbyHF-aGXjDsCLKC8h1-sDOhc
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000003c9",
  "product_id": "f5aa0711-5c73-4fe4-9d1c-fd4d149ab047",
  "quantity": 10,
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 73cab0a6d6d312ae7cb954e81a9a59fc-05e7188458e0c3cd-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTY5NzliNTYtMzMxNS00MGM1LTg0ZDQtZTA0NjFlY2EwMWQwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzk0NiIsInR5cCI6ImFjY2VzcyJ9.qdMioij_9VdyCPIVxWGgLmnsMPip-rlakTo3dqfVsKM
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "location_id": "00000000-0000-0000-0000-0000000003de",
  "product_id": "9c2a3ae0-0f0d-4981-8fa1-ac1be919df23",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: ff934395b97dd3f16290a049aa2e81d1-7d89d109166f26ff-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDhkMDY3YTQtN2Y5OS00MjZlLTg1ZWYtZmExMjliOTIzMjg3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDE3MiIsInR5cCI6ImFjY2VzcyJ9.E7WJMH8ADlpgsIZtXd36tWc_kfIoTQO7qX2QbDQjLYU
{
  "batch_id": "d38c3934-f1f0-4f00-842e-13c9aed7be1d",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "d8f6c952-3e73-49b7-9817-8e59ad3e95e2",
  "package_id": "80dbc5e3-a454-4c27-beb4-03b23163f229",
  "product_id": "c33ea7c4-11ae-4423-bfb3-5b79bbea225c",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 9754b38fc0c03ff071fca5977543979d-a540b9892c7884c0-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMThjNzA3MzYtY2M3My00MzAzLWFlYTQtZDQwNTU5NTJlNGIyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI3NSIsInR5cCI6ImFjY2VzcyJ9.3HeKI9gdLb_0WD0B_JK-BcFoisfMLW1Z-gUcdjrwIuk
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "7ea8ff74-706e-4dd4-88b1-1c1747444d6b",
  "reason": "expired"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: c845a2a43d527ea821775446d76ce1e5-2443ea5cf99b3283-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWFmNjIxMzgtMzRjNy00Njc1LWI4MTUtY2VmMDk1ZGNmNWJhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI4MiIsInR5cCI6ImFjY2VzcyJ9.hZEK1WBHnYV3xQCPH55MB2BtbRRChMvhV0eiURZg9yg
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "26a34dd0-1312-4173-9e75-6719fd7fac4f",
  "product_id": "ad0bc1c4-a1cf-4f1e-a7ad-28651020558f",
  "quantity": 10,
  "reason": "waste"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: a34a5d60d6c1a2e72ccaa45a63641740-4f06c12e55d50ab4-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZmUyYjIyZGYtZTYxNy00Zjc2LWE5ZmEtMjZmMWYwZmM4NDk0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI2NiIsInR5cCI6ImFjY2VzcyJ9.VmRNLDaiS_jrSpe-cW85007Yg7pOqJOOf6v7GpFr2ps
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "location_id": "832d37c5-b6f4-40f3-bff3-ef25b97822f8",
  "package_id": "13d2617f-08da-4ff0-ab88-e6d95268669b",
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 6de2a45d513e2ec6009ff9d5bdd1930f-b0d49aa1670c9420-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYmMzMjQ2NWItMjYwYy00YjFmLWJjYzktMTNhNjE4NjU0N2RiIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDEyMCIsInR5cCI6ImFjY2VzcyJ9.p6w4Dmy5AUDiA68QwqKs9RONGaAKYSHSZa79r29v3nk
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "product_id": "c5265ba7-943e-40d5-be1d-998551ef11d5",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: fcea5e20ace16d18aa73c947137fc9a6-78c0bf9ccc769d43-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTMzNDUyNWItNzIzZi00N2RjLWIwN2QtYjljYTBmZGQ3YTIzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI0MCIsInR5cCI6ImFjY2VzcyJ9.YLLCKfKGWrn_YAbxlkuKkoeK7De-8B7wmP-D-wVRiRY
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "e83027e7-e467-4d63-a21c-7ce8fdf22ee9",
  "product_id": "66ba58c7-94b3-407a-a56a-542afdbd5ff8",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 7b94f1e85e53f38d05cb29bfa1f7c2e0-21fa99fa4b8af168-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiY2NmNzQ0M2YtM2FlYi00MjIwLWFhNzctYWY3YTY5ZTk1NTRhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDE1NCIsInR5cCI6ImFjY2VzcyJ9.yCdhloTEwdSMVQzvaJujudobuztXBqmnX7tF-4n3tmQ
{
  "batch_id": "00000000-0000-0000-0000-000000000588",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "5bfb8854-ee4f-4a8e-ade1-698411fc60d8",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 9226500b924faaf76a7af5fa1589eeac-98578cc987342c8b-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiODA5ZGUwM2ItMTI5My00MjNkLThmYjMtYzZkOTc3ZTRmMzRlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDEyNSIsInR5cCI6ImFjY2VzcyJ9.0v9OwUNFOcn92p_DhTV8w_wIIXcjserKdYCl4tDPxBo
{
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "compliance_quantity": 10,
  "description": "test",
  "package_id": "00000000-0000-0000-0000-0000000000a5",
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: 8c86772c984982825db1fcf2511ca076-3169d3d2c36086fc-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0OTAsImlhdCI6MTc4NDg4ODg5MCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjNiZjQ3MDUtMDU4MC00MjZhLThjN2QtNTZkZDFkNmQzMjczIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg5LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDI0OCIsInR5cCI6ImFjY2VzcyJ9.l888q1dRipvI1GkcitxuzSpnzphrRfS2K_mR3mBYfAg
{
  "batch_id": "00000000-0000-0000-0000-00000000059e",
  "completion_datetime": "2020-01-03T12:20:00.000000Z",
  "description": "test",
  "location_id": "00000000-0000-0000-0000-00000000040c",
  "quantity": 10,
  "reason": "compliance"
}

Response

400
cache-control: max-age=0, private, must-revalidate
content-type: application/json; charset=utf-8
b3: f6f5feb1bd58b89684628ea44aa60808-2afe0ba723b3cb46-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

Get a stock adjustment

GET /public/v1/adjustments/:id returns a single stock adjustment

GET /public/v1/adjustments/00000000-0000-0000-0000-000000000100
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiN2E2MmE4YjYtYzVkMi00M2Y5LThjY2YtNmVlNTZjYWM4ZTY3IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDA3NyIsInR5cCI6ImFjY2VzcyJ9.r-skslVxKriT1OB6yPgBRc4TH9veGQXz9AJTEl70SFk

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 74b1257e070eae1bf36f5e2428d114ef-e7fb71c256115d90-0
{
  "data": {
    "batch_id": "00000000-0000-0000-0000-000000000574",
    "completion_datetime": "2026-07-24T10:28:09.686961Z",
    "compliance_quantity": null,
    "compliance_unit_type": null,
    "description": null,
    "id": "00000000-0000-0000-0000-000000000100",
    "inserted_at": "2026-07-24T10:28:09.688121Z",
    "license_id": null,
    "location_id": "00000000-0000-0000-0000-0000000003ef",
    "owner_id": null,
    "package_id": null,
    "product_id": "9d311d33-b108-4cbb-9322-a85c73780fc8",
    "quantity": "10",
    "reason": "revaluation",
    "total_cost": null,
    "unit_type": {
      "id": "00000000-0000-0000-0000-000000009a3b",
      "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

Strain

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjk0MDE3ZTctOTM3ZS00Mzk5LTgzZmQtYTIzMDJiYzMwZTNjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY3MCIsInR5cCI6ImFjY2VzcyJ9.4NU2FVpLHHKFeI1caNiOhAETcYTYw4d46tkVxf3Nj0Q

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 4d7a7cf591ceadceeb245f07a5cbb9f7-f3b7af9027572a10-0
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000043",
      "name": "Strain 24",
      "strain_type": "INDICA"
    },
    {
      "id": "00000000-0000-0000-0000-000000000044",
      "name": "Strain 25",
      "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

Create a strain

POST /public/v1/strains creates a strain

POST /public/v1/strains
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNmM0MTgzODktY2QzNC00ODJhLTgwOTMtZGZmZGFhY2RiNWYxIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk2NSIsInR5cCI6ImFjY2VzcyJ9.PQHRGhaSE41dc3L7soMsYrVMrlfALZj10tu4XbSupKc
{
  "name": "Blue Dream",
  "strain_type": "hybrid"
}

Response

201
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ddf832e9af47baef824228a887557105-0f3feafb6c59eb43-0
{
  "data": {
    "id": "00000000-0000-0000-0000-00000000002d",
    "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-000000000041
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTM0YjIxOTEtYzRkOS00ZWJiLThmNzQtZTZlNTYzYTZlNGJjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU4OSIsInR5cCI6ImFjY2VzcyJ9.l1FsxHZq-INYORXumBsKDL3eb-boU9lzIL_sm0FPA1M

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 895d7c390553bd141d788f05f06cf282-316477f89bea6e4d-0
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000041",
    "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

Update a strain

POST /public/v1/strains/:id updates a strain

POST /public/v1/strains/00000000-0000-0000-0000-00000000003e
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNTVkNDI2ZmYtOGQ4NS00YjA3LWE3OWYtZjk4ZjdiNTljNjIwIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ1MCIsInR5cCI6ImFjY2VzcyJ9.isJ8h84sLhYgLSlu0WgXWyxyrKx4Ib16-iP_y3APW74
{
  "name": "New Name",
  "strain_type": "sativa"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: b8ebfa381a9039dff86d7adc65cea27a-b81ba01173dbc119-0
{
  "data": {
    "id": "00000000-0000-0000-0000-00000000003e",
    "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

TestResult

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODksImlhdCI6MTc4NDg4ODg4OSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZTFkMjI0NDktN2UyYi00N2M0LWI0YTAtNDhjYmI5ZDhjNjUzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg4LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6NDA0OCIsInR5cCI6ImFjY2VzcyJ9.hKhXdvIWImuuOC8v52R2jwWIdcQkIbCN9G8S95LW50c

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 3afaaff2f8fa95a7de1a1e1315d466a1-3c911971d234d785-0
{
  "data": [
    {
      "additional_test_results": {
        "thca_percentage": "12"
      },
      "batch_id": null,
      "cbd_mg_per_unit": "1.12345",
      "cbd_percentage": "60.1234",
      "id": "00000000-0000-0000-0000-00000000002f",
      "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-0000000000a2",
      "release_date": "2026-07-24",
      "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-07-24T10:28:09.741245Z"
    },
    {
      "additional_test_results": {
        "thca_percentage": "12"
      },
      "batch_id": "00000000-0000-0000-0000-000000000579",
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "id": "00000000-0000-0000-0000-000000000030",
      "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-07-24T10:28:09.756856Z"
    },
    {
      "additional_test_results": {},
      "batch_id": null,
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "id": "00000000-0000-0000-0000-000000000031",
      "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-0000000000a4",
      "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-07-24T10:28:09.845240Z"
    }
  ],
  "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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiZThhZWY3NjYtYTFlNi00ZDIwLThiYTUtNDE1NzA4ZmNmZmMyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzUxOSIsInR5cCI6ImFjY2VzcyJ9.HwKmSV5yCkB-aRyqNbPHIc6pMI5Nwcxk3IsJoeWikI4

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 0425e2f6323f917d985b3e149e2631a8-6aea0ef7f4f8db60-0
{
  "data": [
    {
      "additional_test_results": {
        "spiroxamine_a_ug_per_g": "13",
        "thiacloprid_ug_per_g": "14"
      },
      "batch_id": "00000000-0000-0000-0000-0000000004da",
      "cbd_mg_per_unit": null,
      "cbd_percentage": null,
      "id": "00000000-0000-0000-0000-000000000028",
      "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-07-24T10:28:08.134900Z"
    }
  ],
  "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

Get a test result

GET /public/v1/test-results/:id returns a single test result

GET /public/v1/test-results/00000000-0000-0000-0000-00000000002a
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmRiZmQ3ODItMTU1ZC00MDNjLWI1NTctMWY3ZTNkMGI5NGVkIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mzc4MSIsInR5cCI6ImFjY2VzcyJ9.aeqMhFthiuekpUSEiyYjlXphYlY3cYciNDO9BYaeRcc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: c1246a2584d26205990f1630dbcef8a9-587a4a73545b03aa-0
{
  "data": {
    "additional_test_results": {},
    "batch_id": "00000000-0000-0000-0000-000000000527",
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "id": "00000000-0000-0000-0000-00000000002a",
    "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-07-24T10:28:08.965935Z"
  }
}

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

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMjMzZDk5NDYtMmUxYS00NDExLWFkNjEtZDBlYTY0YTdhYTRjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk4MiIsInR5cCI6ImFjY2VzcyJ9.LP_WLiVZeku_7Sul6wXe7RDfhTj80xfMHCZxert8vkI
{
  "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-000000000480",
  "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: 16b24e478ab98888068ca34cd84e33f0-50db89410298d705-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-000000000480",
    "cbd_mg_per_unit": "1.1",
    "cbd_percentage": "2.2",
    "id": "00000000-0000-0000-0000-000000000022",
    "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-07-24T10:28:06.445951Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDVjMDI2NzktMmIyZi00YTUzLThlM2MtODk4Nzk5OTY0OTg2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzI1OCIsInR5cCI6ImFjY2VzcyJ9.XPcbarey0MFyH9ABc-rgwsqnSl7vx8XPKm2cd0YwpaM
{
  "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-000000000088"
}

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 73db4b567c676b2e4b1a7bf88d735547-e35f4396ffc67213-0
{
  "data": {
    "additional_test_results": {},
    "batch_id": null,
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "id": "00000000-0000-0000-0000-000000000027",
    "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-000000000088",
    "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-07-24T10:28:07.924524Z"
  }
}

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMDlkZTcxNWUtOTM3Zi00ZjhlLWFkOTUtNWZiNzJlMGY3N2QyIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzcyNiIsInR5cCI6ImFjY2VzcyJ9.VGqwCQIfac3yjgJVa2Bal6YQoCFQ5W3TnaAghagoWjc
{
  "batch_id": "00000000-0000-0000-0000-000000000516",
  "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: f739bd34f282650aef19764c6bad81d2-b6d1ff642ca9397b-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWYxOTU2NzAtYjc0Zi00ZDFjLTk3ZDItY2Q0YmIwMmU1NDMzIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzU4NCIsInR5cCI6ImFjY2VzcyJ9.B4iBUzh4z5gA6ylZG8ZgkWM44WkvTDbKRTs2PtEpzXg
{
  "additional_test_results": {},
  "batch_id": "00000000-0000-0000-0000-0000000004e8",
  "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: 459fa22622411c74cf608eef9b727e41-a7ddc2f7b4f8720d-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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiMmNkMjc2ZWUtMjg2Ny00MDgwLWFjMTQtNTY4MTcyYzU4NzFlIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzY2MyIsInR5cCI6ImFjY2VzcyJ9.mg452N1gSsX455vHLrNN_GIO5Znuw2HDoQIy6vjJvFw
{
  "additional_test_results": {
    "thca_percentage": "15"
  },
  "id": "00000000-0000-0000-0000-000000000029",
  "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: f2cacefbe6305f595708f72cc23129d3-e6474fe56583bdb0-0
{
  "data": {
    "additional_test_results": {
      "thca_percentage": "15"
    },
    "batch_id": "00000000-0000-0000-0000-000000000505",
    "cbd_mg_per_unit": null,
    "cbd_percentage": null,
    "id": "00000000-0000-0000-0000-000000000029",
    "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-07-24T10:28:08.478784Z"
  }
}

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

User

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiYjYxZGQ4ZDQtZTM3Mi00YTY5LWJiNGQtN2U4ZGVhMzVlYzlhIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzQ0NSIsInR5cCI6ImFjY2VzcyJ9.kkOqksjQD13jnXfWeqzJlKfLYaLwp-fSZUrOrRsczPo

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: ae7dde4bdb2584547d0978b0977bc8e1-8b9bc6c12ce707a4-0
{
  "data": [
    {
      "banned": false,
      "deleted_at": null,
      "email": "owner-573@example.com",
      "full_name": "FirstName1188 LastName1189",
      "id": "00000000-0000-0000-0000-000000000d75",
      "role": {
        "id": "00000000-0000-0000-0000-000000000db2",
        "name": "Admin 587"
      }
    },
    {
      "banned": false,
      "deleted_at": null,
      "email": "owner-575@example.com",
      "full_name": "FirstName1192 LastName1193",
      "id": "00000000-0000-0000-0000-000000000d77",
      "role": {
        "id": "00000000-0000-0000-0000-000000000db4",
        "name": "Admin 589"
      }
    }
  ],
  "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

Get a user

GET /public/v1/users/:id returns a single user

GET /public/v1/users/00000000-0000-0000-0000-000000000ce6
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiNDE0NzIyZjUtYzY4ZC00M2RkLWE2YWUtY2M1YzdhZWMzMTE0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzI5OSIsInR5cCI6ImFjY2VzcyJ9.VpA0iJxKrU_LdmmtpqpsgzlEPQ9dJLxfUYaO8tPtMuc

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: 557bfc050a7800723c01d058f1c70bfe-1a7ae0f8df7ee564-0
{
  "data": {
    "banned": false,
    "deleted_at": null,
    "email": "owner-430@example.com",
    "full_name": "FirstName886 LastName887",
    "id": "00000000-0000-0000-0000-000000000ce6",
    "role": {
      "id": "00000000-0000-0000-0000-000000000d25",
      "name": "Admin 446"
    }
  }
}

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

Vehicle

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.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODgsImlhdCI6MTc4NDg4ODg4OCwiaXNzIjoiRGlzdHJ1IiwianRpIjoiYWRhYTBhMjgtNGYwYy00ZTExLTkyOTAtODcxM2E3ZTk0MTc0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg3LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzUwOCIsInR5cCI6ImFjY2VzcyJ9.Y0m4QOPMiwON7_KKSAfeUQDu4IY1MEouy7uMOvgCtWM

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: eb6698d141d240d9804ec60c484d7d1b-aa9da3a84e1f541d-0
{
  "data": [
    {
      "color": "Red",
      "description": "Test Vehicle",
      "id": "00000000-0000-0000-0000-00000000001c",
      "inserted_datetime": "2026-07-24T10:28:08.068455Z",
      "license_plate_number": "1234567890ABCDEFG",
      "license_plate_state": "CA",
      "make": "Toyota",
      "model": "Camry",
      "updated_datetime": "2026-07-24T10:28:08.068455Z",
      "vin": "1234567890ABCDEFG",
      "year": "2020"
    },
    {
      "color": "Red",
      "description": "Test Vehicle",
      "id": "00000000-0000-0000-0000-00000000001d",
      "inserted_datetime": "2026-07-24T10:28:08.074676Z",
      "license_plate_number": "1234567890ABCDEFG",
      "license_plate_state": "CA",
      "make": "Honda",
      "model": "Civic",
      "updated_datetime": "2026-07-24T10:28:08.074676Z",
      "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

Create a vehicle

POST /public/v1/vehicles creates a vehicle

POST /public/v1/vehicles
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODYsImlhdCI6MTc4NDg4ODg4NiwiaXNzIjoiRGlzdHJ1IiwianRpIjoiNjUyMDJiODEtMjcyMS00YThlLWEyMGQtMzQwYWJjZWRhN2NjIiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg1LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjk1OSIsInR5cCI6ImFjY2VzcyJ9.WY86bqQC2APbWkODAEaw7QjHyJ8yhySve2yrGue9tmY
{
  "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: bcca0b0ba60a42f61a0a6e585ba9592a-f7c85b1c272d1b77-0
{
  "data": {
    "color": "Red",
    "description": "Delivery truck",
    "id": "00000000-0000-0000-0000-000000000012",
    "inserted_datetime": "2026-07-24T10:28:06.311831Z",
    "license_plate_number": "XYZ789",
    "license_plate_state": "TX",
    "make": "Ford",
    "model": "F-150",
    "updated_datetime": "2026-07-24T10:28:06.311831Z",
    "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-000000000011
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODUsImlhdCI6MTc4NDg4ODg4NSwiaXNzIjoiRGlzdHJ1IiwianRpIjoiOTcwOTQwZDEtMjAxNi00NzExLTgxYmYtOTY5NzA0MDI3MWQ2IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg0LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6Mjg4MSIsInR5cCI6ImFjY2VzcyJ9.h6t_WAn0HB68GxLgQkbjDo2hjmas15So4IAo0tBAGDE

Response

200
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
b3: e8a9ef84eab5a816dfbb59f3d28a7e1f-b32863087cb7e724-0
{
  "data": {
    "color": "Blue",
    "description": "Company car",
    "id": "00000000-0000-0000-0000-000000000011",
    "inserted_datetime": "2026-07-24T10:28:05.827773Z",
    "license_plate_number": "ABC123",
    "license_plate_state": "CA",
    "make": "Toyota",
    "model": "Camry",
    "updated_datetime": "2026-07-24T10:28:05.827773Z",
    "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

Update a vehicle

POST /public/v1/vehicles/:id updates a vehicle

POST /public/v1/vehicles/00000000-0000-0000-0000-000000000018
content-type: application/json
accept: application/json
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJEaXN0cnUiLCJleHAiOjE4MTYzMzg0ODcsImlhdCI6MTc4NDg4ODg4NywiaXNzIjoiRGlzdHJ1IiwianRpIjoiZDNiMWRjNTYtMjJlNi00NmJkLWE2ZmItZjI5Yzc5NjEwNGI0IiwibW9iaWxlIjpmYWxzZSwibmJmIjoxNzg0ODg4ODg2LCJwbGF0Zm9ybSI6IkFQSSIsInN1YiI6IlVzZXI6MzMxNSIsInR5cCI6ImFjY2VzcyJ9.lBOyWD1EIVMVoKrRfeFJZy-CksX7mDXYRTwcId8rj9Q
{
  "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: 4e3d387557fbcf25798955b65857620c-a6aa53487f4a256e-0
{
  "data": {
    "color": "Red",
    "description": "Test Vehicle",
    "id": "00000000-0000-0000-0000-000000000018",
    "inserted_datetime": "2026-07-24T10:28:07.482439Z",
    "license_plate_number": "1234567890ABCDEFG",
    "license_plate_state": "CA",
    "make": "Honda",
    "model": "Accord",
    "updated_datetime": "2026-07-24T10:28:07.494375Z",
    "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

Changelog

2024-10-2

2024-11-6

2024-12-24

2024-12-26

2025-01-08

2025-01-15

2025-01-17

2025-01-31

2025-02-26

2025-08-19

2025-03-05

2025-03-11

2025-03-18

2025-04-09

2025-05-06

2025-05-13

2025-05-14

2025-05-15

2025-05-16

2025-05-18

2025-05-22

2025-05-27

2025-06-09

2025-06-12

2025-06-12

2025-07-01

2025-08-20

2025-08-21

2025-09-10

2025-15-10

2025-19-10

2025-24-10

2026-01-19

2026-01-21

2026-01-23

2026-02-10

2026-02-12

2026-02-13

2026-03-10

2026-03-27

2026-05-01

2026-05-06

2026-05-11

2026-05-17

2026-05-25

2026-05-28

2026-06-08

2026-06-23

2026-06-29