Call `sellingPlanGroupCreate` with a `SellingPlanGroupInput` that includes `name`, `merchantCode` (a unique identifier for your app's plan group), and a `sellingPlans` array containing at least one `SellingPlanInput`
For each selling plan, define `name`, `options` (e.g., `[{name: "Delivery every", value: "1 Month"}]`), `billingPolicy` (either `SellingPlanRecurringBillingPolicyInput` with `interval` and `intervalCount`), and `deliveryPolicy` (recurring with the same cadence)
Optionally include a `pricingPolicies` array to define a percentage or fixed discount for subscribers — use `SellingPlanRecurringPricingPolicyInput` with `adjustmentType: PERCENTAGE` and `adjustmentValue: {percentage: 10.0}`
After creating the group, associate it with products or variants using `sellingPlanGroupAddProducts` or `sellingPlanGroupAddProductVariants` mutations, passing the plan group GID and the product/variant GIDs
Verify the association by querying `product.sellingPlanGroups` on a linked product via the Storefront API to confirm the plan appears at checkout
Test subscription checkout by selecting the selling plan in a storefront and confirming the discounted price and billing cadence display correctly
Known gotchas
A selling plan group must have at least one selling plan; creating an empty group is allowed but it will not surface in checkout until at least one plan with billing and delivery policies is present
The `merchantCode` must be unique per app per store; reusing a code across multiple plan groups causes a conflict error — use a namespaced identifier (e.g., your-app:monthly-subscribe-save)
Selling plans created via the API are not automatically associated with any product; you must explicitly call sellingPlanGroupAddProducts or sellingPlanGroupAddProductVariants after group creation
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp