Convert a SIMPLE product to VARIABLE
Converts the product type and migrates existing price/inventory into a first variant. Idempotent, and returns 400 if already VARIABLE.
AuthorizationBearer <token>
Admin API key (server-to-server). Issue via the dashboard at Settings → API keys. Plain-text key is shown once — store in a secret manager. Format: Authorization: Bearer brainerce_xxxxxxxxx.
In: header
Path Parameters
idstring
Product ID
curl -X PATCH "https://api.brainerce.com/api/v1/products/string/convert-to-variable"{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Classic T-Shirt",
"slug": "classic-t-shirt",
"localeSlugs": {},
"description": "A soft cotton t-shirt.",
"descriptionFormat": "text",
"basePrice": "49.90",
"salePrice": "24.90",
"costPrice": "12.00",
"priceMin": "24.90",
"priceMax": "34.90",
"priceVaries": true,
"displayPrice": "29.90",
"displaySalePrice": "24.90",
"displayPriceMin": "24.90",
"displayPriceMax": "34.90",
"displayCurrency": "USD",
"gtin": "0123456789012",
"mpn": "TS-BLK-M",
"salePriceStartsAt": "2019-08-24T14:15:22Z",
"salePriceEndsAt": "2019-08-24T14:15:22Z",
"shippingWeightValue": 0.3,
"shippingWeightUnit": "kg",
"shippingLengthValue": 30,
"shippingWidthValue": 20,
"shippingHeightValue": 5,
"shippingDimensionUnit": "cm",
"metaDescription": "Soft cotton t-shirt in five colors",
"status": "active",
"sku": "TSHIRT-BLK-M",
"type": "SIMPLE",
"kitPricingMode": "FIXED",
"kitDiscountValue": 10,
"isDownloadable": true,
"downloadData": {
"files": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "photos.zip",
"url": "https://cdn.example.com/downloads/photos.zip",
"storageKey": "downloads/photos.zip",
"size": 5242880,
"mimeType": "application/zip"
}
],
"downloadLimit": 3,
"downloadExpiry": 30
},
"needsSync": true,
"lastSyncedAt": "2019-08-24T14:15:22Z",
"menuOrder": 0,
"taxBehavior": "taxable",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"inventory": {
"trackingMode": "TRACKED",
"total": 42,
"reserved": 3,
"available": 39,
"inStock": true,
"canPurchase": true,
"lastInventorySyncAt": "2019-08-24T14:15:22Z"
},
"variants": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"productId": "clx1a2b3c4d5e6f7g8h9",
"sku": "TSHIRT-BLK-M",
"name": "Black / M",
"attributes": {
"size": "S",
"color": "Red"
},
"price": "19.90",
"salePrice": "24.90",
"costPrice": "12.00",
"salePriceStartsAt": "2019-08-24T14:15:22Z",
"salePriceEndsAt": "2019-08-24T14:15:22Z",
"displayPrice": "29.90",
"displaySalePrice": "24.90",
"displayCurrency": "USD",
"image": "string",
"position": 0,
"status": "active",
"inventory": {
"trackingMode": "TRACKED",
"total": 42,
"reserved": 3,
"available": 39,
"inStock": true,
"canPurchase": true,
"lastInventorySyncAt": "2019-08-24T14:15:22Z"
},
"isDownloadable": true,
"downloadData": {
"files": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "photos.zip",
"url": "https://cdn.example.com/downloads/photos.zip",
"storageKey": "downloads/photos.zip",
"size": 5242880,
"mimeType": "application/zip"
}
],
"downloadLimit": 3,
"downloadExpiry": 30
},
"shippingClassId": "clx1a2b3c4d5e6f7g8h9",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"images": [
{
"url": "https://cdn.example.com/products/tshirt.jpg",
"position": 0,
"isMain": true,
"alt": "Black t-shirt on a hanger",
"id": "clx1a2b3c4d5e6f7g8h9",
"key": "products/tshirt.jpg",
"thumbnailUrl": "https://cdn.example.com/products/tshirt-thumb.jpg",
"width": 1200,
"height": 800,
"size": 245123,
"mimeType": "image/jpeg",
"createdAt": "2019-08-24T14:15:22Z",
"source": "local",
"importStatus": "completed",
"importError": "HTTP 404 from the source server",
"src": "https://cdn.example.com/products/tshirt.jpg",
"altSource": "asset",
"altTranslations": {},
"originalFilename": "tshirt.jpg",
"sourceUrl": "https://source.example.com/img/tshirt.jpg",
"sourcePlatform": "SHOPIFY",
"importedAt": "2026-01-15T10:30:00.000Z",
"platformImageIds": {}
}
],
"channels": {},
"translations": {},
"categories": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Shoes",
"taxBehavior": "taxable"
}
],
"brands": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Summer Collection"
}
],
"attributes": [
"string"
],
"productAttributeOptions": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"attributeId": "clx1a2b3c4d5e6f7g8h9",
"attributeOptionId": "clx1a2b3c4d5e6f7g8h9",
"platform": "GLOBAL",
"attribute": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Color",
"displayType": "COLOR_SWATCH"
},
"attributeOption": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Black",
"value": "black",
"swatchColor": "#000000",
"swatchColor2": "#FFFFFF",
"swatchImageUrl": "https://cdn.example.com/swatches/black.png"
}
}
],
"tags": [
"string"
],
"metafields": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"definitionId": "clx1a2b3c4d5e6f7g8h9",
"definitionKey": "material",
"definitionName": "Material",
"type": "TEXT",
"value": "Cotton",
"variantId": "clx1a2b3c4d5e6f7g8h9"
}
],
"customizationFields": [
{
"definitionId": "clx1a2b3c4d5e6f7g8h9",
"name": "Engraving text",
"key": "engraving",
"description": "Up to 20 characters",
"type": "TEXT",
"required": true,
"minLength": 1,
"maxLength": 20,
"minValue": 0,
"maxValue": 100,
"enumValues": [
"string"
],
"defaultValue": "Happy birthday",
"position": 0
}
],
"channelPublishes": [
{
"salesChannel": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "My storefront",
"connectionId": "vc_9f3a2b1c8d7e6f5a"
},
"connection": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "My storefront",
"connectionId": "vc_9f3a2b1c8d7e6f5a"
}
}
],
"vibeCodedPublishes": [
{
"salesChannel": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "My storefront",
"connectionId": "vc_9f3a2b1c8d7e6f5a"
},
"connection": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "My storefront",
"connectionId": "vc_9f3a2b1c8d7e6f5a"
}
}
],
"channelSync": {},
"shippingClassId": "clx1a2b3c4d5e6f7g8h9",
"shippingClass": {
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Heavy items"
},
"crossSells": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Summer Collection"
}
],
"upsells": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Summer Collection"
}
],
"related": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Summer Collection"
}
],
"bundleOfferCount": 1,
"orderBumpCount": 1,
"avgRating": 4.6,
"reviewCount": 18,
"seoScore": {
"score": 82,
"band": "excellent",
"hasUnresolvedError": true
},
"modifierGroups": [
{
"attachmentId": "clx1a2b3c4d5e6f7g8h9",
"groupId": "clx1a2b3c4d5e6f7g8h9",
"variantId": "clx1a2b3c4d5e6f7g8h9",
"position": 0,
"minOverride": 0,
"maxOverride": 3,
"freeQuantityOverride": 1,
"requiredOverride": true,
"freeAllocationPolicyOverride": "EXPENSIVE_FREE",
"defaultModifierIds": [
"string"
],
"name": "Toppings",
"internalName": "toppings-pizza",
"description": "Choose up to 3",
"translations": {},
"selectionType": "SINGLE",
"minSelections": 0,
"maxSelections": 3,
"freeQuantity": 1,
"required": true,
"freeAllocationPolicy": "EXPENSIVE_FREE",
"status": "active",
"modifiers": [
{
"id": "clx1a2b3c4d5e6f7g8h9",
"name": "Extra cheese",
"description": "Double portion",
"translations": {},
"priceDelta": "2.50",
"sku": "TSHIRT-BLK-M",
"image": "http://example.com",
"position": 0,
"isDefault": true,
"available": true,
"referencedProductId": "clx1a2b3c4d5e6f7g8h9",
"status": "active"
}
]
}
]
}{
"statusCode": 400,
"code": "VALIDATION_FAILED",
"message": "name should not be empty, price must be a positive number",
"timestamp": "2026-08-23T10:15:00.000Z",
"path": "/api/v1/products/{id}/convert-to-variable"
}{
"statusCode": 401,
"code": "UNAUTHORIZED",
"message": "Invalid or expired credential",
"timestamp": "2026-08-23T10:15:00.000Z",
"path": "/api/v1/products/{id}/convert-to-variable"
}{
"statusCode": 403,
"code": "INSUFFICIENT_SCOPE",
"message": "API key does not have the required scope: products:write",
"timestamp": "2026-08-23T10:15:00.000Z",
"path": "/api/v1/products/{id}/convert-to-variable"
}{
"statusCode": 404,
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"timestamp": "2026-08-23T10:15:00.000Z",
"path": "/api/v1/products/{id}/convert-to-variable"
}{
"statusCode": 429,
"code": "RATE_LIMITED",
"message": "Too many requests",
"details": {
"retryAfterSeconds": 12
},
"timestamp": "2026-08-23T10:15:00.000Z",
"path": "/api/v1/store"
}List per-product failures for a bulk create job
One entry per failed product, carrying the 1-indexed row from your submitted array plus sku, externalId, productName, a code (VALIDATION / DUPLICATE / P...
Convert a VARIABLE product back to SIMPLE
Merges the last remaining variant back into the parent product.