Hanzo
CommerceAdmin Dashboard

Product Management

Create and manage products, variants, collections, and inventory in the admin dashboard

The product management section of the admin dashboard provides a complete interface for creating, editing, and organizing your product catalog.

Product List

The product list view displays all products with:

  • Thumbnail, name, and status (draft, published, archived)
  • Price, inventory count, and variant count
  • Quick filters by status, collection, and tags
  • Full-text search across product names, descriptions, and SKUs
  • Bulk actions for publishing, archiving, and deleting

Creating a Product

Navigate to Products > New Product to open the product editor.

Basic Information

FieldDescription
NameDisplay name shown to customers
SlugURL-friendly identifier (auto-generated from name)
DescriptionRich text description with markdown support
Statusdraft, published, or archived
TagsFreeform tags for filtering and search

Pricing

Set the base price and compare-at price for each product:

await sdk.admin.product.create({
  name: 'Premium T-Shirt',
  slug: 'premium-t-shirt',
  price: 2999,           // $29.99 in cents
  compareAtPrice: 3999,  // Original price for sale display
  currency: 'USD',
  taxable: true,
})

All prices are stored in the smallest currency unit (cents for USD, pence for GBP). The admin dashboard formats them automatically.

Options and Variants

Options define the dimensions of variation (e.g. Size, Color). Variants are the purchasable combinations.

  1. Add options in the Options section (e.g. Size: S, M, L, XL)
  2. The dashboard automatically generates all variant combinations
  3. Edit individual variants to set specific prices, SKUs, and images
await sdk.admin.product.create({
  name: 'Premium T-Shirt',
  price: 2999,
  currency: 'USD',
  options: [
    { name: 'Size', values: ['S', 'M', 'L', 'XL'] },
    { name: 'Color', values: ['Black', 'White', 'Navy'] },
  ],
})
// Creates 12 variants (4 sizes x 3 colors)

Images

Upload product images by dragging files into the image area or clicking to browse. Features:

  • Drag-and-drop reordering
  • Alt text for accessibility
  • Automatic CDN upload and optimization
  • Assign images to specific variants
// Upload an image to a product
await sdk.admin.upload.create({
  file: imageFile,
  entityType: 'product',
  entityId: 'prod_abc123',
})

Inventory Management

Each variant tracks its own inventory:

FieldDescription
SKUStock keeping unit identifier
BarcodeUPC, EAN, or ISBN
QuantityCurrent stock count
Allow backordersAccept orders when out of stock
Low stock thresholdAlert when quantity falls below this

Update inventory from the variant detail view or in bulk:

// Update inventory for a variant
await sdk.admin.inventory.update('inv_abc123', {
  quantity: 50,
  allowBackorders: false,
  lowStockThreshold: 5,
})

// Bulk adjust inventory
await sdk.admin.inventory.batchUpdate([
  { variantId: 'var_001', adjustment: -3 },
  { variantId: 'var_002', adjustment: 10 },
])

Pricing Rules

Override base pricing with rules for specific contexts:

  • Region-based pricing -- different prices per region or currency
  • Customer group pricing -- wholesale or VIP pricing tiers
  • Volume pricing -- quantity-based discounts
  • Sale pricing -- time-limited price overrides
await sdk.admin.pricing.createRule({
  productId: 'prod_abc123',
  type: 'volume',
  rules: [
    { minQuantity: 10, price: 2499 },
    { minQuantity: 50, price: 1999 },
    { minQuantity: 100, price: 1499 },
  ],
})

Collections

Collections group products for merchandising and navigation.

Manual Collections

Add specific products by hand:

await sdk.admin.collection.create({
  name: 'Summer Sale',
  slug: 'summer-sale',
  type: 'manual',
  products: ['prod_abc123', 'prod_def456'],
})

Automated Collections

Define rules to automatically include matching products:

await sdk.admin.collection.create({
  name: 'Under $20',
  slug: 'under-20',
  type: 'automated',
  rules: [
    { field: 'price', operator: 'lt', value: 2000 },
    { field: 'status', operator: 'eq', value: 'published' },
  ],
})

Import and Export

CSV Import

Navigate to Products > Import to upload a CSV file. The expected format:

name,slug,price,currency,sku,quantity,option1_name,option1_value,option2_name,option2_value
"Premium T-Shirt","premium-t-shirt",2999,"USD","TSH-BLK-M",50,"Color","Black","Size","M"
"Premium T-Shirt","premium-t-shirt",2999,"USD","TSH-WHT-L",30,"Color","White","Size","L"

CSV Export

Export your catalog from Products > Export. Choose:

  • All products or filtered selection
  • Include variants and inventory data
  • Include images and metadata
// Programmatic export
const csv = await sdk.admin.product.export({
  format: 'csv',
  includeVariants: true,
  includeInventory: true,
})

Large imports (over 1,000 rows) are processed asynchronously. You will receive a notification when the import completes.

How is this guide?

Last updated on

On this page