Skip to main content

โš™๏ธ getProductVariants() Options

Complete reference for all available options when using getProductVariants().


๐Ÿ” Required Optionsโ€‹

variantIds (required)โ€‹

  • Type: string[]
  • Description: Array of Shopify variant IDs to fetch
  • Format: ["gid://shopify/ProductVariant/123456789", "gid://shopify/ProductVariant/987654321"]
await getProductVariants({
variantIds: [
"gid://shopify/ProductVariant/123456789",
"gid://shopify/ProductVariant/987654321",
"gid://shopify/ProductVariant/456789123",
],
});

๐Ÿ“Š Field Selectionโ€‹

productFieldsโ€‹

  • Type: string[]
  • Default: ["id", "title", "handle"]
  • Description: Additional product fields to include beyond defaults

Available Fields:

  • "vendor" - Product vendor/brand
  • "productType" - Product type category
  • "tags" - Product tags array
  • "descriptionHtml" - Product description HTML
  • "description" - Product description plain text
  • "images" - All product images
  • "featuredImage" - Featured product image
  • "variants" - All product variants
  • "seo" - SEO title and description
  • "createdAt" - Creation timestamp
  • "updatedAt" - Last update timestamp
await getProductVariants({
variantIds: ["gid://shopify/ProductVariant/123456789"],
productFields: [
"vendor",
"productType",
"tags",
"descriptionHtml",
"images",
"variants",
"seo",
],
});

variantFieldsโ€‹

  • Type: string[]
  • Default: ["id", "title"]
  • Description: Additional variant fields to include beyond defaults

Available Fields:

  • "price" - Variant price
  • "compareAtPrice" - Compare at price
  • "availableForSale" - Availability status
  • "selectedOptions" - Selected option values
  • "image" - Variant-specific image
  • "sku" - SKU identifier
  • "barcode" - Barcode value
  • "weight" - Variant weight
  • "weightUnit" - Weight unit
  • "requiresShipping" - Shipping requirement
  • "taxable" - Tax status
  • "inventoryQuantity" - Inventory count
  • "inventoryPolicy" - Inventory policy
await getProductVariants({
variantIds: ["gid://shopify/ProductVariant/123456789"],
variantFields: [
"price",
"compareAtPrice",
"availableForSale",
"selectedOptions",
"image",
"sku",
"weight",
],
});

๐Ÿท๏ธ Metafieldsโ€‹

productMetafieldsโ€‹

  • Type: CustomMetafieldDefinition[]
  • Description: Product metafields to include in results

variantMetafieldsโ€‹

  • Type: CustomMetafieldDefinition[]
  • Description: Variant metafields to include in results
await getProductVariants({
variantIds: ["gid://shopify/ProductVariant/123456789"],
productMetafields: [
{ field: "custom.brand", type: "single_line_text" },
{ field: "custom.warranty_years", type: "number_integer" },
{ field: "custom.specifications", type: "rich_text" },
],
variantMetafields: [
{ field: "custom.sku", type: "single_line_text" },
{ field: "custom.weight", type: "weight" },
{ field: "custom.dimensions", type: "single_line_text" },
],
});

CustomMetafieldDefinitionโ€‹

interface CustomMetafieldDefinition {
field: string; // e.g., "custom.brand"
type: MetafieldType; // e.g., "single_line_text"
}

Supported Metafield Types:

  • "single_line_text"
  • "multi_line_text"
  • "rich_text"
  • "number_integer"
  • "number_decimal"
  • "date"
  • "date_time"
  • "boolean"
  • "url"
  • "json"
  • "color"
  • "weight"
  • "volume"
  • "dimension"
  • "rating"
  • "file_reference"
  • "page_reference"
  • "product_reference"
  • "variant_reference"
  • "collection_reference"

๐Ÿ”ง Processing Optionsโ€‹

optionsโ€‹

  • Type: object
  • Description: Additional processing options
await getProductVariants({
variantIds: ["gid://shopify/ProductVariant/123456789"],
options: {
camelizeKeys: true,
resolveFiles: true,
renderRichTextAsHtml: true,
transformProductMetafields: (raw, casted) => ({
...casted,
summary: `${casted["custom.brand"]} - ${casted["custom.model"]}`,
}),
transformVariantMetafields: (raw, casted) => ({
...casted,
displayName: `${casted["custom.sku"]} (${casted["custom.weight"]})`,
}),
},
});

Processing Options Details:โ€‹

camelizeKeys

  • Type: boolean
  • Default: true
  • Description: Convert metafield keys from custom.field_name to customFieldName

resolveFiles

  • Type: boolean
  • Default: true
  • Description: Automatically resolve file metafields to full URLs

renderRichTextAsHtml

  • Type: boolean
  • Default: false
  • Description: Convert rich text metafields to HTML strings

transformProductMetafields

  • Type: MetafieldTransformFn
  • Description: Custom function to transform product metafields

transformVariantMetafields

  • Type: MetafieldTransformFn
  • Description: Custom function to transform variant metafields

MetafieldTransformFnโ€‹

type MetafieldTransformFn = (
raw: Record<string, any>,
casted: Record<string, any>
) => Record<string, any>;

๐Ÿงช Complete Exampleโ€‹

const result = await getProductVariants({
variantIds: [
"gid://shopify/ProductVariant/123456789",
"gid://shopify/ProductVariant/987654321",
"gid://shopify/ProductVariant/456789123",
],
productFields: [
"vendor",
"productType",
"tags",
"descriptionHtml",
"images",
"variants",
"seo",
],
variantFields: [
"price",
"compareAtPrice",
"availableForSale",
"selectedOptions",
"image",
"sku",
"weight",
],
productMetafields: [
{ field: "custom.brand", type: "single_line_text" },
{ field: "custom.warranty_years", type: "number_integer" },
{ field: "custom.specifications", type: "rich_text" },
],
variantMetafields: [
{ field: "custom.sku", type: "single_line_text" },
{ field: "custom.weight", type: "weight" },
{ field: "custom.color_code", type: "color" },
],
options: {
camelizeKeys: true,
resolveFiles: true,
renderRichTextAsHtml: true,
transformProductMetafields: (raw, casted) => ({
...casted,
displayBrand: casted.customBrand?.toUpperCase(),
warrantyText: `${casted.customWarrantyYears} year warranty`,
}),
transformVariantMetafields: (raw, casted) => ({
...casted,
displayWeight: `${casted.customWeight?.value} ${casted.customWeight?.unit}`,
}),
},
});

๐Ÿ”„ Bulk Operationsโ€‹

Since getProductVariants() handles multiple variants, consider these performance tips:

Batch Size Recommendationsโ€‹

// Good: Reasonable batch size
const variantIds = ["variant1", "variant2", "variant3"]; // 3-10 variants

// Avoid: Too many variants in one request
const tooManyVariants = Array.from({ length: 100 }, (_, i) => `variant${i}`);

Efficient Field Selectionโ€‹

// Only request fields you actually need
await getProductVariants({
variantIds: cartItemIds,
variantFields: ["price", "availableForSale"], // Minimal for cart validation
productFields: ["title"], // Just need product name
});

Error Handling for Bulk Operationsโ€‹

const result = await getProductVariants({
variantIds: ["valid_id", "invalid_id", "another_valid_id"],
});

// Some variants might fail while others succeed
result.variants.forEach((item, index) => {
if (item.variant && item.product) {
console.log(`Variant ${index}: Success`);
} else {
console.log(`Variant ${index}: Failed to fetch`);
}
});

โœ… Back to: Overview โ†’