> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developer-stage.shipbob.dev/2026-07/api/products/convert-variant-to-bundle/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server. # Convert Variant to Bundle POST https://sandbox-api.shipbob.com/2026-07/variant/{variantId}:convertToBundle Content-Type: application/json Converts an existing product variant into a bundle product. Provide the bundle definition specifying which variants and quantities make up the bundle. Reference: https://developer-stage.shipbob.dev/api/products/convert-variant-to-bundle ## Authentication - `Authorization` header (bearer token, required) — Authentication using Personal Access Token (PAT) token - `Authorization` header (bearer token, required) — OAuth2 authentication using JWT tokens ## Request ### Path parameters - `variantId` (long, required) ### Body (application/json) This endpoint expects a Products.ConvertVariantToBundleRequest. - `bundle_definition` (list of Products.BundleDefinitionRequestModel, optional, nullable) - `channel_metadata` (list of ProductsConvertVariantToBundleRequestChannelMetadataItems, optional, nullable) - `name` (string, optional, nullable) - `sku` (string, optional, nullable) ## Response ### 201 Created - `created_on` (datetime, optional) — Timestamp when the product was created - `id` (long, optional) — Unique identifier for the product - `name` (string, optional, nullable) — Product name - `taxonomy` (Products.TaxonomyInformationViewModel, optional) — Product categorization information including category hierarchy - `type` (string, optional, nullable) — Product type (e.g., 'Regular' or 'Bundle') - `updated_on` (datetime, optional, nullable) — Timestamp when the product was last updated - `user_id` (long, optional) — ID of the user who owns this product - `variants` (list of ProductsProductViewModelV5VariantsItems, optional, nullable) — List of variants belonging to this product. Each variant represents a specific SKU. ## Types ### Products.BundleDefinitionRequestModel - `quantity` (integer, optional) - `variant_id` (long, optional) ### ProductsConvertVariantToBundleRequestChannelMetadataItems ### Products.TaxonomyInformationViewModel - `id` (integer, optional, nullable) — Unique identifier for the taxonomy - `name` (string, optional, nullable) — Name of this taxonomy category - `parent_id` (integer, optional, nullable) — ID of the parent category in the taxonomy hierarchy - `parent_name` (string, optional, nullable) — Name of the parent category in the taxonomy hierarchy - `path` (string, optional, nullable) — Full hierarchical path of the taxonomy category (e.g., 'Electronics > Computers > Laptops') ### ProductsProductViewModelV5VariantsItems ### Products.AmazonChannelMetadataRequestModel Amazon Sales Channel Information with custom Amazon Fields - `asin` (string, optional, nullable) - `channel_id` (integer, optional, nullable) - `currency` (string, optional, nullable) - `fnsku` (string, optional, nullable) - `fulfillment_channel` (string, optional, nullable) - `id` (long, optional, nullable) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.BaseChannelMetadataRequestModel Standard Channel Metadata Record to store SellerSKU for a Sales Channel - `channel_id` (integer, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional, nullable) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.BigCommerceChannelMetadataRequestModel BigCommerce Sales Channel Information with custom Amazon Fields - `channel_id` (integer, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional, nullable) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `platform_product_id` (long, optional, nullable) - `platform_variant_id` (long, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.ShopifyChannelMetadataRequestModel Shopify Sales Channel Information - `channel_id` (integer, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional, nullable) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.VariantViewModelV5 - `additional_hazmat_attributes` (Products.AdditionalHazmatAttributesViewModel, optional) — Additional hazardous materials attributes for lithium batteries and dangerous goods - `associated_bundles` (list of Products.AssociatedBundlesViewModel, optional, nullable) — List of bundle products that include this variant as a component - `barcodes` (list of Products.BarcodeViewModel, optional, nullable) — List of barcodes associated with this variant (UPC, EAN, etc.) - `bundle_definition` (list of Products.BundleDefinitionViewModel, optional, nullable) — If this variant is a bundle, defines which variants and quantities make up the bundle - `channel_metadata` (list of ProductsVariantViewModelV5ChannelMetadataItems, optional, nullable) — Platform-specific metadata for sales channels (e.g., Amazon ASIN, Shopify product IDs) - `created_on` (datetime, optional) — Timestamp when the variant was created - `customs` (Products.CustomsViewModel, optional) — Customs and international shipping information (tariff codes, country of origin, declared value) - `dimension` (Products.DimensionViewModel, optional) — Physical dimensions of the variant (length, width, height) - `fulfillment_settings` (Products.FulfillmentSettingsViewModel, optional) — Fulfillment-specific settings (Prop 65, dangerous goods, serial scanning, case pick) - `gtin` (string, optional, nullable) — Global Trade Item Number - standardized product identifier - `id` (long, optional) — Unique identifier for the variant - `inventory` (Products.InventoryViewModel, optional) — Current inventory information including on-hand quantity - `is_digital` (boolean, optional) — Flag indicating whether this is a digital product (no physical fulfillment) - `is_image_uploaded` (boolean, optional) — Flag indicating whether a product image has been uploaded for this variant - `lot_information` (Products.LotInformationViewModel, optional) — Lot tracking settings including whether lot tracking is enabled and minimum shelf life requirements - `merge_children` (list of Products.MergedChildrenViewModel, optional, nullable) — List of variants that have been merged into this variant - `name` (string, optional, nullable) — Variant name or descriptor - `packaging_material_type` (Products.EnumViewModel, optional) — Type of packaging material used for this variant (ID and name) - `packaging_requirement` (Products.EnumViewModel, optional) — Special packaging requirements for this variant (ID and name) - `return_preferences` (Products.ReturnPreferencesViewModel, optional) — Customer return handling preferences including primary and backup actions - `reviews_pending` (list of string, optional, nullable) — List of pending review types for this variant (e.g., compliance checks, quality reviews) - `sku` (string, optional, nullable) — Stock Keeping Unit - unique identifier for the variant used in inventory management - `status` (string, optional, nullable) — Current status of the variant (e.g., 'Active', 'Inactive') - `upc` (string, optional, nullable) — Universal Product Code - 12-digit barcode identifier - `updated_on` (datetime, optional, nullable) — Timestamp when the variant was last updated - `weight` (Products.WeightViewModel, optional) — Weight of the variant including unit of measure ### Products.VariantInternalViewModelV5 - `additional_hazmat_attributes` (Products.AdditionalHazmatAttributesViewModel, optional) — Additional hazardous materials attributes for lithium batteries and dangerous goods - `associated_bundles` (list of Products.AssociatedBundlesViewModel, optional, nullable) — List of bundle products that include this variant as a component - `barcodes` (list of Products.BarcodeViewModel, optional, nullable) — List of barcodes associated with this variant (UPC, EAN, etc.) - `bundle_definition` (list of Products.BundleDefinitionViewModel, optional, nullable) — If this variant is a bundle, defines which variants and quantities make up the bundle - `channel_metadata` (list of ProductsVariantViewModelV5ChannelMetadataItems, optional, nullable) — Platform-specific metadata for sales channels (e.g., Amazon ASIN, Shopify product IDs) - `compliance` (Products.ComplianceViewModel, optional) - `created_on` (datetime, optional) — Timestamp when the variant was created - `customs` (Products.CustomsViewModel, optional) — Customs and international shipping information (tariff codes, country of origin, declared value) - `dimension` (Products.DimensionViewModel, optional) — Physical dimensions of the variant (length, width, height) - `fulfillment_settings` (Products.FulfillmentSettingsViewModel, optional) — Fulfillment-specific settings (Prop 65, dangerous goods, serial scanning, case pick) - `gtin` (string, optional, nullable) — Global Trade Item Number - standardized product identifier - `id` (long, optional) — Unique identifier for the variant - `inventory` (Products.InventoryViewModel, optional) — Current inventory information including on-hand quantity - `is_digital` (boolean, optional) — Flag indicating whether this is a digital product (no physical fulfillment) - `is_image_uploaded` (boolean, optional) — Flag indicating whether a product image has been uploaded for this variant - `lot_information` (Products.LotInformationViewModel, optional) — Lot tracking settings including whether lot tracking is enabled and minimum shelf life requirements - `merge_children` (list of Products.MergedChildrenViewModel, optional, nullable) — List of variants that have been merged into this variant - `name` (string, optional, nullable) — Variant name or descriptor - `packaging_material_type` (Products.EnumViewModel, optional) — Type of packaging material used for this variant (ID and name) - `packaging_requirement` (Products.EnumViewModel, optional) — Special packaging requirements for this variant (ID and name) - `return_preferences` (Products.ReturnPreferencesViewModel, optional) — Customer return handling preferences including primary and backup actions - `reviews_pending` (list of string, optional, nullable) — List of pending review types for this variant (e.g., compliance checks, quality reviews) - `sku` (string, optional, nullable) — Stock Keeping Unit - unique identifier for the variant used in inventory management - `status` (string, optional, nullable) — Current status of the variant (e.g., 'Active', 'Inactive') - `upc` (string, optional, nullable) — Universal Product Code - 12-digit barcode identifier - `updated_on` (datetime, optional, nullable) — Timestamp when the variant was last updated - `weight` (Products.WeightViewModel, optional) — Weight of the variant including unit of measure ### Products.AdditionalHazmatAttributesViewModel - `charge_state_percentage` (double, optional, nullable) - `container_type` (string, optional, nullable) - `lithium_battery_packaging` (string, optional, nullable) - `lithium_battery_type` (string, optional, nullable) - `magnet` (boolean, optional, nullable) - `net_volume` (double, optional, nullable) - `net_weight` (double, optional, nullable) - `container_metal` (boolean, optional, nullable, deprecated) ### Products.AssociatedBundlesViewModel - `product_id` (long, optional) - `product_name` (string, optional, nullable) - `quantity` (integer, optional) - `variant_id` (long, optional) - `variant_sku` (string, optional, nullable) ### Products.BarcodeViewModel - `sticker_url` (string, optional, nullable) — URL to download or view a printable barcode sticker - `value` (string, optional, nullable) — The barcode value (e.g., UPC, EAN, GTIN, or other barcode format) ### Products.BundleDefinitionViewModel - `product_id` (long, optional) - `quantity` (integer, optional) - `variant_id` (long, optional) - `variant_name` (string, optional, nullable) - `variant_sku` (string, optional, nullable) ### ProductsVariantViewModelV5ChannelMetadataItems ### Products.CustomsViewModel - `country_code_of_origin` (string, optional, nullable) — ISO 3166-1 alpha-2 country code where the product was manufactured (e.g., 'US', 'CN', 'MX') - `currency` (string, optional, nullable) — ISO 4217 currency code for the declared value (e.g., 'USD', 'EUR', 'GBP') - `description` (string, optional, nullable) — Product description for customs documentation - `hs_tariff_code` (string, optional, nullable) — Harmonized System tariff code used for international customs classification (6-10 digits) - `is321_eligible` (boolean, optional) — Flag indicating eligibility for Section 321 de minimis exemption (imports under $800 to US) - `value` (integer, optional, nullable) — Declared customs value of the product for international shipping ### Products.DimensionViewModel - `height` (double, optional) — Height of the product - `is_locked` (boolean, optional) — Flag indicating whether dimensions are locked and cannot be automatically recalculated by the system - `length` (double, optional) — Length of the product - `source` (string, optional, nullable) — Source of the dimension data (e.g., 'User', 'System', 'Warehouse') - `unit` (string, optional, nullable) — Unit of measurement for dimensions (e.g., 'in', 'cm') - `width` (double, optional) — Width of the product ### Products.FulfillmentSettingsViewModel - `dangerous_goods` (boolean, optional) — Flag indicating whether the product is classified as dangerous goods (hazmat) requiring special handling - `is_bpm_parcel` (boolean, optional) — Flag indicating whether this product qualifies for Business Parcel Manager (BPM) parcel shipping - `is_case_pick` (boolean, optional) — Flag indicating whether this product should be picked by the case rather than individual units - `msds_url` (string, optional, nullable) — URL to the Material Safety Data Sheet (MSDS) for hazardous materials - `requires_prop65` (boolean, optional) — Flag indicating California Proposition 65 warning label requirement for products containing chemicals known to cause cancer or reproductive harm - `serial_scan` (Products.SerialScanViewModel, optional) — Serial number scanning configuration for tracking individual units ### Products.InventoryViewModel - `inventory_id` (integer, optional, nullable) - `on_hand_qty` (integer, optional) ### Products.LotInformationViewModel - `is_lot` (boolean, optional) - `minimum_shelf_life_days` (integer, optional, nullable) ### Products.MergedChildrenViewModel - `channel_ids` (list of long, optional, nullable) - `completed_at` (datetime, optional) - `inventory_id` (long, optional, nullable) - `variant_id` (long, optional) - `variant_name` (string, optional, nullable) ### Products.EnumViewModel - `id` (long, optional) - `name` (string, optional, nullable) ### Products.ReturnPreferencesViewModel - `backup_action` (Products.EnumViewModel, optional) — Backup action to take if primary action cannot be completed - `instructions` (string, optional, nullable) — Special instructions for handling returned items - `primary_action` (Products.EnumViewModel, optional) — Primary action to take when product is returned by customer (e.g., 'Restock', 'Dispose', 'Return to Sender') - `return_to_sender_backup_action` (Products.EnumViewModel, optional) — Backup action for undeliverable packages if primary action cannot be completed - `return_to_sender_primary_action` (Products.EnumViewModel, optional) — Primary action for undeliverable packages that are returned to sender ### Products.WeightViewModel - `unit` (string, optional, nullable) — Unit of measurement for weight (e.g., 'lb', 'oz', 'kg', 'g') - `weight` (double, optional) — Weight value of the product ### Products.ComplianceViewModel - `category` (list of string, optional, nullable) - `reasons` (list of string, optional, nullable) - `status` (string, optional, nullable) ### Products.ChannelMetadataViewModel - `channel_id` (long, optional) - `channel_name` (string, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.AmazonChannelMetadataViewModel - `asin` (string, optional, nullable) - `channel_id` (long, optional) - `channel_name` (string, optional, nullable) - `currency` (string, optional, nullable) - `fnsku` (string, optional, nullable) - `fulfillment_channel` (string, optional, nullable) - `id` (long, optional) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.BigCommerceChannelMetadataViewModel - `channel_id` (long, optional) - `channel_name` (string, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `platform_product_id` (long, optional, nullable) - `platform_variant_id` (long, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.ShopifyChannelMetadataViewModel - `channel_id` (long, optional) - `channel_name` (string, optional, nullable) - `currency` (string, optional, nullable) - `id` (long, optional) - `is_inventory_sync_enabled` (boolean, optional) - `legacy_product_id` (long, optional, nullable) - `platform` (string, optional, nullable) - `platform_identifier` (string, optional, nullable) - `platform_inventory_item_id` (string, optional, nullable) - `price` (double, optional) - `seller_sku` (string, optional, nullable) ### Products.SerialScanViewModel - `exact_character_length` (integer, optional, nullable) - `is_enabled` (boolean, optional) - `prefix` (string, optional, nullable) - `suffix` (string, optional, nullable) ## Examples **Request** ```json { "bundle_definition": [ { "quantity": 0, "variant_id": 0 } ], "channel_metadata": [ { "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "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" } ], "name": "string", "sku": "string" } ``` **Response** ```json { "created_on": "2019-08-24T14:15:22+00:00", "id": 0, "name": "string", "taxonomy": { "id": 0, "name": "string", "parent_id": 0, "parent_name": "string", "path": "string" }, "type": "string", "updated_on": "2019-08-24T14:15:22+00:00", "user_id": 0, "variants": [ { "barcodes": [ { "sticker_url": "string", "value": "string" } ], "channel_metadata": [ { "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" } ], "additional_hazmat_attributes": { "charge_state_percentage": 0.1, "container_metal": true, "container_type": "string", "lithium_battery_packaging": "string", "lithium_battery_type": "string", "magnet": true, "net_volume": 0.1, "net_weight": 0.1 }, "associated_bundles": [ { "product_id": 0, "product_name": "string", "quantity": 0, "variant_id": 0, "variant_sku": "string" } ], "bundle_definition": [ { "product_id": 0, "quantity": 0, "variant_id": 0, "variant_name": "string", "variant_sku": "string" } ], "created_on": "2019-08-24T14:15:22+00:00", "customs": { "country_code_of_origin": "string", "currency": "string", "description": "string", "hs_tariff_code": "string", "is321_eligible": true, "value": 0 }, "dimension": { "height": 0.1, "is_locked": true, "length": 0.1, "source": "string", "unit": "string", "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, "inventory": { "inventory_id": 0, "on_hand_qty": 0 }, "is_digital": true, "is_image_uploaded": true, "lot_information": { "is_lot": true, "minimum_shelf_life_days": 0 }, "merge_children": [ { "channel_ids": [ 0 ], "completed_at": "2019-08-24T14:15:22+00:00", "inventory_id": 0, "variant_id": 0, "variant_name": "string" } ], "name": "string", "packaging_material_type": { "id": 0, "name": "string" }, "packaging_requirement": { "id": 0, "name": "string" }, "return_preferences": { "backup_action": { "id": 0, "name": "string" }, "instructions": "string", "primary_action": { "id": 0, "name": "string" }, "return_to_sender_backup_action": { "id": 0, "name": "string" }, "return_to_sender_primary_action": { "id": 0, "name": "string" } }, "reviews_pending": [ "string" ], "sku": "string", "status": "string", "upc": "string", "updated_on": "2019-08-24T14:15:22+00:00", "weight": { "unit": "string", "weight": 0.1 } } ] } ``` **SDK Code** ```python default import requests url = "https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle" payload = { "bundle_definition": [ { "quantity": 0, "variant_id": 0 } ], "channel_metadata": [ { "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "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" } ], "name": "string", "sku": "string" } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript default const url = 'https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"bundle_definition":[{"quantity":0,"variant_id":0}],"channel_metadata":[{"asin":"string","fnsku":"string","fulfillment_channel":"string","channel_id":0,"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"}],"name":"string","sku":"string"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go default package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle" payload := strings.NewReader("{\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 \"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 \"name\": \"string\",\n \"sku\": \"string\"\n}") req, _ := http.NewRequest("POST", 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 default require 'uri' require 'net/http' url = URI("https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\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 \"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 \"name\": \"string\",\n \"sku\": \"string\"\n}" response = http.request(request) puts response.read_body ``` ```java default import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\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 \"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 \"name\": \"string\",\n \"sku\": \"string\"\n}") .asString(); ``` ```php default request('POST', 'https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle', [ 'body' => '{ "bundle_definition": [ { "quantity": 0, "variant_id": 0 } ], "channel_metadata": [ { "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "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" } ], "name": "string", "sku": "string" }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp default using RestSharp; var client = new RestClient("https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\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 \"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 \"name\": \"string\",\n \"sku\": \"string\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift default import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [ "bundle_definition": [ [ "quantity": 0, "variant_id": 0 ] ], "channel_metadata": [ [ "asin": "string", "fnsku": "string", "fulfillment_channel": "string", "channel_id": 0, "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" ] ], "name": "string", "sku": "string" ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://sandbox-api.shipbob.com/2026-07/variant/1:convertToBundle")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" 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() ```