How can I implement time-based plans in an embedded app?

Topic summary

Implementing time-based plans in a Shopify embedded app; seeking clarity on app subscription mechanics and testing. The author has read billing/subscription docs but is unsure about core concepts.

Key questions:

  • Should a free plan be created via the appSubscriptionCreate GraphQL mutation, or only the two paid plans require subscriptions?
  • How to allow users to choose a plan and cancel next month’s renewal while keeping access until the end of the current billing period. Using appSubscriptionCancel sets status to CANCELLED and removes it from active subscriptions; is there a way to keep it active until term end? If not, what is the correct process to end a subscription, and when should the prorate argument (for refunds/partial period adjustments) be used?
  • Can the end of a subscription be simulated to test webhook handling and verify correctness?

Central terms:

  • appSubscriptionCreate/appSubscriptionCancel: GraphQL mutations to create/cancel app billing subscriptions.
  • prorate: argument controlling refund/adjustments on cancellation.
  • webhook: event callback to notify about subscription changes.

No answers or decisions yet; the thread remains open with unresolved questions.

Summarized with AI on December 31. AI used: gpt-5.

Hello, I’m currently working on an embedded app.
I would like to add time-based plans to my application, and I have already reviewed the subscription documentation, but I don’t fully understand their concepts. That’s why I have a few questions:

  1. The application will have 3 plans: 2 paid and one free. Should I also create subscriptions using the “appSubscriptionCreate” GraphQL mutation for the free plan? Or should I create these plans only for the paid options?

  2. I would like users to be able to choose their subscription and optionally cancel its renewal next month. So that after cancellation, it lasts until the end and does not renew after it ends. Is this possible? After using the “appSubscriptionCancel” mutation, the subscription is “CANCELLED” and does not appear in the active subscriptions of the application, but I would like it to continue until its end. If it is not possible to leave the subscription active after cancellation, what are the requirements for ending the subscription? Is it necessary to use the “appSubscriptionCancel” mutation and the “prorate” argument for refunding payments?

  3. Is it possible to simulate the end of a subscription? So I can check the correctness of the webhook operation.