Update Bundle Group

Updates the name, description, start date, and end date of an existing product bundle group. Only provided fields will be updated. Triggers a sync event if the bundle group is compliant.

PATCH/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}
API
Management
Updated
Apr 26, 2026

management-api:PATCH:/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}

Updates the name, description, start date, and end date of an existing product bundle group. Only provided fields will be updated. Triggers a sync event if the bundle group is compliant.

API ownership

  • API family: Management API
  • Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data.
  • Do not use from: Browser-only storefront code or public clients.
  • Guide route: /apis/management/latest

The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation.

Operation

  • Method: PATCH
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/bundle-groups/\{bundle_group_id\}
  • Summary: Update Bundle Group
  • Description: Updates the name, description, start date, and end date of an existing product bundle group. Only provided fields will be updated. Triggers a sync event if the bundle group is compliant.
  • OpenAPI contract: management-api
  • Operation ID: Not documented in the OpenAPI contract.

Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID.

Parameters3 parameters
NameInRequiredTypeDescription
app_slugpathYesstringApp slug
team_slugpathYesstringTeam slug
product_bundle_group_idpathYesstringProduct bundle group UUID
Request bodyDocumented body
  • Required: Yes
  • Description: Product bundle data
  • Content: application/json (object)

Create Product Bundle Payload

PropertyTypeRequiredDetails
discount_percentageintegerNomin: 0, max: 100 Used if discount_type is relative. This will apply to all markets it's added to
discount_typeenum("relative", "fixed")No-
discountsobject[]Yes-
statusenum("active", "draft", "inactive")NoStatus of the bundle

Bundle Group Discount

PropertyTypeRequiredDetails
amount_centsintegerNomin: 0
currency_codestringNo-

Generated example (synthetic):

{
  "discount_percentage": 0,
  "discount_type": "relative",
  "discounts": [
    {
      "amount_cents": 0,
      "currency_code": "string"
    }
  ],
  "status": "active"
}
Responses4 statuses
StatusDescriptionContent
200Product created or updated successfullyapplication/json (object)
400Invalid request (e.g. bad UUID, validation error)application/json (object)
401Unauthorized accessapplication/json (object)
500Internal server errorapplication/json (object)

200 - object

Product Bundle Group Response

PropertyTypeRequiredDetails
dataobjectNo-
detailsstring[]NoAdditional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes
successbooleanNo-
Bundle Group
PropertyTypeRequiredDetails
bundlesobject[]NoBundles associated with the group
complianceobjectNoCompliance level for the bundle group, "none" means that there is no valid/complete configuration, "partial" means that some of the rules are valid, "full" means that all rules are valid
created_atstringNoCreation timestamp
descriptionstringNo-
end_datestringNoEnd date of the bundle group
idstringNoID
marketsobject[]NoMarkets associated with the bundle group
namestringNoName of the bundle group
start_datestringNoStart date of the bundle group
translationsobjectNoBundle group translations
updated_atstringNoLast updated timestamp
Bundle
PropertyTypeRequiredDetails
attributesobject[]No-
compliantobjectNoCompliance level for the bundle
created_atstringNoCreation timestamp
discount_percentageintegerNoDiscount percentage [1-100]
discount_typestringNoDiscount type [fixed, relative]
discountsobjectNoDiscount for bundle. Amount is stored in cents
idstringNoID
rulesobject[]NoBundle rules
statusstringNoStatus of the bundle
updated_atstringNoLast updated timestamp
Compliance
PropertyTypeRequiredDetails
infostring[]NoExplanation of any issues with the bundle, it will be empty if the bundle is fully compliant
levelstringNoCompliance level for the bundle, "full" if all rules are valid, "partial" if some rules are valid but it can still be used as a bundle, "none" if no rules are valid
Bundle Group Market
PropertyTypeRequiredDetails
activebooleanNo-
country_codesstring[]No-
created_atstringNo-
currency_codestringNo-
idstringNo-
localestringNo-
namestringNo-
slugstringNo-
store_group_idstringNoStore group ID
store_group_slugstringNoStore group slug
updated_atstringNo-
Bundle Group Translation
PropertyTypeRequiredDetails
descriptionobject[]No-
nameobject[]No-
{
  "data": {
    "bundles": [
      {
        "attributes": [],
        "compliant": {
          "info": null,
          "level": null
        },
        "created_at": "string",
        "discount_percentage": 0,
        "discount_type": "string",
        "discounts": {},
        "id": "string",
        "rules": [],
        "status": "string",
        "updated_at": "string"
      }
    ],
    "compliance": {
      "info": [
        "string"
      ],
      "level": "string"
    },
    "created_at": "string",
    "description": "string",
    "end_date": "string",
    "id": "string",
    "markets": [
      {
        "active": false,
        "country_codes": [],
        "created_at": "string",
        "currency_code": "string",
        "id": "string",
        "locale": "string",
        "name": "string",
        "slug": "string",
        "store_group_id": "string",
        "store_group_slug": "string",
        "updated_at": "string"
      }
    ],
    "name": "string",
    "start_date": "string",
    "translations": {
      "description": [
        {
          "id": null,
          "locale": null,
          "value": null
        }
      ],
      "name": [
        {
          "id": null,
          "locale": null,
          "value": null
        }
      ]
    },
    "updated_at": "string"
  },
  "details": [
    "string"
  ],
  "success": false
}

