Integration options
Chargebee offers the following options to integrate the Checkout based on your application or website's framework and business model:
- Hosted Pages API: Recommended if you want to authenticate the user on your end, override payment-related information, handle returning users, and collect additional information.
- Drop-in Script.
- Via Payment Link.
Regardless of the integration option you choose, to embed checkout in your website or application, use embedded checkout with Chargebee.js to mount checkout in a container on your page. Do not place hosted page URLs in your own iframe elements—Chargebee.js creates and manages the iframe for you.
When to use API vs. drop-in script
Hosted Pages API
Using the Hosted Pages API to create in-app checkout is the recommended approach when you already maintain a user-management or authentication system.
Note
The API generates a Checkout URL that expires 3 hours after creation.
Benefits of using API integration:
- Manage authentication and collect additional information in your application or website.
- Override plan and add-on pricing during checkout.
- Optimize trial tenure. For example, you can offer a 14-day trial to one customer and a one-month trial to another.
Example
Here's an example of when you might choose Checkout via API over the Drop-in Script:
Jenna runs a digital weight loss and fitness app. She wants to collect user information such as the client's height, weight, food habits, and so on, along with their address and email, and store it in her database instead of Chargebee. She would still like to use Chargebee's Checkout as she does not want to handle the details of PCI Compliance.
Jenna can use the API integration to collect additional information on the frontend and rely on Chargebee's Hosted Pages API for payment details.
To learn more about the integration and implementation of Checkout via API, read our developer documentation.
You can use Checkout via APIs for the following workflows:
- Checkout for new subscriptions
- Checkout for existing subscription upgrades
- Checkout for one-time purchases
For end-to-end walkthroughs with server and client code in Ruby, Node.js, Java, Python, PHP, jQuery, Vue, Angular, and React, see Create a new subscription with Chargebee Checkout and Upgrade an existing subscription with Chargebee Checkout.
Call flow
Host an HTTPS endpoint that calls the Chargebee Hosted Pages API and returns a hosted page object.
Your application then uses Chargebee.js to open the Checkout.
Set up Chargebee.js
Include the Chargebee.js script in your HTML page. You need to do this only once per page.
<script src="https://js.chargebee.com/v2/chargebee.js"></script>In your JavaScript code, initialize Chargebee to get a Chargebee instance. Use this instance for every subsequent Checkout call.
var cbInstance = Chargebee.init({
site: "site-name", // Your Chargebee site
domain: "https://mybilling.acme.com" // Optional. Use this only if a custom domain is enabled for your site.
});Anywhere else on the page, call Chargebee.getInstance() to retrieve the same instance instead of initializing again.
Warning
Call tearDown() before you call init() again within the same session. Initializing twice without tearing down leaves the previous instance attached to the page.
For the complete initialization reference, including publishable keys, see Set up Chargebee.js in the Chargebee.js Reference.
Open Checkout with the Hosted Pages API
Call openCheckout() on the Chargebee instance. Pass a hostedPage function that returns a promise resolving to the hosted page object your server generates.
var cbInstance = Chargebee.getInstance();
cbInstance.openCheckout({
hostedPage: function() {
return $.ajax({
url: '/generate_hp_url',
data: data,
method: 'POST'
});
},
success: function(hostedPageId) {
// Pass this ID to your server to retrieve the subscription details.
}
});Warning
On mobile browsers, Chargebee opens the Checkout in a new window. Open the Checkout in response to a user action, such as a button click. Otherwise, the browser blocks the new window.
Checkout callbacks
openCheckout() accepts the following callbacks in addition to hostedPage:
| Callback | When it runs |
|---|---|
loaded | The Checkout has opened. |
error | The Checkout failed to open. Receives the error. |
close | The customer closed the Checkout. |
success | The Checkout completed. Receives the hosted page ID, which you can pass to your server and use with the Retrieve a hosted page API to get the subscription details. |
step | The customer moved to a different step of the Checkout. Receives the step name. |
For the full parameter reference, see openCheckout().
Note
To accept PayPal, GoCardless, or Plaid, set embed to false when you create the hosted page. These payment methods redirect the customer away from your site and cannot run inside the embedded Checkout.
Create a hosted page on your server
- Create an HTTPS endpoint on your server.
- Generate the hosted page object using the API that matches your use case—Checkout new or Checkout existing.
- Return the hosted page object to the client.
Warning
Make sure the HTTP response has the content type application/json.
post '/generate_hp_url' do
# Use the checkout new or checkout existing API based on your use case.
result = ChargeBee::HostedPage.checkout_new_for_items(params)
return result.hosted_page.to_s
endThe endpoint returns a hosted page object:
{
"id": "example_hosted_page_id",
"type": "checkout_new",
"url": "https://yourapp.chargebee.com/pages/v3/example_hosted_page_id/",
"state": "created",
"embed": true,
"created_at": 1515494821,
"expires_at": 1515498421
}Drop-in script
The Drop-in Script is a plug-in type, easy-to-use solution that requires minimal developer help. You can easily create a checkout page by adding a script generated for the plan item on your HTML page.
Checkout integrated using the Drop-in Script is Level 1 PCI compliant. Therefore, you need to fill out this questionnaire before integrating.
Note:
You should review the following documents from the above page before integrating Checkout using the Drop-in Script:
- SAQ Instructions and Guidelines
- Understanding SAQs for PCI DSS
The SAQs must be filled out based on the applicability as per the guideline document and shared with the payment gateway. No document needs to be submitted to Chargebee.
The Drop-in Script also handles more advanced cases:
- Setting Checkout and portal callbacks.
- Modifying the plan quantity dynamically.
- Adding and removing addons on demand.
- Prefilling customer information and shipping information in the Checkout.
To use the Drop-in Script to integrate Checkout, follow these steps:
- Click Settings > Configure Chargebee > Checkout and Self-Serve Portal > Integrate with Chargebee.
- Select the Product Family, Plan, Currency, and Frequency from the drop-down list.
- Add Addons and Charges if applicable using Add Addon and Add Charge options.
- Select the Layout to control whether the Checkout opens in-app or as a full page.
- Copy the Header Script and paste it within the
<head>element of your website's HTML.
- Copy the generated Checkout Button Code and hyperlink it in the Subscribe button on your website's HTML. This way, when a customer clicks the Subscribe button, the Checkout opens and displays the selected parameters of plan name, frequency, addons, and so on.
Information
Checkout Button Code for a particular plan item can also be copied from the respective plan page. Follow these steps to copy the code from a plan page:
- Click Product Catalog > Plans > Select a Plan > Select a Price Point.
- Navigate to the Customer-Facing Information section, and click Grab Script.
- Select addons if necessary and click Copy Code.
- The copied script can now be embedded on your website's checkout page.
You can use Checkout via Drop-in for the following workflows:
- Checkout for new subscriptions
- Checkout for one-time purchases
For a step-by-step setup guide, including prefilling customer details and changing the cart at runtime, see the Drop-in Checkout with Chargebee.js tutorial.
The generated markup looks like this. The data-cb-item-<n> attributes carry the item price IDs you selected, and data-cb-layout carries the layout.
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://js.chargebee.com/v2/chargebee.js" data-cb-site="acme-test" data-cb-business-entity-id="__dev__XpbBuzpT02K2kd24"></script>
</head>
<body>
<h3>Checkout Drop-in</h3>
<a href="javascript:void(0)" data-cb-layout="full_page" data-cb-type="checkout" data-cb-item-0="diamond-USD-monthly" data-cb-item-1="silver-pass-USD-monthly" data-cb-item-1-quantity="2">
Subscribe
</a>
</body>
</html>Note
If you have multiple business entities enabled, include the data-cb-business-entity-id attribute in the <script> element as shown above.
Warning
On page load, Chargebee.js binds click events to every Drop-in button it finds. If you use Angular, React, or Vue, call Chargebee.registerAgain() after the component mounts to register buttons that Chargebee.js did not see on page load.
Cart customization
Use cart customization when your cart needs dynamic quantity changes or collects extra details through custom fields. It gives you full JavaScript control to add or remove plans, addons, and coupons, and to update quantities.
Set isItemsModel to true during initialization, then build the cart yourself instead of relying on the generated button attributes.
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://js.chargebee.com/v2/chargebee.js"></script>
</head>
<body>
<h3>Checkout Drop-in</h3>
<button href="javascript:void(0)" onclick="openCheckout()">
Subscribe
</button>
</body>
<script>
var cbInstance, cart;
window.addEventListener('DOMContentLoaded', function() {
cbInstance = Chargebee.init({
site: "acme-test",
isItemsModel: true,
})
cbInstance.setCheckoutCallbacks(function(cart) {
return {
success: function(hpid) {
console.log('success', hpid)
}
}
})
cart = cbInstance.getCart()
})
function openCheckout() {
const planPriceId = 'diamond-USD-monthly' // Plan price point ID identifies the product.
const planPriceQuantity = 1
const product = cbInstance.initializeProduct(planPriceId, planPriceQuantity)
cart.replaceProduct(product);
// Add an addon.
product.addAddon({
id: "silver-pass-USD-monthly", // Addon price point ID
quantity: 2
})
// Add a coupon.
product.addCoupon("fourty")
// Change the plan quantity dynamically.
product.setPlanQuantity(planPriceQuantity);
// Remove an addon.
product.removeAddon("silver-pass-USD-monthly");
// Pass values for custom fields.
product.setCustomData({referral: "yes", corporate_agent: "no"});
// Open the Checkout.
cart.proceedToCheckout();
}
</script>
</html>Get the plan price point IDs, addon price point IDs, and the rest of the cart parameters from the Product object and Cart object references.
Open Checkout from your own button
You do not have to use the generated button. Build the cart yourself and open the Checkout from any element on your page.
document.addEventListener("DOMContentLoaded", function() {
let cbInstance = Chargebee.getInstance();
let cart = cbInstance.getCart();
let product = cbInstance.initializeProduct("cbdemo_grow");
cart.replaceProduct(product);
document.getElementById("subscribe").addEventListener("click", function() {
cart.proceedToCheckout();
});
});Via payment link
When you're looking for a simple and effective way to collect payments from your customers, a payment link can be an excellent solution.
Chargebee lets you create a custom URL to pass product details, customer information, and subscription data during checkout. The resulting Checkout URL can then be embedded into your application or website. You can also share this URL directly with customers through email and text messages.
To use the Payment Link to integrate Checkout, follow these steps:
-
Click Settings > Configure Chargebee > Checkout & Self-Serve Portal > INTEGRATE WITH CHARGEBEE > Via Payment Link

