Power up your Magento 2 store with recurring billing, subscriptions, and auto-shipments.
OverviewBack to top
Give your store the power of subscriptions, auto-shipments, and recurring billing. Recurring revenue is the gold standard for any business: In a world where very little is certain, it gives you something to plan for and rely on. Subscriptions are a way for ecommerce businesses to capitalize on this idea. You have a product or service that customers want on an ongoing basis. Why not give them a way to do that? It gives your customer what they want, and it gives you dependable revenue and loyalty to boot. The best customer is one that keeps coming back, and subscriptions are a way to ensure that.
Adaptive Subscriptions brings this model to Magento 2, in a way that is both powerful and highly flexible.
We at ParadoxLabs have been dealing with 'recurring profiles' for years on Magento. We wanted to create a new system that would overcome all of the limitations of recurring profiles, as well as meet a lot of needs and business cases that recurring profiles simply were not capable of. This extension is the result of all of that expertise, plus months of planning and careful development by our crack team of Magento 2 specialists.
This is not software as a service. There are no ongoing fees. Just a top-notch extension you can extend and modify as you please. If you buy a license, it's yours—and we'll throw in free updates and support for the lifetime of the extension.
NOTE: Payment method support is limited. Adaptive Subscriptions requires a stored-card payment method built on the Magento Vault or on our proprietary TokenBase platform. Right now, that means ParadoxLabs Authorize.Net CIM, ParadoxLabs First Data Payeezy, ParadoxLabs Stripe, PayPal PayFlow Pro, and Braintree. Third-party Vault-capable payment methods may also be compatible. We plan to expand this list over time. If you have a specific request, please let us know.
What can Adaptive Subscriptions do?
You have a recurring revenue model in mind? Adaptive Subscriptions can probably handle it. And if it isn't supported out-of-box, get in touch with us and we'll help you figure out what's involved. We're always looking for ways to make our products better.
But here are some specifics:
- Customers can choose whether to purchase as a subscription or not (if you want).
- Customers can choose the subscription frequency (if you want): Every 30 days? Every 90 days? Their choice.
- Customers can purchase any number of subscriptions and non-subscription items at the same time.
- You can give customers a price discount for buying items with a subscription.
- You can charge customers more or less for the first installment.
- You can make subscriptions a defined length (say 6 installments), or indefinite (they run forever).
- You can choose whether customers are allowed to pause or cancel their subscriptions themselves.
- You can make a subscription of simple, virtual, configurable, and downloadable products.
- You can use coupons and other discounts for the first installment.
- You can group same-day subscriptions, so if a customer has two different subscriptions running at the same time, they get shipped together (saving shipping costs and overhead).
- All shipping methods are supported, and rates are recalculated every time the subscription runs. You don't have to lose out from flat-rate shipping.
- We keep you informed: If a subscription fails, you'll get an email about it. If a subscription fails because of invalid payment information, we'll email the customer too, asking them to update their payment info and reactivate the subscription.
- Admin grids let you track what the status of your subscriptions is, and every change, billing, and failure that has happened recently.
- Every subscription billing creates a new order, and payment is immediately authorized or captured using the data on file.
- All subscription items obey Magento's stock handling.
- You have complete control over when subscriptions bill. By default, all subscriptions are billed automatically by an hourly scheduled task. But you can also turn that task off entirely, and trigger billing from the command line or by selecting individual subscriptions from the admin grid. Want to run your subscriptions manually around the 1st and 15th of the month? You can do that. Want to run one particular subscription ahead of schedule? You can do that too.
- You can change the next billing date and the frequency of each subscription from the admin panel.
- Customers can view the status of their own subscriptions, and update billing and shipping information themselves.
...and so much more.
What's the catch?
We've tried to keep Adaptive Subscriptions as flexible as possible, but there are always tradeoffs. We want to be upfront about ours.
Here are limitations you should be aware of before buying. These are things we have in mind, and plan to work on over time. You are welcome to tackle them yourself—just realize that they aren't things we will officially support.
- Payment method support is limited: Adaptive Subscriptions requires a stored-card payment method built on the Magento Vault or our proprietary TokenBase platform. Right now, that means:
- ParadoxLabs Authorize.Net CIM
- ParadoxLabs First Data: Payeezy
- ParadoxLabs Stripe
- PayPal PayFlow Pro*
- * PayPal PayFlow Pro and Braintree support stored cards via Magento's Vault feature in Magento 2.1 and above. Be aware that the Magento Vault (PayFlow Pro, Braintree) does not support adding or editing credit cards except during checkout.
We plan to expand the list of supported payment methods over time. If you have a specific request, please let us know.
Also, Adaptive Subscriptions 1.1 and above requires Magento 2.1 or higher. If you're using Magento 2.0, Adaptive Subscriptions 1.0.2 is compatible, but requires a ParadoxLabs payment method.
- Multi-currency support is limited: We use Magento's 'original_custom_price' field to override the price of items, but this probably doesn't play nice with currency conversion. If you don't plan on using special pricing for subscriptions (just the normal product price), you won't have any problems.
- Multi-lingual support is limited: We generate custom options with specific labels to let the customer choose their subscription preference. You can probably translate the base language and have everything work fine, but you'll have trouble running subscriptions in two or more languages at the same time.
- You can't have a $0.00 order total. This is a limitation of Magento 2's checkout validation that we haven't worked around yet.
- You can't purchase a subscription as a guest. Customers have to log in or register at checkout. Otherwise, the customer (and you) would have no way to update payment info.
That's it. Really.
We are experienced, certified Magento developers. All of our code is clean, well-documented, and follows all Magento standards and techniques. We make sure to do things the right way.
Our source code is 100% unencoded (viewable source). When you purchase this extension, you get full access to view and modify the source any way you need to (within the terms of the license).
In addition, this extension was carefully planned and architected in order to be as extensible as possible. Internally, you'll find events at all of the right places, and class and method separation that makes it easy to modify or even totally replace large parts of the underlying logic. We wanted a system that we could easily modify to fit requirements and use cases we couldn't think of or accommodate in advance. That works to your benefit too.
We pride ourselves on quality support, which includes free bug fixes and updates for the lifetime of this extension. If you find that it doesn't work as we intended in a standard installation, we'll help you make sure that it does.
Our extensions are used on thousands of stores like yours.
Our staff are all located in the United States, with an office in downtown Lancaster, PA, open weekdays from 8 AM to 5 PM Eastern Time. Have a question, or want to try it out? Give us a call at 717-431-3330, or email us at email@example.com.
Release NotesBack to top
- Compatible with CE: 2.1 2.2
- Compatible with EE: 2.1 2.2
- Stability: Stable Build
- Compatibility fixes for Magento 2.2.
- Improved API support, particularly for subscription create/update.
- Added 'bill' command to API.
- Added AdditionalInformation storage to Log models.
- Added ExtensionAttributes implementation to Subscription and Log models.
- Changed 'Always add custom option' setting default from 'Yes' to 'No'.
- Changed DI proxy argument handling for Magento 2.2 compatibility.
- Changed payment command classnames to fix PHP 7.1 compatibility.
- Fixed error on subscription view if payment card does not exist.
- Fixed possible address data mismatch after editing address book.
- Fixed possible PHP error from improper Address helper inheritance chain.
- Fixed possible static content deploy issues with template comments.
- Fixed REST API permissions handling.
- Fixed subscription price calculation handling of 'initial order adjustment'.
This release adds support for Magento 2.2. It is still compatible with Magento 2.1, but there are some notable code changes from earlier releases. If you have customizations around the extension, these may be significant:
- Added bill(), billbyId() to ParadoxLabs\Subscriptions\Api\SubscriptionRepositoryInterface.
- Added ExtensionAttributesFactory and AttributeValueFactory constructor arguments to ParadoxLabs\Subscriptions\Model\Log.
- Added ExtensionAttributesFactory and AttributeValueFactory constructor arguments to ParadoxLabs\Subscriptions\Model\Subscription.
- Added getId(), setId(), getSubscriptionId(), setSubscriptionId(), getOrderId(), setOrderId(), setCreatedAt(), getAdditionalInformation(), setAdditionalInformation(), getExtensionAttributes(), setExtensionAttributes() to ParadoxLabs\Subscriptions\Api\Data\LogInterface.
- Added ProductMetadata constructor argument to ParadoxLabs\Subscriptions\Model\Service\Subscription.
- Added Service\Subscription constructor argument to ParadoxLabs\Subscriptions\Model\SubscriptionRepository.
- Added setId(), setCreatedat(), setUpdatedAt(), setLastRun(), setRunCount(), getExtensionAttributes(), setExtensionAttributes() to ParadoxLabs\Subscriptions\Api\Data\SubscriptionInterface.
- Changed argument type of ParadoxLabs\TokenBase\Api\Data\CardInterface::setExtensionAttributes().
- Changed paradoxlabs_stored_card 'address' and 'additional' fields from serialized to JSON.
- Changed Proxy constructor arguments throughout modules to inject Proxy via DI configuration.
- Removed Unserialize constructor argument from ParadoxLabs\TokenBase\Model\Card\Context.
- Set quote_payment.additional_information.is_subscription_generated=1 on initial subscription generation in addition to rebilling.
- Compatible with CE: 2.1
- Compatible with EE: 2.1
- Stability: Stable Build
Added 'Bill Now' button to admin subscription view.
Added split database support
Added validation to Intervals product attribute.
Fixed 'no such entity' error on rebilling when customer has no default address.
Fixed button sorting on admin subscription view.
Fixed initialization of subscription AdditionalInfo.
Fixed Magento_Vault compatibility for Magento 2.1.3+.
Fixed shipping not being charged on rebilling (not factoring into grand total).
Fixed unnecessary layout definition on customer account.
Fixed version setting to not reference the database, to allow DB-less compilation.
Added ability to restrict cart promotional rules by the customer's chosen subscription interval.
Fixed totals not being calculated before fetching shipping rates when rebilling (affecting totals-based rates).
Fixed error on subscription edit if customer has no saved addresses.
Fixed multi-website configuration issues on subscription generation.
Fixed multi-website configuration issues on payment method availability check in admin.
Fixed potential pruning of inactive cards associated with active subscriptions.
Fixed admin menu ACL issue.
- Compatible with CE: 2.1
- Compatible with EE: 2.1
- Stability: Stable Build
- Added a setting to skip the custom option for subscription products that have only one option available.
- Improved code for Marketplace Level 2 validation.
- Fixed a composer dependency for Magento 2.1.