Get a product

distru-get-productRead

Gets one product with its pricing, costs, stock levels, potency, strain, brand, vendor and menus.

Inputs

Every tool also takes the common inputs.

FieldTypeRequiredDescription
idstringYesResolve via distru-search-products.
includeImagesbooleanNo
includeTagsbooleanNo
includeActiveQuantitiesByLocationbooleanNoActive quantity per location, in the product's unit type.
includeActiveQuantityCostItemsbooleanNoactiveQuantityCostItems: the costs that make up activeQuantityCost, oldest first; null when none is recorded or the caller cannot view cost details. Costs carry over from inputs, so recordedOn can be an upstream package, batch, product, harvest, plant or plant batch rather than this product; MULTIPLE_PLANTS is a cost split over several plants or plant batches, NONE one tied to no inventory. quantity is the share that went into this product, out of costQuantity; both in unitType. totalCost is quantity × costPerUnit; both null when no cost per unit is recorded or the caller cannot see it. costType is null for purchase costs and costs Distru records itself; origin.purchaseOrder and origin.assembly are null when team restrictions hide them.
includeBillOfMaterialsbooleanNoWhat one unit of this product takes; null when none. inputs[].quantity is per unit of this product, in inputs[].unitType. An input is a fixed product or anyProductMatching: any product meeting every listed condition (any entry within a list; absent key sets no condition) whose unit type shares unitType's category (count, volume or weight), its quantity converted to unitType. unitType null only when the input's unit type was deleted; each matching product's quantity is then in its own unit type. costs[].quantity is the cost type's quantity per unit of this product.

Output

Presence on a nested field assumes its parent exists.

