Subscription Manager
Subscription Manager allows Drupal administrators to grant authenticated users subscriptions that are linked to specific roles. It integrates with external billing services through connector plugins, enabling the sale of access that grants users specific permissions on the Drupal site, such as access to certain content.
Subscription Manager sells access to a Drupal site. A subscriber picks a plan, pays through a billing service, and holds the roles the plan grants for as long as the subscription is active. The module owns the local model — plans, subscriptions, charges, role grants and revocations, the subscriber-facing pages — and leaves the money to connector plugins, one per billing service.
Connectors come in two modes, and a site can run both behind a chooser that lets a subscriber pick the payment rail:
- Self-scheduling — the billing service owns the contract and its renewals (Stripe subscriptions, Recharge, Chargebee, Shopify). The connector mirrors the remote state into local subscriptions, mostly from webhooks, and the service's own customer portal handles changes.
- Charge-based — the billing service only holds a reusable payment instrument (a bank-debit mandate, a vaulted card) and Subscription Manager runs the billing cycle itself: when and how much to charge, including metered usage, every charge recorded, failed payments retried on a schedule with a grace period (dunning), reversals and refunds, cancellation at period end, and a native management page where a subscriber can cancel, resume, update their payment method or change plan. Suited to rails like GoCardless or Helcim that offer a payment primitive rather than a subscription product.
Features
- Plans synced from the billing service; each grants a set of roles and selects its scheduling mode.
- One active subscription per user, with roles granted and revoked from a snapshot taken at grant time, so a plan edited or deleted later cannot leave a former subscriber with access.
- A subscribe flow with a connector chooser, a management page (the service's hosted portal, or the native one), and a billing history with invoice links.
- Dunning: scheduled retries, a grace period, suspension and recovery, a policy for payer-initiated reversals, optional built-in mails, and events for sites that notify their own way.
- Seams for metered usage (tagged usage raters) and for tax calculation and invoicing (a replaceable service, so a bridge module can plug in a tax engine).
- JSON endpoints and
drupalSettingsfor decoupled front ends; Drush commands for syncing, reconciling and resolving duplicate subscriptions; default Views listings. - Remote billing is stopped when a subscriber's account is deleted, with the identifiers logged for an operator when a connector cannot do it by API.
The README documents the module for subscribers, site builders, operators, connector maintainers and developers.
Connector modules
- Stripe Subscription
- Recharge Subscription
- Chargebee Subscription
- Shopify Subscription (Shopify native subscriptions)
These connectors were written against 1.0.0-beta3 and need updating for the API changes since; each change is documented in a change record, and a catch-up issue will be filed in each connector's queue once 1.0.0-beta7 is released. Planned charge-based connectors: GoCardless (#3616779: GoCardless connector module (bank debit: Bacs, SEPA, ACH, PAD)) and Helcim (#3618742: Helcim connector module (charge-based card payments, CAD/USD)).
Requirements
Drupal 11.3 or later (Drupal 12 support is planned for 1.0.0). Core's Options and User modules. At least one connector module.
Current status
Beta. The stable-release roadmap tracks what remains before 1.0.0; pre-1.0 releases make breaking changes without a compatibility layer, each with a change record.
Depends on
Dependencies of the latest stable release
No dependencies recorded for this project.
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
Activity
Release Timeline
Releases
| Version | Type | Core | Release date | |
|---|---|---|---|---|
| 1.0.0-beta6 | Pre-release | 10–11 | Sep 14, 2026 | |
| 1.0.0-beta5 | Pre-release | 10–11 | Sep 14, 2026 | |
| 1.0.0-beta4 | Pre-release | 10–11 | Sep 14, 2026 | |
| 1.0.0-beta3 | Pre-release | 9–11 | Sep 14, 2026 | |
| 1.0.0-beta2 | Pre-release | 9–11 | Jun 11, 2026 | |
| 1.0.0-beta1 | Pre-release | 9–11 | May 26, 2026 |