-
Choose the Business Entity if applicable. Learn more about multiple business entities.
-
Choose Checkout Type.
- If Subscription,
- Select the Product family, Plan, Currency, and Frequency from the drop-down list.
- Add Addons and Charges if applicable using Add addon and Add charge options.
- You can also add any parameters to pass additional information to the customer or subscription. Sample URL:
https://honeydukes-test.chargebee.com/hosted_pages/checkout?subscription_items[item_price_id][0]=cbdemo_advanced-USD-monthly&subscription_items[quantity][0]=1&customer[first_name]=Minerva&customer[last_name]=McGonagall&subscription[cf_butterbeer_type]=Frozen Butterbeer - If One-Time Payment:
- Choose Currency.
- Add Charges if applicable using Add charge options. Sample URL:
https://honeydukes-test.chargebee.com/hosted_pages/checkout?subscription_items[item_price_id][0]=cbdemo_setup-charge-USD&subscription_items[quantity][0]=1&customer[first_name]=Minerva&customer[last_name]=McGonagall
- If Subscription,
List of supported query parameters
Here is an API spec of query parameters supported, which can be used in the plan URL:
| Module | Query Parameter |
|---|---|
| Subscription Item |
|
| Coupons |
|
| Customer | All parameters in Create checkout for a new subscription endpoint can be used. Exceptions: |
| Subscription |
|
| Billing address | All Exceptions: Note Passing all mandatory |
| Shipping Address | All Exceptions: |
| Business Entity ID |
|
You can integrate hosted checkout via Payment Link for the following workflows:
- Checkout for new subscriptions
- Checkout for one-time purchases
Was this article helpful?