400 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

401 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

500 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

Contract identity

Use these fields to confirm you are implementing the intended endpoint contract.

  • API family: Management API
  • Method: PATCH
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/bundle-groups/\{bundle_group_id\}
  • Operation ID: Not documented in the OpenAPI contract.
  • OpenAPI tag: Product Bundle Groups
  • OpenAPI summary: Update Bundle Group

Update Bundle Group

# Update Bundle Group Updates the name, description, start date, and end date of an existing product bundle group. Only provided fields will be updated. Triggers a sync event if the bundle group is compliant.
PATCH /api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}
Purpose

Updates the name, description, start date, and end date of an existing product bundle group.

Required inputs

app_slug path team_slug path product_bundle_group_id path

Primary response

200 ยท Product created or updated successfully

Operation key

management-api:PATCH:/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}

## API ownership - API family: Management API - Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data. - Do not use from: Browser-only storefront code or public clients. - Guide route: [/apis/management/latest](/apis/management/latest) The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation. ## Operation - Method: `PATCH` - Path: `/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}` - Summary: Update Bundle Group - Description: Updates the name, description, start date, and end date of an existing product bundle group. Only provided fields will be updated. Triggers a sync event if the bundle group is compliant. - OpenAPI contract: management-api - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:PATCH:/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}` Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID. ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | app_slug | path | Yes | string | App slug | | team_slug | path | Yes | string | Team slug | | product_bundle_group_id | path | Yes | string | Product bundle group UUID | ## Request body - Required: Yes - Description: Product bundle data - Content: application/json (object) ### Create Product Bundle Payload | Property | Type | Required | Details | | --- | --- | --- | --- | | `discount_percentage` | integer | No | min: 0, max: 100 Used if discount_type is relative. This will apply to all markets it's added to | | `discount_type` | enum("relative", "fixed") | No | - | | `discounts` | object[] | Yes | - | | `status` | enum("active", "draft", "inactive") | No | Status of the bundle | #### Bundle Group Discount | Property | Type | Required | Details | | --- | --- | --- | --- | | `amount_cents` | integer | No | min: 0 | | `currency_code` | string | No | - | **Generated example (synthetic):** ```json { "discount_percentage": 0, "discount_type": "relative", "discounts": [ { "amount_cents": 0, "currency_code": "string" } ], "status": "active" } ``` ## Responses | Status | Description | Content | | --- | --- | --- | | 200 | Product created or updated successfully | application/json (object) | | 400 | Invalid request (e.g. bad UUID, validation error) | application/json (object) | | 401 | Unauthorized access | application/json (object) | | 500 | Internal server error | application/json (object) | ### 200 - object #### Product Bundle Group Response | Property | Type | Required | Details | | --- | --- | --- | --- | | `data` | object | No | - | | `details` | string[] | No | Additional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes | | `success` | boolean | No | - | ##### Bundle Group | Property | Type | Required | Details | | --- | --- | --- | --- | | `bundles` | object[] | No | Bundles associated with the group | | `compliance` | object | No | Compliance level for the bundle group, "none" means that there is no valid/complete configuration, "partial" means that some of the rules are valid, "full" means that all rules are valid | | `created_at` | string | No | Creation timestamp | | `description` | string | No | - | | `end_date` | string | No | End date of the bundle group | | `id` | string | No | ID | | `markets` | object[] | No | Markets associated with the bundle group | | `name` | string | No | Name of the bundle group | | `start_date` | string | No | Start date of the bundle group | | `translations` | object | No | Bundle group translations | | `updated_at` | string | No | Last updated timestamp | ##### Bundle | Property | Type | Required | Details | | --- | --- | --- | --- | | `attributes` | object[] | No | - | | `compliant` | object | No | Compliance level for the bundle | | `created_at` | string | No | Creation timestamp | | `discount_percentage` | integer | No | Discount percentage [1-100] | | `discount_type` | string | No | Discount type [fixed, relative] | | `discounts` | object | No | Discount for bundle. Amount is stored in cents | | `id` | string | No | ID | | `rules` | object[] | No | Bundle rules | | `status` | string | No | Status of the bundle | | `updated_at` | string | No | Last updated timestamp | ##### Compliance | Property | Type | Required | Details | | --- | --- | --- | --- | | `info` | string[] | No | Explanation of any issues with the bundle, it will be empty if the bundle is fully compliant | | `level` | string | No | Compliance level for the bundle, "full" if all rules are valid, "partial" if some rules are valid but it can still be used as a bundle, "none" if no rules are valid | ##### Bundle Group Market | Property | Type | Required | Details | | --- | --- | --- | --- | | `active` | boolean | No | - | | `country_codes` | string[] | No | - | | `created_at` | string | No | - | | `currency_code` | string | No | - | | `id` | string | No | - | | `locale` | string | No | - | | `name` | string | No | - | | `slug` | string | No | - | | `store_group_id` | string | No | Store group ID | | `store_group_slug` | string | No | Store group slug | | `updated_at` | string | No | - | ##### Bundle Group Translation | Property | Type | Required | Details | | --- | --- | --- | --- | | `description` | object[] | No | - | | `name` | object[] | No | - |
Generated example (synthetic) ```json { "data": { "bundles": [ { "attributes": [], "compliant": { "info": null, "level": null }, "created_at": "string", "discount_percentage": 0, "discount_type": "string", "discounts": {}, "id": "string", "rules": [], "status": "string", "updated_at": "string" } ], "compliance": { "info": [ "string" ], "level": "string" }, "created_at": "string", "description": "string", "end_date": "string", "id": "string", "markets": [ { "active": false, "country_codes": [], "created_at": "string", "currency_code": "string", "id": "string", "locale": "string", "name": "string", "slug": "string", "store_group_id": "string", "store_group_slug": "string", "updated_at": "string" } ], "name": "string", "start_date": "string", "translations": { "description": [ { "id": null, "locale": null, "value": null } ], "name": [ { "id": null, "locale": null, "value": null } ] }, "updated_at": "string" }, "details": [ "string" ], "success": false } ```
### 400 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 401 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 500 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ## Contract identity Use these fields to confirm you are implementing the intended endpoint contract. - API family: Management API - Method: `PATCH` - Path: `/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}` - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:PATCH:/api/v1/{team_slug}/{app_slug}/bundle-groups/{bundle_group_id}` - OpenAPI tag: Product Bundle Groups - OpenAPI summary: Update Bundle Group