Skip to main content
You can use the Subscribe APIs to prevent abuse of free trial offers and other incentives by limiting such offers to one redemption per unique credit or debit card.
  • Use Case Number: 2-2-11
  • Completed By: Software Developer
  • Estimated Completion Time: 5 days

Basic Scenario

Some users attempt to game a system by signing up for a free trial and then canceling that subscription just before the free trial period ends. They then sign up for another free trial and again cancel the subscription just before the free trial period ends. These users repeat this pattern over and over again effectively getting the service for free. This is known as free trial chaining.

Limiting Free Trial Chaining Outside of Subscribe

There are many different strategies that you can employ to prevent users from gaming your service through free trial chaining.
  • Short trial period: You can keep your free trial period relatively short. A seven-day free trial period is common for recurring subscriptions, while some merchants offer even shorter free trial periods. Having a short free trial period makes free trial chaining less appealing as the user has to work harder to keep getting access to your service.
  • Restrict accounts to single email/IP address: To deter users further you can prevent them from creating multiple accounts with the same email address or from the same IP address.
  • Identity management solution: If you are using a sophisticated identity management solution, that solution may be able to detect duplicate users based on demographic information collected at sign-up time and so prevent users from creating multiple accounts.
Most strategies, like those above, are implemented in your storefront and self-care pages and reside in that application in front of Subscribe. As such, the user never reaches Subscribe and Subscribe has no hand in implementing those strategies.

Limiting Free Trial Chaining Using Subscribe

Oftentimes a user will create multiple accounts but will use the same credit card each time. Since Subscribe is the only system that has access to the subscriber’s credit card number, this is a free trial chaining prevention strategy Subscribe does have a hand in. Of course, if the user employs multiple credit cards, then you must rely on upfront strategies as described above for detecting chaining before they get to Subscribe. To prevent free trial chaining based on the user credit card, you use Payment Method Tokenization (PMT) without creating an account or subscription in Subscribe. This creates a PaymentMethod object to validate the card and store the card details. In creating the PaymentMethod object, Subscribe assigns a unique ID (CreditCard VID) to the credit card number and expiration date combination which is stored in a local cache for reference during the buy flow. When you receive your Payment Method VID from PMT, you then call the payment_methods endpoint with that VID and extract the credit card VID from the response. Note: It is important that you use the Credit Card object VID and not the Payment Method object VID. If the CreditCard VID already exists in your local cache, then you know that this card has been previously used by the user to purchase a subscription with a free trial, and the card is therefore ineligible for the free trial. If the CreditCard VID is not detected in the local cache, the card is eligible for the free trial.

Design Approach

When a subscriber requests to start a new subscription with a free trial offer, you first collect a credit or debit card from the subscriber that will be used for payment when the free trial ends. You then use Subscribe PMT. As shown in the diagram below, you can use the following API Sequence:
  1. Utilize Payment Method Tokenization to create the PaymentMethod object and get the Payment Method VID.
  2. Call the payment_methods endpoint using the Payment Method VID and extract the Credit Card VID from the response. You must store the CreditCard VID in a local cache.
  3. Compare the Credit Card VID against your local cache to determine whether the credit card VID is present.
    • If the credit card has been previously used for the free trial, the CreditCard VID is detected in the local cache, and the subscription is not created. You should direct the subscriber to choose a fully paid billing plan.
    • If the CreditCard VID is not detected in the local cache, the card is eligible for the free trial. Call the subscriptions endpoint to create the subscription with the free trial using the Payment Method VID supplied by the PMT process. You can make a direct call to AutoBill.update() to create the AutoBill (subscription).

Alternative Flows and Applications

The CreditCard VIDs stored locally can also be used for imposing other credit card restrictions, such as velocity checking (that is, limiting the number of times the same card can be used for purchases within span of an hour.) Parent topic:Free Trials

Limit Free Trials Using Subscribe API Data

Set up a table in your local cache containing the CreditCard VID information. Set CreditCard VID as the primary key and include a flag indicating whether the VID is associated with a free trial. See an example below: To use Subscribe API Data to limit free trials to one per card:
  1. Use PMT to create the Payment Method with the credit card details. See Enable Subscribers to Purchase a Subscription With a Credit Card.
  2. Get the Payment Method object from the payment_methods endpoint and extract the Credit Card VID. Sample Code See the following sample related to getting the payment method using the VID and extracting the Credit Card VID from the response: https://github.com/Vindicia/CashBoxRESTCodeSamples/blob/master/PaymentMethod/PaymentMethod_fetchByVID.txt In this sample code, the VID you want to cache is:
  3. Check your local free trial card cache to see if the credit card has been used for a free trial before.
    • If an entry for the CreditCard VID is found in the local cache, the subscriber is considererd ineligible for a free trial. Direct them to choose a fully paid billing plan for subscription signup.
    • If an entry for the CreditCard VID is not found in the local cache, the subscriber is considered eligible for the free trial. The subscription can be created as described in step 4.
  4. Make a direct call to the subscriptions endpoint (with payment method validation, fraud risk, AVS, and CVN checking disabled because these were all validated previously in creation of the payment method.) Pass the ID of the PaymentMethod object created above (PaymentMethod.merchantPaymentMethodId).
Free trials are now limited to one redemption per unique credit or debit card. Parent topic:Limit Free Trials to Once Per Unique Credit Card