FieldTypePresence
productobjectNull or absent
product.idstringAlways
product.customFieldsobject[]Always
product.customFields[].customFieldobjectAlways
product.customFields[].customField.idstringAlways
product.customFields[].customField.namestringAlways
product.customFields[].customField.fieldTypeenum
CHECKBOXDATEDROPDOWNTEXT
Always
product.customFields[].valuestringCan be null
product.namestringAlways
product.externalNamestringCan be null
product.skustringAlways
product.upcstringCan be null
product.descriptionstringCan be null
product.descriptionMarkdownstringCan be null
product.isInactivebooleanAlways
product.isFeaturedbooleanAlways
product.maxMenuBuyerOrderQuantitynumberCan be null
product.inventoryTrackingMethodenum
BATCHPACKAGEPRODUCT
Always
product.unitCoststringCan be null
product.activeQuantityCoststringCan be null
product.unitPricestringAlways
product.wholesaleUnitPricestringCan be null
product.msrpstringCan be null
product.unitsPerCasestringCan be null
product.totalThcstringCan be null
product.totalCbdstringCan be null
product.totalCannabinoidUnitenum
MGPERCENT
Can be null
product.quantityActivestringAlways
product.quantityActivePassedTestingstringCan be null
product.quantityAvailablestringAlways
product.quantityIncomingstringAlways
product.quantityReservedstringAlways
product.quantityPendingOutputstringAlways
product.quantityAvailableThresholdMinstringCan be null
product.quantityAvailableThresholdMaxstringCan be null
product.unitNetWeightstringCan be null
product.unitServingSizestringCan be null
product.unitNetWeightAndServingSizeUnitTypeobjectCan be null
product.unitNetWeightAndServingSizeUnitType.idstringAlways
product.unitNetWeightAndServingSizeUnitType.namestringAlways
product.grossWeightstringCan be null
product.grossWeightUnitTypeobjectCan be null
product.grossWeightUnitType.idstringAlways
product.grossWeightUnitType.namestringAlways
product.menuVisibilityenum
DO_NOT_INCLUDEINCLUDE_IN_ALLINCLUDE_IN_SELECT
Always
product.menusobject[]Always
product.menus[].idstringAlways
product.menus[].namestringAlways
product.thumbnailImageUrlstringAlways
product.urlstringAlways
product.insertedAtstringAlways
product.updatedAtstringAlways
product.categoryobjectCan be null
product.category.idstringAlways
product.category.namestringAlways
product.subcategoryobjectCan be null
product.subcategory.idstringAlways
product.subcategory.namestringAlways
product.groupobjectCan be null
product.group.idstringAlways
product.group.namestringAlways
product.unitTypeobjectAlways
product.unitType.idstringAlways
product.unitType.namestringAlways
product.strainobjectCan be null
product.strain.idstringAlways
product.strain.namestringAlways
product.brandobjectNull or absent
product.brand.idstringAlways
product.brand.namestringNull or absent
product.vendorobjectNull or absent
product.vendor.idstringAlways
product.vendor.namestringNull or absent
product.ownerobjectCan be null
product.owner.idstringAlways
product.owner.profileobjectAlways
product.owner.profile.fullNamestringAlways
product.quickbooksSalesItemobjectCan be null
product.quickbooksSalesItem.idstringAlways
product.quickbooksSalesItem.namestringAlways
product.quickbooksPurchaseItemobjectCan be null
product.quickbooksPurchaseItem.idstringAlways
product.quickbooksPurchaseItem.namestringAlways
product.imagesobject[]Can be absent
product.images[].idstringAlways
product.images[].namestringAlways
product.images[].ranknumberAlways
product.images[].urlOriginalstringAlways
product.tagsobject[]Can be absent
product.tags[].idstringAlways
product.tags[].namestringAlways
product.billOfMaterialsobjectNull or absent
product.billOfMaterials.namestringAlways
product.billOfMaterials.descriptionstringCan be null
product.billOfMaterials.inputsobject[]Always
product.billOfMaterials.inputs[].quantitystringAlways
product.billOfMaterials.inputs[].unitTypeobjectCan be null
product.billOfMaterials.inputs[].unitType.idstringAlways
product.billOfMaterials.inputs[].unitType.namestringAlways
product.billOfMaterials.inputs[].productobjectCan be null
product.billOfMaterials.inputs[].product.idstringAlways
product.billOfMaterials.inputs[].product.namestringAlways
product.billOfMaterials.inputs[].product.skustringCan be null
product.billOfMaterials.inputs[].anyProductMatchingobjectCan be null
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductCategoriesobject[]Can be absent
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductCategories[].idstringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductCategories[].namestringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductSubcategoriesobject[]Can be absent
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductSubcategories[].idstringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductSubcategories[].namestringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductGroupsobject[]Can be absent
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductGroups[].idstringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductGroups[].namestringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductStrainsobject[]Can be absent
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductStrains[].idstringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductStrains[].namestringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductTagsobject[]Can be absent
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductTags[].idstringAlways
product.billOfMaterials.inputs[].anyProductMatching.oneOfProductTags[].namestringAlways
product.billOfMaterials.costsobject[]Always
product.billOfMaterials.costs[].costTypeobjectAlways
product.billOfMaterials.costs[].costType.idstringAlways
product.billOfMaterials.costs[].costType.namestringAlways
product.billOfMaterials.costs[].quantitystringAlways
product.billOfMaterials.costs[].descriptionstringCan be null
product.activeQuantitiesByLocationobject[]Can be absent
product.activeQuantitiesByLocation[].locationobjectAlways
product.activeQuantitiesByLocation[].location.idstringAlways
product.activeQuantitiesByLocation[].location.namestringAlways
product.activeQuantitiesByLocation[].quantitystringAlways
product.activeQuantityCostItemsobject[]Null or absent
product.activeQuantityCostItems[].namestringAlways
product.activeQuantityCostItems[].descriptionstringCan be null
product.activeQuantityCostItems[].costTypeobjectCan be null
product.activeQuantityCostItems[].costType.idstringAlways
product.activeQuantityCostItems[].costType.namestringAlways
product.activeQuantityCostItems[].createdByobjectCan be null
product.activeQuantityCostItems[].createdBy.idstringAlways
product.activeQuantityCostItems[].createdBy.fullNamestringAlways
product.activeQuantityCostItems[].insertedAtstringAlways
product.activeQuantityCostItems[].originobjectAlways
product.activeQuantityCostItems[].origin.typeenum
ASSEMBLYBIOTRACK_ADJUSTMENTBIOTRACK_MANIFEST_RECEIVEDBREAKDOWNCOST_ENTRYMETRC_ADJUSTMENTMETRC_TRANSFER_RECEIVEDOTHERPACKAGE_IMPORTPLANT_BATCH_PACKAGINGPURCHASE_ORDERSTOCK_ADJUSTMENT
Always
product.activeQuantityCostItems[].origin.purchaseOrderobjectCan be null
product.activeQuantityCostItems[].origin.purchaseOrder.idstringAlways
product.activeQuantityCostItems[].origin.purchaseOrder.purchaseNumberstringAlways
product.activeQuantityCostItems[].origin.assemblyobjectCan be null
product.activeQuantityCostItems[].origin.assembly.idstringAlways
product.activeQuantityCostItems[].origin.assembly.numberstringAlways
product.activeQuantityCostItems[].origin.breakdownobjectCan be null
product.activeQuantityCostItems[].origin.breakdown.breakdownNumberstringCan be null
product.activeQuantityCostItems[].recordedOnobjectAlways
product.activeQuantityCostItems[].recordedOn.typeenum
PACKAGEBATCHPRODUCTHARVESTPLANTPLANT_BATCHMULTIPLE_PLANTSNONE
Always
product.activeQuantityCostItems[].recordedOn.productobjectCan be null
product.activeQuantityCostItems[].recordedOn.product.idstringAlways
product.activeQuantityCostItems[].recordedOn.product.namestringAlways
product.activeQuantityCostItems[].recordedOn.product.skustringAlways
product.activeQuantityCostItems[].recordedOn.packageobjectCan be null
product.activeQuantityCostItems[].recordedOn.package.idstringAlways
product.activeQuantityCostItems[].recordedOn.package.metrcLabelstringAlways
product.activeQuantityCostItems[].recordedOn.batchobjectCan be null
product.activeQuantityCostItems[].recordedOn.batch.idstringAlways
product.activeQuantityCostItems[].recordedOn.batch.namestringAlways
product.activeQuantityCostItems[].recordedOn.harvestobjectCan be null
product.activeQuantityCostItems[].recordedOn.harvest.namestringAlways
product.activeQuantityCostItems[].recordedOn.plantobjectCan be null
product.activeQuantityCostItems[].recordedOn.plant.labelstringCan be null
product.activeQuantityCostItems[].recordedOn.plant.strainNamestringCan be null
product.activeQuantityCostItems[].recordedOn.plantBatchobjectCan be null
product.activeQuantityCostItems[].recordedOn.plantBatch.namestringAlways
product.activeQuantityCostItems[].recordedOn.plantBatch.strainNamestringCan be null
product.activeQuantityCostItems[].recordedOn.multiplePlantsobjectCan be null
product.activeQuantityCostItems[].recordedOn.multiplePlants.summarystringAlways
product.activeQuantityCostItems[].recordedOn.multiplePlants.detailsstringAlways
product.activeQuantityCostItems[].quantitystringAlways
product.activeQuantityCostItems[].costQuantitystringAlways
product.activeQuantityCostItems[].unitTypeobjectAlways
product.activeQuantityCostItems[].unitType.idstringAlways
product.activeQuantityCostItems[].unitType.namestringAlways
product.activeQuantityCostItems[].costPerUnitstringCan be null
product.activeQuantityCostItems[].totalCoststringCan be null
What the AI reads

