# Update Product Variants PATCH https://api.shipbob.com/2026-01/product/{productId}/variants Content-Type: application/json Updates one or more product variants. The request body must be an array of variant objects. Each variant must include the variant ID, and only the fields provided will be updated. Reference: https://developer.shipbob.com/api/products/update-product-variants ## OpenAPI Specification ```yaml openapi: 3.1.0 info: title: api-2026-01 version: 1.0.0 paths: /2026-01/product/{productId}/variants: patch: operationId: update-product-variants summary: Update Product Variants description: >- Updates one or more product variants. The request body must be an array of variant objects. Each variant must include the variant ID, and only the fields provided will be updated. tags: - subpackage_products parameters: - name: productId in: path description: '' required: true schema: type: string format: int64 - name: Authorization in: header description: Authentication using Personal Access Token (PAT) token or OAuth2 required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Products.VariantViewModelV5Array' requestBody: content: application/json: schema: $ref: '#/components/schemas/Products.UpdateProductVariantModelV5' servers: - url: https://api.shipbob.com - url: https://sandbox-api.shipbob.com components: schemas: Products.BaseAdditionalHazmatAttributesModel: type: object properties: charge_state_percentage: type: - number - 'null' format: double container_metal: type: - boolean - 'null' container_type: type: - string - 'null' lithium_battery_packaging: type: - string - 'null' lithium_battery_type: type: - string - 'null' magnet: type: - boolean - 'null' net_volume: type: - number - 'null' format: double net_weight: type: - number - 'null' format: double title: Products.BaseAdditionalHazmatAttributesModel Products.BaseBundleDefinitionModel: type: object properties: quantity: type: integer variant_id: type: integer format: int64 title: Products.BaseBundleDefinitionModel Products.AmazonProductChannelMetadataModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: - integer - 'null' format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' asin: type: - string - 'null' fnsku: type: - string - 'null' fulfillment_channel: type: - string - 'null' title: Products.AmazonProductChannelMetadataModel Products.BaseProductChannelMetadataModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: - integer - 'null' format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' title: Products.BaseProductChannelMetadataModel Products.BigCommerceProductChannelMetadataModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: - integer - 'null' format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' platform_product_id: type: - integer - 'null' format: int64 platform_variant_id: type: - integer - 'null' format: int64 title: Products.BigCommerceProductChannelMetadataModel Products.ShopifyProductChannelMetadataModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: - integer - 'null' format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' title: Products.ShopifyProductChannelMetadataModel ProductsBaseProductVariantModelChannelMetadataItems: oneOf: - $ref: '#/components/schemas/Products.AmazonProductChannelMetadataModel' - $ref: '#/components/schemas/Products.BaseProductChannelMetadataModel' - $ref: '#/components/schemas/Products.BigCommerceProductChannelMetadataModel' - $ref: '#/components/schemas/Products.ShopifyProductChannelMetadataModel' title: ProductsBaseProductVariantModelChannelMetadataItems Products.BaseCustomsModel: type: object properties: country_code_of_origin: type: - string - 'null' currency: type: - string - 'null' description: type: - string - 'null' hs_tariff_code: type: - string - 'null' is321_eligible: type: boolean value: type: - integer - 'null' title: Products.BaseCustomsModel Products.BaseDimensionModel: type: object properties: height: type: number format: double description: Height of the product in inches length: type: number format: double description: Length of the product in inches width: type: number format: double description: Width of the product in inches title: Products.BaseDimensionModel Products.BaseSerialScanModel: type: object properties: exact_character_length: type: - integer - 'null' is_enabled: type: boolean prefix: type: - string - 'null' suffix: type: - string - 'null' title: Products.BaseSerialScanModel Products.BaseFulfillmentSettingsModel: type: object properties: dangerous_goods: type: boolean description: >- Flag indicating whether the product is classified as dangerous goods (hazmat) requiring special handling is_bpm_parcel: type: boolean description: >- Flag indicating whether this product qualifies for Business Parcel Manager (BPM) parcel shipping is_case_pick: type: boolean description: >- Flag indicating whether this product should be picked by the case rather than individual units msds_url: type: - string - 'null' description: URL to the Material Safety Data Sheet (MSDS) for hazardous materials requires_prop65: type: boolean description: >- Flag indicating California Proposition 65 warning label requirement for products containing chemicals known to cause cancer or reproductive harm serial_scan: $ref: '#/components/schemas/Products.BaseSerialScanModel' description: Serial number scanning configuration for tracking individual units title: Products.BaseFulfillmentSettingsModel Products.BaseLotInformationModel: type: object properties: is_lot: type: boolean minimum_shelf_life_days: type: - integer - 'null' title: Products.BaseLotInformationModel Products.BaseReturnPreferencesModel: type: object properties: backup_action_id: type: - integer - 'null' description: ID of backup action to take if primary action cannot be completed instructions: type: - string - 'null' description: Special instructions for handling returned items primary_action_id: type: integer description: >- ID of primary action to take when product is returned by customer (e.g., Restock, Dispose, Return to Sender) return_to_sender_backup_action_id: type: - integer - 'null' description: >- ID of backup action for undeliverable packages if primary action cannot be completed return_to_sender_primary_action_id: type: - integer - 'null' description: >- ID of primary action for undeliverable packages that are returned to sender title: Products.BaseReturnPreferencesModel Products.ReviewsPendingType: type: string enum: - '0' - '1' - '2' - '3' - '4' title: Products.ReviewsPendingType Products.VariantStatus: type: string enum: - '1' - '2' - '3' title: Products.VariantStatus Products.BarcodeModel: type: object properties: sticker_url: type: - string - 'null' value: type: - string - 'null' title: Products.BarcodeModel Products.UpdateProductVariantModelV5: type: object properties: additional_hazmat_attributes: $ref: '#/components/schemas/Products.BaseAdditionalHazmatAttributesModel' bundle_definition: type: - array - 'null' items: $ref: '#/components/schemas/Products.BaseBundleDefinitionModel' channel_metadata: type: - array - 'null' items: $ref: >- #/components/schemas/ProductsBaseProductVariantModelChannelMetadataItems customs: $ref: '#/components/schemas/Products.BaseCustomsModel' dimension: $ref: '#/components/schemas/Products.BaseDimensionModel' fulfillment_settings: $ref: '#/components/schemas/Products.BaseFulfillmentSettingsModel' gtin: type: - string - 'null' is_digital: type: boolean lot_information: $ref: '#/components/schemas/Products.BaseLotInformationModel' name: type: - string - 'null' packaging_material_type_id: type: - integer - 'null' packaging_requirement_id: type: - integer - 'null' return_preferences: $ref: '#/components/schemas/Products.BaseReturnPreferencesModel' reviews_pending: type: - array - 'null' items: $ref: '#/components/schemas/Products.ReviewsPendingType' sku: type: - string - 'null' status: $ref: '#/components/schemas/Products.VariantStatus' upc: type: - string - 'null' weight: type: number format: double barcodes: type: - array - 'null' items: $ref: '#/components/schemas/Products.BarcodeModel' id: type: integer format: int64 title: Products.UpdateProductVariantModelV5 Products.AdditionalHazmatAttributesViewModel: type: object properties: charge_state_percentage: type: - number - 'null' format: double container_metal: type: - boolean - 'null' container_type: type: - string - 'null' lithium_battery_packaging: type: - string - 'null' lithium_battery_type: type: - string - 'null' magnet: type: - boolean - 'null' net_volume: type: - number - 'null' format: double net_weight: type: - number - 'null' format: double title: Products.AdditionalHazmatAttributesViewModel Products.AssociatedBundlesViewModel: type: object properties: product_id: type: integer format: int64 product_name: type: - string - 'null' quantity: type: integer variant_id: type: integer format: int64 variant_sku: type: - string - 'null' title: Products.AssociatedBundlesViewModel Products.BundleDefinitionViewModel: type: object properties: product_id: type: integer format: int64 quantity: type: integer variant_id: type: integer format: int64 variant_name: type: - string - 'null' variant_sku: type: - string - 'null' title: Products.BundleDefinitionViewModel Products.CustomsViewModel: type: object properties: country_code_of_origin: type: - string - 'null' description: >- ISO 3166-1 alpha-2 country code where the product was manufactured (e.g., 'US', 'CN', 'MX') currency: type: - string - 'null' description: >- ISO 4217 currency code for the declared value (e.g., 'USD', 'EUR', 'GBP') description: type: - string - 'null' description: Product description for customs documentation hs_tariff_code: type: - string - 'null' description: >- Harmonized System tariff code used for international customs classification (6-10 digits) is321_eligible: type: boolean description: >- Flag indicating eligibility for Section 321 de minimis exemption (imports under $800 to US) value: type: - integer - 'null' description: Declared customs value of the product for international shipping title: Products.CustomsViewModel Products.DimensionViewModel: type: object properties: height: type: number format: double description: Height of the product is_locked: type: boolean description: >- Flag indicating whether dimensions are locked and cannot be automatically recalculated by the system length: type: number format: double description: Length of the product source: type: - string - 'null' description: Source of the dimension data (e.g., 'User', 'System', 'Warehouse') unit: type: - string - 'null' description: Unit of measurement for dimensions (e.g., 'in', 'cm') width: type: number format: double description: Width of the product title: Products.DimensionViewModel Products.SerialScanViewModel: type: object properties: exact_character_length: type: - integer - 'null' is_enabled: type: boolean prefix: type: - string - 'null' suffix: type: - string - 'null' title: Products.SerialScanViewModel Products.FulfillmentSettingsViewModel: type: object properties: dangerous_goods: type: boolean description: >- Flag indicating whether the product is classified as dangerous goods (hazmat) requiring special handling is_bpm_parcel: type: boolean description: >- Flag indicating whether this product qualifies for Business Parcel Manager (BPM) parcel shipping is_case_pick: type: boolean description: >- Flag indicating whether this product should be picked by the case rather than individual units msds_url: type: - string - 'null' description: URL to the Material Safety Data Sheet (MSDS) for hazardous materials requires_prop65: type: boolean description: >- Flag indicating California Proposition 65 warning label requirement for products containing chemicals known to cause cancer or reproductive harm serial_scan: $ref: '#/components/schemas/Products.SerialScanViewModel' description: Serial number scanning configuration for tracking individual units title: Products.FulfillmentSettingsViewModel Products.InventoryViewModel: type: object properties: inventory_id: type: - integer - 'null' on_hand_qty: type: integer title: Products.InventoryViewModel Products.LotInformationViewModel: type: object properties: is_lot: type: boolean minimum_shelf_life_days: type: - integer - 'null' title: Products.LotInformationViewModel Products.MergedChildrenViewModel: type: object properties: channel_ids: type: - array - 'null' items: type: integer format: int64 completed_at: type: string format: date-time inventory_id: type: - integer - 'null' format: int64 variant_id: type: integer format: int64 variant_name: type: - string - 'null' title: Products.MergedChildrenViewModel Products.EnumViewModel: type: object properties: id: type: integer format: int64 name: type: - string - 'null' title: Products.EnumViewModel Products.ReturnPreferencesViewModel: type: object properties: backup_action: $ref: '#/components/schemas/Products.EnumViewModel' description: Backup action to take if primary action cannot be completed instructions: type: - string - 'null' description: Special instructions for handling returned items primary_action: $ref: '#/components/schemas/Products.EnumViewModel' description: >- Primary action to take when product is returned by customer (e.g., 'Restock', 'Dispose', 'Return to Sender') return_to_sender_backup_action: $ref: '#/components/schemas/Products.EnumViewModel' description: >- Backup action for undeliverable packages if primary action cannot be completed return_to_sender_primary_action: $ref: '#/components/schemas/Products.EnumViewModel' description: >- Primary action for undeliverable packages that are returned to sender title: Products.ReturnPreferencesViewModel Products.WeightViewModel: type: object properties: unit: type: - string - 'null' description: Unit of measurement for weight (e.g., 'lb', 'oz', 'kg', 'g') weight: type: number format: double description: Weight value of the product title: Products.WeightViewModel Products.BarcodeViewModel: type: object properties: sticker_url: type: - string - 'null' description: URL to download or view a printable barcode sticker value: type: - string - 'null' description: The barcode value (e.g., UPC, EAN, GTIN, or other barcode format) title: Products.BarcodeViewModel Products.ChannelMetadataViewModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: integer format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' title: Products.ChannelMetadataViewModel Products.AmazonChannelMetadataViewModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: integer format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' asin: type: - string - 'null' fnsku: type: - string - 'null' fulfillment_channel: type: - string - 'null' title: Products.AmazonChannelMetadataViewModel Products.BigCommerceChannelMetadataViewModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: integer format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' platform_product_id: type: - integer - 'null' format: int64 platform_variant_id: type: - integer - 'null' format: int64 title: Products.BigCommerceChannelMetadataViewModel Products.ShopifyChannelMetadataViewModel: type: object properties: channel_id: type: integer format: int64 channel_name: type: - string - 'null' currency: type: - string - 'null' id: type: integer format: int64 is_inventory_sync_enabled: type: boolean legacy_product_id: type: - integer - 'null' format: int64 platform: type: - string - 'null' platform_identifier: type: - string - 'null' platform_inventory_item_id: type: - string - 'null' price: type: number format: double seller_sku: type: - string - 'null' title: Products.ShopifyChannelMetadataViewModel ProductsVariantViewModelV5ChannelMetadataItems: oneOf: - $ref: '#/components/schemas/Products.ChannelMetadataViewModel' - $ref: '#/components/schemas/Products.AmazonChannelMetadataViewModel' - $ref: '#/components/schemas/Products.BigCommerceChannelMetadataViewModel' - $ref: '#/components/schemas/Products.ShopifyChannelMetadataViewModel' title: ProductsVariantViewModelV5ChannelMetadataItems Products.VariantViewModelV5: type: object properties: additional_hazmat_attributes: $ref: '#/components/schemas/Products.AdditionalHazmatAttributesViewModel' description: >- Additional hazardous materials attributes for lithium batteries and dangerous goods associated_bundles: type: - array - 'null' items: $ref: '#/components/schemas/Products.AssociatedBundlesViewModel' description: List of bundle products that include this variant as a component bundle_definition: type: - array - 'null' items: $ref: '#/components/schemas/Products.BundleDefinitionViewModel' description: >- If this variant is a bundle, defines which variants and quantities make up the bundle created_on: type: string format: date-time description: Timestamp when the variant was created customs: $ref: '#/components/schemas/Products.CustomsViewModel' description: >- Customs and international shipping information (tariff codes, country of origin, declared value) dimension: $ref: '#/components/schemas/Products.DimensionViewModel' description: Physical dimensions of the variant (length, width, height) fulfillment_settings: $ref: '#/components/schemas/Products.FulfillmentSettingsViewModel' description: >- Fulfillment-specific settings (Prop 65, dangerous goods, serial scanning, case pick) gtin: type: - string - 'null' description: Global Trade Item Number - standardized product identifier id: type: integer format: int64 description: Unique identifier for the variant inventory: $ref: '#/components/schemas/Products.InventoryViewModel' description: Current inventory information including on-hand quantity is_digital: type: boolean description: >- Flag indicating whether this is a digital product (no physical fulfillment) is_image_uploaded: type: boolean description: >- Flag indicating whether a product image has been uploaded for this variant lot_information: $ref: '#/components/schemas/Products.LotInformationViewModel' description: >- Lot tracking settings including whether lot tracking is enabled and minimum shelf life requirements merge_children: type: - array - 'null' items: $ref: '#/components/schemas/Products.MergedChildrenViewModel' description: List of variants that have been merged into this variant name: type: - string - 'null' description: Variant name or descriptor packaging_material_type: $ref: '#/components/schemas/Products.EnumViewModel' description: Type of packaging material used for this variant (ID and name) packaging_requirement: $ref: '#/components/schemas/Products.EnumViewModel' description: Special packaging requirements for this variant (ID and name) return_preferences: $ref: '#/components/schemas/Products.ReturnPreferencesViewModel' description: >- Customer return handling preferences including primary and backup actions reviews_pending: type: - array - 'null' items: type: string description: >- List of pending review types for this variant (e.g., compliance checks, quality reviews) sku: type: - string - 'null' description: >- Stock Keeping Unit - unique identifier for the variant used in inventory management status: type: - string - 'null' description: Current status of the variant (e.g., 'Active', 'Inactive') upc: type: - string - 'null' description: Universal Product Code - 12-digit barcode identifier updated_on: type: - string - 'null' format: date-time description: Timestamp when the variant was last updated weight: $ref: '#/components/schemas/Products.WeightViewModel' description: Weight of the variant including unit of measure barcodes: type: - array - 'null' items: $ref: '#/components/schemas/Products.BarcodeViewModel' description: List of barcodes associated with this variant (UPC, EAN, etc.) channel_metadata: type: - array - 'null' items: $ref: >- #/components/schemas/ProductsVariantViewModelV5ChannelMetadataItems description: >- Platform-specific metadata for sales channels (e.g., Amazon ASIN, Shopify product IDs) title: Products.VariantViewModelV5 Products.VariantViewModelV5Array: type: array items: $ref: '#/components/schemas/Products.VariantViewModelV5' title: Products.VariantViewModelV5Array securitySchemes: PAT: type: http scheme: bearer description: Authentication using Personal Access Token (PAT) token or OAuth2 ``` ## SDK Code Examples ```python Products_updateProductVariants_example import requests url = "https://api.shipbob.com/2026-01/product/productId/variants" payload = { "additional_hazmat_attributes": { "charge_state_percentage": 0.1, "container_type": "string", "lithium_battery_packaging": "string", "lithium_battery_type": "string", "magnet": True, "net_volume": 0.1, "net_weight": 0.1, "container_metal": True }, "barcodes": [ { "sticker_url": "string", "value": "string" } ], "bundle_definition": [ { "quantity": 0, "variant_id": 0 } ], "channel_metadata": [ { "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "channel_name": "string", "currency": "string", "id": 0, "is_inventory_sync_enabled": True, "legacy_product_id": 0, "platform": "string", "platform_identifier": "string", "platform_inventory_item_id": "string", "price": 0.1, "seller_sku": "string" } ], "customs": { "country_code_of_origin": "string", "currency": "string", "description": "string", "hs_tariff_code": "string", "is321_eligible": True, "value": 0 }, "dimension": { "height": 0.1, "length": 0.1, "width": 0.1 }, "fulfillment_settings": { "dangerous_goods": True, "is_bpm_parcel": True, "is_case_pick": True, "msds_url": "string", "requires_prop65": True, "serial_scan": { "exact_character_length": 0, "is_enabled": True, "prefix": "string", "suffix": "string" } }, "gtin": "string", "id": 0, "is_digital": True, "lot_information": { "is_lot": True, "minimum_shelf_life_days": 0 }, "name": "string", "packaging_material_type_id": 0, "packaging_requirement_id": 0, "return_preferences": { "backup_action_id": 0, "instructions": "string", "primary_action_id": 0, "return_to_sender_backup_action_id": 0, "return_to_sender_primary_action_id": 0 }, "reviews_pending": [0], "sku": "string", "status": 1, "upc": "string", "weight": 0.1 } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.patch(url, json=payload, headers=headers) print(response.json()) ``` ```javascript Products_updateProductVariants_example const url = 'https://api.shipbob.com/2026-01/product/productId/variants'; const options = { method: 'PATCH', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"additional_hazmat_attributes":{"charge_state_percentage":0.1,"container_type":"string","lithium_battery_packaging":"string","lithium_battery_type":"string","magnet":true,"net_volume":0.1,"net_weight":0.1,"container_metal":true},"barcodes":[{"sticker_url":"string","value":"string"}],"bundle_definition":[{"quantity":0,"variant_id":0}],"channel_metadata":[{"asin":"string","fnsku":"string","fulfillment_channel":"string","channel_id":0,"channel_name":"string","currency":"string","id":0,"is_inventory_sync_enabled":true,"legacy_product_id":0,"platform":"string","platform_identifier":"string","platform_inventory_item_id":"string","price":0.1,"seller_sku":"string"}],"customs":{"country_code_of_origin":"string","currency":"string","description":"string","hs_tariff_code":"string","is321_eligible":true,"value":0},"dimension":{"height":0.1,"length":0.1,"width":0.1},"fulfillment_settings":{"dangerous_goods":true,"is_bpm_parcel":true,"is_case_pick":true,"msds_url":"string","requires_prop65":true,"serial_scan":{"exact_character_length":0,"is_enabled":true,"prefix":"string","suffix":"string"}},"gtin":"string","id":0,"is_digital":true,"lot_information":{"is_lot":true,"minimum_shelf_life_days":0},"name":"string","packaging_material_type_id":0,"packaging_requirement_id":0,"return_preferences":{"backup_action_id":0,"instructions":"string","primary_action_id":0,"return_to_sender_backup_action_id":0,"return_to_sender_primary_action_id":0},"reviews_pending":[0],"sku":"string","status":1,"upc":"string","weight":0.1}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Products_updateProductVariants_example package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.shipbob.com/2026-01/product/productId/variants" payload := strings.NewReader("{\n \"additional_hazmat_attributes\": {\n \"charge_state_percentage\": 0.1,\n \"container_type\": \"string\",\n \"lithium_battery_packaging\": \"string\",\n \"lithium_battery_type\": \"string\",\n \"magnet\": true,\n \"net_volume\": 0.1,\n \"net_weight\": 0.1,\n \"container_metal\": true\n },\n \"barcodes\": [\n {\n \"sticker_url\": \"string\",\n \"value\": \"string\"\n }\n ],\n \"bundle_definition\": [\n {\n \"quantity\": 0,\n \"variant_id\": 0\n }\n ],\n \"channel_metadata\": [\n {\n \"asin\": \"string\",\n \"fnsku\": \"string\",\n \"fulfillment_channel\": \"string\",\n \"channel_id\": 0,\n \"channel_name\": \"string\",\n \"currency\": \"string\",\n \"id\": 0,\n \"is_inventory_sync_enabled\": true,\n \"legacy_product_id\": 0,\n \"platform\": \"string\",\n \"platform_identifier\": \"string\",\n \"platform_inventory_item_id\": \"string\",\n \"price\": 0.1,\n \"seller_sku\": \"string\"\n }\n ],\n \"customs\": {\n \"country_code_of_origin\": \"string\",\n \"currency\": \"string\",\n \"description\": \"string\",\n \"hs_tariff_code\": \"string\",\n \"is321_eligible\": true,\n \"value\": 0\n },\n \"dimension\": {\n \"height\": 0.1,\n \"length\": 0.1,\n \"width\": 0.1\n },\n \"fulfillment_settings\": {\n \"dangerous_goods\": true,\n \"is_bpm_parcel\": true,\n \"is_case_pick\": true,\n \"msds_url\": \"string\",\n \"requires_prop65\": true,\n \"serial_scan\": {\n \"exact_character_length\": 0,\n \"is_enabled\": true,\n \"prefix\": \"string\",\n \"suffix\": \"string\"\n }\n },\n \"gtin\": \"string\",\n \"id\": 0,\n \"is_digital\": true,\n \"lot_information\": {\n \"is_lot\": true,\n \"minimum_shelf_life_days\": 0\n },\n \"name\": \"string\",\n \"packaging_material_type_id\": 0,\n \"packaging_requirement_id\": 0,\n \"return_preferences\": {\n \"backup_action_id\": 0,\n \"instructions\": \"string\",\n \"primary_action_id\": 0,\n \"return_to_sender_backup_action_id\": 0,\n \"return_to_sender_primary_action_id\": 0\n },\n \"reviews_pending\": [\n 0\n ],\n \"sku\": \"string\",\n \"status\": 1,\n \"upc\": \"string\",\n \"weight\": 0.1\n}") req, _ := http.NewRequest("PATCH", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Products_updateProductVariants_example require 'uri' require 'net/http' url = URI("https://api.shipbob.com/2026-01/product/productId/variants") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Patch.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"additional_hazmat_attributes\": {\n \"charge_state_percentage\": 0.1,\n \"container_type\": \"string\",\n \"lithium_battery_packaging\": \"string\",\n \"lithium_battery_type\": \"string\",\n \"magnet\": true,\n \"net_volume\": 0.1,\n \"net_weight\": 0.1,\n \"container_metal\": true\n },\n \"barcodes\": [\n {\n \"sticker_url\": \"string\",\n \"value\": \"string\"\n }\n ],\n \"bundle_definition\": [\n {\n \"quantity\": 0,\n \"variant_id\": 0\n }\n ],\n \"channel_metadata\": [\n {\n \"asin\": \"string\",\n \"fnsku\": \"string\",\n \"fulfillment_channel\": \"string\",\n \"channel_id\": 0,\n \"channel_name\": \"string\",\n \"currency\": \"string\",\n \"id\": 0,\n \"is_inventory_sync_enabled\": true,\n \"legacy_product_id\": 0,\n \"platform\": \"string\",\n \"platform_identifier\": \"string\",\n \"platform_inventory_item_id\": \"string\",\n \"price\": 0.1,\n \"seller_sku\": \"string\"\n }\n ],\n \"customs\": {\n \"country_code_of_origin\": \"string\",\n \"currency\": \"string\",\n \"description\": \"string\",\n \"hs_tariff_code\": \"string\",\n \"is321_eligible\": true,\n \"value\": 0\n },\n \"dimension\": {\n \"height\": 0.1,\n \"length\": 0.1,\n \"width\": 0.1\n },\n \"fulfillment_settings\": {\n \"dangerous_goods\": true,\n \"is_bpm_parcel\": true,\n \"is_case_pick\": true,\n \"msds_url\": \"string\",\n \"requires_prop65\": true,\n \"serial_scan\": {\n \"exact_character_length\": 0,\n \"is_enabled\": true,\n \"prefix\": \"string\",\n \"suffix\": \"string\"\n }\n },\n \"gtin\": \"string\",\n \"id\": 0,\n \"is_digital\": true,\n \"lot_information\": {\n \"is_lot\": true,\n \"minimum_shelf_life_days\": 0\n },\n \"name\": \"string\",\n \"packaging_material_type_id\": 0,\n \"packaging_requirement_id\": 0,\n \"return_preferences\": {\n \"backup_action_id\": 0,\n \"instructions\": \"string\",\n \"primary_action_id\": 0,\n \"return_to_sender_backup_action_id\": 0,\n \"return_to_sender_primary_action_id\": 0\n },\n \"reviews_pending\": [\n 0\n ],\n \"sku\": \"string\",\n \"status\": 1,\n \"upc\": \"string\",\n \"weight\": 0.1\n}" response = http.request(request) puts response.read_body ``` ```java Products_updateProductVariants_example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.patch("https://api.shipbob.com/2026-01/product/productId/variants") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"additional_hazmat_attributes\": {\n \"charge_state_percentage\": 0.1,\n \"container_type\": \"string\",\n \"lithium_battery_packaging\": \"string\",\n \"lithium_battery_type\": \"string\",\n \"magnet\": true,\n \"net_volume\": 0.1,\n \"net_weight\": 0.1,\n \"container_metal\": true\n },\n \"barcodes\": [\n {\n \"sticker_url\": \"string\",\n \"value\": \"string\"\n }\n ],\n \"bundle_definition\": [\n {\n \"quantity\": 0,\n \"variant_id\": 0\n }\n ],\n \"channel_metadata\": [\n {\n \"asin\": \"string\",\n \"fnsku\": \"string\",\n \"fulfillment_channel\": \"string\",\n \"channel_id\": 0,\n \"channel_name\": \"string\",\n \"currency\": \"string\",\n \"id\": 0,\n \"is_inventory_sync_enabled\": true,\n \"legacy_product_id\": 0,\n \"platform\": \"string\",\n \"platform_identifier\": \"string\",\n \"platform_inventory_item_id\": \"string\",\n \"price\": 0.1,\n \"seller_sku\": \"string\"\n }\n ],\n \"customs\": {\n \"country_code_of_origin\": \"string\",\n \"currency\": \"string\",\n \"description\": \"string\",\n \"hs_tariff_code\": \"string\",\n \"is321_eligible\": true,\n \"value\": 0\n },\n \"dimension\": {\n \"height\": 0.1,\n \"length\": 0.1,\n \"width\": 0.1\n },\n \"fulfillment_settings\": {\n \"dangerous_goods\": true,\n \"is_bpm_parcel\": true,\n \"is_case_pick\": true,\n \"msds_url\": \"string\",\n \"requires_prop65\": true,\n \"serial_scan\": {\n \"exact_character_length\": 0,\n \"is_enabled\": true,\n \"prefix\": \"string\",\n \"suffix\": \"string\"\n }\n },\n \"gtin\": \"string\",\n \"id\": 0,\n \"is_digital\": true,\n \"lot_information\": {\n \"is_lot\": true,\n \"minimum_shelf_life_days\": 0\n },\n \"name\": \"string\",\n \"packaging_material_type_id\": 0,\n \"packaging_requirement_id\": 0,\n \"return_preferences\": {\n \"backup_action_id\": 0,\n \"instructions\": \"string\",\n \"primary_action_id\": 0,\n \"return_to_sender_backup_action_id\": 0,\n \"return_to_sender_primary_action_id\": 0\n },\n \"reviews_pending\": [\n 0\n ],\n \"sku\": \"string\",\n \"status\": 1,\n \"upc\": \"string\",\n \"weight\": 0.1\n}") .asString(); ``` ```php Products_updateProductVariants_example request('PATCH', 'https://api.shipbob.com/2026-01/product/productId/variants', [ 'body' => '{ "additional_hazmat_attributes": { "charge_state_percentage": 0.1, "container_type": "string", "lithium_battery_packaging": "string", "lithium_battery_type": "string", "magnet": true, "net_volume": 0.1, "net_weight": 0.1, "container_metal": true }, "barcodes": [ { "sticker_url": "string", "value": "string" } ], "bundle_definition": [ { "quantity": 0, "variant_id": 0 } ], "channel_metadata": [ { "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "channel_name": "string", "currency": "string", "id": 0, "is_inventory_sync_enabled": true, "legacy_product_id": 0, "platform": "string", "platform_identifier": "string", "platform_inventory_item_id": "string", "price": 0.1, "seller_sku": "string" } ], "customs": { "country_code_of_origin": "string", "currency": "string", "description": "string", "hs_tariff_code": "string", "is321_eligible": true, "value": 0 }, "dimension": { "height": 0.1, "length": 0.1, "width": 0.1 }, "fulfillment_settings": { "dangerous_goods": true, "is_bpm_parcel": true, "is_case_pick": true, "msds_url": "string", "requires_prop65": true, "serial_scan": { "exact_character_length": 0, "is_enabled": true, "prefix": "string", "suffix": "string" } }, "gtin": "string", "id": 0, "is_digital": true, "lot_information": { "is_lot": true, "minimum_shelf_life_days": 0 }, "name": "string", "packaging_material_type_id": 0, "packaging_requirement_id": 0, "return_preferences": { "backup_action_id": 0, "instructions": "string", "primary_action_id": 0, "return_to_sender_backup_action_id": 0, "return_to_sender_primary_action_id": 0 }, "reviews_pending": [ 0 ], "sku": "string", "status": 1, "upc": "string", "weight": 0.1 }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp Products_updateProductVariants_example using RestSharp; var client = new RestClient("https://api.shipbob.com/2026-01/product/productId/variants"); var request = new RestRequest(Method.PATCH); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"additional_hazmat_attributes\": {\n \"charge_state_percentage\": 0.1,\n \"container_type\": \"string\",\n \"lithium_battery_packaging\": \"string\",\n \"lithium_battery_type\": \"string\",\n \"magnet\": true,\n \"net_volume\": 0.1,\n \"net_weight\": 0.1,\n \"container_metal\": true\n },\n \"barcodes\": [\n {\n \"sticker_url\": \"string\",\n \"value\": \"string\"\n }\n ],\n \"bundle_definition\": [\n {\n \"quantity\": 0,\n \"variant_id\": 0\n }\n ],\n \"channel_metadata\": [\n {\n \"asin\": \"string\",\n \"fnsku\": \"string\",\n \"fulfillment_channel\": \"string\",\n \"channel_id\": 0,\n \"channel_name\": \"string\",\n \"currency\": \"string\",\n \"id\": 0,\n \"is_inventory_sync_enabled\": true,\n \"legacy_product_id\": 0,\n \"platform\": \"string\",\n \"platform_identifier\": \"string\",\n \"platform_inventory_item_id\": \"string\",\n \"price\": 0.1,\n \"seller_sku\": \"string\"\n }\n ],\n \"customs\": {\n \"country_code_of_origin\": \"string\",\n \"currency\": \"string\",\n \"description\": \"string\",\n \"hs_tariff_code\": \"string\",\n \"is321_eligible\": true,\n \"value\": 0\n },\n \"dimension\": {\n \"height\": 0.1,\n \"length\": 0.1,\n \"width\": 0.1\n },\n \"fulfillment_settings\": {\n \"dangerous_goods\": true,\n \"is_bpm_parcel\": true,\n \"is_case_pick\": true,\n \"msds_url\": \"string\",\n \"requires_prop65\": true,\n \"serial_scan\": {\n \"exact_character_length\": 0,\n \"is_enabled\": true,\n \"prefix\": \"string\",\n \"suffix\": \"string\"\n }\n },\n \"gtin\": \"string\",\n \"id\": 0,\n \"is_digital\": true,\n \"lot_information\": {\n \"is_lot\": true,\n \"minimum_shelf_life_days\": 0\n },\n \"name\": \"string\",\n \"packaging_material_type_id\": 0,\n \"packaging_requirement_id\": 0,\n \"return_preferences\": {\n \"backup_action_id\": 0,\n \"instructions\": \"string\",\n \"primary_action_id\": 0,\n \"return_to_sender_backup_action_id\": 0,\n \"return_to_sender_primary_action_id\": 0\n },\n \"reviews_pending\": [\n 0\n ],\n \"sku\": \"string\",\n \"status\": 1,\n \"upc\": \"string\",\n \"weight\": 0.1\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift Products_updateProductVariants_example import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [ "additional_hazmat_attributes": [ "charge_state_percentage": 0.1, "container_type": "string", "lithium_battery_packaging": "string", "lithium_battery_type": "string", "magnet": true, "net_volume": 0.1, "net_weight": 0.1, "container_metal": true ], "barcodes": [ [ "sticker_url": "string", "value": "string" ] ], "bundle_definition": [ [ "quantity": 0, "variant_id": 0 ] ], "channel_metadata": [ [ "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "channel_name": "string", "currency": "string", "id": 0, "is_inventory_sync_enabled": true, "legacy_product_id": 0, "platform": "string", "platform_identifier": "string", "platform_inventory_item_id": "string", "price": 0.1, "seller_sku": "string" ] ], "customs": [ "country_code_of_origin": "string", "currency": "string", "description": "string", "hs_tariff_code": "string", "is321_eligible": true, "value": 0 ], "dimension": [ "height": 0.1, "length": 0.1, "width": 0.1 ], "fulfillment_settings": [ "dangerous_goods": true, "is_bpm_parcel": true, "is_case_pick": true, "msds_url": "string", "requires_prop65": true, "serial_scan": [ "exact_character_length": 0, "is_enabled": true, "prefix": "string", "suffix": "string" ] ], "gtin": "string", "id": 0, "is_digital": true, "lot_information": [ "is_lot": true, "minimum_shelf_life_days": 0 ], "name": "string", "packaging_material_type_id": 0, "packaging_requirement_id": 0, "return_preferences": [ "backup_action_id": 0, "instructions": "string", "primary_action_id": 0, "return_to_sender_backup_action_id": 0, "return_to_sender_primary_action_id": 0 ], "reviews_pending": [0], "sku": "string", "status": 1, "upc": "string", "weight": 0.1 ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.shipbob.com/2026-01/product/productId/variants")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "PATCH" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```