Create a subscription

Learn how to track trials and create subscriptions for users of your SaaS application

When a new tenant is created in your SaaS application it will be reflected in Bunny as a Subscription.

There are 2 main types of subscription:

  1. Trial - where a product plan has been configured to allow trials this type of subscription will be flagged as a trial. At the end of the trial it will either cancel or activate to a paid subscription.
  2. Active - this is a paid subscription. Invoices will be generated and payments will be collected.

You should make the request to create a new subscription in Bunny immediately after a new sign-up happens on your SaaS application.

PrerequisitesLink to Prerequisites section

Before you can start tracking your trial subscriptions you will need to complete these tasks:

  1. Create a Plan and associated Price List in Bunny. Take note of the code that you set for the price list as you will need that in the next step.
  2. Create an API client & install a Bunny SDK

When creating an API client you need to select the scopes that you want to allow. To create subscriptions in Bunny your API client needs the standard:read and standard:write scopes.

Make the requestLink to Make the request section

Assuming that you have completed both of the prerequisite steps you should have API credentials and a Bunny SDK installed as well as having a plan, price list and code setup.

You can either use the subscriptionCreate mutation or the create subscription method on our SDKs to setup a new subscription.

For example, create a new trial subscription and provide Bunny with the unique ID of the new tenant in your SaaS application.

MutationLink to Mutation section

mutation subscriptionCreate ($attributes: SubscriptionAttributes!) {
    subscriptionCreate (attributes: $attributes) {
        subscription {
            id          
            account {
                id
                name
                contacts {
                    id
                    firstName
                    lastName
                }                
            }
            trialStartDate
            trialEndDate
            startDate
            endDate
            state
            plan {
              code
              name
            }
            priceList {
                code
                name
            }
            tenant {
                id
                code
                name
            }
        }
        errors
    }
}

AttributesLink to Attributes section

{
  "attributes": {
    "account": {
        "billingContact": {
            "firstName": "John",
            "lastName": "Titor",
            "email": "john@example.com"
        },
        "name": "Superdesk Inc"
    },  
    "trial": true,
    "priceListCode": "free",
    "tenant":{
        "code": "superdesk"
    }
  }
}

We recommend submitting the tenantCode with your request so that Bunny is aware which tenant in your SaaS application the subscription belongs to.

Bunny will send your tenantCode back with subscription change webhooks so that you know which of your tenants to update with any changes.

Optional parametersLink to Optional parameters section

Parameter    
trial Boolean If the product plan supports a trial period then when this parameter is `true` the subscription will be created in a TRIAL state.
tenantCode String The unique identifier for the tenant on your SaaS platform.
evergreen Boolean Whether the subscription renews automatically at the end of each term. The Node SDK defaults this to true and the Ruby SDK to false, so set it explicitly.

For more detail on all of the parameters that can be set when creating a trial see the subscriptionAttributes object.

Handling errorsLink to Handling errors section

Providing that you have a valid access_token and well formed query then any errors are likely to be related to the data you are submitting.

The SDKs turn these errors into exceptions: the Node SDK throws an Error and the Ruby SDK raises BunnyApp::ResponseError, both with the error messages.

In the case of an error the response will contain an `errors` section that provides detail on what went wrong.

For example, In this case we provided an invalid product plan code.

{
    "data": {
        "subscriptionCreate": null
    },
    "errors": [
        {
            "message": "Product plan not found",
            "locations": [
                {
                    "line": 2,
                    "column": 5
                }
            ],
            "path": [
                "subscriptionCreate"
            ]
        }
    ]
}

What happens next?Link to What happens next? section

After a success request to create a subscription the following objects will be created in your Bunny account.

  • Account - The company or organization that has signed up for your SaaS application
    • Contact
    • Deal - A new deal representing the trial or new business opportunity.
      • Quote
    • Subscription
      • Tenant - If provisoning is enabled on your platform.

If you created a trial subscription then get to work on making the customer experience awesome and converting that trial to a paid subscription.