Gets one product by ID with full detail: pricing, costs, inventory quantities and stock levels, potency, weights, classification, unit type, strain, brand, vendor, owner and menu placement. Images, tags, active quantity per location, the cost breakdown and the bill of materials are left out unless you pass includeImages, includeTags, includeActiveQuantitiesByLocation, includeActiveQuantityCostItems or includeBillOfMaterials. Use for a specific product after resolving its ID via distru-search-products; to browse or search products use distru-search-products. unitCost is the default cost per unit; activeQuantityCost is the total cost of the active quantity, not per unit, null when none is recorded or the caller cannot view costs. quantityActivePassedTesting is the part of the active quantity in packages whose lab test passed; null for batch- and product-tracked products. The cost breakdown is null for batch-tracked and package-tracked products; use distru-get-batch or distru-get-package for those. quantityAvailableThresholdMin/Max are the minimum and maximum stock levels, null when unset; an available quantity below the minimum is low inventory. unitNetWeight and unitServingSize are per unit, in unitNetWeightAndServingSizeUnitType. vendor is the company the product is purchased from. menus lists every menu the product is on; menuVisibility INCLUDE_IN_ALL can still be off some menus. quickbooksSalesItem / quickbooksPurchaseItem null = no QuickBooks item of its own: its lines sync through the company's default item. Null if no product matches the ID; a permission error if the caller can't view it.