# Create a new subscription group (selling plan group) Creates a new subscription group with one or more selling plans in Shopify. A subscription group is a container for selling plans that can be applied to products and variants. Each group can contain multiple plans with different frequencies, discounts, and delivery schedules. Key Features: - Create multiple subscription plans within a single group - Configure complex discount tiers (up to 2 levels + custom cycles) - Set up free trials with automatic discount transitions - Define prepaid plans (PAY_AS_YOU_GO_PREPAID) with custom billing cycles - Configure member-only plans with tag-based access control - Set specific delivery dates (e.g., 15th of every month) - Add all products from store or specific collection automatically Discount Configuration: - First discount tier: Applied from a specific cycle (afterCycle1) - Second discount tier: Applied from another cycle (afterCycle2) - Additional cycles: Configure via appstleCycles for complex scenarios - Free trials: Automatically configure 100% discount for trial period Product Assignment: - Assign specific products via productIds field in request body - Assign specific variants via variantIds field in request body - Use isAddAllProduct=true to add all store products - Use collectionId with isAddAllProduct=true to add all products from a collection Authentication: Requires valid X-API-Key header Endpoint: POST /api/external/v2/subscription-groups Version: 0.0.1 ## Header parameters: - `X-API-Key` (string, required) API Key for authentication Example: "sk_live_1234567890abcdef" ## Query parameters: - `isAddAllProduct` (boolean) Add all products from the store or collection to this subscription group. When true without collectionId: adds all active products in the store. When true with collectionId: adds all products from the specified collection. This operation runs asynchronously and may take time for large catalogs. - `collectionId` (string) Shopify collection ID to limit product addition when isAddAllProduct is true. Format: numeric ID without gid prefix (e.g., '123456789' not 'gid://shopify/Collection/123456789') Example: 123456789 - `api_key` (string) API Key (Deprecated - Use X-API-Key header instead) ## Request fields (application/json): - `id` (integer) - `productCount` (integer) - `productVariantCount` (integer) - `subscriptionPlans` (array) - `subscriptionPlans.frequencyCount` (integer) - `subscriptionPlans.frequencyInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.billingFrequencyCount` (integer) - `subscriptionPlans.payAsYouGoPrepaidBillingFrequencyCount` (integer) - `subscriptionPlans.billingFrequencyInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.frequencyName` (string) - `subscriptionPlans.frequencyDescription` (string) - `subscriptionPlans.discountOffer` (number) - `subscriptionPlans.discountOffer2` (number) - `subscriptionPlans.afterCycle1` (integer) - `subscriptionPlans.afterCycle2` (integer) - `subscriptionPlans.discountType` (string) Enum: "PERCENTAGE", "FIXED", "PRICE" - `subscriptionPlans.discountType2` (string) Enum: "PERCENTAGE", "FIXED", "PRICE" - `subscriptionPlans.discountEnabled` (boolean) - `subscriptionPlans.discountEnabled2` (boolean) - `subscriptionPlans.discountEnabledMasked` (boolean) - `subscriptionPlans.discountEnabled2Masked` (boolean) - `subscriptionPlans.frequencyType` (string) Enum: "ON_PURCHASE_DAY", "ON_SPECIFIC_DAY" - `subscriptionPlans.specificDayValue` (integer) - `subscriptionPlans.specificMonthValue` (integer) - `subscriptionPlans.specificDayEnabled` (boolean) - `subscriptionPlans.maxCycles` (integer) - `subscriptionPlans.minCycles` (integer) - `subscriptionPlans.cutOff` (integer) - `subscriptionPlans.prepaidFlag` (string) - `subscriptionPlans.idNew` (string) - `subscriptionPlans.planType` (string) Enum: "PAY_AS_YOU_GO", "PREPAID", "ADVANCED_PREPAID", "PAY_AS_YOU_GO_PREPAID" - `subscriptionPlans.deliveryPolicyPreAnchorBehavior` (string) Enum: "ASAP", "NEXT", "$UNKNOWN" - `subscriptionPlans.freeTrialEnabled` (boolean) - `subscriptionPlans.freeTrialCount` (integer) - `subscriptionPlans.freeTrialInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.memberOnly` (boolean) - `subscriptionPlans.nonMemberOnly` (boolean) - `subscriptionPlans.memberInclusiveTags` (string) - `subscriptionPlans.memberExclusiveTags` (string) - `subscriptionPlans.formFieldJson` (string) - `subscriptionPlans.upcomingOrderEmailBuffer` (integer) - `subscriptionPlans.frequencySequence` (integer) - `subscriptionPlans.groupName` (string) - `subscriptionPlans.groupId` (integer) - `subscriptionPlans.repeatingCycle` (boolean) - `subscriptionPlans.repeatingNumberOfCycle` (integer) - `subscriptionPlans.keepOriginalNextBillingDateAfterTrial` (boolean) - `subscriptionPlans.defaultSelectedPlan` (boolean) - `subscriptionPlans.inventoryPolicyReserve` (string) Enum: "ON_FULFILLMENT", "ON_SALE", "$UNKNOWN" - `subscriptionPlans.appstleCycles` (array) - `subscriptionPlans.appstleCycles.afterCycle` (integer) The billing cycle number after which this pricing applies Example: 3 - `subscriptionPlans.appstleCycles.discountType` (string) Type of discount to apply in pricing cycles Enum: "PERCENTAGE", "FIXED", "PRICE", "SHIPPING", "FREE_PRODUCT", "PERCENTAGE", "FIXED", "PRICE", "SHIPPING", "FREE_PRODUCT" - `subscriptionPlans.appstleCycles.value` (number) Discount value. For PERCENTAGE: 0-100 (e.g., 10 for 10% off). For FIXED: amount to subtract from price. For PRICE: new fixed price. For SHIPPING: shipping discount amount. For FREE_PRODUCT: not used (set freeVariantId or freeProductHandle instead) Example: 10 - `subscriptionPlans.appstleCycles.freeVariantId` (integer) Variant ID of a free product to add when discountType is FREE_PRODUCT Example: 42549172011164 - `subscriptionPlans.appstleCycles.freeProductHandle` (string) Product handle of a free product to add when discountType is FREE_PRODUCT Example: "free-gift-product" - `subscriptionPlans.appstleCycles.repeatingCycle` (boolean) Whether this pricing should repeat for subsequent cycles Example: true - `subscriptionPlans.appstleCycles.repeatingNumberOfCycle` (integer) Number of cycles to repeat this pricing for when repeatingCycle is true Example: 6 - `subscriptionPlans.appstleCycles.preventDuplicationFreeProduct` (boolean) Prevent adding duplicate free products if already in cart Example: true - `productIds` (string) - `productId` (string) - `variantIds` (string) - `accessoryProductIds` (string) - `updateProducts` (object) - `updateProducts.allProduct` (boolean) - `updateProducts.collectionId` (string) - `updateProducts.deleteAllProduct` (boolean) - `updateProducts.productDetails` (string) - `updateProducts.variantDetails` (string) - `deleteProducts` (object) - `translations` (string) ## Response 201 fields (application/json): - `id` (integer) - `productCount` (integer) - `productVariantCount` (integer) - `subscriptionPlans` (array) - `subscriptionPlans.frequencyCount` (integer) - `subscriptionPlans.frequencyInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.billingFrequencyCount` (integer) - `subscriptionPlans.payAsYouGoPrepaidBillingFrequencyCount` (integer) - `subscriptionPlans.billingFrequencyInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.frequencyName` (string) - `subscriptionPlans.frequencyDescription` (string) - `subscriptionPlans.discountOffer` (number) - `subscriptionPlans.discountOffer2` (number) - `subscriptionPlans.afterCycle1` (integer) - `subscriptionPlans.afterCycle2` (integer) - `subscriptionPlans.discountType` (string) Enum: "PERCENTAGE", "FIXED", "PRICE" - `subscriptionPlans.discountType2` (string) Enum: "PERCENTAGE", "FIXED", "PRICE" - `subscriptionPlans.discountEnabled` (boolean) - `subscriptionPlans.discountEnabled2` (boolean) - `subscriptionPlans.discountEnabledMasked` (boolean) - `subscriptionPlans.discountEnabled2Masked` (boolean) - `subscriptionPlans.frequencyType` (string) Enum: "ON_PURCHASE_DAY", "ON_SPECIFIC_DAY" - `subscriptionPlans.specificDayValue` (integer) - `subscriptionPlans.specificMonthValue` (integer) - `subscriptionPlans.specificDayEnabled` (boolean) - `subscriptionPlans.maxCycles` (integer) - `subscriptionPlans.minCycles` (integer) - `subscriptionPlans.cutOff` (integer) - `subscriptionPlans.prepaidFlag` (string) - `subscriptionPlans.idNew` (string) - `subscriptionPlans.planType` (string) Enum: "PAY_AS_YOU_GO", "PREPAID", "ADVANCED_PREPAID", "PAY_AS_YOU_GO_PREPAID" - `subscriptionPlans.deliveryPolicyPreAnchorBehavior` (string) Enum: "ASAP", "NEXT", "$UNKNOWN" - `subscriptionPlans.freeTrialEnabled` (boolean) - `subscriptionPlans.freeTrialCount` (integer) - `subscriptionPlans.freeTrialInterval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR" - `subscriptionPlans.memberOnly` (boolean) - `subscriptionPlans.nonMemberOnly` (boolean) - `subscriptionPlans.memberInclusiveTags` (string) - `subscriptionPlans.memberExclusiveTags` (string) - `subscriptionPlans.formFieldJson` (string) - `subscriptionPlans.upcomingOrderEmailBuffer` (integer) - `subscriptionPlans.frequencySequence` (integer) - `subscriptionPlans.groupName` (string) - `subscriptionPlans.groupId` (integer) - `subscriptionPlans.repeatingCycle` (boolean) - `subscriptionPlans.repeatingNumberOfCycle` (integer) - `subscriptionPlans.keepOriginalNextBillingDateAfterTrial` (boolean) - `subscriptionPlans.defaultSelectedPlan` (boolean) - `subscriptionPlans.inventoryPolicyReserve` (string) Enum: "ON_FULFILLMENT", "ON_SALE", "$UNKNOWN" - `subscriptionPlans.appstleCycles` (array) - `subscriptionPlans.appstleCycles.afterCycle` (integer) The billing cycle number after which this pricing applies Example: 3 - `subscriptionPlans.appstleCycles.discountType` (string) Type of discount to apply in pricing cycles Enum: "PERCENTAGE", "FIXED", "PRICE", "SHIPPING", "FREE_PRODUCT", "PERCENTAGE", "FIXED", "PRICE", "SHIPPING", "FREE_PRODUCT" - `subscriptionPlans.appstleCycles.value` (number) Discount value. For PERCENTAGE: 0-100 (e.g., 10 for 10% off). For FIXED: amount to subtract from price. For PRICE: new fixed price. For SHIPPING: shipping discount amount. For FREE_PRODUCT: not used (set freeVariantId or freeProductHandle instead) Example: 10 - `subscriptionPlans.appstleCycles.freeVariantId` (integer) Variant ID of a free product to add when discountType is FREE_PRODUCT Example: 42549172011164 - `subscriptionPlans.appstleCycles.freeProductHandle` (string) Product handle of a free product to add when discountType is FREE_PRODUCT Example: "free-gift-product" - `subscriptionPlans.appstleCycles.repeatingCycle` (boolean) Whether this pricing should repeat for subsequent cycles Example: true - `subscriptionPlans.appstleCycles.repeatingNumberOfCycle` (integer) Number of cycles to repeat this pricing for when repeatingCycle is true Example: 6 - `subscriptionPlans.appstleCycles.preventDuplicationFreeProduct` (boolean) Prevent adding duplicate free products if already in cart Example: true - `productIds` (string) - `productId` (string) - `variantIds` (string) - `accessoryProductIds` (string) - `updateProducts` (object) - `updateProducts.allProduct` (boolean) - `updateProducts.collectionId` (string) - `updateProducts.deleteAllProduct` (boolean) - `updateProducts.productDetails` (string) - `updateProducts.variantDetails` (string) - `deleteProducts` (object) - `translations` (string) ## Response 400 fields ## Response 401 fields ## Response 403 fields ## Response 422 fields