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.
- Integrate your supply chain with the rest of your business Build your own custom connectors that support your most important workflows.
- Extend your reports Take data from Distru and pipe it into other systems for a unified view of your business.
- Maximize your efficiency Automate tasks based on changes in your distribution, manufacturing, and sales.
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:
- Log in to Distru with your admin account.
- Navigate to the Settings page from the left menu.
- Click on Distru API under the Integrations section.
- 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_deposit_account_name | The name of the Quickbooks deposit account used for this payment | string | false |
| quickbooks_sync_enqueued | Whether a sync of this payment to QuickBooks was enqueued. False when the company isn't integrated with QuickBooks, or when the payment's invoice or credits aren't synced yet (those must be synced first). | boolean | false |
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 |
| 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 |
ProductTagRef
A tag associated with a product
| Property | Description | Type | Required |
|---|---|---|---|
| id | Unique ID for this tag | string | false |
| name | The name of this tag | string | false |
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": "00000000-0000-0000-0000-000000002694",
"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 |
|---|---|---|---|
| billing_location | A location as shown in Distru | Location | 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 | The custom data for this purchase order | array(CustomField) | false |
| description | A description of the purchase order | string | false |
| due_datetime | The datetime by which the order should be completed for the customer | string | false |
| id | Unique ID for this order | string | false |
| inserted_datetime | The datetime at which the order was created in Distru | string | false |
| items | A collection of PurchaseOrderItems | array(PurchaseOrderItem) | false |
| location | A location as shown in Distru | Location | 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 | Information about a user in Distru | User | 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 |
Menu
| 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 |
|---|---|---|---|
| billing_location | A location as shown in Distru | Location | 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(CustomField) | false |
| due_datetime | The datetime by which the invoice should be paid by the customer | string | false |
| external_notes | Notes on this invoice that are visible to the customer | string | false |
| id | Unique ID for this invoice | string | false |
| inserted_datetime | The datetime at which the invoice was created in Distru | string | false |
| internal_notes | Notes on this invoice that are only visible internally | string | false |
| invoice_datetime | The datetime on which the invoice was placed | string | false |
| invoice_number | The invoice number as shown in the Distru UI | string | false |
| items | A collection of InvoiceItems | array(InvoiceItem) | false |
| owner | Information about a user in Distru | User | false |
| paid_amount | The payment amount recorded against this invoice so far. | 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 |
BillOfMaterials
A product's bill of materials (recipe of inputs and additional costs)
| Property | Description | Type | Required |
|---|---|---|---|
| costs | The additional costs applied by this bill of materials | array(BillOfMaterialsCost) | false |
| description | The description of this bill of materials | string | false |
| id | Unique ID for this bill of materials | string | false |
| inputs | The inputs consumed by this bill of materials | array(BillOfMaterialsInput) | false |
| name | Human readable name for this bill of materials | string | false |
BillOfMaterialsCost
An additional cost applied by a bill of materials
| Property | Description | Type | Required |
|---|---|---|---|
| cost_type | The cost type applied by a bill-of-materials cost | BillOfMaterialsCostType | false |
| description | The description of this cost | string | false |
| id | Unique ID for this cost | string | false |
| quantity | The quantity of the cost type applied | string | false |
BillOfMaterialsCostType
The cost type applied by a bill-of-materials cost
| Property | Description | Type | Required |
|---|---|---|---|
| cost_per_unit | The cost per unit. Null unless the caller has the costs_permissions_view_cost_types_cost_per_unit permission. |
string | false |
| id | Unique ID for this cost type | string | false |
| name | Human readable name for this cost type | string | false |
| unit_type | A unit type as shown in Distru | UnitType | false |
BillOfMaterialsFilter
A dynamic filter that selects products as a bill-of-materials input
| Property | Description | Type | Required |
|---|---|---|---|
| criteria | The filter criteria, each a type (category, subcategory, group, strain, unit_type, tags) and its matched values (each an id and name) |
array(any) | false |
| id | Unique ID for this filter | string | false |
| name | Human readable name for this filter | string | false |
BillOfMaterialsInput
A single input of a bill of materials
| Property | Description | Type | Required |
|---|---|---|---|
| filter | A dynamic filter that selects products as a bill-of-materials input | BillOfMaterialsFilter | false |
| id | Unique ID for this input | string | false |
| product | A product as shown in Distru | Product | false |
| quantity | The quantity of this input required by the bill of materials | string | false |
| type | The kind of input: product or filter |
string | false |
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 |
|---|---|---|---|
| bill_of_materials | A product's bill of materials (recipe of inputs and additional costs) | BillOfMaterials | false |
| 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 |
| is_featured | Is this product featured? | 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 |
| owner | Information about a user in Distru | User | false |
| quantity_available_threshold_max | The maximum available quantity before an over-stock alert is triggered | number | false |
| quantity_available_threshold_min | The minimum available quantity before a low-stock alert is triggered | number | 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 |
| tags | The tags associated with this product | array(ProductTagRef) | false |
| total_cannabinoid_unit | The unit that total THC and CBD are measured in | string | false |
| total_cbd | The total CBD of this product | number | false |
| total_thc | The total THC of this product | number | 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 |
| upc | The UPC of this product | string | false |
| updated_datetime | The datetime this product was last updated at | string | false |
| wholesale_unit_price | The wholesale unit price of this product | number | 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_cost | The cost per unit 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": "00000000-0000-0000-0000-000000002694",
"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 |
| blaze_payment_type | The payment type for an order shipping to a Blaze-associated company. | string | false |
| charges | A collection of Charges | array(Charge) | false |
| company | A company as 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 |
Menus
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 |
| quickbooks_deposit_account_name | The name 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 |
| 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 |
SalesOrderTaxReport
The Sales Order Tax report. data holds one row per tax type and rate; meta describes the report.
{
"data": [
{
"tax_type": "Excise Tax - CA 27%",
"tax_rate": 27.0,
"total_tax": 1234.56
}
],
"meta": {
"report": "sales_order_tax",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "tax_type", "label": "Tax Type" },
{ "key": "tax_rate", "label": "Tax Rate" },
{ "key": "total_tax", "label": "Total Tax" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesOrderTaxReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesOrderTaxReportRow
A single row of the Sales Order Tax report.
| Property | Description | Type | Required |
|---|---|---|---|
| tax_type | The name of the tax | string | false |
| tax_rate | The tax rate percentage. null for price-based taxes |
number | false |
| total_tax | The total tax collected for this tax type and rate | number | false |
SalesOrderHistoryReport
The Sales Order History report. data holds one row per sales order; meta describes the report.
{
"data": [
{
"order_date": "Jul 1st 2026",
"order_date_utc": "Jul 1st 2026",
"delivery_date": "Jul 3rd 2026",
"delivery_date_utc": "Jul 3rd 2026",
"due_date": "Jul 15th 2026",
"due_date_utc": "Jul 15th 2026",
"order_number": "1042",
"customer": "Green Leaf Dispensary",
"status": "Completed",
"paid": 1000.0,
"outstanding": 234.56,
"subtotal": 1150.0,
"taxes": 84.56,
"discounts_taxes_not_included": 0.0,
"charges_taxes_not_included": 0.0,
"returns": 0.0,
"total": 1234.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000012345",
"shipped_from_license": "C11-0000123-LIC"
}
],
"meta": {
"report": "sales_order_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "order_date", "label": "Order Date" },
{ "key": "order_date_utc", "label": "Order Date (UTC)" },
{ "key": "delivery_date", "label": "Delivery Date" },
{ "key": "delivery_date_utc", "label": "Delivery Date (UTC)" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "due_date_utc", "label": "Due Date (UTC)" },
{ "key": "order_number", "label": "Order Number" },
{ "key": "customer", "label": "Customer" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "outstanding", "label": "Outstanding" },
{ "key": "subtotal", "label": "Subtotal" },
{ "key": "taxes", "label": "Taxes" },
{ "key": "discounts_taxes_not_included", "label": "Discounts (taxes not included)" },
{ "key": "charges_taxes_not_included", "label": "Charges (taxes not included)" },
{ "key": "returns", "label": "Returns" },
{ "key": "total", "label": "Total" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "shipped_from_license", "label": "Shipped From License" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesOrderHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesOrderHistoryReportRow
A single row of the Sales Order History report. Companies on a compliance integration (Metrc or BioTrack) and companies with Order custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| order_date | The order date, in the company's timezone | string | false |
| order_date_utc | The order date, in UTC | string | false |
| delivery_date | The delivery date, in the company's timezone | string | false |
| delivery_date_utc | The delivery date, in UTC | string | false |
| due_date | The due date, in the company's timezone | string | false |
| due_date_utc | The due date, in UTC | string | false |
| order_number | The order number | string | false |
| customer | The customer name | string | false |
| status | The order status | string | false |
| paid | The amount paid on the order | number | false |
| outstanding | The outstanding (unpaid) amount on the order | number | false |
| subtotal | The order subtotal | number | false |
| taxes | The total taxes on the order | number | false |
| discounts_taxes_not_included | The total discounts on the order, taxes not included | number | false |
| charges_taxes_not_included | The total charges on the order, taxes not included | number | false |
| returns | The total value of returns on the order | number | false |
| total | The order total | number | false |
| owner | The order owner's name | string | false |
OrderFulfillmentReport
The Order Fulfillment report. data holds one row per product, pivoted across the matching sales orders; meta describes the report.
{
"data": [
{
"product": "Blue Dream 1g Cartridge",
"group": "Cartridges",
"category": "Vape",
"subcategory": "Cartridge",
"so_1042": 3.0,
"total_units": 3.0,
"unit_price": 35.0,
"total_value": 105.0
}
],
"meta": {
"report": "order_fulfillment",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "product", "label": "Product" },
{ "key": "group", "label": "Group" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "so_1042", "label": "SO-1042" },
{ "key": "total_units", "label": "Total Units" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "total_value", "label": "Total Value" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [OrderFulfillmentReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions including one column per matching order) | object | true |
OrderFulfillmentReportRow
A single row of the Order Fulfillment report (one product). In addition to the keys below, each row carries one dynamic key per matching order, named after the slugified order number (e.g. so_1042), whose value is the quantity of this product on that order.
| Property | Description | Type | Required |
|---|---|---|---|
| product | The product name | string | false |
| group | The product's group | string | false |
| category | The product's category | string | false |
| subcategory | The product's subcategory | string | false |
| total_units | The total units of this product across the matching orders | number | false |
| unit_price | The product's unit price | number | false |
| total_value | The total value of this product across the matching orders | number | false |
SalesOrderItemHistoryReport
The Sales Order Item History report. data holds one row per sales order line item; meta describes the report.
{
"data": [
{
"line_item_id": "b1f9c0a2-6e4d-4a7b-9f3c-2d8e5a1c0f42",
"order_id": "a0e8d1b3-5c2f-4e9a-8b7d-1f6c3a2e9d04",
"order_date": "Jul 1st 2026",
"order_date_utc": "Jul 1st 2026",
"delivery_date": "Jul 3rd 2026",
"delivery_date_utc": "Jul 3rd 2026",
"due_date": "Jul 15th 2026",
"due_date_utc": "Jul 15th 2026",
"order_number": "1042",
"status": "Completed",
"product": "Blue Dream 1g Cartridge",
"product_id": "c2d7e6f5-4b3a-4c1d-8e9f-0a1b2c3d4e5f",
"product_sku": "BD-CART-1G",
"default_unit_cost": 12.5,
"default_unit_price": 25.0,
"default_wholesale_price": 20.0,
"brand": "Green Labs",
"brand_id": "d3e8f7a6-5c4b-4d2e-9f0a-1b2c3d4e5f60",
"vendor": "Green Labs Cultivation",
"vendor_id": "e4f9a8b7-6d5c-4e3f-a01b-2c3d4e5f6071",
"package_label": "1A4060300003B01000001234",
"package_batch_number": "BATCH-2026-001",
"order_item_price": 25.0,
"returned_quantity": 0.0,
"quantity": 10.0,
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"customer": "Green Leaf Dispensary",
"customer_id": "f5a0b9c8-7e6d-4f4a-b12c-3d4e5f607182",
"sales_rep": "Jane Doe",
"thc": 85.0,
"thc_mg_g": 850.0,
"thc_mg_ml": 800.0,
"total_thc": 88.0,
"total_thc_mg_g": 880.0,
"total_thc_mg_ml": 820.0,
"cbd": 0.5,
"cbd_mg_g": 5.0,
"cbd_mg_ml": 4.5,
"total_cbd": 0.8,
"total_cbd_mg_g": 8.0,
"total_cbd_mg_ml": 7.0,
"metrc_manifest_number": "0000012345",
"invoice_numbers": "INV-1042",
"shipped_from_license": "C11-0000123-LIC",
"package_expiration_date": "Dec 31st 2026",
"upc": "850000123456",
"package_harvest_date": "May 1st 2026",
"batch_number": "BATCH-2026-001"
}
],
"meta": {
"report": "sales_order_item_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "line_item_id", "label": "Line Item Id" },
{ "key": "order_id", "label": "Order Id" },
{ "key": "order_date", "label": "Order Date" },
{ "key": "order_date_utc", "label": "Order Date (UTC)" },
{ "key": "delivery_date", "label": "Delivery Date" },
{ "key": "delivery_date_utc", "label": "Delivery Date (UTC)" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "due_date_utc", "label": "Due Date (UTC)" },
{ "key": "order_number", "label": "Order Number" },
{ "key": "status", "label": "Status" },
{ "key": "product", "label": "Product" },
{ "key": "product_id", "label": "Product Id" },
{ "key": "product_sku", "label": "Product SKU" },
{ "key": "default_unit_cost", "label": "Default Unit Cost" },
{ "key": "default_unit_price", "label": "Default Unit Price" },
{ "key": "default_wholesale_price", "label": "Default Wholesale Price" },
{ "key": "brand", "label": "Brand" },
{ "key": "brand_id", "label": "Brand Id" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "vendor_id", "label": "Vendor Id" },
{ "key": "package_label", "label": "Package Label" },
{ "key": "package_batch_number", "label": "Package Batch Number" },
{ "key": "order_item_price", "label": "Order Item Price" },
{ "key": "returned_quantity", "label": "Returned Quantity" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "customer", "label": "Customer" },
{ "key": "customer_id", "label": "Customer Id" },
{ "key": "sales_rep", "label": "Sales Rep" },
{ "key": "thc", "label": "THC %" },
{ "key": "thc_mg_g", "label": "THC mg/g" },
{ "key": "thc_mg_ml", "label": "THC mg/mL" },
{ "key": "total_thc", "label": "Total THC %" },
{ "key": "total_thc_mg_g", "label": "Total THC mg/g" },
{ "key": "total_thc_mg_ml", "label": "Total THC mg/mL" },
{ "key": "cbd", "label": "CBD %" },
{ "key": "cbd_mg_g", "label": "CBD mg/g" },
{ "key": "cbd_mg_ml", "label": "CBD mg/mL" },
{ "key": "total_cbd", "label": "Total CBD %" },
{ "key": "total_cbd_mg_g", "label": "Total CBD mg/g" },
{ "key": "total_cbd_mg_ml", "label": "Total CBD mg/mL" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "invoice_numbers", "label": "Invoice Numbers" },
{ "key": "shipped_from_license", "label": "Shipped From License" },
{ "key": "package_expiration_date", "label": "Package Expiration Date" },
{ "key": "upc", "label": "UPC" },
{ "key": "package_harvest_date", "label": "Package Harvest Date" },
{ "key": "batch_number", "label": "Batch Number" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesOrderItemHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesOrderItemHistoryReportRow
A single row of the Sales Order Item History report (one sales order line item). Companies on a compliance integration (Metrc or BioTrack) and companies with Order custom fields will see additional keys (package, potency, manifest, and custom field columns).
| Property | Description | Type | Required |
|---|---|---|---|
| line_item_id | The line item ID | string | false |
| order_id | The order ID | string | false |
| order_date | The order date, in the company's timezone | string | false |
| order_date_utc | The order date, in UTC | string | false |
| delivery_date | The delivery date, in the company's timezone | string | false |
| delivery_date_utc | The delivery date, in UTC | string | false |
| due_date | The due date, in the company's timezone | string | false |
| due_date_utc | The due date, in UTC | string | false |
| order_number | The order number | string | false |
| status | The order status | string | false |
| product | The product name | string | false |
| product_id | The product ID | string | false |
| product_sku | The product SKU | string | false |
| default_unit_cost | The product's default unit cost | number | false |
| default_unit_price | The product's default unit price | number | false |
| default_wholesale_price | The product's default wholesale price | number | false |
| brand | The brand name | string | false |
| brand_id | The brand ID | string | false |
| vendor | The vendor name | string | false |
| vendor_id | The vendor ID | string | false |
| order_item_price | The line item price | number | false |
| returned_quantity | The returned quantity on the line item | number | false |
| quantity | The line item quantity | number | false |
| category | The product category | string | false |
| subcategory | The product subcategory | string | false |
| group | The product group | string | false |
| customer | The customer name | string | false |
| customer_id | The customer ID | string | false |
| sales_rep | The sales rep's name | string | false |
| invoice_numbers | The invoice numbers associated with the line item | string | false |
| upc | The product UPC | string | false |
| batch_number | The batch number | string | false |
SalesByCompanyReport
The Sales By Company report. data holds one row per customer (company relationship); meta describes the report.
{
"data": [
{
"name": "Green Leaf Dispensary",
"last_order_date": "07/03/2026",
"order_count": 4,
"total_received": 1000.0,
"total_sales": 4234.56,
"owner": "Jane Doe",
"category": "Dispensary",
"relationship_type": "Customer"
}
],
"meta": {
"report": "sales_by_company",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "last_order_date", "label": "Last Order Date" },
{ "key": "order_count", "label": "Order Count" },
{ "key": "total_received", "label": "Total Received" },
{ "key": "total_sales", "label": "Total Sales" },
{ "key": "owner", "label": "Owner" },
{ "key": "category", "label": "Category" },
{ "key": "relationship_type", "label": "Relationship Type" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesByCompanyReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesByCompanyReportRow
A single row of the Sales By Company report. Companies with CompanyRelationship custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| name | The customer (related company) name | string | false |
| last_order_date | The date of the customer's most recent order | string | false |
| order_count | The number of orders in the reported date range | number | false |
| total_received | The total payments received on the customer's orders | number | false |
| total_sales | The total order sales, net of returns | number | false |
| owner | The customer's owner (sales rep) name | string | false |
| category | The customer's category | string | false |
| relationship_type | The customer's relationship type | string | false |
SalesByProductReport
The Sales By Product report. data holds one row per product; meta describes the report.
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"quantity_sold": 120.0,
"total_sales": 4234.56,
"unit_type": "Each",
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"vendor": "Sunshine Extracts",
"product_owner": "Jane Doe",
"unit_cost": 8.5,
"sale_price": 35.0,
"wholesale_price": 25.0,
"shipped_from_license": "C11-0000001-LIC",
"upc": "850000000001"
}
],
"meta": {
"report": "sales_by_product",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "quantity_sold", "label": "Quantity Sold" },
{ "key": "total_sales", "label": "Total Sales" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "product_owner", "label": "Product Owner" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "sale_price", "label": "Sale Price" },
{ "key": "wholesale_price", "label": "Wholesale Price" },
{ "key": "shipped_from_license", "label": "Shipped From License" },
{ "key": "upc", "label": "UPC" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesByProductReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesByProductReportRow
A single row of the Sales By Product report. Companies with Product custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| name | The product name | string | false |
| sku | The product SKU | string | false |
| quantity_sold | The quantity sold, net of returns | number | false |
| total_sales | The total sales, net of returns | number | false |
| unit_type | The product's unit type | string | false |
| category | The product's category | string | false |
| subcategory | The product's subcategory | string | false |
| group | The product's group | string | false |
| vendor | The product's vendor | string | false |
| product_owner | The product owner's name | string | false |
| unit_cost | The product's unit cost | number | false |
| sale_price | The product's sale price | number | false |
| wholesale_price | The product's wholesale price | number | false |
| shipped_from_license | The license the sold items shipped from | string | false |
| upc | The product's UPC | string | false |
SalesByUserReport
The Sales By User report. data holds one row per user (sales rep); meta describes the report.
{
"data": [
{
"leaderboard_rank": 1,
"user": "Jane Doe",
"order_count": 4,
"sales_pre_tax": 3800.0,
"total_sales": 4234.56
}
],
"meta": {
"report": "sales_by_user",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "leaderboard_rank", "label": "Leaderboard Rank" },
{ "key": "user", "label": "User" },
{ "key": "order_count", "label": "Order Count" },
{ "key": "sales_pre_tax", "label": "Sales (Pre-Tax)" },
{ "key": "total_sales", "label": "Total Sales" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [SalesByUserReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
SalesByUserReportRow
A single row of the Sales By User report.
| Property | Description | Type | Required |
|---|---|---|---|
| leaderboard_rank | The user's rank by total sales, with 1 as the top seller | number | false |
| user | The user's (sales rep's) name | string | false |
| order_count | The number of orders in the reported date range | number | false |
| sales_pre_tax | The pre-tax sales total, net of returns | number | false |
| total_sales | The total sales, net of returns | number | false |
PurchaseOrderHistoryReport
The Purchase Order History report. data holds one row per purchase; meta describes the report.
{
"data": [
{
"purchase_date": "Jul 1st 2026",
"due_date": "Jul 15th 2026",
"purchase_number": "PO-1042",
"vendor": "Emerald Farms",
"status": "Completed",
"paid": 1000.0,
"amount": 1234.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000123456"
}
],
"meta": {
"report": "purchase_order_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "purchase_date", "label": "Purchase Date" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "purchase_number", "label": "Purchase Number" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "amount", "label": "Amount" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [PurchaseOrderHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
PurchaseOrderHistoryReportRow
A single row of the Purchase Order History report. Companies on a compliance integration (Metrc or BioTrack) and companies with Purchase custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| purchase_date | The purchase date, in the company's timezone | string | false |
| due_date | The due date, in the company's timezone | string | false |
| purchase_number | The purchase number | string | false |
| vendor | The vendor name | string | false |
| status | The purchase status | string | false |
| paid | The amount paid on the purchase | number | false |
| amount | The purchase total | number | false |
| owner | The purchase owner's name | string | false |
PurchasesByCompanyReport
The Purchases By Company report. data holds one row per vendor (company relationship); meta describes the report.
{
"data": [
{
"name": "Emerald Farms",
"last_purchase_date": "07/03/2026",
"purchase_order_count": 4,
"total_purchases": 4234.56,
"product_owner": "Jane Doe",
"category": "Vendor",
"relationship_type": "Supplier"
}
],
"meta": {
"report": "purchases_by_company",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "last_purchase_date", "label": "Last Purchase Date" },
{ "key": "purchase_order_count", "label": "Purchase Order Count" },
{ "key": "total_purchases", "label": "Total Purchases" },
{ "key": "product_owner", "label": "Product Owner" },
{ "key": "category", "label": "Category" },
{ "key": "relationship_type", "label": "Relationship Type" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [PurchasesByCompanyReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
PurchasesByCompanyReportRow
A single row of the Purchases By Company report. Companies with CompanyRelationship custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| name | The vendor (related company) name | string | false |
| last_purchase_date | The date of the vendor's most recent purchase | string | false |
| purchase_order_count | The number of purchases in the reported date range | number | false |
| total_purchases | The total cost of the vendor's purchases | number | false |
| product_owner | The vendor's owner (sales rep) name | string | false |
| category | The vendor's category | string | false |
| relationship_type | The vendor's relationship type | string | false |
PurchasesByProductReport
The Purchases By Product report. data holds one row per purchased product; meta describes the report.
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"quantity_purchased": 120.0,
"total_purchased": 4234.56,
"unit_type": "Each",
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"vendor": "Sunshine Extracts",
"owner": "Jane Doe",
"unit_cost": 8.5,
"sale_price": 35.0,
"wholesale_price": 25.0
}
],
"meta": {
"report": "purchases_by_product",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "quantity_purchased", "label": "Quantity Purchased" },
{ "key": "total_purchased", "label": "Total Purchased" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "owner", "label": "Owner" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "sale_price", "label": "Sale Price" },
{ "key": "wholesale_price", "label": "Wholesale Price" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [PurchasesByProductReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
PurchasesByProductReportRow
A single row of the Purchases By Product report. Companies with Product custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| name | The product name | string | false |
| sku | The product SKU | string | false |
| quantity_purchased | The quantity purchased | number | false |
| total_purchased | The total cost of the purchased quantity | number | false |
| unit_type | The product's unit type | string | false |
| category | The product's category | string | false |
| subcategory | The product's subcategory | string | false |
| group | The product's group | string | false |
| vendor | The product's vendor | string | false |
| owner | The product owner's name | string | false |
| unit_cost | The product's unit cost | number | false |
| sale_price | The product's sale price | number | false |
| wholesale_price | The product's wholesale price | number | false |
InvoiceHistoryReport
The Invoice History report. data holds one row per invoice; meta describes the report.
{
"data": [
{
"invoice_date": "2026-07-01",
"invoice_number": "INV-1042",
"due_date": "2026-07-15",
"sales_order": "SO-1042",
"customer": "Green Leaf Dispensary",
"status": "Fully Paid",
"paid": 1239.56,
"outstanding": 0.0,
"line_item_subtotal": 1150.0,
"total_taxes": 84.56,
"tax_summary": "Excise Tax - $84.56",
"total_charges": 10.0,
"charge_summary": "Delivery Fee - $10.00",
"total_discounts": 5.0,
"discount_summary": "Volume Discount - $5.00",
"total": 1239.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000123456",
"shipped_from_license": "C11-0000123-LIC"
}
],
"meta": {
"report": "invoice_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "invoice_date", "label": "Invoice Date" },
{ "key": "invoice_number", "label": "Invoice Number" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "sales_order", "label": "Sales Order" },
{ "key": "customer", "label": "Customer" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "outstanding", "label": "Outstanding" },
{ "key": "line_item_subtotal", "label": "Line Item Subtotal" },
{ "key": "total_taxes", "label": "Total Taxes" },
{ "key": "tax_summary", "label": "Tax Summary" },
{ "key": "total_charges", "label": "Total Charges" },
{ "key": "charge_summary", "label": "Charge Summary" },
{ "key": "total_discounts", "label": "Total Discounts" },
{ "key": "discount_summary", "label": "Discount Summary" },
{ "key": "total", "label": "Total" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "shipped_from_license", "label": "Shipped From License" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [InvoiceHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, resolved date range, column definitions) | object | true |
InvoiceHistoryReportRow
A single row of the Invoice History report. Companies on a compliance integration (Metrc or BioTrack) and companies with Invoice custom fields will see additional keys.
| Property | Description | Type | Required |
|---|---|---|---|
| invoice_date | The invoice date, in the company's timezone | string | false |
| invoice_number | The invoice number | string | false |
| due_date | The due date, in the company's timezone | string | false |
| sales_order | The sales order number the invoice belongs to | string | false |
| customer | The customer name | string | false |
| status | The invoice payment status | string | false |
| paid | The amount paid on the invoice | number | false |
| outstanding | The outstanding (unpaid) amount on the invoice | number | false |
| line_item_subtotal | The invoice line item subtotal | number | false |
| total_taxes | The total taxes on the invoice | number | false |
| tax_summary | A per-tax breakdown of the invoice taxes | string | false |
| total_charges | The total charges on the invoice | number | false |
| charge_summary | A per-charge breakdown of the invoice charges | string | false |
| total_discounts | The total discounts on the invoice | number | false |
| discount_summary | A per-discount breakdown of the invoice discounts | string | false |
| total | The invoice total | number | false |
| owner | The invoice owner's name | string | false |
CogsReport
The Cost of Goods Sold report. data holds one row per completed sales order line item; meta describes the report.
{
"data": [
{
"order_number": "1042",
"final_input": "Final",
"cost_origin": "Purchase Order",
"product_name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"product_brand": "Sunshine Extracts",
"product_category": "Vape",
"package": "1A4000000000000000000123",
"metrc_production_batch_number": "PB-2026-0042",
"batch": "BD-BATCH-07 (B-0042)",
"quantity": 4.0,
"unit_type": "Each",
"unit_price": 35.0,
"total_price": 140.0,
"unit_cost_actual": 8.5,
"unit_cost_default": 9.0,
"total_cost_actual": 34.0,
"total_cost_default": 36.0,
"total_profits_actual": 106.0,
"total_profits_default": 104.0,
"profit_unit_actual": 26.5,
"profit_unit_default": 26.0,
"margin_actual": 0.757,
"margin_default": 0.743
}
],
"meta": {
"report": "cogs",
"date_range": "Jul 26th 2026",
"columns": [
{ "key": "order_number", "label": "Order Number" },
{ "key": "final_input", "label": "Final/Input" },
{ "key": "cost_origin", "label": "Cost Origin" },
{ "key": "product_name", "label": "Product Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "product_brand", "label": "Product Brand" },
{ "key": "product_category", "label": "Product Category" },
{ "key": "package", "label": "Package" },
{ "key": "metrc_production_batch_number", "label": "Metrc Production Batch Number" },
{ "key": "batch", "label": "Batch" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "total_price", "label": "Total Price" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "total_profits_actual", "label": "Total Profits (Actual)" },
{ "key": "total_profits_default", "label": "Total Profits (Default)" },
{ "key": "profit_unit_actual", "label": "Profit/Unit (Actual)" },
{ "key": "profit_unit_default", "label": "Profit/Unit (Default)" },
{ "key": "margin_actual", "label": "Margin (Actual)" },
{ "key": "margin_default", "label": "Margin (Default)" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [CogsReportRow] | true |
| meta | Report-level metadata (report identifier, generated date, column definitions) | object | true |
CogsReportRow
A single row of the Cost of Goods Sold report (one sales order line item). Companies on the BioTrack compliance integration do not get the metrc_production_batch_number key.
| Property | Description | Type | Required |
|---|---|---|---|
| order_number | The sales order number | string | false |
| final_input | Whether the row is the sold item (Final) |
string | false |
| cost_origin | The origin of the cost | string | false |
| product_name | The product name | string | false |
| sku | The product SKU | string | false |
| product_brand | The product's brand | string | false |
| product_category | The product's category | string | false |
| package | The package compliance label | string | false |
| metrc_production_batch_number | The Metrc production batch number | string | false |
| batch | The Distru batch number | string | false |
| quantity | The quantity sold, net of returns | number | false |
| unit_type | The item's unit type | string | false |
| unit_price | The price per unit | number | false |
| total_price | The total price (unit price times quantity) | number | false |
| unit_cost_actual | The actual cost per unit | number | false |
| unit_cost_default | The default cost per unit | number | false |
| total_cost_actual | The actual total cost | number | false |
| total_cost_default | The default total cost | number | false |
| total_profits_actual | The actual total profit | number | false |
| total_profits_default | The default total profit | number | false |
| profit_unit_actual | The actual profit per unit | number | false |
| profit_unit_default | The default profit per unit | number | false |
| margin_actual | The actual margin | number | false |
| margin_default | The default margin | number | false |
InventoryValuationReport
The Inventory Valuation report. data holds one row per product; meta describes the report.
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"vendor": "Sunshine Extracts",
"unit_type": "Each",
"category": "Vape Cartridges",
"subcategory": "Distillate",
"group": "Cartridges",
"owner": "Jane Doe",
"active_quantity": 120.0,
"assembling_quantity": 0.0,
"reserved_quantity": 20.0,
"available_quantity": 100.0,
"incoming_quantity": 50.0,
"pending_output_quantity": 0.0,
"unit_cost": 8.5,
"unit_price": 35.0,
"inventory_threshold_max": 500.0,
"inventory_threshold_min": 50.0,
"active_value_price": 4200.0,
"image_url": "https://cdn.distru.com/products/bd-1g-cart.jpg",
"brand": "Blue Dream Co"
}
],
"meta": {
"report": "inventory_valuation",
"date_range": "Jul 27th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "owner", "label": "Owner" },
{ "key": "active_quantity", "label": "Active Quantity" },
{ "key": "assembling_quantity", "label": "Assembling Quantity" },
{ "key": "reserved_quantity", "label": "Reserved Quantity" },
{ "key": "available_quantity", "label": "Available Quantity" },
{ "key": "incoming_quantity", "label": "Incoming Quantity" },
{ "key": "pending_output_quantity", "label": "Pending Output Quantity" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "inventory_threshold_max", "label": "Inventory Threshold Max" },
{ "key": "inventory_threshold_min", "label": "Inventory Threshold Min" },
{ "key": "active_value_price", "label": "Active Value (Price)" },
{ "key": "image_url", "label": "Image URL" },
{ "key": "brand", "label": "Brand" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [InventoryValuationReportRow] | true |
| meta | Report-level metadata (report identifier, generated date, column definitions) | object | true |
InventoryValuationReportRow
A single row of the Inventory Valuation report (one product). Companies with Product custom fields will see additional keys. When calculation_method=cost, the active_value_price key is returned as active_value_cost instead.
| Property | Description | Type | Required |
|---|---|---|---|
| name | The product name | string | false |
| sku | The product SKU | string | false |
| vendor | The product's vendor | string | false |
| unit_type | The product's unit type | string | false |
| category | The product's category | string | false |
| subcategory | The product's subcategory | string | false |
| group | The product's group | string | false |
| owner | The product owner's name | string | false |
| active_quantity | The active on-hand quantity | number | false |
| assembling_quantity | The quantity being assembled | number | false |
| reserved_quantity | The reserved quantity | number | false |
| available_quantity | The available quantity (active minus reserved) | number | false |
| incoming_quantity | The incoming quantity from open purchases | number | false |
| pending_output_quantity | The quantity pending output from open assemblies | number | false |
| unit_cost | The product's unit cost | number | false |
| unit_price | The product's unit price | number | false |
| inventory_threshold_max | The product's inventory alert maximum | number | false |
| inventory_threshold_min | The product's inventory alert minimum | number | false |
| active_value_price | The active inventory value (priced by unit price) | number | false |
| image_url | The product's thumbnail image URL | string | false |
| brand | The product's brand | string | false |
InventoryAssetsReport
The Inventory Assets report. data holds one row per on-hand inventory asset; meta describes the report.
{
"data": [
{
"product": "Blue Dream 1g Cartridge",
"license": "C11-0000123-LIC",
"location": "Main Warehouse",
"package_number": "1A4060300003B01000001234",
"batch_number": "BD-2026-01",
"sku": "BD-1G-CART",
"vendor": "Sunshine Extracts",
"owner": "Jane Doe",
"unit_type": "Each",
"active_quantity": 120.0,
"assembling_quantity": 0.0,
"selling_quantity": 0.0,
"category": "Vape Cartridges",
"subcategory": "Distillate",
"unit_price": 35.0,
"unit_cost_actual": 8.5,
"unit_cost_default": 8.0,
"total_cost_actual": 1020.0,
"total_cost_default": 960.0,
"expiration_date": "2027-01-15",
"tracking_method": "batch",
"harvest_date": "2025-11-01"
}
],
"meta": {
"report": "inventory_assets",
"date_range": "Jul 27th 2026",
"columns": [
{ "key": "product", "label": "Product" },
{ "key": "license", "label": "License" },
{ "key": "location", "label": "Location" },
{ "key": "package_number", "label": "Package Number" },
{ "key": "batch_number", "label": "Batch Number" },
{ "key": "sku", "label": "SKU" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "owner", "label": "Owner" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "active_quantity", "label": "Active Quantity" },
{ "key": "assembling_quantity", "label": "Assembling Quantity" },
{ "key": "selling_quantity", "label": "Selling Quantity" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "expiration_date", "label": "Expiration Date" },
{ "key": "tracking_method", "label": "Tracking Method" },
{ "key": "harvest_date", "label": "Harvest Date" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [InventoryAssetsReportRow] | true |
| meta | Report-level metadata (report identifier, generated date, column definitions) | object | true |
InventoryAssetsReportRow
A single row of the Inventory Assets report. The final_input, cost_origin, and cost_quantity keys are present only when style=granular. Cost keys (unit_cost_actual, unit_cost_default, total_cost_actual, total_cost_default) are omitted for users without permission to view costs.
| Property | Description | Type | Required |
|---|---|---|---|
| final_input | Whether the row is the final asset or a cost input (granular) | string | false |
| product | The product name | string | false |
| cost_origin | The origin of the cost input (granular) | string | false |
| license | The location's license number | string | false |
| location | The location name | string | false |
| package_number | The package compliance label | string | false |
| batch_number | The batch number | string | false |
| sku | The product SKU | string | false |
| vendor | The product's vendor | string | false |
| owner | The product owner's name | string | false |
| unit_type | The unit type | string | false |
| active_quantity | The active on-hand quantity | number | false |
| assembling_quantity | The quantity being assembled | number | false |
| selling_quantity | The quantity being sold | number | false |
| cost_quantity | The quantity attributed to the cost input (granular) | number | false |
| category | The product's category | string | false |
| subcategory | The product's subcategory | string | false |
| unit_price | The product's unit price | number | false |
| unit_cost_actual | The actual cost per unit | number | false |
| unit_cost_default | The default cost per unit | number | false |
| total_cost_actual | The actual total cost | number | false |
| total_cost_default | The default total cost | number | false |
| expiration_date | The asset's expiration date | string | false |
| tracking_method | The product's inventory tracking method | string | false |
| harvest_date | The package's harvest date | string | false |
InventoryTransactionHistoryReport
The Inventory Transaction History report. data holds one row per inventory transaction; meta describes the report.
{
"data": [
{
"date": "2026-07-01 09:30",
"product": "Blue Dream 1g Cartridge",
"package_batch_number_or_batch_name": "BD-2026-01",
"batch_number": "BD-2026-01",
"package_label": "1A4060300003B01000001234",
"metrc_production_batch_number": "PB-2026-0042",
"type": "adjustment",
"related_entity": "Stock Adjustment",
"related_entity_status": "COMPLETED",
"related_entity_customer_vendor": "Green Leaf Dispensary",
"amount": -4.0,
"unit_type": "Each",
"metrc_unit_name": "Each",
"product_id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
"batch_id": "1024",
"company_relationship_id": "5567",
"description": "Manual stock adjustment",
"thc": 21.5,
"total_thc": 24.8,
"thc_mg_g": 215.0,
"thc_mg_ml": 780.0,
"total_thc_mg_g": 248.0,
"total_thc_mg_ml": 800.0,
"cbd": 0.5,
"total_cbd": 0.6,
"cbd_mg_g": 5.0,
"cbd_mg_ml": 4.0,
"total_cbd_mg_g": 6.0,
"total_cbd_mg_ml": 5.0,
"total_cost": 34.0
}
],
"meta": {
"report": "inventory_transaction_history",
"date_range": "Jun 27th 2026 to Jul 27th 2026",
"columns": [
{ "key": "date", "label": "Date" },
{ "key": "product", "label": "Product" },
{ "key": "package_batch_number_or_batch_name", "label": "Package Batch Number or Batch Name" },
{ "key": "batch_number", "label": "Batch Number" },
{ "key": "package_label", "label": "Package Label" },
{ "key": "metrc_production_batch_number", "label": "Metrc Production Batch Number" },
{ "key": "type", "label": "Type" },
{ "key": "related_entity", "label": "Related Entity" },
{ "key": "related_entity_status", "label": "Related Entity Status" },
{ "key": "related_entity_customer_vendor", "label": "Related Entity Customer/Vendor" },
{ "key": "amount", "label": "Amount" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "metrc_unit_name", "label": "Metrc Unit Name" },
{ "key": "product_id", "label": "Product Id" },
{ "key": "batch_id", "label": "Batch Id" },
{ "key": "company_relationship_id", "label": "Company Relationship Id" },
{ "key": "description", "label": "Description" },
{ "key": "thc", "label": "THC %" },
{ "key": "total_thc", "label": "Total THC %" },
{ "key": "thc_mg_g", "label": "THC mg/g" },
{ "key": "thc_mg_ml", "label": "THC mg/mL" },
{ "key": "total_thc_mg_g", "label": "Total THC mg/g" },
{ "key": "total_thc_mg_ml", "label": "Total THC mg/mL" },
{ "key": "cbd", "label": "CBD %" },
{ "key": "total_cbd", "label": "Total CBD %" },
{ "key": "cbd_mg_g", "label": "CBD mg/g" },
{ "key": "cbd_mg_ml", "label": "CBD mg/mL" },
{ "key": "total_cbd_mg_g", "label": "Total CBD mg/g" },
{ "key": "total_cbd_mg_ml", "label": "Total CBD mg/mL" },
{ "key": "total_cost", "label": "Total Cost" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [InventoryTransactionHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, date range, column definitions) | object | true |
InventoryTransactionHistoryReportRow
A single row of the Inventory Transaction History report (one inventory transaction). Companies on the BioTrack compliance integration do not get the metrc_unit_name and metrc_production_batch_number keys. Potency keys are only populated for package-based transactions.
| Property | Description | Type | Required |
|---|---|---|---|
| date | The transaction date and time, in the company's timezone | string | false |
| product | The product name | string | false |
| package_batch_number_or_batch_name | The package batch number or, for batch-tracked products, the batch name | string | false |
| batch_number | The Distru batch number | string | false |
| package_label | The package compliance label | string | false |
| metrc_production_batch_number | The Metrc production batch number | string | false |
| type | The transaction type | string | false |
| related_entity | The related entity (order, return, assembly, adjustment...) | string | false |
| related_entity_status | The related entity's status | string | false |
| related_entity_customer_vendor | The related entity's customer or vendor name | string | false |
| amount | The transaction amount (signed quantity) | number | false |
| unit_type | The unit type | string | false |
| metrc_unit_name | The Metrc unit name | string | false |
| product_id | The product ID | string | false |
| batch_id | The batch ID | string | false |
| company_relationship_id | The related company relationship ID | string | false |
| description | The transaction description | string | false |
| thc | The package THC percentage | number | false |
| total_thc | The package total THC percentage | number | false |
| thc_mg_g | The package THC in mg/g | number | false |
| thc_mg_ml | The package THC in mg/mL | number | false |
| total_thc_mg_g | The package total THC in mg/g | number | false |
| total_thc_mg_ml | The package total THC in mg/mL | number | false |
| cbd | The package CBD percentage | number | false |
| total_cbd | The package total CBD percentage | number | false |
| cbd_mg_g | The package CBD in mg/g | number | false |
| cbd_mg_ml | The package CBD in mg/mL | number | false |
| total_cbd_mg_g | The package total CBD in mg/g | number | false |
| total_cbd_mg_ml | The package total CBD in mg/mL | number | false |
| total_cost | The transaction's total cost | number | false |
HarvestOutputsReport
The Harvest Outputs report. data holds one row per input, output, or cost line item of a harvest assembly; meta describes the report.
{
"data": [
{
"harvest_assembly_date": "07/01/2026",
"harvest_assembly_number": "HA-0000001",
"status": "Completed",
"harvest_name": "Blue Dream Fall 2026",
"output_batch_number": "BATCH-0001",
"output_package_number": "1A4FF0100000022000000123",
"strain": "Blue Dream",
"location": "Main Warehouse",
"cost_input_output": "Output",
"distru_product": "Blue Dream Flower",
"product_category": "Flower",
"quantity": 1200.0,
"unit_type": "Grams",
"unit_cost_actual": 2.83,
"unit_cost_default": 3.0,
"total_cost_actual": 3400.0,
"total_cost_default": 3600.0,
"cost_type": "Labor",
"cost_type_description": "Trimming labor",
"line_item_id": "1042",
"output_reference_id": "2087"
}
],
"meta": {
"report": "harvest_outputs",
"date_range": "Jul 20th 2026 to Jul 27th 2026",
"columns": [
{ "key": "harvest_assembly_date", "label": "Harvest Assembly Date" },
{ "key": "harvest_assembly_number", "label": "Harvest Assembly Number" },
{ "key": "status", "label": "Status" },
{ "key": "harvest_name", "label": "Harvest Name" },
{ "key": "output_batch_number", "label": "Output Batch Number" },
{ "key": "output_package_number", "label": "Output Package Number" },
{ "key": "strain", "label": "Strain" },
{ "key": "location", "label": "Location" },
{ "key": "cost_input_output", "label": "Cost/Input/Output" },
{ "key": "distru_product", "label": "Distru Product" },
{ "key": "product_category", "label": "Product Category" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "cost_type", "label": "Cost Type" },
{ "key": "cost_type_description", "label": "Cost Type Description" },
{ "key": "line_item_id", "label": "Line Item ID" },
{ "key": "output_reference_id", "label": "Output Reference ID" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [HarvestOutputsReportRow] | true |
| meta | Report-level metadata (report identifier, date range, column definitions) | object | true |
HarvestOutputsReportRow
A single row of the Harvest Outputs report (one input, output, or cost line item of a harvest assembly). The cost keys (unit_cost_actual, unit_cost_default, total_cost_actual, total_cost_default, cost_type, cost_type_description) are omitted for users without permission to view costs.
| Property | Description | Type | Required |
|---|---|---|---|
| harvest_assembly_date | The harvest assembly date | string | false |
| harvest_assembly_number | The harvest assembly number | string | false |
| status | The assembly status (Pending or Completed) |
string | false |
| harvest_name | The harvest name | string | false |
| output_batch_number | The output batch number | string | false |
| output_package_number | The output package compliance label | string | false |
| strain | The strain name | string | false |
| location | The location name | string | false |
| cost_input_output | The line item type (Input, Output, or Cost) |
string | false |
| distru_product | The Distru product name | string | false |
| product_category | The product category | string | false |
| quantity | The line item quantity | number | false |
| unit_type | The unit type | string | false |
| unit_cost_actual | The actual cost per unit | number | false |
| unit_cost_default | The default cost per unit | number | false |
| total_cost_actual | The actual total cost | number | false |
| total_cost_default | The default total cost | number | false |
| cost_type | The cost type name | string | false |
| cost_type_description | The cost type description | string | false |
| line_item_id | The line item ID | string | false |
| output_reference_id | The referenced output ID for cost line items | string | false |
PlantLifecycleReport
The Plant Lifecycle report. data holds one row per plant batch; meta describes the report.
{
"data": [
{
"plant_batch_name": "Blue Dream 2026-01",
"batch_creation_date": "01/15/2026",
"strain": "Blue Dream",
"plants_started": 50,
"plants_promoted_to_veg": 48,
"plants_destroyed": 2,
"plants_harvested": 46,
"promoted_to_veg_date": "02/01/2026",
"first_harvest_date": "04/10/2026",
"last_harvest_date": "04/20/2026",
"days_as_batch": 17,
"days_veg_to_last_harvest": 78,
"total_lifecycle_days": 95,
"total_cost_batch_stage": 3200.0,
"total_cost_veg_to_last_harvest": 8000.0,
"destroyed_plant_cost": 1200.0,
"total_lifecycle_cost": 12400.0,
"harvest_name_s": "Blue Dream Spring 2026"
}
],
"meta": {
"report": "plant_lifecycle",
"date_range": "Jan 1st 2026 to Feb 1st 2026",
"columns": [
{ "key": "plant_batch_name", "label": "Plant Batch Name" },
{ "key": "batch_creation_date", "label": "Batch Creation Date" },
{ "key": "strain", "label": "Strain" },
{ "key": "plants_started", "label": "Plants Started" },
{ "key": "plants_promoted_to_veg", "label": "Plants Promoted to Veg" },
{ "key": "plants_destroyed", "label": "Plants Destroyed" },
{ "key": "plants_harvested", "label": "Plants Harvested" },
{ "key": "promoted_to_veg_date", "label": "Promoted to Veg Date" },
{ "key": "first_harvest_date", "label": "First Harvest Date" },
{ "key": "last_harvest_date", "label": "Last Harvest Date" },
{ "key": "days_as_batch", "label": "Days as Batch" },
{ "key": "days_veg_to_last_harvest", "label": "Days Veg to Last Harvest" },
{ "key": "total_lifecycle_days", "label": "Total Lifecycle Days" },
{ "key": "total_cost_batch_stage", "label": "Total Cost — Batch Stage" },
{ "key": "total_cost_veg_to_last_harvest", "label": "Total Cost — Veg to Last Harvest" },
{ "key": "destroyed_plant_cost", "label": "Destroyed Plant Cost" },
{ "key": "total_lifecycle_cost", "label": "Total Lifecycle Cost" },
{ "key": "harvest_name_s", "label": "Harvest Name(s)" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [PlantLifecycleReportRow] | true |
| meta | Report-level metadata (report identifier, date range, column definitions) | object | true |
PlantLifecycleReportRow
A single row of the Plant Lifecycle report (one plant batch). The cost keys (total_cost_batch_stage, total_cost_veg_to_last_harvest, destroyed_plant_cost, total_lifecycle_cost) are omitted for users without permission to view costs.
| Property | Description | Type | Required |
|---|---|---|---|
| plant_batch_name | The plant batch name | string | false |
| batch_creation_date | The plant batch creation date | string | false |
| strain | The strain name | string | false |
| plants_started | The number of plants started | number | false |
| plants_promoted_to_veg | The number of plants promoted to vegetative | number | false |
| plants_destroyed | The number of plants destroyed | number | false |
| plants_harvested | The number of plants harvested | number | false |
| promoted_to_veg_date | The date the batch was promoted to vegetative | string | false |
| first_harvest_date | The date of the batch's first harvest | string | false |
| last_harvest_date | The date of the batch's last harvest | string | false |
| days_as_batch | The number of days spent as a batch | number | false |
| days_veg_to_last_harvest | The number of days from veg to the last harvest | number | false |
| total_lifecycle_days | The total number of lifecycle days | number | false |
| total_cost_batch_stage | The total cost during the batch stage | number | false |
| total_cost_veg_to_last_harvest | The total cost from veg to the last harvest | number | false |
| destroyed_plant_cost | The cost of destroyed plants | number | false |
| total_lifecycle_cost | The total lifecycle cost | number | false |
| harvest_name_s | The names of the harvests the batch produced | string | false |
CultivationTransactionHistoryReport
The Cultivation Transaction History report. data holds one row per cultivation transaction; meta describes the report.
{
"data": [
{
"date": "01/15/2026",
"strain": "Blue Dream",
"batch_name": "Blue Dream 2026-01",
"plant_tag_s": "1A4FF0100000022000000101, 1A4FF0100000022000000102",
"product_name": "Blue Dream Flower",
"package_label_s": "1A4FF0100000022000000201",
"type": "Plant Batch Creation",
"related_entity": "Teardown #42",
"related_entity_status": "Completed",
"amount": 50,
"unit": "Unit",
"description": "Created from immature package",
"total_cost": 1200.0
}
],
"meta": {
"report": "cultivation_transaction_history",
"date_range": "Jan 1st 2026 to Feb 1st 2026",
"columns": [
{ "key": "date", "label": "Date" },
{ "key": "strain", "label": "Strain" },
{ "key": "batch_name", "label": "Batch Name" },
{ "key": "plant_tag_s", "label": "Plant Tag(s)" },
{ "key": "product_name", "label": "Product Name" },
{ "key": "package_label_s", "label": "Package Label(s)" },
{ "key": "type", "label": "Type" },
{ "key": "related_entity", "label": "Related Entity" },
{ "key": "related_entity_status", "label": "Related Entity Status" },
{ "key": "amount", "label": "Amount" },
{ "key": "unit", "label": "Unit" },
{ "key": "description", "label": "Description" },
{ "key": "total_cost", "label": "Total Cost" }
]
}
}
| Property | Description | Type | Required |
|---|---|---|---|
| data | The report rows | [CultivationTransactionHistoryReportRow] | true |
| meta | Report-level metadata (report identifier, date range, column definitions) | object | true |
CultivationTransactionHistoryReportRow
A single row of the Cultivation Transaction History report (one cultivation transaction). The total_cost key is omitted for users without permission to view costs.
| Property | Description | Type | Required |
|---|---|---|---|
| date | The transaction date, in the company's timezone | string | false |
| strain | The strain name | string | false |
| batch_name | The plant batch name | string | false |
| plant_tag_s | The plant tag(s) involved | string | false |
| product_name | The product name | string | false |
| package_label_s | The package compliance label(s) | string | false |
| type | The transaction type | string | false |
| related_entity | The related entity (teardown or harvest) | string | false |
| related_entity_status | The related entity's status | string | false |
| amount | The signed transaction amount | number | false |
| unit | The unit | string | false |
| description | The transaction description | string | false |
| total_cost | The transaction's total cost | number | 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 | ||
| name | The name of the batch. If omitted, a name is generated from the batch number. | query | string | false | ||
| batch_number | The batch number of the batch. | query | string | false | ||
| expiration_date | The expiration date of the batch. | query | string | false | ||
| manufactured_datetime | The manufactured datetime of the batch (ISO 8601 format). | query | string | false | ||
| owner_id | The ID of the user that is the designated owner of this batch. | query | string | false | ||
| description | The description of the batch. | query | string | false | ||
| custom_data | A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=batch to retrieve available custom fields and their IDs. | body | object | false | {"123":"Custom Value 1","456":"Custom Value 2"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | A single batch | Batch |
Get a batch
GET /public/v1/batches/:id returns a single batch
GET /public/v1/batches/00000000-0000-0000-0000-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 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 | ||
| owner_id | The ID of the Distru user that owns this invoice | query | string | false | ||
| external_notes | Notes on this invoice that are visible to the customer | query | string | false | ||
| internal_notes | Notes on this invoice that are only visible internally | query | string | false | ||
| custom_data | A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=invoice to retrieve available custom fields and their IDs. | body | object | false | {"123":"Custom Value 1","456":"Custom Value 2"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | A single invoice | Invoice |
Location
Get 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 | |
| include_bill_of_materials | When true, each product includes its bill_of_materials (or null if it has none). Defaults to false. |
query | boolean | false | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | A list of products | Products |
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. The response always includes the product's
bill_of_materials (or null if it has none).
Required permission: products_permissions_view.
Request
GET /public/v1/products/{id}
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| id | Product ID | path | string | true |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | A single product | Product |
| 404 | Not Found |
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": "00000000-0000-0000-0000-000000000016",
"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": "00000000-0000-0000-0000-000000000017",
"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": "00000000-0000-0000-0000-000000000011",
"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": "00000000-0000-0000-0000-00000000000e",
"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 | ||
| owner_id | The ID of the Distru user that owns this purchase order | query | string | false | ||
| charges | The additional lines of Charge, Discount, or Tax added to this purchase order | body | PurchaseChargesRequest | false | ||
| items | The items present on this purchase order | body | PurchaseItemsRequest | true | ||
| custom_data | A map of custom field IDs to their values. Use GET /public/v1/custom-fields?model_name=purchase to retrieve available custom fields and their IDs. | body | object | false | {"123":"Custom Value 1","456":"Custom Value 2"} |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | A single purchase orders | Purchase |
Reports
Get the Sales Order Tax report
GET /public/v1/reports/sales-order-tax returns total tax collected on sales orders
GET /public/v1/reports/sales-order-tax?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"tax_type": "Excise Tax - CA 27%",
"tax_rate": 27.0,
"total_tax": 1234.56
}
],
"meta": {
"report": "sales_order_tax",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "tax_type", "label": "Tax Type" },
{ "key": "tax_rate", "label": "Tax Rate" },
{ "key": "total_tax", "label": "Total Tax" }
]
}
}
Returns total tax collected on sales orders, grouped by tax type and rate. When no date filter is provided, the report defaults to the last 30 days. Numeric cells (rates, amounts) are returned as numbers.
Required permission: reports_permissions_sales_order_tax.
Request
GET /public/v1/reports/sales-order-tax
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| payment_status | Filter by payment status. Accepted values are NOT_PAID, OVERPAID, PARTIALLY_PAID, FULLY_PAID |
query | [string] | false | ||
| order_source | Filter by the source that created the order. Accepted values are LEAFLINK, EXTERNAL_BUYER, INTERNAL_USER, API |
query | [string] | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| delivery_datetime | Filter by delivery date range | query | string | false | ||
| due_datetime | Filter by due date range | query | string | false | ||
| created_datetime | Filter by the datetime the order was created | query | string | false | ||
| updated_datetime | Filter by the datetime the order was last modified | query | string | false | ||
| total | Filter by order total range (comma-separated min,max) |
query | string | false | 100,500 |
|
| matched_with_compliance_transfer | Filter by whether the order is matched with a compliance transfer | query | boolean | false | ||
| search | Search by order number, customer name, or LeafLink short ID | query | string | false | ||
| company_relationship_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| company_relationship_group_ids | Filter by customer group IDs | query | [string] | false | ||
| shipped_from_license_ids | Filter by the shipped-from license IDs | query | [string] | false | ||
| menu_ids | Filter by menu IDs | query | [string] | false | ||
| brand_ids | Filter by brand IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (user) IDs | query | [string] | false | ||
| creator_ids | Filter by order creator (user) IDs | query | [string] | false | ||
| batch_ids | Filter by batch IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false | ||
| tax_ids | Filter by tax IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales Order Tax report | SalesOrderTaxReport |
| 403 | Forbidden |
Get the Sales Order History report
GET /public/v1/reports/sales-order-history returns one row per sales order
GET /public/v1/reports/sales-order-history?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"order_date": "Jul 1st 2026",
"order_date_utc": "Jul 1st 2026",
"delivery_date": "Jul 3rd 2026",
"delivery_date_utc": "Jul 3rd 2026",
"due_date": "Jul 15th 2026",
"due_date_utc": "Jul 15th 2026",
"order_number": "1042",
"customer": "Green Leaf Dispensary",
"status": "Completed",
"paid": 1000.0,
"outstanding": 234.56,
"subtotal": 1150.0,
"taxes": 84.56,
"discounts_taxes_not_included": 0.0,
"charges_taxes_not_included": 0.0,
"returns": 0.0,
"total": 1234.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000012345",
"shipped_from_license": "C11-0000123-LIC"
}
],
"meta": {
"report": "sales_order_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "order_date", "label": "Order Date" },
{ "key": "order_date_utc", "label": "Order Date (UTC)" },
{ "key": "delivery_date", "label": "Delivery Date" },
{ "key": "delivery_date_utc", "label": "Delivery Date (UTC)" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "due_date_utc", "label": "Due Date (UTC)" },
{ "key": "order_number", "label": "Order Number" },
{ "key": "customer", "label": "Customer" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "outstanding", "label": "Outstanding" },
{ "key": "subtotal", "label": "Subtotal" },
{ "key": "taxes", "label": "Taxes" },
{ "key": "discounts_taxes_not_included", "label": "Discounts (taxes not included)" },
{ "key": "charges_taxes_not_included", "label": "Charges (taxes not included)" },
{ "key": "returns", "label": "Returns" },
{ "key": "total", "label": "Total" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "shipped_from_license", "label": "Shipped From License" }
]
}
}
Returns one row per sales order with its dates, customer, status, and monetary totals. When no date filter is provided, the report defaults to the last 30 days. Numeric cells (monetary amounts) are returned as numbers. Companies on a compliance integration (Metrc or BioTrack) get additional manifest and shipped-from-license columns, and any Order custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_sales_order_history.
Request
GET /public/v1/reports/sales-order-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| payment_status | Filter by payment status. Accepted values are NOT_PAID, OVERPAID, PARTIALLY_PAID, FULLY_PAID |
query | [string] | false | ||
| order_source | Filter by the source that created the order. Accepted values are LEAFLINK, EXTERNAL_BUYER, INTERNAL_USER, API |
query | [string] | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| delivery_datetime | Filter by delivery date range | query | string | false | ||
| due_datetime | Filter by due date range | query | string | false | ||
| created_datetime | Filter by the datetime the order was created | query | string | false | ||
| updated_datetime | Filter by the datetime the order was last modified | query | string | false | ||
| total | Filter by order total range (comma-separated min,max) |
query | string | false | 100,500 |
|
| matched_with_compliance_transfer | Filter by whether the order is matched with a compliance transfer | query | boolean | false | ||
| search | Search by order number, customer name, or LeafLink short ID | query | string | false | ||
| company_relationship_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| company_relationship_group_ids | Filter by customer group IDs | query | [string] | false | ||
| shipped_from_license_ids | Filter by the shipped-from license IDs | query | [string] | false | ||
| menu_ids | Filter by menu IDs | query | [string] | false | ||
| brand_ids | Filter by brand IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (user) IDs | query | [string] | false | ||
| creator_ids | Filter by order creator (user) IDs | query | [string] | false | ||
| batch_ids | Filter by batch IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales Order History report | SalesOrderHistoryReport |
| 403 | Forbidden |
Get the Order Fulfillment report
GET /public/v1/reports/order-fulfillment returns one row per product pivoted across the matching orders
GET /public/v1/reports/order-fulfillment?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"product": "Blue Dream 1g Cartridge",
"group": "Cartridges",
"category": "Vape",
"subcategory": "Cartridge",
"so_1042": 3.0,
"total_units": 3.0,
"unit_price": 35.0,
"total_value": 105.0
}
],
"meta": {
"report": "order_fulfillment",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "product", "label": "Product" },
{ "key": "group", "label": "Group" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "so_1042", "label": "SO-1042" },
{ "key": "total_units", "label": "Total Units" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "total_value", "label": "Total Value" }
]
}
}
Returns one row per product, pivoted across the matching sales orders. Each row carries one
dynamic column per order (keyed by the slugified order number, e.g. so_1042) holding the
quantity of that product on that order, plus the product's group, category, subcategory,
total units, unit price, and total value. When no date filter is provided, the report
defaults to the last 30 days. Canceled and merged orders are always excluded. Because the
per-order columns are dynamic, the exact set of keys depends on which orders match the
filters. Numeric cells are returned as numbers.
Required permission: reports_permissions_order_fulfillment.
Request
GET /public/v1/reports/order-fulfillment
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| search | Search by order number, customer name, or LeafLink short ID | query | string | false | ||
| company_relationship_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false | ||
| location_ids | Filter by the order item location IDs | query | [string] | false | ||
| user_ids | Filter by the order item user IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (sales rep) IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Order Fulfillment report | OrderFulfillmentReport |
| 403 | Forbidden |
Get the Sales Order Item History report
GET /public/v1/reports/sales-order-item-history returns one row per sales order line item
GET /public/v1/reports/sales-order-item-history?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"line_item_id": "b1f9c0a2-6e4d-4a7b-9f3c-2d8e5a1c0f42",
"order_id": "a0e8d1b3-5c2f-4e9a-8b7d-1f6c3a2e9d04",
"order_date": "Jul 1st 2026",
"order_date_utc": "Jul 1st 2026",
"delivery_date": "Jul 3rd 2026",
"delivery_date_utc": "Jul 3rd 2026",
"due_date": "Jul 15th 2026",
"due_date_utc": "Jul 15th 2026",
"order_number": "1042",
"status": "Completed",
"product": "Blue Dream 1g Cartridge",
"product_id": "c2d7e6f5-4b3a-4c1d-8e9f-0a1b2c3d4e5f",
"product_sku": "BD-CART-1G",
"default_unit_cost": 12.5,
"default_unit_price": 25.0,
"default_wholesale_price": 20.0,
"brand": "Green Labs",
"brand_id": "d3e8f7a6-5c4b-4d2e-9f0a-1b2c3d4e5f60",
"vendor": "Green Labs Cultivation",
"vendor_id": "e4f9a8b7-6d5c-4e3f-a01b-2c3d4e5f6071",
"package_label": "1A4060300003B01000001234",
"package_batch_number": "BATCH-2026-001",
"order_item_price": 25.0,
"returned_quantity": 0.0,
"quantity": 10.0,
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"customer": "Green Leaf Dispensary",
"customer_id": "f5a0b9c8-7e6d-4f4a-b12c-3d4e5f607182",
"sales_rep": "Jane Doe",
"thc": 85.0,
"thc_mg_g": 850.0,
"thc_mg_ml": 800.0,
"total_thc": 88.0,
"total_thc_mg_g": 880.0,
"total_thc_mg_ml": 820.0,
"cbd": 0.5,
"cbd_mg_g": 5.0,
"cbd_mg_ml": 4.5,
"total_cbd": 0.8,
"total_cbd_mg_g": 8.0,
"total_cbd_mg_ml": 7.0,
"metrc_manifest_number": "0000012345",
"invoice_numbers": "INV-1042",
"shipped_from_license": "C11-0000123-LIC",
"package_expiration_date": "Dec 31st 2026",
"upc": "850000123456",
"package_harvest_date": "May 1st 2026",
"batch_number": "BATCH-2026-001"
}
],
"meta": {
"report": "sales_order_item_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "line_item_id", "label": "Line Item Id" },
{ "key": "order_id", "label": "Order Id" },
{ "key": "order_date", "label": "Order Date" },
{ "key": "order_date_utc", "label": "Order Date (UTC)" },
{ "key": "delivery_date", "label": "Delivery Date" },
{ "key": "delivery_date_utc", "label": "Delivery Date (UTC)" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "due_date_utc", "label": "Due Date (UTC)" },
{ "key": "order_number", "label": "Order Number" },
{ "key": "status", "label": "Status" },
{ "key": "product", "label": "Product" },
{ "key": "product_id", "label": "Product Id" },
{ "key": "product_sku", "label": "Product SKU" },
{ "key": "default_unit_cost", "label": "Default Unit Cost" },
{ "key": "default_unit_price", "label": "Default Unit Price" },
{ "key": "default_wholesale_price", "label": "Default Wholesale Price" },
{ "key": "brand", "label": "Brand" },
{ "key": "brand_id", "label": "Brand Id" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "vendor_id", "label": "Vendor Id" },
{ "key": "package_label", "label": "Package Label" },
{ "key": "package_batch_number", "label": "Package Batch Number" },
{ "key": "order_item_price", "label": "Order Item Price" },
{ "key": "returned_quantity", "label": "Returned Quantity" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "customer", "label": "Customer" },
{ "key": "customer_id", "label": "Customer Id" },
{ "key": "sales_rep", "label": "Sales Rep" },
{ "key": "thc", "label": "THC %" },
{ "key": "thc_mg_g", "label": "THC mg/g" },
{ "key": "thc_mg_ml", "label": "THC mg/mL" },
{ "key": "total_thc", "label": "Total THC %" },
{ "key": "total_thc_mg_g", "label": "Total THC mg/g" },
{ "key": "total_thc_mg_ml", "label": "Total THC mg/mL" },
{ "key": "cbd", "label": "CBD %" },
{ "key": "cbd_mg_g", "label": "CBD mg/g" },
{ "key": "cbd_mg_ml", "label": "CBD mg/mL" },
{ "key": "total_cbd", "label": "Total CBD %" },
{ "key": "total_cbd_mg_g", "label": "Total CBD mg/g" },
{ "key": "total_cbd_mg_ml", "label": "Total CBD mg/mL" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "invoice_numbers", "label": "Invoice Numbers" },
{ "key": "shipped_from_license", "label": "Shipped From License" },
{ "key": "package_expiration_date", "label": "Package Expiration Date" },
{ "key": "upc", "label": "UPC" },
{ "key": "package_harvest_date", "label": "Package Harvest Date" },
{ "key": "batch_number", "label": "Batch Number" }
]
}
}
Returns one row per sales order line item with its order dates, product, brand, vendor, customer, status, quantities, and prices. When no date filter is provided, the report defaults to the last 30 days. Numeric cells (quantities, prices) are returned as numbers. Companies on a compliance integration (Metrc or BioTrack) get additional package, potency, manifest, and shipped-from-license columns, and any Order custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_sales_order_item_history.
Request
GET /public/v1/reports/sales-order-item-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| payment_status | Filter by payment status. Accepted values are NOT_PAID, OVERPAID, PARTIALLY_PAID, FULLY_PAID |
query | [string] | false | ||
| order_source | Filter by the source that created the order. Accepted values are LEAFLINK, EXTERNAL_BUYER, INTERNAL_USER, API |
query | [string] | false | ||
| sample | Filter line items by whether they are samples. Accepted values are ONLY, EXCLUDE |
query | string | false | ||
| trade_sample_packages | Filter line items by whether their package is a trade sample. Accepted values are ONLY, EXCLUDE |
query | string | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| delivery_datetime | Filter by delivery date range | query | string | false | ||
| due_datetime | Filter by due date range | query | string | false | ||
| created_datetime | Filter by the datetime the order was created | query | string | false | ||
| updated_datetime | Filter by the datetime the order was last modified | query | string | false | ||
| total | Filter by order total range (comma-separated min,max) |
query | string | false | 100,500 |
|
| matched_with_compliance_transfer | Filter by whether the order is matched with a compliance transfer | query | boolean | false | ||
| search | Search by order number, customer name, or LeafLink short ID | query | string | false | ||
| company_relationship_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| company_relationship_group_ids | Filter by customer group IDs | query | [string] | false | ||
| shipped_from_license_ids | Filter by the shipped-from license IDs | query | [string] | false | ||
| menu_ids | Filter by menu IDs | query | [string] | false | ||
| brand_ids | Filter by brand IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (user) IDs | query | [string] | false | ||
| creator_ids | Filter by order creator (user) IDs | query | [string] | false | ||
| batch_ids | Filter by batch IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales Order Item History report | SalesOrderItemHistoryReport |
| 403 | Forbidden |
Get the Sales By Company report
GET /public/v1/reports/sales-by-company returns one row per customer
GET /public/v1/reports/sales-by-company?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"name": "Green Leaf Dispensary",
"last_order_date": "07/03/2026",
"order_count": 4,
"total_received": 1000.0,
"total_sales": 4234.56,
"owner": "Jane Doe",
"category": "Dispensary",
"relationship_type": "Customer"
}
],
"meta": {
"report": "sales_by_company",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "last_order_date", "label": "Last Order Date" },
{ "key": "order_count", "label": "Order Count" },
{ "key": "total_received", "label": "Total Received" },
{ "key": "total_sales", "label": "Total Sales" },
{ "key": "owner", "label": "Owner" },
{ "key": "category", "label": "Category" },
{ "key": "relationship_type", "label": "Relationship Type" }
]
}
}
Returns one row per customer (company relationship) with its last order date, order count,
total received (payments), and total sales (order totals net of returns) over the reported
date range. When no date filter is provided, the report defaults to the last 30 days.
Canceled orders are excluded unless the status filter explicitly requests them. Numeric
cells are returned as numbers. Any CompanyRelationship custom fields configured for the
company are appended as extra columns.
Required permission: reports_permissions_sales_by_company.
Request
GET /public/v1/reports/sales-by-company
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| search | Search by customer (related company) name | query | string | false | ||
| company_relationship_group_ids | Filter by customer group IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (sales rep) IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales By Company report | SalesByCompanyReport |
| 403 | Forbidden |
Get the Sales By Product report
GET /public/v1/reports/sales-by-product returns one row per product
GET /public/v1/reports/sales-by-product?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"quantity_sold": 120.0,
"total_sales": 4234.56,
"unit_type": "Each",
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"vendor": "Sunshine Extracts",
"product_owner": "Jane Doe",
"unit_cost": 8.5,
"sale_price": 35.0,
"wholesale_price": 25.0,
"shipped_from_license": "C11-0000001-LIC",
"upc": "850000000001"
}
],
"meta": {
"report": "sales_by_product",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "quantity_sold", "label": "Quantity Sold" },
{ "key": "total_sales", "label": "Total Sales" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "product_owner", "label": "Product Owner" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "sale_price", "label": "Sale Price" },
{ "key": "wholesale_price", "label": "Wholesale Price" },
{ "key": "shipped_from_license", "label": "Shipped From License" },
{ "key": "upc", "label": "UPC" }
]
}
}
Returns one row per product with its quantity sold and total sales (order item quantities
times price, net of returns) over the reported date range, alongside the product's
descriptive attributes (SKU, unit type, category, subcategory, group, vendor, owner, unit
cost, sale price, wholesale price, shipped-from license, and UPC). When no date filter is
provided, the report defaults to the last 30 days. Canceled orders are excluded unless the
status filter explicitly requests them. Numeric cells are returned as numbers. Any Product
custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_sales_by_product.
Request
GET /public/v1/reports/sales-by-product
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| search | Search by product name or SKU | query | string | false | ||
| customer_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| exclude_customer_ids | Exclude sales to these customer (company relationship) IDs | query | [string] | false | ||
| owner_ids | Filter by order owner (sales rep) IDs | query | [string] | false | ||
| location_ids | Filter by the order item location IDs | query | [string] | false | ||
| user_ids | Filter by the order item user IDs | query | [string] | false | ||
| shipped_from_license_ids | Filter by the shipped-from license IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales By Product report | SalesByProductReport |
| 403 | Forbidden |
Get the Sales By User report
GET /public/v1/reports/sales-by-user returns one row per user
GET /public/v1/reports/sales-by-user?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"leaderboard_rank": 1,
"user": "Jane Doe",
"order_count": 4,
"sales_pre_tax": 3800.0,
"total_sales": 4234.56
}
],
"meta": {
"report": "sales_by_user",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "leaderboard_rank", "label": "Leaderboard Rank" },
{ "key": "user", "label": "User" },
{ "key": "order_count", "label": "Order Count" },
{ "key": "sales_pre_tax", "label": "Sales (Pre-Tax)" },
{ "key": "total_sales", "label": "Total Sales" }
]
}
}
Returns one row per user (sales rep) with its leaderboard rank, order count, pre-tax sales,
and total sales (order totals net of returns) over the reported date range. Users are ranked
by total sales, with the top seller at rank 1. When no date filter is provided, the report
defaults to the last 30 days. Canceled orders are excluded unless the status filter
explicitly requests them. Numeric cells are returned as numbers.
Required permission: reports_permissions_sales_by_user.
Request
GET /public/v1/reports/sales-by-user
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| search | Search by order number or customer name | query | string | false | ||
| user_ids | Filter by user (sales rep) IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Sales By User report | SalesByUserReport |
| 403 | Forbidden |
Get the Purchase Order History report
GET /public/v1/reports/purchase-order-history returns one row per purchase
GET /public/v1/reports/purchase-order-history?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=COMPLETED
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"purchase_date": "Jul 1st 2026",
"due_date": "Jul 15th 2026",
"purchase_number": "PO-1042",
"vendor": "Emerald Farms",
"status": "Completed",
"paid": 1000.0,
"amount": 1234.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000123456"
}
],
"meta": {
"report": "purchase_order_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "purchase_date", "label": "Purchase Date" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "purchase_number", "label": "Purchase Number" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "amount", "label": "Amount" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" }
]
}
}
Returns one row per purchase with its dates, vendor, status, and monetary totals. When no date filter is provided, the report defaults to the last 30 days. Numeric cells (monetary amounts) are returned as numbers. Companies on a compliance integration (Metrc or BioTrack) get an additional manifest number column, and any Purchase custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_purchase_order_history.
Request
GET /public/v1/reports/purchase-order-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by purchase status. Accepted values are COMPLETED, DELIVERING, PENDING, PARTIALLY_RECEIVED, PROCESSING |
query | [string] | false | ||
| order_datetime | Filter by purchase date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| due_datetime | Filter by due date range | query | string | false | ||
| created_datetime | Filter by the datetime the purchase was created | query | string | false | ||
| updated_datetime | Filter by the datetime the purchase was last modified | query | string | false | ||
| total | Filter by purchase total range (comma-separated min,max) |
query | string | false | 100,500 |
|
| paid | Filter by paid amount range (comma-separated min,max) |
query | string | false | ||
| search | Search by purchase number | query | string | false | ||
| company_relationship_ids | Filter by vendor (company relationship) IDs | query | [string] | false | ||
| location_ids | Filter by receiving warehouse (location) IDs | query | [string] | false | ||
| owner_ids | Filter by purchase owner (user) IDs | query | [string] | false | ||
| creator_ids | Filter by purchase creator (user) IDs | query | [string] | false | ||
| batch_ids | Filter by batch IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Purchase Order History report | PurchaseOrderHistoryReport |
| 403 | Forbidden |
Get the Purchases By Company report
GET /public/v1/reports/purchases-by-company returns one row per vendor
GET /public/v1/reports/purchases-by-company?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"name": "Emerald Farms",
"last_purchase_date": "07/03/2026",
"purchase_order_count": 4,
"total_purchases": 4234.56,
"product_owner": "Jane Doe",
"category": "Vendor",
"relationship_type": "Supplier"
}
],
"meta": {
"report": "purchases_by_company",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "last_purchase_date", "label": "Last Purchase Date" },
{ "key": "purchase_order_count", "label": "Purchase Order Count" },
{ "key": "total_purchases", "label": "Total Purchases" },
{ "key": "product_owner", "label": "Product Owner" },
{ "key": "category", "label": "Category" },
{ "key": "relationship_type", "label": "Relationship Type" }
]
}
}
Returns one row per vendor (company relationship) with its last purchase date, purchase order count, and total purchases over the reported date range. When no date filter is provided, the report defaults to the last 30 days. Draft purchases are excluded. Numeric cells are returned as numbers. Any CompanyRelationship custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_purchases_by_company.
Request
GET /public/v1/reports/purchases-by-company
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| order_datetime | Filter by purchase date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| search | Search by vendor (related company) name | query | string | false | ||
| company_relationship_group_ids | Filter by vendor group IDs | query | [string] | false | ||
| owner_ids | Filter by purchase owner (sales rep) IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Purchases By Company report | PurchasesByCompanyReport |
| 403 | Forbidden |
Get the Purchases By Product report
GET /public/v1/reports/purchases-by-product returns one row per product
GET /public/v1/reports/purchases-by-product?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"quantity_purchased": 120.0,
"total_purchased": 4234.56,
"unit_type": "Each",
"category": "Vape",
"subcategory": "Cartridge",
"group": "Cartridges",
"vendor": "Sunshine Extracts",
"owner": "Jane Doe",
"unit_cost": 8.5,
"sale_price": 35.0,
"wholesale_price": 25.0
}
],
"meta": {
"report": "purchases_by_product",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "quantity_purchased", "label": "Quantity Purchased" },
{ "key": "total_purchased", "label": "Total Purchased" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "owner", "label": "Owner" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "sale_price", "label": "Sale Price" },
{ "key": "wholesale_price", "label": "Wholesale Price" }
]
}
}
Returns one row per purchased product with its quantity purchased and total purchased (purchase item quantities times price) over the reported date range, alongside the product's descriptive attributes (SKU, unit type, category, subcategory, group, vendor, owner, unit cost, sale price, and wholesale price). When no date filter is provided, the report defaults to the last 30 days. Draft purchases are excluded. Numeric cells are returned as numbers. Any Product custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_purchases_by_product.
Request
GET /public/v1/reports/purchases-by-product
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| order_datetime | Filter by purchase date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| search | Search by product name or SKU | query | string | false | ||
| owner_ids | Filter by purchase owner (sales rep) IDs | query | [string] | false | ||
| location_ids | Filter by the purchase location IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Purchases By Product report | PurchasesByProductReport |
| 403 | Forbidden |
Get the Invoice History report
GET /public/v1/reports/invoice-history returns one row per invoice
GET /public/v1/reports/invoice-history?invoice_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z&status[]=FULLY_PAID
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"invoice_date": "2026-07-01",
"invoice_number": "INV-1042",
"due_date": "2026-07-15",
"sales_order": "SO-1042",
"customer": "Green Leaf Dispensary",
"status": "Fully Paid",
"paid": 1239.56,
"outstanding": 0.0,
"line_item_subtotal": 1150.0,
"total_taxes": 84.56,
"tax_summary": "Excise Tax - $84.56",
"total_charges": 10.0,
"charge_summary": "Delivery Fee - $10.00",
"total_discounts": 5.0,
"discount_summary": "Volume Discount - $5.00",
"total": 1239.56,
"owner": "Jane Doe",
"metrc_manifest_number": "0000123456",
"shipped_from_license": "C11-0000123-LIC"
}
],
"meta": {
"report": "invoice_history",
"date_range": "Jun 26th 2026 to Jul 26th 2026",
"columns": [
{ "key": "invoice_date", "label": "Invoice Date" },
{ "key": "invoice_number", "label": "Invoice Number" },
{ "key": "due_date", "label": "Due Date" },
{ "key": "sales_order", "label": "Sales Order" },
{ "key": "customer", "label": "Customer" },
{ "key": "status", "label": "Status" },
{ "key": "paid", "label": "Paid" },
{ "key": "outstanding", "label": "Outstanding" },
{ "key": "line_item_subtotal", "label": "Line Item Subtotal" },
{ "key": "total_taxes", "label": "Total Taxes" },
{ "key": "tax_summary", "label": "Tax Summary" },
{ "key": "total_charges", "label": "Total Charges" },
{ "key": "charge_summary", "label": "Charge Summary" },
{ "key": "total_discounts", "label": "Total Discounts" },
{ "key": "discount_summary", "label": "Discount Summary" },
{ "key": "total", "label": "Total" },
{ "key": "owner", "label": "Owner" },
{ "key": "metrc_manifest_number", "label": "Metrc Manifest Number" },
{ "key": "shipped_from_license", "label": "Shipped From License" }
]
}
}
Returns one row per invoice with its dates, sales order, customer, status, and monetary totals (paid, outstanding, line item subtotal, taxes, charges, discounts, total) along with the tax, charge, and discount summaries. When no date filter is provided, the report defaults to the last 30 days. Numeric cells (monetary amounts) are returned as numbers. Companies on a compliance integration (Metrc or BioTrack) get additional manifest and shipped-from-license columns, and any Invoice custom fields configured for the company are appended as extra columns.
Required permission: reports_permissions_invoice_history.
Request
GET /public/v1/reports/invoice-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| status | Filter by invoice payment status. Accepted values are NOT_PAID, OVER_PAID, FULLY_PAID, PARTIALLY_PAID |
query | [string] | false | ||
| order_status | Filter by the invoice's sales order status. Accepted values are PENDING, PROCESSING, READY_TO_SHIP, DELIVERING, DELIVERED, COMPLETED, CANCELED |
query | [string] | false | ||
| invoice_datetime | Filter by invoice date range (comma-separated ISO8601 range) | query | string | false | Last 30 days | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
| due_datetime | Filter by due date range | query | string | false | ||
| total | Filter by invoice total range (comma-separated min,max) |
query | string | false | 100,500 |
|
| paid | Filter by paid amount range (comma-separated min,max) |
query | string | false | ||
| search | Search by invoice number | query | string | false | ||
| company_relationship_ids | Filter by customer (company relationship) IDs | query | [string] | false | ||
| shipped_from_license_ids | Filter by the shipped-from license IDs | query | [string] | false | ||
| batch_ids | Filter by batch IDs | query | [string] | false | ||
| product_ids | Filter by product IDs | query | [string] | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Invoice History report | InvoiceHistoryReport |
| 403 | Forbidden |
Get the Cost of Goods Sold report
GET /public/v1/reports/cogs returns one row per completed sales order line item
GET /public/v1/reports/cogs?order_datetime=2026-06-01T00:00:00Z,2026-08-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"order_number": "1042",
"final_input": "Final",
"cost_origin": "Purchase Order",
"product_name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"product_brand": "Sunshine Extracts",
"product_category": "Vape",
"package": "1A4000000000000000000123",
"metrc_production_batch_number": "PB-2026-0042",
"batch": "BD-BATCH-07 (B-0042)",
"quantity": 4.0,
"unit_type": "Each",
"unit_price": 35.0,
"total_price": 140.0,
"unit_cost_actual": 8.5,
"unit_cost_default": 9.0,
"total_cost_actual": 34.0,
"total_cost_default": 36.0,
"total_profits_actual": 106.0,
"total_profits_default": 104.0,
"profit_unit_actual": 26.5,
"profit_unit_default": 26.0,
"margin_actual": 0.757,
"margin_default": 0.743
}
],
"meta": {
"report": "cogs",
"date_range": "Jul 26th 2026",
"columns": [
{ "key": "order_number", "label": "Order Number" },
{ "key": "final_input", "label": "Final/Input" },
{ "key": "cost_origin", "label": "Cost Origin" },
{ "key": "product_name", "label": "Product Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "product_brand", "label": "Product Brand" },
{ "key": "product_category", "label": "Product Category" },
{ "key": "package", "label": "Package" },
{ "key": "metrc_production_batch_number", "label": "Metrc Production Batch Number" },
{ "key": "batch", "label": "Batch" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "total_price", "label": "Total Price" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "total_profits_actual", "label": "Total Profits (Actual)" },
{ "key": "total_profits_default", "label": "Total Profits (Default)" },
{ "key": "profit_unit_actual", "label": "Profit/Unit (Actual)" },
{ "key": "profit_unit_default", "label": "Profit/Unit (Default)" },
{ "key": "margin_actual", "label": "Margin (Actual)" },
{ "key": "margin_default", "label": "Margin (Default)" }
]
}
}
Returns one row per completed sales order line item over the reported date range, with the
product's descriptive attributes (name, SKU, brand, category), its package, batch, and Metrc
production batch, plus the item's quantity, unit type, unit and total price, and both actual
and default cost figures (unit cost, total cost, total profit, profit per unit, and margin).
Only line items on Completed orders that have not been fully returned are included. When
neither order_datetime nor delivery_datetime is provided, the report defaults to orders
from the last 30 days (by order date) to avoid scanning your entire order history. Numeric
cells are returned as numbers. Companies on the BioTrack compliance integration do not get the
metrc_production_batch_number column.
Required permission: reports_permissions_cogs.
Request
GET /public/v1/reports/cogs
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| order_datetime | Filter by order date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
|
| delivery_datetime | Filter by delivery date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Cost of Goods Sold report | CogsReport |
| 403 | Forbidden |
Get the Inventory Valuation report
GET /public/v1/reports/inventory-valuation returns one row per product
GET /public/v1/reports/inventory-valuation?calculation_method=cost
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"name": "Blue Dream 1g Cartridge",
"sku": "BD-1G-CART",
"vendor": "Sunshine Extracts",
"unit_type": "Each",
"category": "Vape Cartridges",
"subcategory": "Distillate",
"group": "Cartridges",
"owner": "Jane Doe",
"active_quantity": 120.0,
"assembling_quantity": 0.0,
"reserved_quantity": 20.0,
"available_quantity": 100.0,
"incoming_quantity": 50.0,
"pending_output_quantity": 0.0,
"unit_cost": 8.5,
"unit_price": 35.0,
"inventory_threshold_max": 500.0,
"inventory_threshold_min": 50.0,
"active_value_price": 4200.0,
"image_url": "https://cdn.distru.com/products/bd-1g-cart.jpg",
"brand": "Blue Dream Co"
}
],
"meta": {
"report": "inventory_valuation",
"date_range": "Jul 27th 2026",
"columns": [
{ "key": "name", "label": "Name" },
{ "key": "sku", "label": "SKU" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "group", "label": "Group" },
{ "key": "owner", "label": "Owner" },
{ "key": "active_quantity", "label": "Active Quantity" },
{ "key": "assembling_quantity", "label": "Assembling Quantity" },
{ "key": "reserved_quantity", "label": "Reserved Quantity" },
{ "key": "available_quantity", "label": "Available Quantity" },
{ "key": "incoming_quantity", "label": "Incoming Quantity" },
{ "key": "pending_output_quantity", "label": "Pending Output Quantity" },
{ "key": "unit_cost", "label": "Unit Cost" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "inventory_threshold_max", "label": "Inventory Threshold Max" },
{ "key": "inventory_threshold_min", "label": "Inventory Threshold Min" },
{ "key": "active_value_price", "label": "Active Value (Price)" },
{ "key": "image_url", "label": "Image URL" },
{ "key": "brand", "label": "Brand" }
]
}
}
Returns one row per product with its current on-hand position — active, assembling, reserved,
available, incoming, and pending-output quantities — alongside the product's descriptive
attributes (SKU, vendor, brand, unit type, category, subcategory, group, owner), its unit cost
and price, its inventory alert thresholds, and its active inventory value. The active value is
priced by unit price by default; pass calculation_method=cost to value it by unit cost
instead, which also renames the value column (active_value_price becomes active_value_cost).
Numeric cells are returned as numbers. Any Product custom fields configured for the company are
appended as extra columns.
Required permission: reports_permissions_inventory_valuation.
Request
GET /public/v1/reports/inventory-valuation
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| search | Search by product name or SKU | query | string | false | ||
| calculation_method | How to value active inventory (defaults to price) |
query | string | false | cost |
|
| location_ids | Filter by location IDs | query | array | false | ||
| user_ids | Filter by user IDs | query | array | false | ||
| vendor_ids | Filter by vendor (company relationship) IDs | query | array | false | ||
| brand_ids | Filter by brand (company relationship) IDs | query | array | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Inventory Valuation report | InventoryValuationReport |
| 403 | Forbidden |
Get the Inventory Assets report
GET /public/v1/reports/inventory-assets returns one row per on-hand inventory asset
GET /public/v1/reports/inventory-assets?style=granular
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"product": "Blue Dream 1g Cartridge",
"license": "C11-0000123-LIC",
"location": "Main Warehouse",
"package_number": "1A4060300003B01000001234",
"batch_number": "BD-2026-01",
"sku": "BD-1G-CART",
"vendor": "Sunshine Extracts",
"owner": "Jane Doe",
"unit_type": "Each",
"active_quantity": 120.0,
"assembling_quantity": 0.0,
"selling_quantity": 0.0,
"category": "Vape Cartridges",
"subcategory": "Distillate",
"unit_price": 35.0,
"unit_cost_actual": 8.5,
"unit_cost_default": 8.0,
"total_cost_actual": 1020.0,
"total_cost_default": 960.0,
"expiration_date": "2027-01-15",
"tracking_method": "batch",
"harvest_date": "2025-11-01"
}
],
"meta": {
"report": "inventory_assets",
"date_range": "Jul 27th 2026",
"columns": [
{ "key": "product", "label": "Product" },
{ "key": "license", "label": "License" },
{ "key": "location", "label": "Location" },
{ "key": "package_number", "label": "Package Number" },
{ "key": "batch_number", "label": "Batch Number" },
{ "key": "sku", "label": "SKU" },
{ "key": "vendor", "label": "Vendor" },
{ "key": "owner", "label": "Owner" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "active_quantity", "label": "Active Quantity" },
{ "key": "assembling_quantity", "label": "Assembling Quantity" },
{ "key": "selling_quantity", "label": "Selling Quantity" },
{ "key": "category", "label": "Category" },
{ "key": "subcategory", "label": "Subcategory" },
{ "key": "unit_price", "label": "Unit Price" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "expiration_date", "label": "Expiration Date" },
{ "key": "tracking_method", "label": "Tracking Method" },
{ "key": "harvest_date", "label": "Harvest Date" }
]
}
}
Returns one row per on-hand inventory asset (a product at a location, batch, or package) with
its descriptive attributes (product, SKU, vendor, owner, unit type, category, subcategory,
license, location, package number, batch number), its active, assembling, and selling
quantities, its unit price, and its actual and default unit and total costs. Quantities and
costs are point-in-time: pass datetime to snapshot the position at a past moment (defaults to
now). Pass style=granular to expand each asset into its underlying cost inputs — this adds the
final_input, cost_origin, and cost_quantity columns and requires permission to view cost
details. Cost columns are omitted for users without permission to view costs. Numeric cells are
returned as numbers.
Required permission: reports_permissions_inventory_assets.
Request
GET /public/v1/reports/inventory-assets
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| style | Row granularity (defaults to collapsed) |
query | string | false | granular |
|
| location_id | Filter by a single location ID | query | string | false | ||
| datetime | Point-in-time snapshot as an ISO8601 datetime (defaults to now) | query | string | false | 2026-07-01T00:00:00Z |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Inventory Assets report | InventoryAssetsReport |
| 403 | Forbidden |
Get the Inventory Transaction History report
GET /public/v1/reports/inventory-transaction-history returns one row per inventory transaction
GET /public/v1/reports/inventory-transaction-history?datetime=2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"date": "2026-07-01 09:30",
"product": "Blue Dream 1g Cartridge",
"package_batch_number_or_batch_name": "BD-2026-01",
"batch_number": "BD-2026-01",
"package_label": "1A4060300003B01000001234",
"metrc_production_batch_number": "PB-2026-0042",
"type": "adjustment",
"related_entity": "Stock Adjustment",
"related_entity_status": "COMPLETED",
"related_entity_customer_vendor": "Green Leaf Dispensary",
"amount": -4.0,
"unit_type": "Each",
"metrc_unit_name": "Each",
"product_id": "e9323492-95cc-402a-b29d-22a84ff2b1ef",
"batch_id": "1024",
"company_relationship_id": "5567",
"description": "Manual stock adjustment",
"thc": 21.5,
"total_thc": 24.8,
"thc_mg_g": 215.0,
"thc_mg_ml": 780.0,
"total_thc_mg_g": 248.0,
"total_thc_mg_ml": 800.0,
"cbd": 0.5,
"total_cbd": 0.6,
"cbd_mg_g": 5.0,
"cbd_mg_ml": 4.0,
"total_cbd_mg_g": 6.0,
"total_cbd_mg_ml": 5.0,
"total_cost": 34.0
}
],
"meta": {
"report": "inventory_transaction_history",
"date_range": "Jun 27th 2026 to Jul 27th 2026",
"columns": [
{ "key": "date", "label": "Date" },
{ "key": "product", "label": "Product" },
{ "key": "package_batch_number_or_batch_name", "label": "Package Batch Number or Batch Name" },
{ "key": "batch_number", "label": "Batch Number" },
{ "key": "package_label", "label": "Package Label" },
{ "key": "metrc_production_batch_number", "label": "Metrc Production Batch Number" },
{ "key": "type", "label": "Type" },
{ "key": "related_entity", "label": "Related Entity" },
{ "key": "related_entity_status", "label": "Related Entity Status" },
{ "key": "related_entity_customer_vendor", "label": "Related Entity Customer/Vendor" },
{ "key": "amount", "label": "Amount" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "metrc_unit_name", "label": "Metrc Unit Name" },
{ "key": "product_id", "label": "Product Id" },
{ "key": "batch_id", "label": "Batch Id" },
{ "key": "company_relationship_id", "label": "Company Relationship Id" },
{ "key": "description", "label": "Description" },
{ "key": "thc", "label": "THC %" },
{ "key": "total_thc", "label": "Total THC %" },
{ "key": "thc_mg_g", "label": "THC mg/g" },
{ "key": "thc_mg_ml", "label": "THC mg/mL" },
{ "key": "total_thc_mg_g", "label": "Total THC mg/g" },
{ "key": "total_thc_mg_ml", "label": "Total THC mg/mL" },
{ "key": "cbd", "label": "CBD %" },
{ "key": "total_cbd", "label": "Total CBD %" },
{ "key": "cbd_mg_g", "label": "CBD mg/g" },
{ "key": "cbd_mg_ml", "label": "CBD mg/mL" },
{ "key": "total_cbd_mg_g", "label": "Total CBD mg/g" },
{ "key": "total_cbd_mg_ml", "label": "Total CBD mg/mL" },
{ "key": "total_cost", "label": "Total Cost" }
]
}
}
Returns one row per inventory transaction over the reported date range, with the transaction's
date, product, package and batch identifiers, Metrc production batch number, type, related
entity (order, return, assembly, stock adjustment, etc.) and its status and customer/vendor, the
amount and unit type, package potency figures (THC/CBD), and the transaction's total cost. When
no date filter is provided, the report defaults to the last 30 days. Companies on the BioTrack
compliance integration do not get the metrc_unit_name and metrc_production_batch_number
columns. Numeric cells are returned as numbers.
Required permission: reports_permissions_inventory_transaction_history.
Request
GET /public/v1/reports/inventory-transaction-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| datetime | Filter by transaction date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
|
| product_ids | Filter by product IDs | query | array | false | ||
| batch_ids | Filter by batch IDs | query | array | false | ||
| package_id | Filter by a single package ID | query | string | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Inventory Transaction History report | InventoryTransactionHistoryReport |
| 403 | Forbidden |
Get the Harvest Outputs report
GET /public/v1/reports/harvest-outputs returns one row per harvest assembly line item
GET /public/v1/reports/harvest-outputs?datetime=2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"harvest_assembly_date": "07/01/2026",
"harvest_assembly_number": "HA-0000001",
"status": "Completed",
"harvest_name": "Blue Dream Fall 2026",
"output_batch_number": "BATCH-0001",
"output_package_number": "1A4FF0100000022000000123",
"strain": "Blue Dream",
"location": "Main Warehouse",
"cost_input_output": "Output",
"distru_product": "Blue Dream Flower",
"product_category": "Flower",
"quantity": 1200.0,
"unit_type": "Grams",
"unit_cost_actual": 2.83,
"unit_cost_default": 3.0,
"total_cost_actual": 3400.0,
"total_cost_default": 3600.0,
"cost_type": "Labor",
"cost_type_description": "Trimming labor",
"line_item_id": "1042",
"output_reference_id": "2087"
}
],
"meta": {
"report": "harvest_outputs",
"date_range": "Jul 20th 2026 to Jul 27th 2026",
"columns": [
{ "key": "harvest_assembly_date", "label": "Harvest Assembly Date" },
{ "key": "harvest_assembly_number", "label": "Harvest Assembly Number" },
{ "key": "status", "label": "Status" },
{ "key": "harvest_name", "label": "Harvest Name" },
{ "key": "output_batch_number", "label": "Output Batch Number" },
{ "key": "output_package_number", "label": "Output Package Number" },
{ "key": "strain", "label": "Strain" },
{ "key": "location", "label": "Location" },
{ "key": "cost_input_output", "label": "Cost/Input/Output" },
{ "key": "distru_product", "label": "Distru Product" },
{ "key": "product_category", "label": "Product Category" },
{ "key": "quantity", "label": "Quantity" },
{ "key": "unit_type", "label": "Unit Type" },
{ "key": "unit_cost_actual", "label": "Unit Cost (Actual)" },
{ "key": "unit_cost_default", "label": "Unit Cost (Default)" },
{ "key": "total_cost_actual", "label": "Total Cost (Actual)" },
{ "key": "total_cost_default", "label": "Total Cost (Default)" },
{ "key": "cost_type", "label": "Cost Type" },
{ "key": "cost_type_description", "label": "Cost Type Description" },
{ "key": "line_item_id", "label": "Line Item ID" },
{ "key": "output_reference_id", "label": "Output Reference ID" }
]
}
}
Returns one row per line item of every harvest assembly over the reported date range. Each
assembly expands into its inputs (the harvested material consumed), its outputs (the products
produced, with their batch and package numbers), and its cost line items — the
cost_input_output column identifies which. Every row carries the assembly's date, number, and
status, plus the harvest name, strain, location, product, product category, quantity, and unit
type. When no date filter is provided, the report defaults to the last 7 days. The cost columns
are omitted for users without permission to view costs. Numeric cells are returned as numbers.
Required permission: reports_permissions_harvest_outputs.
Request
GET /public/v1/reports/harvest-outputs
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| datetime | Filter by harvest assembly date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
|
| status | Filter by assembly status | query | string | false | COMPLETED |
|
| harvest_name | Filter by harvest name (partial match) | query | string | false | ||
| strain | Filter by strain (partial match) | query | string | false | ||
| location_id | Filter by a single input location ID | query | string | false | ||
| output_product_name | Filter by output product name (partial match) | query | string | false | ||
| output_product_category_id | Filter by a single output product category ID | query | string | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Harvest Outputs report | HarvestOutputsReport |
| 403 | Forbidden |
Get the Plant Lifecycle report
GET /public/v1/reports/plant-lifecycle returns one row per plant batch
GET /public/v1/reports/plant-lifecycle?datetime=2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"plant_batch_name": "Blue Dream 2026-01",
"batch_creation_date": "01/15/2026",
"strain": "Blue Dream",
"plants_started": 50,
"plants_promoted_to_veg": 48,
"plants_destroyed": 2,
"plants_harvested": 46,
"promoted_to_veg_date": "02/01/2026",
"first_harvest_date": "04/10/2026",
"last_harvest_date": "04/20/2026",
"days_as_batch": 17,
"days_veg_to_last_harvest": 78,
"total_lifecycle_days": 95,
"total_cost_batch_stage": 3200.0,
"total_cost_veg_to_last_harvest": 8000.0,
"destroyed_plant_cost": 1200.0,
"total_lifecycle_cost": 12400.0,
"harvest_name_s": "Blue Dream Spring 2026"
}
],
"meta": {
"report": "plant_lifecycle",
"date_range": "Jan 1st 2026 to Feb 1st 2026",
"columns": [
{ "key": "plant_batch_name", "label": "Plant Batch Name" },
{ "key": "batch_creation_date", "label": "Batch Creation Date" },
{ "key": "strain", "label": "Strain" },
{ "key": "plants_started", "label": "Plants Started" },
{ "key": "plants_promoted_to_veg", "label": "Plants Promoted to Veg" },
{ "key": "plants_destroyed", "label": "Plants Destroyed" },
{ "key": "plants_harvested", "label": "Plants Harvested" },
{ "key": "promoted_to_veg_date", "label": "Promoted to Veg Date" },
{ "key": "first_harvest_date", "label": "First Harvest Date" },
{ "key": "last_harvest_date", "label": "Last Harvest Date" },
{ "key": "days_as_batch", "label": "Days as Batch" },
{ "key": "days_veg_to_last_harvest", "label": "Days Veg to Last Harvest" },
{ "key": "total_lifecycle_days", "label": "Total Lifecycle Days" },
{ "key": "total_cost_batch_stage", "label": "Total Cost — Batch Stage" },
{ "key": "total_cost_veg_to_last_harvest", "label": "Total Cost — Veg to Last Harvest" },
{ "key": "destroyed_plant_cost", "label": "Destroyed Plant Cost" },
{ "key": "total_lifecycle_cost", "label": "Total Lifecycle Cost" },
{ "key": "harvest_name_s", "label": "Harvest Name(s)" }
]
}
}
Returns one row per plant batch (plant group) whose creation date falls in the reported range, summarizing its lifecycle: the batch name, creation date, strain, and the counts of plants started, promoted to vegetative, destroyed, and harvested. Each row also carries the promotion-to-veg date, first and last harvest dates, the durations spent as a batch, from veg to last harvest, and over the total lifecycle (in days), and the names of the harvests the batch produced. Only plant batches on active Metrc licenses that can track vegetative plants are included. When no date filter is provided, the report defaults to the last 30 days (by batch creation date). The cost columns are omitted for users without permission to view costs. Numeric cells are returned as numbers.
Required permission: reports_permissions_plant_lifecycle.
Request
GET /public/v1/reports/plant-lifecycle
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| datetime | Filter by plant batch creation date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
|
| strain | Filter by strain (partial match) | query | string | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Plant Lifecycle report | PlantLifecycleReport |
| 403 | Forbidden |
Get the Cultivation Transaction History report
GET /public/v1/reports/cultivation-transaction-history returns one row per cultivation transaction
GET /public/v1/reports/cultivation-transaction-history?datetime=2026-01-01T00:00:00Z,2026-02-01T00:00:00Z
content-type: application/json
accept: application/json
authorization: Bearer YOUR_API_TOKEN
Response
{
"data": [
{
"date": "01/15/2026",
"strain": "Blue Dream",
"batch_name": "Blue Dream 2026-01",
"plant_tag_s": "1A4FF0100000022000000101, 1A4FF0100000022000000102",
"product_name": "Blue Dream Flower",
"package_label_s": "1A4FF0100000022000000201",
"type": "Plant Batch Creation",
"related_entity": "Teardown #42",
"related_entity_status": "Completed",
"amount": 50,
"unit": "Unit",
"description": "Created from immature package",
"total_cost": 1200.0
}
],
"meta": {
"report": "cultivation_transaction_history",
"date_range": "Jan 1st 2026 to Feb 1st 2026",
"columns": [
{ "key": "date", "label": "Date" },
{ "key": "strain", "label": "Strain" },
{ "key": "batch_name", "label": "Batch Name" },
{ "key": "plant_tag_s", "label": "Plant Tag(s)" },
{ "key": "product_name", "label": "Product Name" },
{ "key": "package_label_s", "label": "Package Label(s)" },
{ "key": "type", "label": "Type" },
{ "key": "related_entity", "label": "Related Entity" },
{ "key": "related_entity_status", "label": "Related Entity Status" },
{ "key": "amount", "label": "Amount" },
{ "key": "unit", "label": "Unit" },
{ "key": "description", "label": "Description" },
{ "key": "total_cost", "label": "Total Cost" }
]
}
}
Returns one row per cultivation transaction over the reported date range, covering the full plant
lifecycle: plant batch creations, adjustments and splits, growth phase changes, plant moves,
destructions, additive applications, teardowns, harvests, waste, and packaging. Each row carries
the transaction's date, strain, batch name, plant tag(s), product name, package label(s), type,
the related entity (teardown or harvest) and its status, the signed amount and unit, and the
transaction's description. When no date filter is provided, the report defaults to the last 30
days. The total_cost column is omitted for users without permission to view costs. Numeric
cells are returned as numbers.
Required permission: reports_permissions_cultivation_transaction_history.
Request
GET /public/v1/reports/cultivation-transaction-history
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
| datetime | Filter by transaction date range (comma-separated ISO8601 range) | query | string | false | 2026-01-01T00:00:00Z,2026-02-01T00:00:00Z |
|
| transaction_type | Filter by a single transaction type | query | string | false | Move Plant(s) |
|
| strain | Filter by an exact strain name | query | string | false | ||
| plant_batch_ids | Filter by plant batch (plant group) IDs | query | array | false | ||
| license_ids | Filter by license IDs | query | array | false |
Responses
| Status | Description | Schema |
|---|---|---|
| 200 | The Cultivation Transaction History report | CultivationTransactionHistoryReport |
| 403 | Forbidden |
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
- Added GET
/public/v1/strainsendpoint. - In endpoint GET /public/v1/companies, added fields category and relationship to the response.
2024-11-6
- Field thc of type string in the Product object was replaced with total_thc field of type number.
- Field cbd of type string in the Product object was replaced with total_cbd field of type number.
- Added total_cannabinoid_unit field to Product object. Allowed values are either "MG" or "PERCENT".
2024-12-24
- Added billing_location_id to POST
/public/v1/purchasesendpoint.
2024-12-26
- Added msrp, is_active, category.type and images.rank to GET
/public/v1/products.
2025-01-08
- Added GET
/public/v1/payment-methodsendpoint.
2025-01-15
- Added POST
/public/v1/purchases/:id/paymentsendpoint. - Added POST
/public/v1/invoices/:id/paymentsendpoint.
2025-01-17
- Added
product_unit_quantityto GET/public/v1/packagesendpoint. - Added
product_unit_typeto GET/public/v1/packagesendpoint.
2025-01-31
- Added POST
/public/v1/batchesendpoint. - Added batch_number, product_id, owner_id and description to GET
/public/v1/batchesendpoint. - Added title and phone_number to GET
/public/v1/contactsendpoint.
2025-02-26
- Page size change from 50,000 to 5000 for the following endpoints:
- GET
/public/v1/batches - GET
/public/v1/companies - GET
/public/v1/contacts - GET
/public/v1/inventory - GET
/public/v1/packages - GET
/public/v1/products - GET
/public/v1/purchases
- GET
2025-08-19
- All GET endpoints now return eventually consistent data, with changes taking up to 1 second to propagate in responses
2025-03-05
- Added GET
/public/v1/assembliesendpoint.
2025-03-11
- Added
total_cost_actual,total_cost_defaultandreturned_quantityto "items" in GET/public/v1/invoicesendpoint. - Added
total_cost_actual,total_cost_defaultandreturned_quantityto "items" in GET/public/v1/invoices/:idendpoint. - Added
total_cost_actual,total_cost_defaultandreturned_quantityto "items" in GET/public/v1/ordersendpoint. - Added
total_cost_actual,total_cost_defaultandreturned_quantityto "items" in GET/public/v1/orders/:idendpoint.
2025-03-18
- Modified
unit_net_weightandunit_serving_sizein GET/public/v1/productsendpoint: These fields can now be populated regardless of the product's unit type.
2025-04-09
- Added the following fields to GET
/public/v1/companiesendpoint:legal_business_namedefault_emailphone_numberinvoice_emailsales_order_emailpurchase_order_emailorder_shipment_emailwebsitedefault_sales_order_notesdefault_purchase_order_notesoutstanding_balance_thresholdowner_id
2025-05-06
- Added
is_trade_sampleto GET/public/v1/packagesendpoint.
2025-05-13
- Added GET
/public/v1/adjustmentsendpoint.
2025-05-14
- Added
custom_datato the response of the following endpoints:- GET
/public/v1/assemblies - GET
/public/v1/batches - POST
/public/v1/batches - GET
/public/v1/companies - GET
/public/v1/contacts - GET
/public/v1/invoices - GET
/public/v1/invoices/:id - POST
/public/v1/invoices - GET
/public/v1/orders - GET
/public/v1/orders/:id - POST
/public/v1/orders - GET
/public/v1/packages - GET
/public/v1/products - POST
/public/v1/products - GET
/public/v1/purchases - POST
/public/v1/purchases
- GET
2025-05-15
- Added POST
/public/v1/stock_adjustmentsendpoint.
2025-05-16
- Added GET
/public/v1/test-results - Added POST
/public/v1/test-results
2025-05-18
- Added
leaflink_order_numberto GET/public/v1/orders
2025-05-22
- Added
external_nameto GET/POST/public/v1/products
2025-05-27
- Added
biotrack_idandmetrc_transfer_idto POST/public/v1/orders
2025-06-09
- Added POST
/public/v1/file-attachmentsendpoint for uploading files and attaching them to business entities (products, orders, purchases, etc.).
2025-06-12
- Added
metrc_transfer_idandbiotrack_idto GET/public/v1/orders
2025-06-12
- Changed
coston GET/public/v1/assembliestototal_cost_actualiningredients - Added
total_cost_defaultto GET/public/v1/assembliesiningredients - Added
total_cost_actualto GET/public/v1/assembliesinadditional_costs - Added
total_cost_defaultto GET/public/v1/assembliesinadditional_costs
2025-07-01
- Added
description_markdownto GET/POST/public/v1/products
2025-08-20
- Added GET
/public/v1/product-pos-mappingsendpoint - Added POST
/public/v1/product-pos-mappingsendpoint - Added DELETE
/public/v1/product-pos-mappings/:idendpoint
2025-08-21
- Added
groupto GET/public/v1/companies
2025-09-10
Added
cost_per_unit_actualandcost_per_unit_defaultto the following endpoints:- GET
public/v1/assemblies - GET
public/v1/orders - GET
public/v1/orders/:id - GET
public/v1/invoices - GET
public/v1/invoices/:id - GET
public/v1/batches - GET
public/v1/packages
- GET
Added fields
total_cost_actual,total_cost_defaultand attributeinclude_coststo the following endpoints:- GET
public/v1/batches - GET
public/v1/packages
- GET
2025-15-10
Added the following fields to
public/v1/inventorytotal_cost_actualtotal_cost_defaultcost_per_unit_actualcost_per_unit_default
2025-19-10
- Added
unit_costto the endpoint GETpublic/v1/products
2025-24-10
Added the following fields to
public/v1/productsunit_net_weight_serving_size_unit_typeunit_net_weightunit_serving_size
2026-01-19
Added the following endpoints:
- POST
public/v1/contacts - POST
public/v1/custom-fields
- POST
Added the following fields to
public/v1/adjustmentscompliance_unit_typeunit_type
Added the
batch_idsandlocation_idsfilter parameters to GETpublic/v1/inventory.Added the
product_idandbatch_numberfilter parameters to GETpublic/v1/batches.Added the
product_namefilter parameter to GETpublic/v1/products.Added the
product_idsfilter parameter to GETpublic/v1/packages.
2026-01-21
- Added the
manufactured_datetimefield to GETpublic/v1/batchesand POSTpublic/v1/batches. - Added the
assembly_numberandestimated_start_datefields to GETpublic/v1/assemblies. - Added the
reservedfield to GETpublic/v1/inventory.
2026-01-23
- Added the
deleted_atfield and thedeletedfilter parameter to the following endpoints:- GET
public/v1/batches(breaking change: deleted batches are no longer returned by default) - GET
public/v1/companies - GET
public/v1/contacts - GET
public/v1/locations - GET
public/v1/payment_methods - GET
public/v1/products(breaking change: deleted products are no longer returned by default) - GET
public/v1/users
- GET
- Added
estimated_departure_datetimeandestimate_arrival_datetimetometrc_transfer_template_transporter_infofield in POSTpublic/v1/orders.- Added automatic estimated departure / arrival calculations for transporters such that, if left blank, the fields will be populated with the first departure estimate being the time that the template was sent to Metrc, the drive time for each transporter being 1 hour, and the departure of the next transporter being the arrival time of the previous transporter.
- Modified Destination estimated departure / arrival times to be the first departure and the last arrival of the specified transporters.
2026-02-10
- Added the
payment_terms_namefield to GETpublic/v1/orders
2026-02-12
- Added the
completion_datetimeas a query parameter to GETpublic/v1/adjustments - Added the
inserted_atfield topublic/v1/adjustments
2026-02-13
- Added
batch_ids[]query parameter to GET/public/v1/batchesendpoint to filter batches by batch IDs.
2026-03-10
- Added
POST /public/v1/products/{id}/imagesendpoint - Added
POST /public/v1/companiesendpoint
2026-03-27
- Removed
POST /public/v1/products/{id}/imagesendpoint
2026-05-01
- Added
custom_datafield to POST/public/v1/productsendpoint
2026-05-06
- Added
menu_idandmenu_namefilter parameters to GET/public/v1/productsendpoint
2026-05-11
- Added
lab_testing_statefield to GET/public/v1/packagesendpoint - Added support for non-admin users to use the API.
- Added permission checks to most controllers.
2026-05-17
- Added
company_idfilter parameter to GET/public/v1/ordersendpoint - Added GET
/public/v1/menusendpoint
2026-05-25
- Added GET
/public/v1/returnsendpoint
2026-05-28
- Added ability to fetch by /id on most endpoints
2026-06-08
- Added GET/POST
/public/v1/custom-fieldsendpoint - Added GET/POST
/public/v1/vehiclesendpoint - Added GET/POST
/public/v1/strains/:idendpoint - Added
license_numberandinventory_sourceto order responses - Added
custom_datato POST/public/v1/ordersendpoint
2026-06-23
- Added
quickbooks_sync_enqueuedfield to the response of POST/public/v1/invoices/{id}/payments.
2026-06-29
- Added
gross_weightandgross_weight_unit_typefields to GET and POST/public/v1/products.