Skip to main content
Question

Best way to grant monthly credits for annual subscriptions?

  • April 16, 2026
  • 1 reply
  • 10 views

Forum|alt.badge.img

Hey,

I’m trying to model a yearly subscription where users pay upfront for 1 year, but receive credits monthly (e.g. X credits every month instead of all upfront).

What’s the recommended way to handle a yearly subscription where users pay upfront for 1 year, but receive credits monthly (e.g. X credits each month instead of all at once)?

Is this supported natively with Virtual Currency, or is there a different recommended approach?

Would appreciate guidance on best practices here.

 

Specifically:

  • Is there a native way to distribute credits monthly for annual subscribers?

  • How to handle properly:

    • ensuring credits are granted once per month (not duplicated)

    • handling edge cases like renewal / cancellation mid-cycle

1 reply

matt-heaney
RevenueCat Staff
Forum|alt.badge.img+4
  • RevenueCat Staff
  • April 20, 2026

Hey there,

 

This is Matt from RevenueCat. Thanks for the question, this is a really interesting idea!

 

Unfortunately, this isn’t something currently offered within RevenueCat. However, I have pitched the idea internally as a feature request. This is because virtual currency allocation is tied to the billing cycle, so currently the grant would be attached to the subscription start/renewal events for the entire year.

 

This could be possible to achieve, but it would require your own additional backend layer. This would involve not linking the virtual currency directly to the subscription, and instead using the API to grant these credits at set intervals.

 

More information on the APIs for virtual currency can be found here:
https://www.revenuecat.com/docs/api-v2#tag/Customer/operation/update-virtual-currencies-balance

 

In this approach, your backend would listen for webhooks for when a yearly subscription has started or renewed. When this happens, you would use the API to issue the first credit grant, and then set this up to grant credits monthly, validating that the subscription is still active before each grant. You would also want to track the last grant date to avoid any risk of duplicate grants.

 

If the user refunds the purchase during the year, your backend can receive a webhook for this, allowing you to stop any additional grants.

 

For renewals, you could allow the scheduled grants to continue. Cancellations would stop the subscription at the end of the year, meaning this could be handled by stopping the schedule at the subscription expiry. An important detail here is that a cancellation only prevents the subscription from renewing, it can still remain active until the expiry date. The expiry event is when the subscription has actually ended.

 

All events, such as subscription starts, cancellations, expirations, and renewals, are shared as webhooks, which can be used by your backend to manage this logic.

 

Examples of the webhooks can be found here:
https://www.revenuecat.com/docs/integrations/webhooks/sample-events

 

Please let me know if I can dive into any of these aspects further. I hope this helps!