API ReferenceEndpointsBundle offers

Bundle offers

Product bundles let you sell groups of products together at a special price — "buy 3 t-shirts for $50". Bundles render in the cart UI with their own pricing logic and inventory deduction. Use these endpoints to create, list, and manage bundle offers.

List cart bundles

GET
/vc/{connectionId}/cart/{cartId}/bundles
X-Sales-Channel-Origin<token>

For /api/vc/{connectionId}/* routes the connectionId (vc_*) is in the URL path — not a header. Live-mode requests must also send a matching Origin header.

In: header

Path Parameters

connectionIdstring
cartIdstring

Header Parameters

originstring
curl -X GET "https://api.brainerce.com/api/vc/string/cart/string/bundles" \  -H "origin: string"
{
  "bundles": [
    {
      "id": "string",
      "name": "string",
      "description": "string",
      "triggerProductId": "string",
      "productIds": [
        "string"
      ],
      "offeredProducts": [
        {
          "id": "clprd_abc123",
          "name": "string",
          "slug": "string",
          "basePrice": "30.00",
          "salePrice": "string",
          "images": [
            {
              "url": "https://cdn.brainerce.com/products/abc123.jpg",
              "alt": "Blue mug"
            }
          ],
          "type": "SIMPLE",
          "variantId": "string",
          "requiresVariantSelection": false,
          "pinnedVariant": {
            "id": "clvar_abc123",
            "name": "string",
            "attributes": {}
          },
          "variants": [
            {
              "id": "clvar_abc123",
              "name": "string",
              "attributes": {
                "property1": "string",
                "property2": "string"
              },
              "image": {
                "url": "https://cdn.brainerce.com/products/abc123.jpg",
                "alt": "Blue mug"
              },
              "price": "24.00",
              "salePrice": null
            }
          ],
          "originalPrice": "30.00",
          "discountedPrice": "24.00"
        }
      ],
      "discountType": "PERCENTAGE",
      "discountValue": "20",
      "totalOriginalPrice": "30.00",
      "totalDiscountedPrice": "24.00"
    }
  ]
}

Add bundle item

POST
/vc/{connectionId}/cart/{cartId}/bundle
X-Sales-Channel-Origin<token>

For /api/vc/{connectionId}/* routes the connectionId (vc_*) is in the URL path — not a header. Live-mode requests must also send a matching Origin header.

In: header

Path Parameters

connectionIdstring
cartIdstring

Header Parameters

originstring
bundleOfferIdstring

Id of the bundle offer being added.

variantSelections?object

Chosen variant per bundle slot, keyed by the slot/product id.

Empty Object

curl -X POST "https://api.brainerce.com/api/vc/string/cart/string/bundle" \  -H "origin: string" \  -H "Content-Type: application/json" \  -d '{    "bundleOfferId": "string"  }'
{
  "id": "clcrt_abc123",
  "sessionToken": "string",
  "customerId": "string",
  "status": "ACTIVE",
  "currency": "USD",
  "notes": "string",
  "analyticsClientId": "string",
  "analyticsSessionId": "string",
  "subtotal": "39.80",
  "discountAmount": "5.00",
  "ruleDiscountAmount": "0",
  "promoDiscountTotal": "0",
  "couponCode": "WELCOME10",
  "appliedDiscounts": [
    {
      "ruleId": "cldr_abc123",
      "ruleName": "string",
      "type": "PERCENTAGE_OFF",
      "discountAmount": "5.00",
      "description": "string"
    }
  ],
  "nudges": [
    {
      "ruleId": "cldr_abc123",
      "text": "string",
      "type": "AMOUNT_NEEDED",
      "amountNeeded": "12.00",
      "quantityNeeded": 1
    }
  ],
  "items": [
    {
      "productId": "clx1234567890",
      "variantId": "string",
      "quantity": 2
    }
  ],
  "itemCount": 3,
  "hasPriceChanges": false,
  "hasUnavailableItems": false,
  "unavailableItemIds": [],
  "expiresAt": "string",
  "createdAt": "string",
  "updatedAt": "string",
  "reservation": {
    "hasReservation": true,
    "expiresAt": "string",
    "remainingSeconds": 540,
    "strategy": "ON_CART",
    "countdownMessage": "string"
  },
  "recommendations": {},
  "upgrades": {},
  "bundles": {}
}

{
  "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/vc/{connectionId}/cart/{cartId}/bundle"
}

Remove bundle item

DELETE
/vc/{connectionId}/cart/{cartId}/bundle/{bundleOfferId}
X-Sales-Channel-Origin<token>

For /api/vc/{connectionId}/* routes the connectionId (vc_*) is in the URL path — not a header. Live-mode requests must also send a matching Origin header.

In: header

Path Parameters

connectionIdstring
cartIdstring
bundleOfferIdstring

Header Parameters

originstring
curl -X DELETE "https://api.brainerce.com/api/vc/string/cart/string/bundle/string" \  -H "origin: string"
{
  "id": "clcrt_abc123",
  "sessionToken": "string",
  "customerId": "string",
  "status": "ACTIVE",
  "currency": "USD",
  "notes": "string",
  "analyticsClientId": "string",
  "analyticsSessionId": "string",
  "subtotal": "39.80",
  "discountAmount": "5.00",
  "ruleDiscountAmount": "0",
  "promoDiscountTotal": "0",
  "couponCode": "WELCOME10",
  "appliedDiscounts": [
    {
      "ruleId": "cldr_abc123",
      "ruleName": "string",
      "type": "PERCENTAGE_OFF",
      "discountAmount": "5.00",
      "description": "string"
    }
  ],
  "nudges": [
    {
      "ruleId": "cldr_abc123",
      "text": "string",
      "type": "AMOUNT_NEEDED",
      "amountNeeded": "12.00",
      "quantityNeeded": 1
    }
  ],
  "items": [
    {
      "productId": "clx1234567890",
      "variantId": "string",
      "quantity": 2
    }
  ],
  "itemCount": 3,
  "hasPriceChanges": false,
  "hasUnavailableItems": false,
  "unavailableItemIds": [],
  "expiresAt": "string",
  "createdAt": "string",
  "updatedAt": "string",
  "reservation": {
    "hasReservation": true,
    "expiresAt": "string",
    "remainingSeconds": 540,
    "strategy": "ON_CART",
    "countdownMessage": "string"
  },
  "recommendations": {},
  "upgrades": {},
  "bundles": {}
}

On this page

No Headings