Contents

GET [/instances/$INSTANCE]/private/products/$PRODUCT_ID#

This is used to obtain detailed information about a product in the inventory.

Required permission: products-read

Response:

200 OK:

The backend has successfully returned the inventory. Returns a ProductDetailResponse.

404 Not found:

The product (ID) is unknown to the backend.

Details:

interface ProductDetailResponse {

  // Human-readable product name.
  // Since API version **v20**.
  product_name: string;

  // Human-readable product description.
  description: string;

  // Map from IETF BCP 47 language tags to localized descriptions.
  description_i18n: { [lang_tag: string]: string };

  // Unit in which the product is measured (liters, kilograms, packages, etc.).
  unit: string;

  // Does the backend allow fractional quantities for this unit?
  unit_allow_fraction: boolean;

  // Maximum fractional precision (0-6) enforced for inventory operations.
  unit_precision_level: Integer;

  // Categories into which the product belongs.
  // Since API version **v16**.
  categories: Integer[];

  // Price tiers for this product. The first entry represents the base price and MUST include
  // applicable taxes. Zero implies the product is not sold separately or that the price is not
  // fixed, and must be supplied by the front-end.
  unit_price: Amount[];

  // Legacy price field kept for compatibility.
  // Deprecated since **v25**;
  // equal to the first element of unit_price.
  price: Amount;

  // An optional base64-encoded product image.
  image: ImageDataUrl;

  // A list of taxes paid by the merchant for one unit of this product.
  // Optional since **v15**.
  taxes?: Tax[];

  // True if the price(s) given are a net prices, false if they are
  // gross prices.
  // Since protocol **vTAXES**.
  price_is_net: boolean;

  // Legacy integer stock counter kept for compatibility. -1 indicates unlimited stock.
  total_stock: Integer;

  // Stock expressed using "<integer>[.<fraction>]" syntax with up to six fractional digits.
  // Use "-1" for unlimited stock.
  unit_total_stock: DecimalQuantity;

  // Number of units of the product that have already been sold.
  total_sold: Integer;

  // Number of units of the product that were lost (spoiled, stolen, etc.).
  total_lost: Integer;

  // Identifies where the product is in stock.
  // Optional since **v15**.
  address?: Location;

  // Identifies when we expect the next restocking to happen.
  next_restock?: Timestamp;

  // Minimum age buyer must have (in years).
  minimum_age?: Integer;

  // Product group the product belongs to. Missing means default.
  // Since **v25**.
  product_group_id?: Integer;

  // Money pot revenue on the product should be accounted in.
  // Missing means no money pot (revenue accounted
  // in money pot of the overall order or not at all).
  // Since **v25**.
  money_pot_id?: Integer;

}