DashForDevsDocs
DocsNewsAPI v1
dashfordevs.comSign in

© 2026 DashForDevs

DocsNewsdashfordevs.comLegalStatus
DocsProductsProduct Variations & Sizes
Introduction
Getting Started
Authentication
Products
List ProductsGet Product by SlugProduct Variations & SizesSearch & FiltersCore & Options (Split Endpoints)Variation-as-Product PagesFreestyle BundlesProduct FilesProducts in Multiple Categories
Categories
Cart
Checkout
Blog
Reviews
Webhooks
Customers
Orders
Inventory
Shipping
Discounts
Affiliates
Email
Media & Files
Analytics & Tracking
Locations
Tax
Global Data
SEO
Error Handling
Geography
Finance
Automations
Page Types
Surveys
Billing & Subscriptions
Storefront Payments
SDK Reference
REST API
Storefront Architecture
Notifications
Security
Team & Permissions
Migrations & Import
Calendar & Appointments
Contact Forms
AI Bots
Dashboard API
Deployment
Changelog
Troubleshooting
Recipes
CLI & Deployment
Image Pipeline
White-label Platforms
Records Engine
Platform Modules
Platform Security
Site Keys & Client Sites
Use Cases
Operations

Product Variations & Sizes

Work with product variants, sizes, and pricing.

Updated March 29, 2026

On this page
  • Overview
  • Structure
  • Fetching Options
  • Building a Variation Picker
  • Bulk Discounts
  • Featured Variations
  • Next Steps

Overview

Products in DashForDevs can have a multi-level variant structure: Attributes → Options → Sizes. This lets you model complex product configurations like strains with multiple weight options.

Structure

Product
  └── Attribute (e.g. "Strain")
        └── Option (e.g. "Blue Dream")
              └── Size (e.g. "1g" at $29.99)
              └── Size (e.g. "3.5g" at $89.99)
        └── Option (e.g. "OG Kush")
              └── Size (e.g. "1g" at $34.99)

If a product has no attributes, it will have sizes directly at the product level via main_size.

Fetching Options

typescript
import dash from "@/lib/dash"

const { options } = await dash.products.getOptions("blue-dream")

// options.variations = attributes array
// Each attribute has options, each option has sizes

Building a Variation Picker

typescript
"use client"
import { useState, useEffect } from "react"
import dash from "@/lib/dash"

export function VariationPicker({ slug }: { slug: string }) {
  const [options, setOptions] = useState(null)
  const [selectedOption, setSelectedOption] = useState(null)
  const [selectedSize, setSelectedSize] = useState(null)

  useEffect(() => {
    dash.products.getOptions(slug).then(({ options }) => {
      setOptions(options)
      // Auto-select the main (default) option
      const mainOption = options.variations?.[0]?.options?.find(o => o.main)
      if (mainOption) {
        setSelectedOption(mainOption)
        setSelectedSize(mainOption.sizes?.[0])
      }
    })
  }, [slug])

  if (!options) return <div>Loading...</div>

  return (
    <div>
      {/* Option buttons */}
      {options.variations?.[0]?.options.map(opt => (
        <button key={opt.id} onClick={() => {
          setSelectedOption(opt)
          setSelectedSize(opt.sizes[0])
        }}>
          {opt.value}
        </button>
      ))}

      {/* Size buttons */}
      {selectedOption?.sizes.map(size => (
        <button key={size.id} onClick={() => setSelectedSize(size)}>
          {size.label} — ${size.discounted_price || size.price}
        </button>
      ))}

      {/* Add to cart */}
      <button onClick={() => dash.cart.add({
        productId: "prod_...",
        sizeId: selectedSize.id,
        quantity: 1
      })}>Add to Cart</button>
    </div>
  )
}

Bulk Discounts

Sizes can have quantity-based bulk discounts:

json
{
  "bulk_discounts": [
    { "min_quantity": 3, "discount_type": "percentage", "discount_value": "5" },
    { "min_quantity": 5, "discount_type": "percentage", "discount_value": "10" },
    { "min_quantity": 10, "discount_type": "percentage", "discount_value": "15" }
  ]
}

Display these on the product page to encourage larger orders.

Featured Variations

Get variations marked as featured across all products:

typescript
const { variations } = await dash.products.getFeaturedVariations()
// Great for homepage featured sections

Next Steps

  • Add to Cart — Adding a specific size to the cart
  • Search & Filters — Finding products
  • Stock Management — Understanding inventory levels
PreviousGet Product by SlugNextSearch & Filters

On this page

  • Overview
  • Structure
  • Fetching Options
  • Building a Variation Picker
  • Bulk Discounts
  • Featured Variations
  • Next Steps