Create selling plans with same options but different billing causes an error

Topic summary

Main issue: Creating multiple Shopify subscription selling plans in one selling plan group with identical “options” but different billing cycles (e.g., deliver every month; bill every 4 vs 6 months) triggered the error: “Options Cannot have multiple selling plans with the same options.”

Reason: “options” are used by themes to display purchase choices; each selling plan in a group must have a unique combination of options.

Solution proposed and confirmed:

  • Define multiple option dimensions at the group level, e.g., [“Delivery every”, “Bill every”].
  • Assign unique option values per plan:
    • Plan 1 options: [“1 MONTH”, “4 MONTH”], with billingPolicy intervalCount: 4; deliveryPolicy intervalCount: 1.
    • Plan 2 options: [“1 MONTH”, “6 MONTH”], with billingPolicy intervalCount: 6; deliveryPolicy intervalCount: 1.

Outcome: This structure allows different billing cycles within a single selling plan group without creating separate contracts and avoids the duplicate options error.

Notes:

  • The provided mutation example (code snippet) is central to implementation.
  • Status: Resolved with a clear mutation pattern; no remaining open questions identified.
Summarized with AI on March 2. AI used: gpt-5.

We want to create selling plans with the same options but with different billing cycles in a single contract for e.g let’s check the below query with deliver every month but billing should be 4 months, and 6 months.

mutation {
            sellingPlanGroupCreate(
              input: {
                appId: "WS-Subscription"
                name: "Yearly Subscript prepaid"
                merchantCode: "Yearly Prepaid"
                options: ["Delivery every"]
                position: 1
                sellingPlansToCreate: [{ 
            name: "Deliver every month Bill 4 moth",
            options: "1 MONTH",
            position: 1,
            billingPolicy: { recurring: { interval: MONTH, intervalCount: 4 } },
            deliveryPolicy: { recurring: { interval: MONTH, intervalCount: 1 } },
            pricingPolicies: [
        {
          fixed: {
            adjustmentType:  PERCENTAGE
            adjustmentValue: { percentage :30 }
          }
        }
      ]
           },{ 
            name: "Deliver Every month Bill 6 month",
            options: "1 MONTH",
            position: 2,
            billingPolicy: { recurring: { interval: MONTH, intervalCount: 6 } },
            deliveryPolicy: { recurring: { interval: MONTH, intervalCount: 1 } },
            pricingPolicies: [
        {
          fixed: {
            adjustmentType:  PERCENTAGE
            adjustmentValue: { percentage :20 }
          }
        }
      ]
           }]
              },
              resources: { productIds: ["gid://shopify/Product/6569815703721"], productVariantIds: [] }
            ) {
              sellingPlanGroup {
                id
                sellingPlans(first:10) {
                  edges {
                    node {
                      id
                    }
                  }
                }
              }
              userErrors {
                field
                message
              }
            }
          }

and we get following errors

[ { field: [ 'input', 'sellingPlansToCreate', '0', 'options' ],
    message:
     'Options Cannot have multiple selling plans with the same options.' },
  { field: [ 'input', 'sellingPlansToCreate', '1', 'options' ],
    message:
     'Options Cannot have multiple selling plans with the same options.' } ]

So my question is Shopify should allow users to create plans like this, Why do they have to create different contracts to achieve this. It should be achieve in one contract with selling plan group.

Hope you understand the question and gave the appropriate solution.

Thanks in advance.

Hi,

Options are usually used by theme to display the purchase options, that’s why we do not allow it to be the same.

You should be able to get around it by having 2 options:

sellingPlanGroup.options: [“Deliver every”, “Bill every”]

sellingPlan1.options: [“1 month”, “4 month”]

sellingPlan2.options: [“1 month”, “6 month”]

Hope this helps.

Okay, Understood,

But my question is still the same how do I achieve to create plans like https://prnt.sc/1sizmfi. So, customers can bill at different times.

Can you suggest to me how do I pass the query to create plans like that because as I mentioned in my query sends me an error.

The mutation would look something like this:

mutation {
            sellingPlanGroupCreate(
              input: {
                appId: "WS-Subscription"
                name: "Yearly Subscript prepaid"
                merchantCode: "Yearly Prepaid"
                options: ["Delivery every", "Bill every"]
                position: 1
                sellingPlansToCreate: [{ 
            name: "Deliver every month Bill 4 moth",
            options: ["1 MONTH", "4 MONTH"],
            position: 1,
            billingPolicy: { recurring: { interval: MONTH, intervalCount: 4 } },
            deliveryPolicy: { recurring: { interval: MONTH, intervalCount: 1 } },
            pricingPolicies: [
        {
          fixed: {
            adjustmentType:  PERCENTAGE
            adjustmentValue: { percentage :30 }
          }
        }
      ]
           },{ 
            name: "Deliver Every month Bill 6 month",
            options: ["1 MONTH", "6 MONTH"],
            position: 2,
            billingPolicy: { recurring: { interval: MONTH, intervalCount: 6 } },
            deliveryPolicy: { recurring: { interval: MONTH, intervalCount: 1 } },
            pricingPolicies: [
        {
          fixed: {
            adjustmentType:  PERCENTAGE
            adjustmentValue: { percentage :20 }
          }
        }
      ]
           }]
              },
              resources: { productIds: ["gid://shopify/Product/6569815703721"], productVariantIds: [] }
            ) {
              sellingPlanGroup {
                id
                sellingPlans(first:10) {
                  edges {
                    node {
                      id
                    }
                  }
                }
              }
              userErrors {
                field
                message
              }
            }
          }